在与其他几个人的讨论中,我读到了
的论点虽然我部分同意,但真正最好的安全性是什么?有没有什么比使用用户独特的盐和慢速哈希方法(如SHA512)更安全?真正的方法是什么?争辩!
如果发现不好,请编辑标题。
答案 0 :(得分:0)
在讨论最近的LinkedIn漏洞时,有人提出了link about bcrypt。我想我同意......我们应该使用根据一个因素以指数方式增加计算时间的函数。这是我们尝试使用集群或GPU进行散列计算的唯一方法。
答案 1 :(得分:0)
我的理解是,重复散列(计算成本)&一个好的随机盐,应该击败所有但严重认定的加密攻击者。
在数据库中以及通过网络散列密码,可以避免明信片被进入的窥探者或攻击者恢复(并可在其他地方使用)。
基本上,这或多或少是Wordpress身份验证使用的方案:
var SALT = 64 random characters;
var NUM_HASHES = about 1000; // can be randomized
var hashedResult = inputPassword;
for (int i = 0; i < NUM_HASHES; i++) {
var dataToHash = SALT + hashedResult;
hashedResult = secureHash( dataToHash);
}
//... can now store or send.
使用随机盐和循环哈希,可以击败任何彩虹表或单级“哈希冲突”,“哈希弱点”攻击。只有通过1000次迭代的哈希函数强制完成键空间,每个键才被认为是打败它:)
答案 2 :(得分:0)
“整体”算法,我指的是如何将明文密码转换为存储值的完整定义。例如。 SHA-256("mypassword" + "[[" + 40-char-random-alphanum-salt + "]]")
。如果您将其更改为使用尖括号而不是方括号,则您已更改了利用存储密码所需的彩虹表。请注意,我不是主张编写自己的哈希算法;你仍然应该选择加密安全的哈希算法。
请参阅MD5的作者this article。他提出了我在上面重复的两个要点:1)如果你使用快速哈希算法,你就会忽略这一点,2)重用整体算法可以重复使用彩虹表。