【发布时间】:2020-09-06 00:22:15
【问题描述】:
我需要生成一个哈希,并且会受益于像 bcrypt 这样具有内置工作因子的算法。问题是我需要这个哈希是确定性的,bcrypt 算法的一部分是从随机字节生成动态盐,产生一个不确定的输出哈希。这对于标准密码用例来说显然是完全可以的,但我有一个不同的慢散列情况,这不适合。
我以 2 种方式修改了算法,这两种服务都完全符合我的需求,但我有点紧张,因为我打开了一个潜在的漏洞。我可能不正确的假设是 bcrypt 算法中生成的动态盐只是为了方便,因为人们使用 bcrypt 的主要原因是密码生成,他们只是帮助算法的用户避免通过没有盐,并且容易受到彩虹表查找等事情的影响。在我的特定情况下,我不需要这个。
所以我的两个解决方案都可以正常工作,
1.) 只是让盐生成使用固定的 16 个字节,而不是生成 16 个随机字节。输出哈希是确定性的,我仍然可以在生成盐时提供一个工作因子
2.) 让盐生成接受一个字符串,用于生成确定性的 16 字节输出哈希(我不知道它是否需要 16 字节,我只是不想弄乱接口) .输出哈希是确定性的,我仍然可以提供一个工作因子和一个输入字符串作为盐。
这些服务中的任何一个都非常适合我的用例,我认为它们没有任何问题,但如果您碰巧对此有更深入的了解,我将不胜感激您的意见。
【问题讨论】:
-
在密码空间,加盐不是方便;这是提供对预计算的抵抗力的重要方法(这就是盐渍化使彩虹表过时的原因)。您的用例真的不关心预计算吗?
-
我有一个手动提供的盐和胡椒,再加上已经很大的输入空间,从而产生了巨大的输入空间。所以不是我不加盐,而是我需要一个确定性的输出哈希,不需要 bcrypt 的随机盐。
-
@RoyceWilliams 我在上面回复了,意识到我没有回复你。
标签: hash cryptography passwords bcrypt scrypt