security - 安全密码哈希,salt值的哈希和存储

  显示原文与译文双语对照的内容

假设你自由地决定如何将哈希密码存储在DBMS中。 这种方案有明显的弱点?

要创建存储在DBMS中的哈希值,请执行以下操作:

  • 作为salt的一部分,对DBMS服务器实例唯一的值,
  • 用户名是salt的第二部分
  • 并创建salt与实际密码的连接,
  • 使用 SHA-256 算法对整个字符串进行哈希运算,
  • 并将结果存储在数据库中。

这意味着任何想要碰撞的人都必须分别对每个用户名和每个DBMS服务器实例进行分别操作。 为了允许使用新的标准散列算法,我打算保持实际的散列机制有些灵活,这仍然是在我们的工作中。

'。对DBMS服务器实例唯一的值'不需要保密- 尽管它不会被随便泄露。 目的是确保在不同的DBMS服务器实例中使用相同的密码,记录的散列将是不同的。 同样,用户名不会是秘密的- 只是密码正确。

将密码首先和用户名和'唯一值'第二个或者它的他三个数据源的任何它的他置换都有优势? 或者如何交错字符串?

我需要添加( 记录) 一个随机的salt值( 每个密码) 以及上面的信息? ( 优点:用户可以使用密码,还可能得到在数据库中记录的不同散列。 缺点:盐必须被记录。 我怀疑优势远远超过了劣势。

有很多相关的问题- 这个列表不太可能是全面的:

我认为这些问题的答案支持我的算法( 如果你只是用一个随机的盐,那么'在每个服务器'而用户名组件则不重要) 中的唯一值。

时间:

salt只需要随机和唯一。 它可以自由地被称为它不帮助攻击者。 许多系统会将纯文本salt存储在被哈希密码旁边的列的数据库中。

盐有助于确保两个人的( 用户A 和用户B ) 共享相同的密码并不明显。 如果每个密码没有随机和唯一的盐,哈希值会相同,但用户B的密码必须有相同的密码。

它还有助于防止攻击,因为可以将哈希字典与已知的密码匹配。 比如 彩虹表。

同时使用"工作因素"构建的算法也意味着计算能力增加了算法创建哈希的方法。 例如 bcrypt 。 这意味着暴力攻击的经济学变得无法维护。 假设创建已经知哈希表变得更加困难,因为它们需要更长的时间创建。

我想你已经把问题复杂化了。

从问题开始:

  • 你是在保护弱密码?
  • 你是想减轻彩虹攻击?

你提出的机制保护了一个简单的虹彩攻击,即使用户A 和用户B 有相同的密码。 它看起来像是一个相当复杂的方法来解释密码过于复杂。

  • 将数据库迁移到其他服务器时会发生什么情况?
    • 如果是,可以更改唯一的,每个数据库值,如果那样,就可以生成全局虹彩表。

相反,我只添加额外的列并存储适当的随机 salt 。 这可以防止任何种类的彩虹攻击。 跨多个部署。

但是,它不会保护你抵抗暴力攻击。 因这里,如果你试图保护那些有密码的用户,你就需要在它的他地方查看。 例如如果用户有 4个字母密码,那么即使使用salt和最新的哈希算法,也可能在几秒钟内。

我认为你需要问自己"你希望通过使这些更复杂而不仅仅是生成随机盐值并存储它来获得更多的希望。"更复杂的算法,而不是意外地引入缺陷。 这可以能听起来很粗糙,但是这意味着很有帮助。

为什么不向密码和组合中添加一个随机 salt 。 接下来将哈希和salt连接到单个字节 [] 并将它的存储在数据库中?

随机salt的优点是用户可以自由更改它的用户名。 Salt不必是秘密的,因为它用来防止字典攻击。

...