大多数密码散列都有一个cost参数,该参数指示算法应花费多长时间。有没有一种算法可以增加特定哈希的成本,而无需访问明文密码?

所以我在数据库中有cost = 10的现有哈希,我想将其升级为cost = 20,无法访问明文密码。

这对于PBKDF2和bcrypt来说是不可能的,因为它们在每次迭代中都使用密码。是否有支持此功能的算法?此属性有特定名称吗?

评论

对于大多数目的,您可以仅使用旧算法中的哈希密码作为新算法的输入。

#1 楼

根据
Catena的论文,这称为与客户端无关的更新。


希望能够从中计算出新的密码哈希(具有更高的安全性参数)。旧的(具有较旧和较弱的安全性参数),而不必涉及用户交互,即
而不必知道密码。我们将此功能称为独立于客户端的密码哈希更新。


Rig密码哈希采用以下术语:


与客户端无关的更新:我们的设计支持与客户端无关的更新,即服务器可以在不知道密码的情况下增加安全性参数。


本文甚至将其简称为CIU。



Battcrypt和Parallel具有CIU或易于修改以具有CIU。 。

Yescrypt似乎具有CIU。

概述:



评论


$ \ begingroup $
有趣的是,在该列中看到带有打勾的Argon2i。我想知道是否有任何语言实现了CIU功能(这是对PHP的password_ *函数的有趣补充,该函数现在包括Argon2i支持)。
$ \ endgroup $
–IMSoP
17年5月5日在20:50

$ \ begingroup $
使用Argon2进行此操作的建议方法是简单地使用以前的哈希作为密码来重新哈希。
$ \ endgroup $
–弗兰克·丹尼斯(Frank Denis)
17年5月5日在23:36

$ \ begingroup $
Argon2本机不支持CIU。 Argon2的实现将不得不跳过与PBKDF2相同的障碍,并使用bcrypt来提供这种功能。我使用Konscious .Net库进行了确认。我用Argon2d对字符串进行了两次哈希处理。相同的输入,除了#1使用4次迭代,而#2使用10次迭代。接下来,我使用6次迭代对#1的输出进行哈希处理。 4 + 6哈希不等于10哈希。 (CIU在尝试独立的内存大小和并行性升级时也失败了。)
$ \ endgroup $
–格兰奇
18年1月3日在20:54



#2 楼

天真的,我会说:您不能只将两个操作串联吗?如果您在现有哈希中添加第二个哈希运算,其成本为10,那么总成本为20吗?它们的成本为10的h1(CP)哈希,是否也可以计算成本为10的H2P = h2(H1P)= h2(h1(CP)),以获得总成本20?最终甚至使用相同的函数(所以h1 = h2)?

评论


$ \ begingroup $
通常,这是行不通的,因为密码散列不只是舍入功能。例如,如果有最后一个步骤,例如$ h(last \ _output,some \ _constant)$则会破坏该步骤。另外,如果某些输入实际上取决于总回合数,则这也意味着您根本无法重用旧的哈希。
$ \ endgroup $
– tylo
17-12-5在13:45



$ \ begingroup $
我不是在讨论round函数,而是首先要讨论从密码生成哈希的整个过程。如果您有密码,则可以使用一个函数将其转换为存储的哈希,对吗?它包括回合,但不包括回合,但最终,您会得到存储的东西。再次应用整个功能(最终添加相同的盐),就好像先前的结果是新密码一样。实际上很基本。
$ \ endgroup $
–entrop-x
17年5月5日在15:43

$ \ begingroup $
但是,如果有明确的成本因素作为函数的输入,那就不一样了。对于输入$ x $和成本因子$ y $,我们将其称为$ h(x,y)$。然后我们得到$ h(x,20)$不等于$ h(h(x,10),10)$。这是在问题中提出的,它要求一种从$ h(x,10)$变为$ h(x,20)$的方法。当然也应该有盐,但是我们可以将其视为输入$ x $的一部分。
$ \ endgroup $
– tylo
17-12-5'16:47



$ \ begingroup $
通常,不会得到相同的结果。但是有趣的问题是使用$ h(h(x,10),10)$作为一种替代格式,其成本大约等于$ h(x,20)$。您可以在访问密码时(即用户登录时)将其更新为正确的格式。
$ \ endgroup $
–ilkkachu
17-12-5在19:08



$ \ begingroup $
@ikkachu:是的,那是我的主意:您陷入了散列密码数据库的困境,并且您想以某种方式找到一种使算法变得更困难的方法,该怎么办?我已经以这种方式阅读了这个问题。当然,设计一个具有可修改硬度的系统会更好,但是,如果您已经拥有给定的硬度太低的设置,那么现在您只需要密码哈希即可做什么?
$ \ endgroup $
–entrop-x
17年5月5日在19:27