0

我正在寻找一种强大的单向散列函数,它加密(真正)弱密码(10^9 组合)。crypt 函数还必须满足一些要求:

  1. 来自相同明文的相同哈希值。所以 scrypt/bcrypt 和公钥/私钥方法是不可能的(或者我在这里可能错了吗?)。

  2. 没有像 AES 中那样的共享密钥。因为不同的客户端必须创建相同的哈希值。

  3. 无盐

那么有什么办法可以增加对这么小的字符空间进行暴力破解的难度呢?我已经尝试过使用多轮 SHA256 进行密钥拉伸,但我不是需要多少轮才能显着增加计算时间(我猜必须是数十亿)。到目前为止,我唯一想到的是使用添加到密码中的服务器端密码。但是如果发生腐败,很难保证这个秘密仍然是一个秘密......我很乐意提供一些提示或想法!问候, r0cks

4

2 回答 2

1

没有更多上下文,很难给出一个好的答案。

服务器端机密只能保护 ids(?) 以将它们存储在服务器端(数据库)。即便如此,只要不知道秘密(每个双向加密的问题),它也只会保护 id。

即使代码和数据库被盗,另一侧的单向哈希也会保护 id。即使使用静态盐,BCrypt/PBKDF2 散列也会减慢暴力破解的速度,尽管静态盐将允许构建单个彩虹表来一次获取所有散列。

使用 BCrypt 并随后使用服务器端密码加密散列可能是您最好的选择,尽管如果不了解更多情况就很难说。

于 2014-04-15T09:13:39.180 回答
1

仅使用算法是不可能的。您最好将系统拆分为具有特定角色的部分以保护您的数据。

scrypt、bcrypt 和 PBKDF2 都是确定性的基于密码的密钥派生函数 (PBKDF)。只要盐保持不变,它们就会为相同的输入重现相同的结果。(部分)盐可能是服务器端的秘密。但是,如果盐暴露,如果密码很弱,这些功能将无济于事。

于 2014-04-14T21:33:08.733 回答