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

use*_*919 7 security public-key-encryption x509certificate

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

公共证书的指纹是否独一无二?

drf*_*drf 17

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

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

根据OpenSSL文档:

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

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

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