加密存储在数据库中的用户名是否有益?

Fro*_*y Z 6 database language-agnostic security database-design login

关于密码管理的这个问题的第一个和接受的答案建议加密DB中的用户标识符.

好处是,如果有人获得密码,他必须知道如何解密用户登录以获得完整的登录/密码对.

我看到的一些缺点,例如:

  • 每次要显示用户登录时都必须解密用户登录
  • 如果你想用'开头'搜索用户登录来查找用户,你不能简单地使用 LIKE '...%'
  • ORDER BY 登录领域可能也很难......

你会推荐什么(加密用户标识符)?

Nev*_*uyt 7

像往常一样,答案是"它取决于".

一般来说,我会说如果攻击者可以访问您的数据库,那么您的安全状况就会严重受损,加密密码可能对您没有好处.这是使用单向散列不同 - 它可能是谁拥有你的数据库访问权限的攻击者也可以访问您的解密密钥,而单向散列,顾名思义,是一种方式.

正如您所说,您可能需要定期访问userID(例如,如果您使用电子邮件地址作为用户ID); 在这种情况下,再次,可以读取您的数据库的攻击者可能会拦截未加密的数据.

因此,如果您在银行,政府或数据安全必须位于列表顶部的任何其他地方工作,这种额外的保护可能是值得的,特别是如果您拥有强大的密钥管理系统.

对于其他用途,我认为额外的安全性太小,不值得额外的痛苦.

  • 目前使用电子邮件地址作为用户标识的趋势使这更加有趣.因为很多人会使用他们的电子邮件密码作为您网站的密码.如果您的网站遭到入侵,他们的电子邮件帐户也会遭到入侵. (2认同)

roo*_*ook 3

加密被认为是比消息摘要函数更次要的秘密存储形式。事实上,存储加密密码明显违反了CWE-257

但为什么不哈希用户名呢?登录时,应用程序将显示纯文本。根据您的应用程序,您可能不需要显示用户列表。这将增加一个安全层,因为在攻击者登录之前必须破坏两个哈希值。

话虽这么说,如果您有每个用户名的纯文本列表,那么对任何恢复的哈希执行字典攻击将是微不足道的。此外,更多的用户名并不是为了难以猜测而创建的,通常用户会选择愚蠢的鸟类名称或愚蠢的游戏(例如国际象棋),以便于记住它们。