gpt4 book ai didi

cryptography - 从 X509 证书读取 RSA 私钥会导致 Windows Server 2016 与 Windows Server 2019 上的不同输出

转载 作者:行者123 更新时间:2023-12-02 01:54:22 25 4
gpt4 key购买 nike

这是我的问题:

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

有人知道为什么会发生这种情况吗?

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

读出证书 key 的代码是:

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.
}

预先感谢您的帮助!

最佳答案

要使答案有意义,您需要了解两条背景知识:

  • RSA 私钥采用冗余编码。 (n, e, d, p, q, dp, dq, qInv) 实际上可能只是 (n, e, p, q)
    • 过去,计算 d/dp/dq/qInv 是“困难”的,因此文件格式是“省去重新计算的麻烦”——尽管这可能导致值不一致。
  • 有两种不同的方法来计算 d(“lambda”和“phi”),这两种值都有效。

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

出于某种原因,在 2019 年左右,他们要么改为强制使用 phi 进行计算,要么开始保存导入值并在导出时忠实地报告它们。

无论哪种方式,这并不重要,因为真正的 key 只是(n, e, p, q)。只要这 4 个不改变,您就拥有相同的 key 。

关于cryptography - 从 X509 证书读取 RSA 私钥会导致 Windows Server 2016 与 Windows Server 2019 上的不同输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69797913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com