【问题标题】:Where to get salt when hashing passwords?散列密码时在哪里获得盐?
【发布时间】:2021-04-21 19:57:16
【问题描述】:

我了解到我需要使用 salt,这样相同的密码就不会显示在数据库中。

但是从哪里得到盐呢?我不能全部使用一个,因为它无济于事。我可以生成一个随机的,但是每次哈希都会不同,没有人会重新登录。

所以我发现建议使用加密安全的 RNG 并将盐与用户一起存储。

但我必须为此把桌子变大。我不能使用相同的散列函数来散列用户名并将其用作密码的盐吗?它应该是密码安全的,因为我使用密码安全的哈希函数来哈希密码,对吗?

【问题讨论】:

  • 就最佳实践而言是的,就用户名的生成而言,否,但谢谢
  • 您为什么想要“从用户名”生成盐?这听起来不像是一种完全随机的盐。为什么你还要关心这个?
  • 好吧,因为如果你生成一个完全随机的盐,你必须将它存储在密码旁边,这对我来说似乎有点浪费空间,仅此而已。所以我问这是否合理或是否存在一些安全问题

标签: saltedhash


【解决方案1】:

通常您会为每个密码生成一次不同的(不一定是随机的)盐,并将其与哈希一起存储。

如果用户名是唯一的,那么从用户名生成盐就足够了。通过使用加密哈希函数生成盐,你并没有真正获得任何东西(但你也没有真正失去任何东西),均匀分布就足够了。即使只是按原样使用用户名,也可以防止相同的密码出现在数据库中,但它不会像具有更广泛分布的盐那样加强它对彩虹表攻击的抵抗力。

【讨论】:

  • 如果有可能从用户名“生成”盐,这会削弱安全性。为什么不使用完全随机的盐?
  • @NicoHaase 我不明白知道如何从用户名生成盐会削弱安全性。 OP 不想存储盐以节省空间。我同意这不是一个好的理由,但也许他真的必须在非常有限的空间内工作。
猜你喜欢
  • 1970-01-01
  • 2015-11-08
  • 2015-02-17
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
  • 2012-03-24
  • 2013-07-05
相关资源
最近更新 更多