BCrypt哈希通常以一些重复符号开头。
让我们举例说,我们看到$2a$10
是我们哈希的开头。每个BCrypt哈希都有类似的东西。
$
是分隔符
2a
在这种情况下是版本
10
是10次方的迭代次数
我的问题是 - 为什么这些信息在哈希?
没有特别需要此信息的dehashing算法,当人们登录时,他们生成相同的版本并使用相同的版本和相同的迭代次数,然后将结果与存储在数据库中的结果进行比较。这意味着算法没有构建比较获取has的函数,并且基于此信息(版本和迭代)哈希密码进行比较。
然后......为什么这个信息被放弃了?谁使用这些信息?
我的猜测是,如果版本已经改变或者我们的程序或其他什么会知道迭代次数,但是......为什么?我的意思是算法必须只配置一次,如果需要更改,那么公司的工作就是做出适当的安排,以便它知道使用的版本和现在使用的版本。为什么记住迭代的版本和数量是哈希的工作?
哈希每周左右都会泄露,有了这些信息,有人可以轻松设置他的BCrypt并使用相同的版本和迭代配置运行...但是如果这些信息在哈希中不可见哈希被公之于众......那么如何制作自己的BCrypt版本并开始比较?
不提供这些信息更安全,以便如果单独的哈希被泄露,没有人会知道使用了什么配置来制作它?
答案 0 :(得分:1)
它使bcrypt向前和向后兼容。
例如,bcrypt哈希不以2a
开头。
他们从:
开始$2$
$2a
$2x$
$2y$
$2b$
您需要知道自己正在阅读的版本,以便正确处理。
此外,您需要知道迭代次数。
10
为什么要存储版本和迭代?因为你必须这样做。
此外,它也很棒。在过去,人们过去只是存储哈希,而且很糟糕。
BCrypt,SCrypt和Argon2使用非常聪明的想法为你做所有那些笨拙的工作,让你只需要调用一个函数,而不会以任何方式削弱系统的安全性。
答案 1 :(得分:0)
你试图通过默默无闻来宣传安全。停止,它不起作用。
在数据中没有详细信息并不罕见,在this old hack中,黑客提到它是SHA1。这很容易 - 攻击者和研究人员也将获取泄露的数据列表,并使用一小部分常用密码(例如phpbb list from SkullSecurity)尝试各种常见算法和交互/工作因子计数。 ;当他们发现不可避免的破解可怕的密码时,他们会知道他们找到了算法并打破了全面破解。
存储算法意味着您可以逐渐从旧的过渡到新的,并在个体用户进入时升级,并且在一个用户中使用多个变体 - 包括过渡类型
拥有迭代计数意味着,就像上面的过渡一样,您可以随着时间的推移增加它,并为登录时设置的不同用户设置不同的计数。