首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从X 509读取RSA私钥-证书导致Windows 2016与Windows 2019的不同输出

从X 509读取RSA私钥-证书导致Windows 2016与Windows 2019的不同输出
EN

Stack Overflow用户
提问于 2021-11-01 13:53:27
回答 1查看 231关注 0票数 2

以下是我的问题:

在C#/.NET-4.8中,我在两个服务器上使用带有RSA私钥的P12证书。一台服务器运行Windows 2016,另一台运行Windows 2019。当我比较两个服务器上相同证书的RSA私钥时,输出是不一样的。“私有指数”(发现在“D”属性中)并不相同。

有人知道为什么会这样吗?

额外信息:代码每次运行时(每个系统)都输出相同的密钥(这当然是好的)。代码在Windows 10、Windows 11和Windows 2019上输出相同的私钥,但在Windows 2016上则不同。

读出证书密钥的代码是:

代码语言:javascript
复制
using (var rsaPrivateKey = _certificate.GetRSAPrivateKey())
{
   var parameters = rsaPrivateKey.ExportParameters(true);
   privateExponent = BitConverter.ToString(parameters.D); // privateExponent (parameters.D) is the components which is not the same on each system.

   privateKeyXml = rsaPrivateKey.ToXmlString(true); // In privateKeyXml, only the privateExponent changes.
}

提前感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-01 17:59:02

为了让答案有意义,你需要两条背景知识:

  • RSA私钥是冗余编码的。(n, e, d, p, q, dp, dq, qInv)真的可能只是(n, e, p, q)。以前计算d/dp/dq/qInv的时候,
    • 是“很难”的,所以文件格式是“为自己节省重新计算的精力”--尽管这留下了一个可能性,即这些值不是

  • 有两种计算d的不同方法("lambda“和"phi"),这两种值都有效。

Windows,从Vista到2019年,在导入密钥时丢弃了d/dp/dq/qInv值,并使用(我相信) lambda方法重新计算它们。

由于某种原因,在2019年,它们要么更改为使用phi强制计算,要么开始保存导入值并忠实地报告导出结果。

无论哪种方式,这都不重要,因为真正的关键是(n, e, p, q)。只要这4不改变,你就有相同的钥匙。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69797913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档