哪些加密算法不被认为是安全的,但仍然在标准库中广泛使用和可用?如果适用,请提及一个安全的替代方案。
哪些加密算法不被认为是安全的?
这些是最常见的:
- MD5 - 使用 SHA512
- SHA1 - 使用 SHA512 (注意这并不是真的不安全,但它显示了它的年龄,并且在接下来的几年里会变得更脆弱......)
- DES / 3DES - 使用 AES
截至 2010 年底,美国政府根据 NIST 非常精明的人的建议弃用了这些算法:
- SHA-1
- 1024 位 RSA 或 DSA
- 160 位 ECDSA(椭圆曲线)
- 80/112 位 2TDEA(两键三重 DES)
MD5 与许多其他较旧的算法一样,从来都不是政府使用的可接受算法。
为了安全到 2030 年,他们建议至少使用 SHA-224、2048 位用于 RSA 或 DSA、224 位 EDCSA 和 AES-128 或 3 密钥三重 DES。
这已经进行了好几年。请参阅这篇文章及其引用的 NIST 文档:http: //securitymusings.com/article/1587/algorithm-and-key-length-deprecation
更新:另一套简洁有用的建议是Colin Percival 的Cryptographic Right Answers。
不安全但广泛使用的加密算法包括:
散列函数:MD4、MD5、(SHA-1)(MD2 也是不安全的,但没有广泛使用;SHA-1 只是“弱化”;MD4 和 MD5 也广泛用于不需要加密抵抗的情况,所以不是一个问题)
对称加密:DES(56 位密钥)、RC4(非随机性——但 RC4 的大多数安全问题在于它的使用方式,而不是算法本身)、Zip 归档格式的流密码(较新的 Zip实用程序使用 AES)
非对称加密:密钥太短(即 768 位或更少)的 RSA,填充不当的 RSA(例如 ISO 9796-1),Diffie-Hellman 模过小的素数(768 位或更少)(Diffie-Hellman 不是确实是一种非对称加密算法,而是一种密钥协商算法——但非对称加密的大多数用法实际上是伪装的密钥协商)
数字签名:RSA 密钥太短(即 768 位或更少)
许多(太多)来自过度聪明的人的手工算法;一个典型的例子是 CSS,DVD 的加密
安全的替代方案:SHA-256 用于散列(SHA-512,如果你对大小的迷恋与美国军队相同,和/或如果你想在 32 位系统上降低性能),AES 用于对称加密。对于关键协议,请考虑 ECDH(椭圆曲线上的 Diffie-Hellman)与标准 NIST 曲线之一(例如 P-224、K-233 或 B-233——但 P-256 得到更广泛的支持)。对于非对称加密,使用具有足够大密钥(1024 位用于短期安全,最好是 1536 或 2048 位)和PKCS#1填充(v1.5“旧式”很好,但 OAEP 更好)的 RSA。对于签名,请考虑 ECDSA(与 ECDH 相同的曲线)或具有足够大密钥和 PKCS#1 填充(v1.5 或 PSS)的 RSA。永远不要设计自己的算法(或者,如果你这样做了,永远不要相信它是安全的)。
然而,大多数安全问题不在于算法的选择,而在于它们的使用方式。WEP 使用 RC4,但 RC4 并不是 WEP 的众多弱点之一。索尼用 ECDSA 保护了 PlayStation 3,这是安全的,但搞砸了他们的随机生成器,导致灾难性故障(私钥暴露......)。