哪种 PHP 密码最安全?
所以伙计们,有很多不同的密码可用 - 但是现在使用哪一个最安全?
所以伙计们,有很多不同的密码可用 - 但是现在使用哪一个最安全?
如果不确定,请使用带有128位密钥的AES(也称为“Rijndael”)。如果您对密钥大小产生了某种迷恋,那么您可以通过选择更大的密钥(例如192或256位)来解决您的非理性疑虑;额外的成本并不高(与AES-128相比,AES-256的工作负载增加了40%,并且需要非常非常快的网络才能实际观察到这种差异)。
请注意,无论选择的密钥大小如何,AES 的正确 mcrypt 密码始终是 。这是因为AES标准指的是具有128位块大小的Rijndael密码的味道。如果需要 AES-256,则需要使用 256 位(32 字节)密钥,而不是 。MCRYPT_RIJNDAEL_128
MCRYPT_RIJNDAEL_128
MCRYPT_RIJNDAEL_256
AES于1998年发布,并于2001年被美国政府采用为联邦标准,如今它没有显示出任何弱点。后来发现了一些数学性质,但它们不会影响实际的安全性;大多数情况下,他们强调我们对AES为什么是安全的有一些相对精确的知识。没有其他对称加密算法比AES受到如此多的关注(受到数千名才华横溢的密码学家的关注)。
大多数安全问题来自加密算法的使用方式,而不是算法本身。使用适当的链接模式,添加MAC,管理填充,最重要的是安全地处理密钥。如果你把所有这些都做好了(这比看起来要棘手得多),那么是时候担心选择Rijndael,Twofish或其他任何东西了。
除了Thomas Pornin的精彩回答之外,您还必须考虑在“安全性”(机密性/完整性/真实性/可用性)方面要实现的目标。
对于每种情况,您都需要解决一些问题,例如...这适用于谁?在哪里以及为什么使用它(你在保护什么)?它要持续多长时间?等。
例如,当数据实际上只持续20-30分钟时,使用完整的256位操作来加密会话数据可能没有意义。安全的128位算法将接近两倍的速度,或者至少使用更少的负载时钟周期,并且同样(如果不是更安全的话)。
使用弱短密钥方法加密意味着可以持续很长时间的东西(如机密文档或文件,私钥等)也没有意义。您有时需要具有某种身份验证和正确使用填充的多种算法。我定期根据请求使用多种算法(主要是双鱼,AES,RSA)对内容进行加密和签名。
不要忘记(如托马斯指出的那样),你可以不安全地实现一个安全的方法(或多个方法)。由于每个公式的大量变体等,实际实现“安全”的东西可能很棘手。
通常,某些东西与解锁它的钥匙一样安全。如果我把车钥匙留在车里,车上没有锁,钥匙就不安全了,任何走过的人都可以拿走。具有分散的32个字符密钥的河豚将像今天的其他任何东西一样安全。然而,一个3个字符的键可能会在眨眼之间被打破。