当前位置: 首页 > 面试题库 >

很多哈希迭代:每次都添加盐吗?

贾沛
2023-03-14
问题内容

我已经使用了无盐的md5 /
sha1很长时间了,但是由于这种方法并不真正html" target="_blank">安全(随着时间的流逝,它变得越来越不安全),我决定改用盐腌的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漏洞,但是它还可以防止暴力攻击(或至少使攻击速度过慢)。绝对需要权衡,但从某些方面来说,收益会超过风险。

整个过程的参考(更像是概述):重点加强

至于退化的碰撞,到目前为止,我唯一能找到的就是这种讨论。

有很多结果。如果您想要更多,请使用Google hash stretching…那里有大量的有用信息…



 类似资料:
  • 我正在为Web应用程序制作登录系统。要将密码存储在数据库中,我正在使用sha256加密密码,如下所示: 在数据库中,我存储了用户、用户密码和用于散列和验证用户登录的salt。现在,我正在向用户发送包含您的密码的电子邮件,但是当用户收到电子邮件时,由于存储在sha256加密密码中,用户收到的是一个长字符串,而不是用户应该知道的密码。 我的问题是,我可以通过任何方法向您发送实际的用户密码和非密码加密,

  • 我想迭代嵌套在映射中的列表,数据结构如下所示: Freemarker模板: 详细异常消息: FreeMarker模板错误:“...[...]”左操作数:需要序列或字符串或自动转换为字符串的东西(数字、日期或布尔值),但计算结果为extended_hash(包装器:f.t.simplehash):==>groups 那么,问题出在哪里呢? 附言。 我尝试了而不是,它会抛出一个新的异常堆栈:

  • 问题内容: 我在尝试计算字符串的md5哈希值时遇到了一些非常奇怪的行为。如果我传递的是串联结果,则返回的哈希值总是错误的(且与众不同)。获得真正的哈希的唯一方法是传递创建后未进行任何修改的字符串。 我想念什么吗? 问题答案: 您缺少的是 不会替换散列数据 。您将不断更新哈希对象,因此您将获得 串联字符串 的哈希值。从文档中: 使用字符串 arg 更新哈希对象。 重复调用等效于将所有参数串联在一起的

  • 我记得读过一个方案,其中检查密码的过程是这样的: 给定数据库中的(哈希、盐)值, 用salt哈希密码以检查哈希, 使用旧哈希作为salt的哈希密码, 在数据库中存储(新哈希,也称为旧哈希) 我找不到原始来源无论如何,我不明白 > < li> 使用旧哈希作为salt的优势是什么(与使用随机salt相反), 这种方案的优点是什么(进一步使彩虹表攻击复杂化?),以及 如果有优势,如何使用PHPass应用

  • 在Ubuntu 12.04上,我创建了几个用户和密码,然后立即用开膛手约翰破解这些密码。一个密码很强,但其他密码都在我的单词列表中。 约翰还在跑,但我已经在大约20分钟内破解了两个。 我读到的每一篇文章都在谈论盐是否为人所知。以此哈希为例: 盐是: 正当我是说,这不是一直都知道吗?所以盐除了防止使用彩虹桌外,真的没有任何作用,对吗? 此外,还有以下帖子: 要用多长时间的时间来暴力处理一个腌制的SH

  • 问题内容: 我这里有使用struts2-jquery插件的代码 当我单击其内容时,URL会更改为类似的内容,而URL中没有任何变化。它仍然保持不变,我想要的是当我单击链接时会发生类似的情况。当我运行代码时,锚标记被翻译成这样 有了给定的内容,我该如何在网址中添加哈希? 问题答案: 这是一个工作示例(不考虑Struts2):