根据我的阅读,PGP 仅使用 pub/priv 密钥来加密/解密用于实际加密/解密数据的对称密钥。我合理地假设较长的非对称密钥不会比较短的密钥慢很多,因为它们只需要加密/解密提到的对称密钥。这个答案和其他一些可搜索的资源表明,长度较大的键会降低性能。我在这里错过了什么吗?不是更大的钥匙——至少对于 PGP 来说——几乎总是更好吗?
PGP RSA 密钥大小 - 加密/解密时间
使用 RSA,加密主要是公共模数大小的二次方,解密主要是三次方。这意味着将密钥大小加倍(例如从 2048 位到 4096 位)意味着加密成本的四倍,解密成本的八倍。(对于超过 20000 位左右的大到可笑的密钥,其他算法变得有价值,解密不再是三次方,但这不适用于“正常”的 RSA 实现。)
但是,您是对的,加密或解密只是对称密钥的一次性操作。对于一台基本的 PC,一个粗略的数量级是 1024 位 RSA 大约需要 1 毫秒来解密;所以 2048 位 RSA 意味着 8 毫秒,而 4096 位 RSA 意味着 64 毫秒左右。如您所见,就人类而言,这些数字仍然非常低。PGP 中加密和解密的感知成本取决于 I/O 成本。当您收到并解密一封 5 MBytes 的电子邮件时,下载它需要几秒钟,但实际解密只需几毫秒(对称加密可以轻松以 100 MB/s 的速度进行,而非对称解密是一次性的操作,如解释的那样)。
更长的密钥不一定更好。我们喜欢更长的密钥,因为当密钥更长时,已知的破解算法需要更多的时间。然而,这一论点在某一点上不再有效:当密钥长到无法用基于地球的技术破解时,那么它就“足够长”了,加长它不会带来任何显着的好处。当前的 RSA 破纪录是 768 位,据信 1024 位处于可行的边缘(但我们不知道它在边界的哪一侧)。一个 2048 位的 RSA 密钥已经足够大了,并且具有舒适的安全余量。关于 2048 位 ElGamal 和 DSA 密钥(PGP 也使用)也是如此。
另一方面,更长的密钥意味着更长的电子邮件(因为使用 PGP 签名的电子邮件包含密钥的副本),尽管这并不重要(每封电子邮件多出几百字节并不重要)。不使用超大密钥的一个更重要的原因是互操作性:某些实现可能有内部限制,由于它们的设计方式,一个巨大的密钥可能会超过这些限制。显然,某些版本的GnuPG在使用超过 4096 位的密钥时会遇到问题。2048 位和 4096 位的密钥应该可以在任何地方使用。
一个更次要的原因是,密钥生成可能会因密钥大小而变得过于昂贵——但您不经常这样做,所以这只是次要的。
总结一下:使用 PGP,使用 2048 或 4096 位的密钥,你会很开心。不要太担心那个选择;两者都可以。不要超过 4096 位,因为它会引发互操作性问题。