【问题标题】:How large should my password salt be? [duplicate]我的密码盐应该有多大? [复制]
【发布时间】:2011-11-18 06:57:27
【问题描述】:

可能重复:
What is the optimal length for user password salt?

我有一个如下数据库:

create table user (id int primary key auto increment,
     username varchar(64),
     password varchar(128), # sha512 hash of password
     password_salt varchar(128) # sha512 hash of a random number used as salt
)

这是用盐确保密码安全的好主意吗?盐应该放多长时间?我认为拥有 128 位 (SHA-512) 盐不会有什么坏处,但我以前错了。

【问题讨论】:

  • 散列盐不会增加安全性。重要的是盐值的总数,并且它们具有均匀分布。
  • SHA-512 生成一个 512 位(64 字节)的值。如果你有一个好的随机数,你不需要散列它。为 salt 使用 512 位将提供良好的保护,但您可能会发现即使是 64 位也足够了。
  • @outis password = sha512(raw_password + sha512(random_number_between_zero_and_a_billion()))
  • @Jonathan Leffler:为了胜利而矫枉过正!

标签: security database-design password-hash


【解决方案1】:

我有几个 cmets:

  • 每个用户的盐应该是随机且唯一的,但它们是don't have to be a hash digest。盐的想法只是使每个用户的哈希摘要唯一,以抵抗字典攻击和彩虹表攻击。无论盐的长度如何,盐都不会增加哈希摘要算法的强度。

  • DES 使用 12 位作为盐。更新的 UNIX 密码系统使用更多,最多 128 位。

  • 如果您想要更强的密码,请考虑使用bcryptPBKDF2

  • FWIW,SHA-512 哈希摘要(编码为十六进制数字)总是正好 128 个字符,无论输入的长度如何。所以我会使用 CHAR(128) 而不是 VARCHAR(128)。使用 BINARY(2) 或 BINARY(3) 作为盐。

【讨论】:

  • 使用bcryptPBKDF2 在普通哈希上的优势是最重要的,因为它可以减缓蛮力攻击。盐的随机性并不是很重要,因为正如比尔所说,它最重要的属性是唯一性,对于那个 128 位来说已经足够了。
猜你喜欢
  • 1970-01-01
  • 2013-07-05
  • 2011-01-03
  • 2012-05-28
  • 2011-04-29
  • 2014-01-05
  • 2012-09-25
  • 2012-11-07
  • 2012-08-18
相关资源
最近更新 更多