以下是我的问题:
在C#/.NET-4.8中,我在两个服务器上使用带有RSA私钥的P12证书。一台服务器运行Windows 2016,另一台运行Windows 2019。当我比较两个服务器上相同证书的RSA私钥时,输出是不一样的。“私有指数”(发现在“D”属性中)并不相同。
有人知道为什么会这样吗?
额外信息:代码每次运行时(每个系统)都输出相同的密钥(这当然是好的)。代码在Windows 10、Windows 11和Windows 2019上输出相同的私钥,但在Windows 2016上则不同。
读出证书密钥的代码是:
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.
}提前感谢您的帮助!
发布于 2021-11-01 17:59:02
为了让答案有意义,你需要两条背景知识:
(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不改变,你就有相同的钥匙。
https://stackoverflow.com/questions/69797913
复制相似问题