盐的最佳储存和保存方式是什么?

13

我读过有关密码加盐的文章,但这听起来可能有点奇怪。但是如何存储和保护盐呢?例如,在多层架构中,如果我使用客户端机器的GUID来生成盐,则用户将被限制在单台计算机上,但如果我使用随机盐,则必须将其存储在某个地方。几天前,我看到一个示例应用程序,在创建新用户时,哈希值和盐是在客户端系统上生成的,然后盐化密码和哈希值会传输到服务器上,在那里它们存储在SQL服务器中。但是,如果我遵循此方法并且数据库受到攻击,则每个密码的盐值和密码将对X人员可用。因此,我是否应该再次在服务器端对密码和接收到的盐进行加盐/加密?加盐的最佳实践是什么?

2个回答

23
将盐不加密地存储在散列密码旁边的数据库中并不是问题。
盐的目的不是保密,而是为每个哈希(即随机)提供差异,并且足够长以防止攻击者获取数据库时使用彩虹表
请参阅Thomas Ptacek发表的优秀文章
编辑@ ZJR:即使盐完全公开,它们仍然可以打败彩虹表的好处。当您拥有盐和哈希数据时,您可以尝试最好的方法是暴力破解(前提是哈希函数是加密安全的)
编辑@n10i:请参阅维基百科文章安全哈希函数。至于盐的大小,流行的bcrypt.gensalt()实现使用128位。

我认为盐的目的也不是要公开。 - ZJR
请问您能否解释一下“哈希函数是具有密码学安全性的”这句话?很抱歉我对密码学还不太了解。另外,在您的回复中提到“足够长以打败彩虹表的使用”,盐应该有多长才能算足够长呢? - Neel

7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接