【问题标题】:Deterministic hash function that still has a work-factor (akin to bcrypt/scrypt)仍然具有工作因子的确定性哈希函数(类似于 bcrypt/scrypt)
【发布时间】:2020-09-06 00:22:15
【问题描述】:

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

我以 2 种方式修改了算法,这两种服务都完全符合我的需求,但我有点紧张,因为我打开了一个潜在的漏洞。我可能不正确的假设是 bcrypt 算法中生成的动态盐只是为了方便,因为人们使用 bcrypt 的主要原因是密码生成,他们只是帮助算法的用户避免通过没有盐,并且容易受到彩虹表查找等事情的影响。在我的特定情况下,我不需要这个。

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

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

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

这些服务中的任何一个都非常适合我的用例,我认为它们没有任何问题,但如果您碰巧对此有更深入的了解,我将不胜感激您的意见。

【问题讨论】:

  • 在密码空间,加盐不是方便;这是提供对预计算的抵抗力的重要方法(这就是盐渍化使彩虹表过时的原因)。您的用例真的不关心预计算吗?
  • 我有一个手动提供的盐和胡椒,再加上已经很大的输入空间,从而产生了巨大的输入空间。所以不是我不加盐,而是我需要一个确定性的输出哈希,不需要 bcrypt 的随机盐。
  • @RoyceWilliams 我在上面回复了,意识到我没有回复你。

标签: hash cryptography passwords bcrypt scrypt


【解决方案1】:

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

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

它允许您提供自己的任意字符串作为盐。它将使用 SHA512 对您提供的字符串进行哈希处理,然后截断前 16 个字节以用作盐,而不是随机的 16 个字节。如果没有提供,它会退回到使用随机字节。这允许给定盐 + 数据组合的确定性输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    相关资源
    最近更新 更多