如何使用 gpg 验证加密和签名的文件?

Eri*_*mer 9 gnupg pgp

我试图更好地了解 gpg 发生了什么。

如果您有文件并签名: gpg --sign file.txt

您可以通过以下方式进行验证: gpg --verify file.txt.gpg

当您获得成功的输出时: gpg: Signature made...

但是当您签署并加密文件时: gpg --encrypt --sign -r test@email.com file.txt

然后--verify在我得到的加密文件上运行:gpg: verify signatures failed: Unexpected error

我知道我可以调用--decrypt文件,它会验证和解密它,但是如果我只想验证怎么办?

Eri*_*mer 15

我想出了这个问题的答案,然后是一些。所以为了清楚起见,我将添加一些额外的信息。

首先,我认识基础上,最后一行这个答案gpg使用再签收进行加密。这意味着调用--verify或任何变体来验证加密文件只会输出gpg: verify signatures failed: Unexpected error. 发生这种情况是因为签名在加密中是“隐藏的”,所以当您尝试调用--verify文件时,它不会看到签名。

其次,该--decrypt标志将解密文件,并且如果文件已签名,也将对其进行验证。

这是--decrypt正在做什么。它着眼于默认的秘密钥匙圈secring.kbx~/.gnupg使用密钥解密文件。然后在解密后,它会查看pubring.kbx文件夹中的默认公钥环,~/.gnupg并尝试验证文件上的签名(如果有)。

  • 如果它没有签名,它只会解密文件。

  • 如果它有签名,但您没有公钥,它将解密文件,但无法验证签名。

  • 如果它有签名并且你有公钥,它就会解密和验证。

话虽如此,在解密之前没有理由验证签名文件。

第三,作为额外的奖励,您还可以指定要用于解密和验证的密钥环。假设您想使用临时密钥环来验证签名,或者出于任何原因也需要临时密钥环来解密消息。

您可以指定--decrypt要与以下命令一起使用的密钥环:

gpg --secret-keyring path/to/temp/secring.kbx --keyring path/to/temp/pubring.kbx --decrypt file.txt.gpg

此命令将在指定路径上查找秘密环和公共环,以便使用这些环进行解密和验证,而不是使用~/.gnupg. 想要使用带临时环的默认环?只需省略您想要默认的环的标志和路径。

总而言之,对于加密和签名的文件,如果要解密和验证该文件,则需要确保用于解密的私钥在您的密钥环中,用于验证的公钥在您的公钥环中。