哪个PHP mcrypt密码最安全?

时间:2010-05-11 10:29:24

标签: php security encryption mcrypt

那么伙计们,有很多不同的密码可供使用 - 但现在哪一种密码最安全?

列表:http://www.php.net/manual/en/mcrypt.ciphers.php

7 个答案:

答案 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采用模块化设计,可以轻松添加新密码。