什么决定了 GnuPG 使用的 clearsign 哈希算法?

什么决定了 GnuPG 使用的 clearsign 哈希算法?

使用 GnuPG 清签名文本时,签名消息中会有一个哈希部分。例如:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

abc
-----BEGIN PGP SIGNATURE-----

iQEzBAEBCAAdFiEEZZvqE5j3koIxs9Xim0+E4a5Vo2cFAlkRdvQACgkQm0+E4a5V
o2ew2QgAzHuvZ7Hlb6+3qRLjc9Yhdi+6tBmNWXbWpKoAQxpzx6jKQp/FSpQeGWuj
RxcYnqU3pk4ycMLtaCFcfnHEW5N0B95eXGcurgMGz7A6xhy0hy25x8WBdeKVAQ+2
PLA2ytJLUn2L1S3ueqJWcdVUBRaiczOOsYvvO
...
...

-----END PGP SIGNATURE-----

但是不同的密钥(或服务器)的哈希算法是不同的,有时是SHA1,有时是SHA256,SHA512。

是什么决定了这一点,密钥还是 GnuPG 客户端?我找不到这方面的信息,当您使用gpg创建新密钥时,没有选项可以指定哈希算法。

更新:为了澄清我的问题,我在下面添加了更多信息。用于生成上述示例输出的命令是:

gpg --clearsign

(我的系统上的 gpg 版本是 gpg2。)

然后,我输入了一些随机文本,结果如​​上。我想知道如何生成具有特定“Hash:”值的输出?比如 SHA1?

答案1

哈希算法由 OpenPGP 的实现选择,在你的情况下是 GnuPG。选择哪一个

  • 显然仅限于 GnuPG 支持的算法(gpg --version打印列表),
  • 依赖于取决于合规选项最后使用
  • 取决于你的个人喜好

为了加密消息,还会考虑存储在公钥中的收件人的偏好。

答案2

我想知道如何生成具有特定“Hash:”值的输出?比如 SHA1?

要回答您的问题,请使用该--digest-algo SHA1选项。

例如,这是使用 SHA-256 的独立签名。我不使用--clearsign,所以我不会尝试将其拼凑起来:

gpg -a -u 1F8E37BD --digest-algo SHA256 --output test.txt.sig --detach-sig test.txt

-a生成 ASCII 装甲输出。-u从不同的密钥中选择签名密钥。--digest-algo选择哈希值。--output是输出文件名。输入文件名必须是最后一个选项。

哈希列表及其值可在RFC 4880,第 9.4 节。SHA-1为2,SHA-256为8。

您可以使用以下方式审核签名:

$ cat test.txt.sig | gpg --list-packets | grep "digest algo"
    digest algo 8, begin of digest 05 94

答案3

在这种情况下,应该发生的事情是,您为消息生成一个哈希值,并使用密钥对其进行加密。另一方使用相反的密钥解密哈希值,构建消息的哈希值并将其与您附加的哈希值进行比较。

让对方知道您使用了哪种哈希非常重要,但是密钥和哈希之间没有直接关联。

相关内容