2011-09-15 42 views
3

可能重复:
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)盐不会伤害,但我以前错了。

+0

散列盐不会增加安全性。重要的是盐值的总数,并且它们具有统一的分布。 – outis

+0

SHA-512生成一个512位(64字节)的值。如果你有一个很好的随机数,你不需要散列它。使用512位的盐将提供良好的保护,但您可能会发现即使是64位也足够了。 –

+0

@outis'password = sha512(raw_password + sha512(random_number_between_zero_and_a_billion()))' –

回答

1

我有几个意见:

  • 盐应该是每个用户的随机性和唯一的,但他们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)作为盐。

+0

使用'bcrypt'或'PBKDF2'而不是普通哈希的优点是最重要的,因为它减缓了暴力攻击。盐的随机性并不是特别重要,因为比尔说它是最重要的属性是唯一性,对于128位来说是很多的。 – CodesInChaos