我无法理解证书如何识别链接到私钥。例如,在Windows下单击来自智能卡的证书时,它会显示“您有一个与此证书对应的私钥”。证书如何知道这一点?我一直在阅读RFC5280,但是我没有在X509证书中看到任何指定证书是否连接到私钥的字段。我错过了什么?
答案 0 :(得分:2)
通常,任何公钥都包含在其私钥中。无论操作系统,存储机制或库如何,只需提供X.509证书和私钥,就可以从私钥中提取公钥值,并将其与证书中的公钥值进行比较。如果它们匹配,则私钥属于证书。
例如,RSA私钥由
组成前两个,PublicExponent和Modulus组成公钥并存储在X.509证书中。 (上面的可选字段可以从前4个计算,但通常包含在私钥中,因为计算它们需要大量的CPU能力)
对于您的特定示例,MMC证书管理单元在Crypto API(CAPI)中查询已安装的证书。 CAPI使用加密服务提供程序(CSP)模块,该模块可以提供证书存储等。作为CSP证书存储规范的一部分,存储为每个存储的证书提供属性“PP_Container”。此属性告诉CAPI保存匹配私钥(如果有)的CSP容器的名称。这种“分离”允许将私钥存储在智能卡或硬件安全模块上,而证书存储在Windows系统本身上。
答案 1 :(得分:1)
这取决于使用的操作系统和/或加密库。对于Windows,证书存储在证书库中。证书存储支持存储附加属性,可以提供CSP和密钥容器信息。当您在商店中打开证书时,MMC将读取附加的证书属性并确定是否存在关联的私钥。