公共证书的指纹是唯一的吗?

时间:2014-06-02 01:20:53

标签: security x509certificate public-key-encryption

我想将公共证书存储在数据库中,但我需要公共证书的属性来索引数据库中的公共证书。我想把它变成一个独特的领域。

公共证书的指纹是唯一的吗?

1 个答案:

答案 0 :(得分:15)

指纹是独一无二的(对于所有实际意图);两个不同的证书永远不应共享相同的哈希。例如,根据Windows X509certificate2.thumbprint documentation

  

指纹是证书的唯一值,通常用于在证书库中查找特定证书。

根据OpenSSL documentation

  

由于消息摘要的性质,证书的指纹对于该证书是唯一的,并且具有相同指纹的两个证书可以被认为是相同的。

请注意,指纹不是证书的一部分。相反,它是通过获取整个证书(包括签名)的加密哈希来计算的。 不同的加密实现可能使用不同的散列算法来计算指纹,从而为同一证书提供不同的指纹。(例如,Windows Crypto API计算证书的SHA-1哈希以计算指纹,而OpenSSL可以生成SHA-256或SHA-1哈希。)因此,您需要确保使用数据库指纹的客户端使用相同的API或一致的哈希算法。

理论上,多个证书共享的重复指纹需要哈希冲突。这种事件偶然发生的概率是天文数字。故意生成这样的证书对将需要对底层哈希函数进行成功的preimage攻击,这种攻击在SHA-1上是不可行的(参见Preimage Attack)。