Erel Segal-Halevi Asked: 2018-06-02 06:05:37 +0800 CST2018-06-02 06:05:37 +0800 CST 2018-06-02 06:05:37 +0800 CST 当我使用 gpg 验证签名文档时,它如何知道要使用哪个公钥? 772 当我签署文件时,我可以选择要使用的密钥,例如: gpg --default-key=BF8C1203 --clearsign message.txt 当我验证文件时,我看不到这个选项,我可以这样做: gpg --verify message.txt.asc GPG 如何知道用于验证的公钥?有没有办法告诉它使用不同的公钥? gnupg signature 1 个回答 Voted Best Answer user68186 2018-06-02T07:12:03+08:002018-06-02T07:12:03+08:00 gpg根据您拥有的所有公钥检查签名。 如果你有两个私钥,你也应该有相应的公钥。因此,gpg将查看您拥有的所有公钥,包括您朋友的密钥,并找出谁签署了文件。 如果文件由我签名,而您没有我的公钥,则无法验证我的签名,直到您从https://pgp.mit.edu/gpg等公钥存储库下载我的公钥 下面更详细的解释来自https://security.stackexchange.com/questions/82490/when-signing-email-with-gpg-how-does-verification-by-the-receiver-work 公钥和私钥之间存在唯一的关联。也就是说, 如果发送者使用某个私钥对消息进行签名,而您使用相应的公钥验证签名,那么只有在消息没有被更改的情况下,签名验证才会成功。 公共和私有之间关联的验证过程和性质因您正在考虑的密码系统(RSA、DSA 等)而异,但上述陈述适用于任何非对称方案。 真正重要的是发件人是唯一可以产生有效签名的人,因为他/她是唯一知道私人信息的人,但任何人都知道公众,因此任何人都可以验证签名。 签名后,GPG 会在文本消息中添加一个令牌,该令牌可用于验证消息在传输过程中没有被更改:这就是签名。您不需要 GPG 来阅读消息,因为文本本身没有加密,只有一个额外的令牌,它可以是消息末尾的 radix64 编码的 blob 或具有类似结构的文本附件。 GPG 不直接签署消息,它签署它的加密哈希(通常是 SHA-1 或 SHA-2)。验证时发生的是使用发送者的公钥验证签名,以确保接收到的哈希实际上是由发送者发起的。如果发件人计算的散列被认为是真实的,则将其与收件人计算的散列进行比较。如果两个阶段都成功,则消息已正确签名。 希望这可以帮助
gpg
根据您拥有的所有公钥检查签名。如果你有两个私钥,你也应该有相应的公钥。因此,
gpg
将查看您拥有的所有公钥,包括您朋友的密钥,并找出谁签署了文件。如果文件由我签名,而您没有我的公钥,则无法验证我的签名,直到您从https://pgp.mit.edu/
gpg
等公钥存储库下载我的公钥下面更详细的解释来自https://security.stackexchange.com/questions/82490/when-signing-email-with-gpg-how-does-verification-by-the-receiver-work
希望这可以帮助