各位,现在有很多不同的密码算法可供选择 - 但哪一种是目前最安全的?
如果不确定,使用AES(也称为“Rijndael”)和128位密钥。如果您对密钥长度有某种迷恋,那么可以通过选择更大的密钥来满足您的非理性顾虑,例如192或256位。额外的成本不高(与AES-128相比,AES-256的工作量增加了约40%,并且需要非常快速的网络才能真正观察到这种差异)。
请注意,无论选择哪个密钥大小,AES的正确mcrypt密码始终是MCRYPT_RIJNDAEL_128
。这是因为AES标准是指具有128位块大小的Rijndael密码的变体。如果要使用AES-256,则需要使用带有256位(32字节)密钥的MCRYPT_RIJNDAEL_128
,而不是MCRYPT_RIJNDAEL_256
。
AES于1998年发布,并于2001年被美国政府采用为联邦标准,至今没有显示出任何弱点。后来发现了一些数学特性,但它们并不影响实际安全性;主要是强调我们对AES安全性的相对精确的了解。没有其他对称加密算法比AES获得过如此多(由数千名才华横溢的密码学家)的关注。
大多数安全问题来自加密算法的使用方式,而不是算法本身。使用适当的链接模式,添加MAC,管理填充,最重要的是安全处理密钥。如果您做到了这一点(比看起来更为棘手),那么就可以开始担心选择Rijndael,Twofish或其他加密算法了。
最强的加密算法是AES-256。
从Bruce Schneier网站上的详细信息来看,出乎意料的是,在128位、192位和256位三种密钥长度中,AES-256可能是最不安全的。这是因为256位变体中存在密钥生成问题。
一些算法在不同的方面表现更优秀 - 不确定您对“最安全”的标准是什么。
现在您肯定不应该使用基于DES的任何算法(假设您有自由选择)。AES(Rijndael)是NIST和其他机构的当前标准。
通常,特定算法的更多位数意味着更加安全,但请确保使用初始化向量并且不要使用ECB。
希望能帮到您。
C.
http://csrc.nist.gov/archive/aes/round2/r2report.pdf
引用: “MARS似乎具有很高的安全保障系数。由于MARS采用了两种不同类型的轮,因此精确描述MARS是困难的。MARS基于其复杂性受到了一些批评,这可能在AES开发过程中阻碍了其安全分析。”如果您想查看详细信息,可以参考我在http://en.citizendium.org/wiki/Block_cipher上撰写的有关分组密码的文章。
为了符合当前的美国标准,请使用AES(前身为Rijndael)。其他AES竞赛的入围者--Serpent、MARS、Twofish或RC-6--也应该可以。不过,我认为您需要获得RC6的许可证。
我通常使用AES-128,因为AES是FIPS认证的。最强的密码是AES-256(MCRYPT_RIJNDAEL_256)。
mcrypt具有模块化设计,可以轻松添加新的密码。