什么是最好的盐腌和储存方式?

时间:2009-11-18 01:24:37

标签: security encryption cryptography passwords

大家好,我已经读过有关密码腌制的信息,但这听起来有点奇怪。但是我如何储存和保护盐。例如,在多轮胎架构中,我说使用客户端机器的GUID生成我的盐然后用户被限制在一台机器上,但如果我使用随机盐,它必须存储在某处。几天后我看到了一个示例应用程序,每当创建一个新用户时,在客户端系统上生成散列和盐,然后将盐渍密码和散列传输到存储在SQL服务器中的服务器。但是,如果我遵循此方法并且数据库被泄露,则每个密码的密码和salt值将可供X人使用。那么,我应该再次加密/加密密码并在服务器端接收盐吗?腌制的最佳做法是什么?

2 个答案:

答案 0 :(得分:22)

将未加密的盐存储在散列密码旁边的数据库中不是问题。

盐的目的不是秘密。它的目的是为每个哈希(即随机)保持不同,并且足够长,以便在攻击者获取数据库时无法使用rainbow tables

请参阅Thomas Ptacek关于此主题的excellent post

编辑@ZJR :即使盐是完全公开的,它们仍然会破坏彩虹表的好处。当你有一个salt和散列数据时,你可以做的最好的事情就是强力(假设散列函数是加密安全的)

编辑@ n10i :请参阅维基百科文章secure hash function。至于盐的大小,流行的bcrypt。gensalt()实现使用128位。

答案 1 :(得分:6)

请花点时间阅读有关盐和散列的非常好的描述

Salt Generation and open source software