27

所以伙计们,有很多不同的密码可用——但现在哪一种最安全?

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

4

7 回答 7

47

如果不确定,请使用 AES(也称为“Rijndael”)和 128 位密钥。如果您对密钥大小产生了某种迷恋,那么您可以通过选择更大的密钥来满足您的非理性疑虑,例如 192 或 256 位;额外的成本并不高(与 AES-128 相比,AES-256 的工作量增加了 40%,并且需要非常快速的网络才能实际观察到这种差异)。

请注意,无论选择何种密钥大小,AES 的正确 mcrypt 密码始终为MCRYPT_RIJNDAEL_128. 这是因为 AES 标准指的是具有 128 位块大小的 Rijndael 密码风格。如果您想要 AES-256,则需要使用MCRYPT_RIJNDAEL_128256 位(32 字节)密钥,而不是MCRYPT_RIJNDAEL_256.

AES 于 1998 年出版,并于 2001 年被美国政府采纳为联邦标准,如今它丝毫不弱。后来发现了一些数学特性,但它们并不影响实际的安全性;大多数情况下,他们强调我们对为什么 AES 是安全的有一些相对精确的知识。没有其他对称加密算法比 AES 受到如此多的关注(成千上万有才华的密码学家)。

大多数安全问题来自加密算法的使用方式,而不是算法本身。使用适当的链接模式,添加 MAC,管理填充,最重要的是安全地处理密钥。如果你做对了所有这些(这比看起来要复杂得多),那么就该担心选择 Rijndael、Twofish 或其他什么了。

于 2010-05-11T12:46:36.693 回答
5

除了 Thomas Pornin 的出色回答之外,您还必须考虑在“安全性”(机密性/完整性/真实性/可用性)方面要实现的目标。

对于每种情况,您都需要解决几个问题,例如... 这适用于谁?它在哪里以及为什么被使用(你在保护什么)?它的意思是持续多久?等等

例如,当数据实际上只打算持续 20 到 30 分钟时,使用完整的 256 位操作连续加密会话数据可能没有意义。一个安全的 128 位算法的速度将接近两倍,或者至少使用更少的时钟周期,并且同样(如果不是更多的话)安全。

使用弱的短密钥方法加密那些意味着要持续很长时间的东西(如机密文档或文件、私钥等)也没有任何意义。您有时会需要多种算法,并使用某种身份验证和正确使用填充。我定期根据客户的要求使用多种算法(主要是 twofish、AES、RSA)对内容进行加密和签名。

并且不要忘记(就像 Thomas 指出的那样),您可以不安全地实现一个(或多个)安全方法。由于每个公式等的大量变体,实际实现“安全”的东西可能会很棘手。

通常,某些东西与解锁它的钥匙一样安全。如果我把车钥匙留在车里,车上没有锁,钥匙就不安全,任何路过的人都可以拿走。具有分散良好的 32 个字符密钥的 Blowfish 与今天的其他任何东西一样安全。然而,一个 3 个字符的密钥可能会在眨眼之间被破坏。

于 2012-02-21T00:22:22.927 回答
3

“最强的密码是 AES-256”

从 Bruce Schneier 网站上的详细信息来看,具有讽刺意味的是,AES-256 可能是三种密钥大小 128、192 和 256 中最不安全的。256 位变体中的密钥生成存在问题。

于 2011-01-20T11:36:42.270 回答
2

根据 NIST 的论文,与 MARS、双鱼或蛇相比,RJINDAEL 的安全边际较低。如果您真的需要最强的密码,请选择其中之一。

http://csrc.nist.gov/archive/aes/round2/r2report.pdf

引用:“MARS 似乎具有很高的安全边际。由于 MARS 采用两种不同的轮次,因此很难准确描述 MARS。由于其复杂性,MARS 受到了一些批评,这可能阻碍了其安全性分析在 AES 开发过程的时间范围内。

Rijndael 似乎有足够的安全边际。安全边际有点难以衡量,因为轮数会随着密钥大小而变化。Rijndael 受到了一些批评,原因有二:其安全系数在入围者中偏低,其数学结构可能导致攻击。但是,它的结构相当简单,这可能有助于在 AES 开发过程的指定时间范围内进行安全分析。

Serpent 似乎有很高的安全边际。Serpent 还具有简单的结构,这可能有助于在 AES 开发过程的指定时间范围内进行安全分析。

Twofish 似乎有很高的安全边际。由于 Twofish 使用依赖于密钥的轮函数,因此安全裕度的概念对于该算法的意义可能不如其他入围者。在 k 位关键情况下,Twofish S-box 仅依赖于 k/2 位熵,这导致人们猜测 Twofish 可能会受到分而治之的攻击,尽管尚未发现此类攻击。Twofish 因其复杂性而受到一些批评,使得在 AES 开发过程中的分析变得困难。”

于 2012-03-30T09:56:55.030 回答
2

有些算法在不同方面比其他算法更好 - 不确定您的“最安全”标准是什么。

这些天您当然不应该使用任何基于 DES 的算法(假设您可以自由选择)。AES (Rijndael) 是 NIST 和其他机构的当前标准。

通常,特定算法的更多位意味着更安全,但请确保您使用初始化向量并且不要使用 ECB。

高温高压

C。

于 2010-05-11T11:24:09.167 回答
1

如果您想查看详细信息,请参阅http://en.citizendium.org/wiki/Block_cipher上的一篇主要由我撰写的关于分组密码的文章

要符合当前的美国标准,请使用 AES,即以前的 Rijndael。AES 比赛中的任何其他决赛选手——Serpent、MARS、Twofish 或 RC-6——也应该没问题。不过,我认为您需要 RC6 的许可证。

于 2010-05-11T13:30:17.843 回答
0

我通常使用 AES-128,因为 AES 已获得 FIPS 批准。最强的密码是 AES-256 (MCRYPT_RIJNDAEL_256)。

mcrypt 采用模块化设计,可以轻松添加新密码。

于 2010-05-11T11:49:56.013 回答