【发布时间】:2010-11-16 05:38:13
【问题描述】:
在为数据库存储散列密码时,我总是使用正确的每个条目的盐字符串。根据我的需要,将盐存储在散列密码旁边的数据库中始终可以正常工作。
但是,有些人建议将盐与数据库分开存储。他们的论点是,如果数据库被入侵,攻击者仍然可以构建一个彩虹表,考虑到一个特定的盐字符串,以便一次破解一个帐户。如果这个帐号有管理员权限,那么他可能甚至不需要破解任何其他人。
从安全角度来看,将盐存放在不同的地方是否值得?考虑在同一台机器上具有服务器代码和数据库的 Web 应用程序。如果盐存储在该机器上的平面文件中,那么如果数据库被破坏,盐文件也将被破坏。
有没有推荐的解决方案?
【问题讨论】:
-
如果有一个地方可以存储攻击者无法获取的盐,那么你也应该在那里存储密码。但是为什么不为每个密码使用不同的盐呢?
-
他对每个密码都使用了不同的盐,jrockway。
-
你的盐有多大?您的盐应该足够大(32 位?),几乎不可能为它预先计算彩虹表。
-
@emddudley 这些天我一直习惯于使用 64 位整数作为盐,但我没有理由不能让它们更长。
-
PWDTK 的作者sourceforge.net/projects/pwdtknet,老实说,我不会担心,我只会将盐存储在与密码相同的数据库中。无论如何,您应该始终假设攻击者知道盐,因此您的重点应该是使用 LARGE CRYPTO-RANDOM salt 并执行足够的密钥拉伸(PBKDF2 中的迭代),以便为一种已知的盐制作一个彩虹表是不可行的。老实说,您试图通过将盐放在其他地方来实现的是“默默无闻的安全性”,当您看到另一台服务器可能出现故障时,通常没有任何好处。
标签: security authentication hash cryptography salt