当性能不是问题时,可以改进哪些 gpg 默认值?

信息安全 密码 哈希 AES gnupg 不对称
2021-08-19 22:31:59

gpg有一些预设的默认设置,我认为它们被选为速度和安全性之间的折衷。我知道这些对大多数人来说已经足够了。

但是,在速度/性能不是问题的情况下,可以更改哪些默认值,以gpg使用更强大的参数,并使用更强大的加密?

例如,我读过关于s2k-count默认值不够的讨论。我真的不在乎我的 gpg 操作需要 50 毫秒还是 200 毫秒。我宁愿在安全方面犯错,即使它是矫枉过正。

具体来说,我想将最强的可能值用于:

  1. 密码哈希迭代
  2. 非对称密钥的大小
  3. 对称密钥算法

还有什么可以从默认值更改,以使gpg更安全?

gpg (GnuPG) 2.2.12在 Debian Buster 上使用。

1个回答

1) 密码哈希迭代

如果您不在乎再等一会儿,您可以使用最大计数值,即 65011712。这并不是严格意义上的迭代次数,而是要散列的字节数。S2K 的工作原理是将密码和盐重复输入到特定字节数的哈希函数中。字节数越多,花费的时间就越长。这是s2k-count参数指定的。

2) 非对称密钥的大小

对于 RSA,大多数 GnuPG 实现能够生成的最大密钥大小为 4096 位。这是软件内存限制的结果。为了防止秘密被泄露到交换中,它必须“锁定”内存。操作系统对允许单个进程锁定多少内存提供了限制。GnuPG 需要锁定超过允许生成大于 4096 位的密钥的数量。幸运的是,4096 位对于 RSA 密钥来说已经足够了。

3) 对称密钥算法

AES256 已经足够了。它肯定不会成为您最薄弱的环节。


您还可以做其他事情来进一步强化 GnuPG 实现,尽管完整列表过于庞大并且取决于您的具体情况,无法在此处列出。一些改进是在您的gpg.conf文件中添加一些设置,例如with-fingerprint默认显示指纹。当然,除非您实际验证指纹是否符合您的预期,否则这不会提高安全性。

您还可以使用更强的摘要来签署密钥。避免使用 SHA-1。您可以使用 SHA-256,甚至 SHA-512,尽管这有点矫枉过正。这可以用 设置cert-digest-algo SHA512