当您验证分离签名时会发生什么?

当您验证分离签名时会发生什么?

我试图了解验证分离的 gpg 签名时会发生什么。

这是 gnupg 中的一个示例手动的:

blake% gpg --verify doc.sig doc
gpg: Signature made Fri Jun  4 12:38:46 1999 CDT using DSA key ID BB7576AC
gpg: Good signature from "Alice (Judge) <[email protected]>"

gpg如何判断签名是好的?签名是否包含已签名文件的哈希值?如果是这样,如何从签名本身中提取该哈希值?

我尝试过gpg --list-packets <signature>,但似乎没有显示完整信息。

答案1

您可以使用该--list-packets选项来转储 gpg 文件中的内容。文件格式的描述是RFC 4880(OpenPGP 标准)。

签名不直接包含哈希值。它包含允许验证哈希值和发送者的信息:有一个签名验证算法,它将哈希值和公钥作为输入,并返回是的或者;算法返回是的如果签名是由与给定公钥对应的私钥(来自具有给定私钥的消息)进行的,则返回在所有其他情况下(不同散列的签名、不同密钥生成的签名或一堆根本不能成为签名的字节)。在下面DSA算法,我认为如果没有私钥,则无法从签名中提取哈希值。

签名文件包含签名者的身份以及签名值。为了验证签名,gpg 从您的密钥环中读取签名者的公钥,计算数据的哈希值,并应用签名验证算法。

答案2

$ gpg --list-packets myfile.asc
[...]
       digest algo 10, begin of digest 77 dd

这显示了使用了哪种摘要算法。不幸的是,手册页也没有gpg --version告诉我们哪种算法分配给哪个 ID。我们需要深入研究数据包格式的 RFC 才能找到此信息:https://www.rfc-editor.org/rfc/rfc4880#section-9.4

ID           Algorithm                             Text Name
--           ---------                             ---------
1          - MD5 [HAC]                             "MD5"
2          - SHA-1 [FIPS180]                       "SHA1"
3          - RIPE-MD/160 [HAC]                     "RIPEMD160"
4          - Reserved
5          - Reserved
6          - Reserved
7          - Reserved
8          - SHA256 [FIPS180]                      "SHA256"
9          - SHA384 [FIPS180]                      "SHA384"
10         - SHA512 [FIPS180]                      "SHA512"
11         - SHA224 [FIPS180]                      "SHA224"
100 to 110 - Private/Experimental algorithm

答案3

是的,数字签名通常是安全哈希值,由签名者的密钥进行签名。

对整个消息进行签名要慢得多,而且并不更安全。此外,算法应该考虑块的长度、填充(以不泄露太多信息的方式)等。

注意:同样在非对称加密上,出于速度原因,只有临时对称密钥是非对称加密的,其余消息只是对称加密的。

相关内容