Answers:
GPG维护者正在考虑将默认值更改为RSA(来源:处理SHA-1的弱点[LWN.net])。因此,似乎他们认为RSA当前是更好的选择(他们应该比您或我更多地了解RSA)。
RSA和DSA-误解和有用的信息
有一些较旧的 RSA参考文献和最新的 DSA参考文献,
2003年,RSA VS DSA签名-得主是... - RSA。
因此,基本上,对于DSA而言,密钥生成的速度快得令人难以置信,如果您了解算法,这是有道理的。DSA的签名也更快,但幅度不大。RSA的强大优势是验证比DSA快得多。
IETF的最新草案:用于DNSSEC的具有SHA-2的DSA,将于2010
年1月7日到期。它具有今天推动RSA上的DSA的某些原因。
与使用2048位密钥的RSA与SHA-256结合使用时,在DNSSEC中将SHA-256与DSA结合使用具有某些优点和 缺点。 DSA签名比RSA签名短得多;在此大小下,差异为512位与2048位。在使用2048位密钥的典型平台上,签名DSA的速度比RSA快三倍,但是验证RSA签名的速度比DSA快十倍以上。
当DSA公钥和RSA公钥大小相同时,通常认为DSA的加密强度与RSA等效。如果发现新的攻击可以更好地与一种或其他算法配合使用,那么这种评估当然会在将来发生变化。
当前没有针对此文档选择的特定DSA参数集的已知攻击。当然,这种评估将来可能会改变。
但是,这只是目前的草案。
每个人都喜欢RSA(!)的验证速度。
引用论坛讨论:
我的建议是使用RSA签名密钥(“主”或“主”密钥)和RSA子密钥进行加密。使用RSA进行签名的原因主要是因为RSA允许您使用比DSA更大的哈希。DSA2还允许您使用更大的散列,但是与DSA2相比,支持RSA的时间更长。
我认为,如果您以标准方式使用它(即您不对大量数据进行加密),那么两者都会做得很好。
我个人选择RSA是因为我已经学习了算法,并且它是我见过的最漂亮的算法之一。
从DSS的当前版本开始,也可以使用SHA-2算法。但我无法确定GPG遵循哪个修订版。
关于当前的DSS规范(FIPS-186-3,第i页),可以使用SHS(FIPS-180-3,第iv页)中指定的任何哈希函数:
DSS:
FIPS批准的数字签名算法应与SHS中指定的适当哈希函数一起使用。
SHS:
该标准规定了五个安全哈希算法-SHA-1,SHA-224,SHA-256,SHA-384和SHA-512,用于计算电子数据(消息)的压缩表示。
问题是:两种算法都基于不被证明是安全的数学问题(RSA使用因数分解的问题,DSA使用离散对数问题),您不能说一个比另一个更安全,因为不是一个问题也没有解决。
但是,通过pgs已经说过,通过将DSA与SHA-1一起使用,您可能会遇到安全问题。
事实是,这对您可能并不重要:)作为准备生成密钥对的一部分,以及维护现有密钥对的一部分-无论您选择哪种非对称加密,您都应:1)检查当前推荐的密钥长度2)选择一个基数/模数来优化签名或验证-取决于将要执行的操作(应该优化用于发行TLS / SSL服务器证书的密钥,因为每个Web浏览器都会检查签名) ...用于签名软件的密钥也应进行类似的优化)3)确保您的密钥已过期-几年来一直使用同一密钥进行ssh-auth,即使您选择了密钥,也可能是重新生成密钥的时候了尺寸对于今天的应用仍然是合理的。
RSA和DSA都经过了实质性评估;如果您使用的是可实现的代码库(RSAREF,RSA commercial,Mozilla / Netscape,Microsoft,OpenSSL等),那么您可能不关心使用哪种密码系统,只要您正确使用并使用当前的最佳实践即可。