当我签署文件时,我可以选择要使用的密钥,例如:
gpg --default-key=BF8C1203 --clearsign message.txt
当我验证文档时,我没有看到此选项,我只能这样做:
gpg --verify message.txt.asc
GPG 如何知道要使用哪个公钥进行验证?有没有办法告诉它使用不同的公钥?
答案1
gpg
根据您的所有公钥检查签名。
如果您有两个私钥,那么您也应该有相应的公钥。因此,gpg
将查看您拥有的所有公钥,包括您朋友的密钥,并找出谁签署了该文件。
如果文件由我签名,而你没有我的公钥,那么gpg
就无法验证我的签名,除非你从公钥存储库下载我的公钥,例如https://pgp.mit.edu/
公钥和私钥之间存在唯一关联。也就是说, 如果发送者使用某个私钥对消息进行签名,而你使用相应的公钥验证该签名,那么只有在消息未被更改的情况下,签名验证才会成功。
公私关联的验证程序和性质因您所考虑的密码系统(RSA、DSA 等)而异,但上述陈述适用于任何非对称方案。
真正重要的是发送者是唯一可以产生有效签名的人,因为他/她是唯一知道私人信息的人,但任何人都知道公开信息,所以任何人都可以验证签名。
签名后,GPG 会在文本消息中添加一个令牌,该令牌可用于验证消息在传输过程中未被更改:这就是签名。您不需要 GPG 来阅读消息,因为文本本身未加密,只有一个额外的令牌,该令牌可以是消息末尾的 radix64 编码 blob,也可以是具有类似结构的文本附件。
GPG 并不直接对消息进行签名,而是对消息的加密哈希(通常为 SHA-1 或 SHA-2)进行签名。验证时,会使用发送者的公钥对签名进行验证,以确保收到的哈希确实是由发送者发起的。如果发送者计算出的哈希被认为是真实的,则会将其与接收者计算出的哈希进行比较。如果两个阶段都成功,则消息已正确签名。
希望这可以帮助