我对SSL/TLS 证书中存在的Signature Algorithm
、Signature Hash Algorithm
和之间的区别有点困惑。Thumbprint Algorithm
有人可以详细说明吗?
证书的“指纹算法”“签名算法”和“签名哈希算法”有什么区别?
你很困惑,因为有些人(是的,我在看你,微软)一直在不一致地使用这些术语。
签名算法是一种加密算法,使得:
- 签名者拥有一个公钥/私钥对。公钥是公开的,私钥是私有的;即使两个密钥在数学上链接在一起,从公钥重新计算私钥也是不可行的(这就是为什么可以安全地公开公钥的原因)。
- 在给定的输入消息上,签名者可以使用他的私钥来计算签名,该签名特定于签名者的密钥对和输入消息。
- 有一种验证算法将消息、签名和公钥作为输入,并回答“真”(它们匹配)或“假”(它们不匹配)。
签名安全的基石是,在不知道私钥的情况下,生成验证算法将接受的消息+签名对是不可行的。
您可能会遇到一些试图说数字签名是某种加密的“解释”;他们通常将其描述为“您使用私钥加密”。不要相信它;这些解释实际上是错误的,而且令人困惑。
出于技术原因,签名算法(用于签名和验证)通常以散列函数开头。哈希函数是一种完全公开的算法,没有密钥。散列函数的要点是它们可以吃掉数 TB 的数据,并产生具有固定的小尺寸的“摘要”(也称为“指纹”甚至“指纹”)。签名算法需要这样,因为它们使用一些有限大小的代数结构中的值,因此无法容纳大量消息。因此,首先对消息进行哈希处理,只有哈希值用于生成或验证签名。
该散列算法,当它被用作签名生成或验证算法的第一步时,将被称为“签名散列算法”。当我们说“RSA/SHA-256”之类的东西时,我们的意思是“RSA 签名,带有 SHA-256 作为随附的散列函数”。
“指纹算法”是散列函数的另一个名称。在谈论证书时经常会遇到:证书的“指纹”实际上是应用于证书本身的哈希函数的结果(在 Windows 系统中,使用 SHA-1 哈希函数)。
虽然接受的答案详细介绍了如何完成计算,但它根本没有解决原始问题 - SSL/TLS 证书中存在的签名算法、签名哈希算法和指纹算法 - 哪一个是哪一个等式(特别是如果微软也混淆了它)?
答案似乎相当简单——来自:
并在那里标记为正确答案:
“签名算法”和“签名哈希算法”的区别
它们用于确定用于签署证书的签名算法和散列函数。证书链接引擎使用此信息来验证证书的签名。证书链接引擎计算证书(签名部分)的哈希值。哈希方法从签名哈希算法字段中选择。然后证书链接引擎使用签名算法字段中指定的签名算法对附加的签名进行解码,并恢复签名哈希。如果两个哈希匹配,则签名有效,如果它们不同,则认为签名无效。
我从另一个来源添加 - 指纹算法 - 用于识别给定系统上的证书的简单非加密属性(不对其进行身份验证或验证其有效性)