2016-11-09 73 views
0

我无法理解证书是如何知道被链接到私钥的。例如,在窗口中,当您点击来自智能卡的证书时,它会显示“您拥有与此证书相对应的私钥”。证书如何知道这一点?我一直在阅读RFC5280,但是我没有看到X509证书中指定证书是否连接到私钥的任何字段。我错过了什么?x509证书如何知道被链接到私钥?

回答

2

一般来说,任何公钥都包含在其私钥中。无论操作系统,存储机制还是库,只要给出一个X.509证书和一个私钥,就可以从私钥中提取公钥值,并将其与证书中的公钥值进行比较。如果它们匹配,则私钥与证书一起属于。

例如,RSA私钥由

  1. PublicExponent的
  2. 模量
  3. Prime1
  4. Prime2
  5. Exponent1 [可选]
  6. Exponent2 [可选]
  7. 系数[可选]
  8. PrivateExponent [可选]

前两个,PublicExponent和Modulus构成公钥并存储在X.509证书中。 (上面的可选字段可以从前4个字段计算出来,但通常包含在私钥中,因为需要很多CPU来计算它们)

对于您的具体示例,MMC证书管理单元查询Crypto API(CAPI)用于安装的证书。 CAPI使用加密服务提供商(CSP)模块,可以提供证书存储等。作为CSP证书存储规范的一部分,商店为每个存储的证书提供一个属性“PP_Container”。该属性告诉CAPI持有匹配私钥的CSP容器的名称(如果有的话)。这种“分离”允许将私钥存储在智能卡或硬件安全模块上,而证书则存储在Windows系统本身上。

+0

非常好的解释,谢谢! –

1

它取决于操作系统和/或使用加密库。在Windows的情况下,证书存储在证书存储区中。证书存储支持存储附属属性,可以提供CSP和密钥容器信息。当您在商店中打开证书时,MMC会读取附加的证书属性并确定是否存在关联的私钥。