仍然具有工作因子的确定性哈希函数(类似于bcrypt/scrypt)



我需要生成一个哈希,并且会从像bcrypt这样具有内置工作因子的算法中受益。问题是我需要这个哈希是确定性的,并且 bcrypt 算法的一部分是从随机字节生成动态盐,产生非确定性输出哈希。对于标准密码用例来说,这显然是完全没问题的,但是我有一个不同的慢速散列情况,这不适合。

我以 2 种方式修改了算法,这两种方式都可以很好地满足我的需求,但我有点紧张,因为我正在打开一个潜在的漏洞。我可能不正确的假设是,bcrypt算法中生成的动态盐只是为了方便,因为人们使用bcrypt的主要原因是密码生成,他们只是在帮助算法的用户避免在没有盐的情况下搬起石头砸自己的脚,并且容易受到彩虹表查找之类的事情的影响, 等。在我的特殊情况下,我不需要这个。

所以我的 2 个解决方案,两者都工作正常,是

1.( 只需让盐生成使用固定的 16 个字节,而不是生成 16 个随机字节。输出哈希是确定性的,我仍然可以在生成盐时提供一个工作因子

2.( 让盐生成接受一个字符串,它用来产生确定性的 16 字节输出哈希(我不知道它是否需要是 16 字节,我只是不想弄乱接口(。输出哈希是确定性的,我仍然可以提供一个工作因子和一个输入字符串作为盐。

这些服务中的任何一个都可以很好地使用我的用例,我认为它们没有任何问题,但是如果您碰巧对此有任何更深入的了解,我将不胜感激。

就其价值而言,该算法似乎不依赖于随机生成的盐。这并不意味着你不应该使用盐。

我在这里实现了这个: https://github.com/ralusek/bcrypt-deterministic

它允许您提供自己的任意字符串作为盐。它将做的是散列您使用 SHA512 提供的字符串,然后截断要用作盐的前 16 个字节,而不是随机的 16 个字节。如果未提供任何内容,则使用随机字节回退。这允许给定的盐+数据组合的确定性输出。

相关内容

  • 没有找到相关文章

最新更新