我正在使用MD5对密码进行哈希。我应该在什么时候转向下一个哈希算法?SHA-3?

5 浏览
0 Comments

我正在使用MD5对密码进行哈希。我应该在什么时候转向下一个哈希算法?SHA-3?

NIST于10月2日决定将SHA-3作为新的标准哈希算法。MD5用户是否应该开始迁移到SHA-3?还是其他算法(详见下文为何不推荐SHA-3)?bcrypt呢?为什么不使用{MD5,SHA1,SHA256,SHA512,SHA-3等}?而且,这真的很关键吗?即使您的密码已经加盐?

0
0 Comments

我正在使用MD5来散列密码。什么时候应该转向下一个算法?SHA-3?

不使用MD5散列密码的主要原因并不是因为MD5已经被严重破解或被认为是不安全的。的确,MD5存在已知的漏洞。但是这些漏洞对于使用MD5的情况并不构成严重威胁。因为在你的情况下,唯一的威胁是预像攻击,即攻击者试图找到已知哈希的预像,例如已知(加盐)密码哈希的密码。而针对MD5的预像攻击仅仅是理论上的,并且将攻击的难度从2^128降低到了2^123.4,这并没有太大的优势。而使用平均为2^64次的穷举攻击更有希望。

不,不使用MD5的主要原因是因为MD5太快了。使用今天经济实惠的计算机,你可以每秒生成和测试7190M个MD5散列。所有8个字符长的字母数字组合可以在约8.5小时内被穷举破解,无论是否使用加盐。

相比之下,像bcrypt $2a$这样的散列函数每秒只能生成和测试4085个散列,即MD5散列数量的0.00005682%。使用bcrypt $2a$,你需要1694年来进行同样的尝试。

那么SHA-3呢?它也太快了吗?

SHA-3算法刚刚在一周前宣布,可能还没有进行太多的研究。我不知道它的性能如何。但是SHA系列算法更适用于一般用途的散列,而不是用于密码散列。

SHA-3比SHA-2更快。它的设计是为了安全性,然后是速度。我跟随了竞赛,bcrypt或PBKDF2是更好的选择。

SHA-3比SHA-2更快还是更慢?不确定你是否犯了错误。这是否意味着它比SHA-2更容易受到穷举攻击的威胁?

如果你只允许用户尝试登录x次,这是否解决了速度过快的问题?

你必须区分离线攻击和在线攻击。在线攻击比离线攻击慢得多。上述的速度仅适用于已经拥有密码散列的离线攻击。对于在线攻击来说,穷举攻击并不是一个可行的选择。你更可能尝试使用一个包含最常用密码的字典攻击。但你仍然可以实现一些功能来限制特定客户端或用户的尝试次数。

速度不是密码散列的安全性的一部分-散列越快越好。这就是为什么你应该使用密钥派生函数(KDF)。PBKDF2和bcrypt就是其中的例子。它们可能在内部使用散列,但它们使用盐和迭代次数来增加对穷举攻击的安全边界。

0