密码哈希:Keccak与否

时间:2013-02-08 18:40:49

标签: php python blowfish sha-3 keccak

已选择SHA-3哈希算法竞赛的获胜者。获胜者的算法是 Keccak

我使用Blowfish并且非常喜欢它,但据说Keccak更好。是否值得使用它在我的网站上存储用户的密码?

如果是,是否有用于Web编程的用于PHP,Python,Ruby或任何其他语言的Keccak的实现?

我希望这个问题也可以帮助其他人。谢谢!

3 个答案:

答案 0 :(得分:22)

简短回答:

不,也许永远不会。对于密码哈希,BCrypt& PBKDF2-HMAC- xxx 是比任何简单的SHA- 1/2/3 算法更好的选择。在SHA-1/2实际发布可行的preimage攻击之前,SHA-3实际上是最差的选择,特别是因为它的速度和低缓存占用

更长的回答:

不同密码哈希算法的相对安全性的一个主要因素是:专用攻击者哈希密码与您相比可以多快多少?也就是说,他们的软件/硬件组合(为密码散列的明确目的而购买)与服务器上的软件(软件的现成C实现,为应用程序的需求而购买的硬件)的速度要快得多。

SHA-3的主要标准之一是应该在嵌入式架构上高效运行,这些架构以少量的片上高速缓存,寄存器等为代表。但这也描述了现代GPU:更少的寄存器/累加器,更小on-die缓存;但另一方面,他们的芯片经过优化,可以在大量数据上并行执行相同的任务。这对于攻击者的蛮力尝试来说是完美的:因为通过购买另一个GPU,攻击者可以通过购买更好的CPU来获得更多SHA3哈希/秒。

由于这个特殊原因,BCrypt被设计为对内存表进行大量读/写操作,目前这个表大于大多数GPU的缓存。这意味着当前基于GPU的BCrypt实现甚至无法与其CPU对应的速度相提并论。因此,只要选择BCrypt,就可以通过强迫他购买与你相同的CPU来减慢攻击者对他花费的每一美元的优势。

这就是为什么原始速度是密码散列的敌人。 您希望选择最快的软件/硬件组合为您的攻击者提供比您将使用的商品软件/硬件的每美元最少优势的算法。现在,这是BCrypt,或PBKDF2-HMAC- xxx 的稍微选择。由于GPU可能只会更好地做SHA3,我怀疑它永远是正确的选择。我没有关于SHA3的数字,但“哪个更安全”并不是一个模糊的相对术语 - 上述规则可用于精确量化它。

答案 1 :(得分:4)

这是一个老问题,但听起来每个人都被cryptography terminology再次混淆了。让我们澄清一些事情。

  • Keccak是一种加密哈希函数。
  • Blowfish是一种分组密码(它具有64位块大小,不应再用于加密)。
  • Bcrypt是密码哈希函数,它具有与仅仅加密哈希函数不同的用例。 Bcrypt基于Blowfish,但它不是Blowfish。

我不只是迂腐;这些区别非常重要,因为Keccak没有与bcrypt竞争,它与SHA-256竞争。

这是safely store a password in PHP

的简便方法
  1. 使用password_hash()password_verify()password_needs_rehash()
  2. 那就是它。你甚至不需要关心这些功能的作用,你只需要使用它们(除非你使用像libsodium这样的东西)。

    目前,此界面提供了bcrypt。 Bcrypt大部分都很好,只有几个小脚子要注意:

    1. 它会在72个字符后截断密码,这会降低使用低字符每字符密钥空间的长密码的安全性。
    2. 如果您试图通过预先散列来规避之前的脚注,请注意不要将原始二进制文件传递给bcrypt,因为它也会在NUL个字符后截断。
    3. 如果您担心这些问题,password_lock中存在暂时的权宜之计。

      在PHP 7.2中,很可能通过此接口使用Argon2i(假设RFC通过)。

      在几年内(大约PHP 7.5,假设没有主要版本颠簸)我们可能会看到PASSWORD_ARGON2I成为PASSWORD_DEFAULT的新值,但可能不会。我们已经有几年时间让密码学研究人员对它有信心。

答案 2 :(得分:-2)

I use Blowfish and really like it, but Keccak is said to be better.

“更好”是一个相对的术语。更好的是什么?安全性,性能,可扩展性,可移植性......?

如果您希望更高的“安全性”仅用于散列用户密码,那么Keccak可能是一个好的选择。 Blowfish将为您提供更好的“安全性”,因为如果发现散列,则需要更长时间来强制执行散列。

话虽如此,如果您正在寻找可在嵌入式架构上运行的东西,或者您想要更高的可移植性,Keccak是一个不错的选择。 Here is a PHP implementation on githubhere is another 您也可以downloading the Keccak source制作自己的语言扩展程序。

但老实说,最好坚持你所知道的。如果黑客可以轻松获得您当前正在使用的河豚哈希,那么问题不是哈希算法,而是访问数据库。另请注意,必须使用此扩展程序在所有服务器上安装PHP扩展,如果您使用共享主机,这可能会也可能不会。

实际上,你应该坚持使用你拥有的东西。机会足够安全,一旦Keccak实现移植到标准PHP核心,您就可以移动(如果需要)。只是我的两分钱。