Hash 弱密码的强单向散列

Hash 弱密码的强单向散列,hash,cryptography,aes,bcrypt,scrypt,Hash,Cryptography,Aes,Bcrypt,Scrypt,我正在寻找一个强大的单向散列函数,它可以加密(实际上)弱密码(10^9个组合)。crypt功能还必须满足一些要求: 从相同的明文中删除相同的哈希。所以scrypt/bcrypt和公钥/私钥方法是不可能的(或者我可能在这里错了?) 没有AES中的共享秘密。因为相同的散列必须由不同的客户端创建 无盐 那么,可以做些什么来增加对如此小的字符空间进行暴力攻击的难度呢?我已经用多轮SHA256尝试了关键点拉伸,但我不知道需要多少轮来显著增加计算时间(我猜必须是数十亿)。 到目前为止,我唯一想到的是使用一个

我正在寻找一个强大的单向散列函数,它可以加密(实际上)弱密码(10^9个组合)。crypt功能还必须满足一些要求:

  • 从相同的明文中删除相同的哈希。所以scrypt/bcrypt和公钥/私钥方法是不可能的(或者我可能在这里错了?)

  • 没有AES中的共享秘密。因为相同的散列必须由不同的客户端创建

  • 无盐

  • 那么,可以做些什么来增加对如此小的字符空间进行暴力攻击的难度呢?我已经用多轮SHA256尝试了关键点拉伸,但我不知道需要多少轮来显著增加计算时间(我猜必须是数十亿)。 到目前为止,我唯一想到的是使用一个服务器端的密码,它会添加到密码中。但在腐败的情况下,很难保证这个秘密仍然是一个秘密。。。 我很乐意得到一些提示或想法! 当做
    r0cks

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


    scrypt、bcrypt和PBKDF2都是确定性的基于密码的密钥派生函数(pbkdf)。只要盐保持不变,它们就会为相同的输入重现相同的结果。(部分)salt可能是服务器端机密。但是,如果salt被暴露,那么如果密码很弱,这些函数将不会有多大帮助。

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

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

    另一端的单向散列将保护ID,即使代码和数据库被盗。即使使用静态salt,BCrypt/PBKDF2散列也会减慢暴力强制,尽管静态salt允许构建一个彩虹表来同时获取所有散列


    使用BCrypt并随后使用服务器端机密加密哈希可能是您的最佳选择,尽管在不了解更多情况的情况下很难说。

    您可能会得到关于或的更好建议,但对我来说,您无法从任何地方获得额外的熵,除了运行PBKDF或BCrypt数万轮之外。为什么相同的明文必须产生相同的哈希值?你想比较一下吗?即使没有这个限制,保护弱密码几乎是不可能的,您只能使它变得更加困难。你能再解释一下你的意图吗?我想用上面提到的散列作为键来识别数据集。为了保护隐私,这些散列应该(相当)安全。最后,数据集之间的连接不应该保留在服务器端,而应该保留在客户端。这些键是什么,它们是数据库行的ID还是要搜索的关键字?你说的隐私是什么意思?如果密钥隐藏在internet连接中,你想阻止它们在浏览器中显示吗,还是要将它们隐藏在服务器上的数据库中?在这种情况下,上下文应该无关紧要,但我想最终会涉及到服务器端的秘密。谢谢你的回答,我认为你是对的。最后,我不得不使用一些服务器端的东西来增加熵…谢谢你的回答,这很有帮助。我想对你的答案投赞成票,但我不能。没问题,只要在答案不清楚时提问,你就可以提供更多关于该场景的信息。