那么伙计们,有很多不同的密码可供使用 - 但现在哪一种密码最安全?
答案 0 :(得分:46)
如果不确定使用带有128位密钥的AES(也称为“Rijndael”)。如果您已经开发出某种关于密钥大小的迷信,那么您可以通过选择更大的密钥来满足您的非理性条件,例如: 192或256位;额外的成本并不高(与AES-128相比,AES-256的工作负载增加了40%,并且需要一个非常非常的快速网络来实际观察这种差异)。
请注意,无论选择的密钥大小如何,AES的正确mcrypt密码始终为MCRYPT_RIJNDAEL_128
。这是因为AES标准指的是具有128位块大小的Rijndael密码的风格。如果需要AES-256,则需要使用MCRYPT_RIJNDAEL_128
和256位(32字节)密钥,而不是MCRYPT_RIJNDAEL_256
。
AES于1998年出版,并于2001年被美国政府采纳为联邦标准,现在没有出现任何弱点。后来发现了一些数学属性,但它们并没有影响实际的安全性;大多数情况下,他们强调我们对AES安全的原因有一些相对准确的了解。没有其他对称加密算法得到的关注(成千上万有才华的密码学家)比AES更受关注。
大多数安全问题来自加密算法的使用方式,而不是算法本身。使用正确的链接模式,添加MAC,管理填充,并且最重要的是安全地处理键。如果你把所有这一切都弄好了(这比它看起来要复杂得多)那么就应该担心选择Rijndael,Twofish或其他什么。
答案 1 :(得分:5)
除了Thomas Pornin的好答案之外,你还必须考虑你在"安全性方面要做的事情。 (机密性/完整性/真实性/可用性)。
对于每个案例,您都需要解决几个问题,例如......这适用于哪些人?它在哪里以及为什么被使用(你在保护什么)?这意味着持续多久?等
例如,当数据实际上仅持续20-30分钟时,可能没有必要真正加密会话数据,并且完全连续的256位操作。一个安全的128位算法将接近两倍的速度,或至少使用较少的时钟周期,并且就像(如果不是更多)安全一样。
使用弱密钥方法加密某些意味着持续很长时间的东西(如机密文档或文件,私钥等......)也毫无意义。您有时需要使用某种身份验证和正确使用填充的多种算法。我根据客户要求使用多种算法(主要是twofish,AES,RSA)定期加密和签名内容。
不要忘记(就像托马斯指出的那样),你可以不安全地实施一种安全的方法(或方法)。由于每个公式的大量变体等等,实际实现“安全”的东西可能很棘手。
通常,某些东西与解锁它的关键一样安全。如果我将汽车钥匙留在车内并且汽车已解锁,则钥匙不安全,并且任何走过的人都可以将钥匙打开。具有良好分散的32个字符键的Blowfish将与今天的其他任何东西一样安全。然而,一个3字符的键可以在眨眼之间被打破。
答案 2 :(得分:3)
“最强的密码是AES-256”
有关Bruce Schneier网站的详细信息,具有讽刺意味的是,AES-256在三个密钥大小128,192和256中可能是安全性最低的.256位变体中的密钥生成存在问题。
答案 3 :(得分:2)
有些算法在不同的方面比其他算法更好 - 不确定你的“最安全”的标准是什么。
这些天你当然不应该使用任何基于DES的算法(假设你有自由选择)。 AES(Rijndael)是NIST和其他机构的现行标准。
通常,特定算法的更多位意味着更安全,但请确保使用初始化向量而不使用ECB。
HTH
下进行。
答案 4 :(得分:2)
根据NIST的论文,与MARS,twofish或serpent相比,RJINDAEL的安全边际较低。如果你真的需要最强的密码,请选择其中一种。
http://csrc.nist.gov/archive/aes/round2/r2report.pdf
引用: “MARS似乎具有很高的安全边际。对MARS的精确描述是 由于MARS采用了两种不同类型的回合,因此很难实现。火星 因其复杂性而受到一些批评,这可能阻碍了它的发展 AES开发过程的时间范围内的安全性分析。
Rijndael似乎有足够的安全边际。安全边际有点 难以衡量,因为轮数随密钥大小而变化。 Rijndael算法 有两个理由受到一些批评:它的安全边际偏低 在决赛选手中,其数学结构可能会导致攻击。但是,它 结构相当简单,可能有助于其安全分析 AES开发过程的指定时间范围。
Serpent似乎具有很高的安全边际。蛇也有一个简单的结构, 这可能在指定的时间范围内促进了其安全性分析 AES开发过程。
Twofish似乎具有很高的安全边际。由于Twofish使用密钥依赖 在圆函数中,安全边界的概念可能对该算法的意义较小 而不是其他决赛选手。 Twofish S-box的依赖性仅为k / 2比特 k位密钥案例中的熵导致了一种推测,即Twofish可能适合a 虽然没有发现这种攻击,但是分而治之的攻击。 Twofish收到了 对其复杂性提出了一些批评,在分析期间难以进行分析 AES开发流程。“
答案 5 :(得分:1)
如果您想查看详细信息,主要由我在http://en.citizendium.org/wiki/Block_cipher
的分组密码上发表文章要符合当前的美国标准,请使用AES,以前的Rijndael。来自AES比赛的任何其他决赛选手 - 蛇,MARS,Twofish或RC-6 - 也应该没问题。不过,我认为你需要获得RC6的许可证。
答案 6 :(得分:0)
我通常使用AES-128,因为AES已通过FIPS认证。最强的密码是AES-256(MCRYPT_RIJNDAEL_256)。
mcrypt采用模块化设计,可以轻松添加新密码。