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

soc*_*ser 6 digital-signature gnupg openpgp

当使用 GnuPG 清除签名文本时,签名消息中有一个哈希部分。举个例子:

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

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

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

-----END PGP SIGNATURE-----
Run Code Online (Sandbox Code Playgroud)

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

是什么决定了这一点,关键还是 GnuPG 客户端?我找不到这方面的信息,当您使用gpgcreate new keys 时,没有指定哈希算法的选项。

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

gpg --clearsign
Run Code Online (Sandbox Code Playgroud)

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

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

Jen*_*rat 1

散列算法是由 OpenPGP 的实现选择的,在您的例子中是 GnuPG。哪一个被选中

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

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

  • 我找到了,只需附加“--personal-digest-preferences sha512”即可将哈希更改为sha512! (2认同)