GnuPG 的默认密码算法是什么?

信息安全 加密 gnupg
2021-08-25 00:43:00

我知道,可以强制 GnuPG 使用 AES256 进行加密

gpg --cipher-algo AES256

或在~/.gnu/gpg.conf.

但是,如果我错过了这个开关,GnuPG 的默认密码算法是什么?

2个回答

TL;DR:对于 GnuPG 1.0 和 2.0,默认为 Cast5,对于 GnuPG 2.1,默认为 AES-128。

收件人的偏好

默认情况下,GnuPG 将读取接收者的算法偏好并采用它支持的列表中的第一个算法(换句话说,它采用接收者要求的最优先支持的算法)。

安全算法

如果没有给出偏好(或--symmetric用于使用密码的对称加密),它会选择一个“安全”的。安全手段,必须或应该实施的手段。这是哪一个取决于 GnuPG 的版本和选择的兼容性级别。您可以通过启动对称加密并传递其中一个兼容性级别(或无,这意味着--gnupg)轻松验证这一点:

gpg --verbose --symmetric
gpg: using cipher CAST5

严格的 RFC 合规性

另一方面,如果按照RFC 4880执行严格的 OpenPGP 合规性,它会下降到三倍 DES:

gpg --rfc4880 --verbose --symmetric
gpg: using cipher 3DES

这同样适用使用--rfc2440.

GnuPG 2.1 默认为 AES-128

GnuPG 2.0 也使用 CAST5 和默认值--gnupg,而这个默认值在 GnuPG 2.1 中更改为 AES-128

LANG=C gpg2 --verbose --symmetric
gpg: using cipher AES

(没有进一步规范的 AES 表示 GnuPG 中的 AES-128)

GnuPG 2.1 对符合 RFC 的设置使用相同的算法。

摘要算法

对于摘要算法,执行类似的算法偏好推断。如果--verbose设置为选项,则打印使用的算法。

一个例外是修改检测代码包,它只允许 SHA-1,没有标准定义的算法选择。

默认值必须已更改。gnupg-1.4.23 的默认值(2019 年初)是 AES128。gnupg-2.1.18 的默认值为 AES256。两个版本的手册页都声明默认值为 AES128,但对于 gnupg-2.1.18 是错误的。

要为您的 gnupg 版本自己回答这个问题,请执行以下操作:

echo hi > testfile
gpg -c -vv testfile
rm testfile testfile.gpg

输入密码两次后,它会说:

gpg: using cipher AES
gpg: writing to `testfile.gpg'

或者:

gpg: using cipher AES256
gpg: writing to 'testfile.gpg'

AES 表示 AES128。