第一个& this question about passwords management上接受的答案建议加密DB中的用户标识符。
好处是,如果有人获得密码,他必须知道如何解密用户登录以获得完整的登录/密码对。
我看到的一些缺点,例如:
LIKE '...%'
ORDER BY
也可能非常困难...... 您会建议什么(加密用户标识符)?
答案 0 :(得分:7)
像往常一样,答案是“它取决于”。
一般情况下,我会说如果攻击者可以访问您的数据库,那么您的安全状况就会受到严重影响,加密密码可能对您没有好处。这与使用单向散列不同 - 有可能访问您数据库的攻击者也可以访问您的解密密钥,而根据定义,单向散列是单向散列。
正如您所说,您可能需要定期访问用户ID(例如,如果您使用电子邮件地址作为用户ID);在这种情况下,再一次,可以读取数据库的攻击者可能会拦截未加密的数据。
因此,如果您在银行,政府或数据安全必须位于列表顶部的任何其他地方工作,这种额外的保护可能是值得的,特别是如果您拥有强大的密钥管理系统。
对于其他用途,我认为额外的安全性太小,不值得额外的痛苦。
答案 1 :(得分:3)
加密被认为是比消息摘要功能更少的秘密存储形式。实际上,存储加密密码显然违反了CWE-257。
但为什么不勾选用户名?登录时,应用程序将具有纯文本。根据您的应用程序,您可能不需要显示用户列表。这将是一个额外的安全层,因为在攻击者可以登录之前必须打破两个哈希值。
话虽这么说,如果你有一个每个用户名的纯文本列表,对任何恢复的哈希执行字典攻击都是微不足道的。更多的用户名不是难以猜测的,通常用户选择愚蠢的鸟类名称或像国际象棋这样的愚蠢游戏,以便它们易于记忆。