Security 我的密码应该有多大?

Security 我的密码应该有多大?,security,database-design,password-hash,Security,Database Design,Password Hash,可能重复: 我有一个如下所示的数据库: 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 ) 这是使用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
)

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

我有几点意见:

  • 盐应该是随机的,每个用户都是唯一的,但它们是不同的。salt的想法只是让散列摘要对每个用户都是唯一的,以抵抗字典攻击和彩虹表攻击。不管salt的长度如何,salt都不会增加哈希摘要算法的强度

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

  • 如果你想要更强的密码,考虑使用或.
  • FWIW,一个SHA-512哈希摘要(编码为十六进制数字)总是正好是128个字符,而不管输入的长度如何。所以我用CHAR(128)代替VARCHAR(128)。使用二元(2)或二元(3)作为盐


对盐进行散列不会增加安全性。重要的是salt值的总数以及它们是否具有统一的分布。SHA-512生成512位(64字节)的值。如果你有一个好的随机数,你不需要散列它。为盐使用512位将提供很好的保护,但您可能会发现即使64位也足够了。@outis
password=sha512(原始密码+sha512(介于0和10亿之间的随机数)
@Jonathan Leffler:赢了太多了!在普通哈希上使用
bcrypt
PBKDF2
的优势是最重要的,因为它可以减缓暴力攻击。盐的随机性并不是特别重要,因为正如比尔所说的,它最重要的特性是唯一性,对于这一点,128位就足够了。