【问题标题】:adding salt into password before storing it into database在将密码存储到数据库之前将盐添加到密码中
【发布时间】:2021-03-18 11:28:39
【问题描述】:

通过使用盐,我知道密码会在存储到数据库之前添加一个随机生成的盐。 但是,我不太确定每个密码的盐是唯一的还是所有密码都只是混合了相同的“随机生成”盐

例如, 在我的应用程序下,有两个用户和两个密码:user1password1 和 user2password2 他们的密码肯定会和盐混在一起。但是,在存储到数据库之前,结果是 user1password1 + salt , user2password2 + salt 要么 user1password1 + salt1 , user2password2 + salt2

【问题讨论】:

  • 每个密码都有自己的随机盐,请参阅here 尤其是常见错误部分。也没有必要找到自己的实现,有经过验证的解决方案,例如Argon2.

标签: cryptography salt


【解决方案1】:

理想情况下,您的 salt 应该是每个用户唯一或每个密码。

现在,正如您在将密码存储在数据库中之前所说的那样,you should hash them with a password-based KDF,例如Argon2。 (Not with a hash function.)

使用单一盐

一个主要问题如果您对所有密码使用相同的盐:它会降低攻击您的数据库的成本,因为对手 Eve 可以获取“common”的字典密码”让我们称之为“rockyou.txt”,只要她使用该盐尝试破解您的某些用户的密码,就足以尝试对 rockyou.txt 中包含的所有密码进行哈希处理。

基本上,这意味着在您的数据库中查找多个哈希的前映像的工作因素很低。

使用不同的随机盐

而为每个用户(甚至密码数据库中的每个条目)使用不同的盐意味着 Eve 必须重新进行计算,在该计算中她尝试对 rockyou.txt 字典中的所有单词进行散列以尝试找到数据库中单个哈希的前映像。

所以这里的工作因数很大,因为它必须为每个密码哈希重新计算。

因此,如果您可以存储一个大的(理想情况下为 128 位或更多,但 64 位就可以了——存储是一个问题)每个密码的随机盐,请这样做并确保您从不存储明文密码,但是只有他们的哈希值。

【讨论】:

  • OP 可能根本不知道密码哈希,至少问题表明了这一点。
猜你喜欢
  • 2011-04-28
  • 2011-04-26
  • 2012-04-07
  • 2016-03-05
  • 2017-01-22
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多