gpt4 book ai didi

php - 许多哈希迭代 : append salt every time?

转载 作者:IT王子 更新时间:2023-10-29 01:00:26 26 4
gpt4 key购买 nike

我使用 unsalted md5/sha1 已经很长时间了,但是由于这种方法并不安全(并且随着时间的推移变得越来越不安全),我决定改用 salted sha512。此外,我想通过使用多次迭代(例如 100 次)来减慢哈希的生成速度。

我的问题是我应该在每次迭代中添加盐还是在开始时只添加一次。以下是两种可能的代码:

每次都追加:

// some nice big salt
$salt = hash($algorithm, $salt);

// apply $algorithm $runs times for slowdown
while ($runs--) {
$string = hash($algorithm, $string . $salt, $raw);
}

return $string;

追加一次:

// add some nice big salt
$string .= hash($algorithm, $salt);

// apply $algorithm $runs times for slowdown
while ($runs--) {
$string = hash($algorithm, $string, $raw);
}

return $string;

我最初想使用第二个版本(附加一次),但后来发现一些脚本每次都附加盐。

所以,我想知道每次添加它是否会增加哈希的强度。例如,攻击者是否有可能找到一些巧妙的方法来创建 100timesSha512 函数,这比简单地执行 sha512 100 次要快得多?

最佳答案

简而言之:是的。继续第一个例子......如果不添加原始数据而反馈给自己,哈希函数可能会丢失熵(我现在似乎找不到引用,我会继续寻找)。

为了记录,我支持多次散列。

生成一个需要 500 毫秒的哈希对您的服务器来说并不算太慢(考虑到生成哈希通常不会在绝大多数请求中完成)。然而,需要这么长时间的哈希会显着增加生成彩虹表所需的时间......

是的,它确实暴露了一个 DOS 漏洞,但它也可以防止暴力攻击(或者至少使它们变得异常缓慢)。这绝对是一个权衡,但对某些人来说,好处超过了风险......

整个过程的引用(更像是概述):Key Strengthening

至于退化碰撞,目前我能找到的唯一来源是 this discussion ...

还有一些关于这个话题的讨论:

  1. HEKS Proposal
  2. SecurityFocus blog on hashing
  3. A paper on Oracle's Password Hashing Algorithms

还有一些链接:

  1. PBKDF2 on WikiPedia
  2. PBKDF2 Standard
  3. A email thread that's applicable
  4. Just Hashing Is Far From Enough Blog Post

有大量的结果。如果你想要更多,谷歌 hash 拉伸(stretch)...那里有大量的好信息...

关于php - 许多哈希迭代 : append salt every time?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3559437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com