Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 加密存储在数据库中的用户名是否有益?_Database_Security_Database Design_Language Agnostic_Login - Fatal编程技术网

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

Database 加密存储在数据库中的用户名是否有益?,database,security,database-design,language-agnostic,login,Database,Security,Database Design,Language Agnostic,Login,上的第一个已接受答案建议在DB中加密用户标识符 好的一点是,如果任何人获得密码,他必须知道如何解密用户登录以获得完整的登录/密码对 我看到了一些缺点,例如: 每次要显示用户登录时,都必须对其进行解密 如果要在用户登录时执行“以开头”搜索以查找用户,则不能简单地使用“…%”之类的 登录字段上的订购人可能也很难 您有什么建议(是否加密用户标识符)?加密被认为是一种比消息摘要功能更小的秘密存储形式。事实上,存储加密密码显然违反了安全规则 但是为什么不散列用户名呢?登录时,应用程序将具有纯文本。根据

上的第一个已接受答案建议在DB中加密用户标识符

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

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

  • 每次要显示用户登录时,都必须对其进行解密
  • 如果要在用户登录时执行“以开头”搜索以查找用户,则不能简单地使用“…%”之类的
  • 登录字段上的订购人可能也很难

您有什么建议(是否加密用户标识符)?

加密被认为是一种比消息摘要功能更小的秘密存储形式。事实上,存储加密密码显然违反了安全规则

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

也就是说,如果您有每个用户名的纯文本列表,那么对任何恢复的哈希执行字典攻击将是微不足道的。此外,创建更多的用户名并不难猜,通常情况下,用户会选择愚蠢的鸟名或像国际象棋这样的愚蠢游戏,以便于记忆。

与往常一样,答案是“视情况而定”

一般来说,我会说,如果攻击者能够访问您的数据库,您的安全状况将受到严重威胁,加密密码可能对您没有好处。这与使用单向散列不同——有权访问您的数据库的攻击者也有权访问您的解密密钥,而根据定义,单向散列是单向的

正如您已经说过的,您可能需要定期访问用户ID(特别是如果您使用电子邮件地址作为用户ID);在这种情况下,能够读取数据库的攻击者很可能会截获未加密的数据

因此,如果您在银行、政府或任何其他必须将数据安全放在首位的地方工作,这种额外的保护可能是值得的,特别是如果您有一个强大的密钥管理系统


对于其他用途,我认为额外的安全性太小,不值得额外的痛苦。 这个答案还谈到了一轮未加盐的SHA-1密码。有趣的是,正如你所注意到的,显示用户标识符变得不可能了。简单的用户管理后端可能很难使用。然后,如果您需要显示/存储其他内容(如名字、姓氏),猜测用户标识符可能会变得很容易。深入防御,计划失败。完全同意——但你必须现实地权衡安全性、可用性和成本。散列密码是一种常见的做法,可与许多身份验证/授权模块一起使用。加密用户ID不是常见的做法,需要大量额外的代码(和成本),而且额外的复杂性可能不值得,除非您正在处理极其敏感的数据(这意味着您,Sony&Steam)。当前将电子邮件地址用作用户ID的趋势使这一点更加有趣。因为很多人会使用他们的电子邮件密码作为你网站的密码。如果你的网站遭到破坏,他们的电子邮件帐户也会遭到破坏。
有可能访问你数据库的攻击者也有权访问你的解密密钥
-仅供参考-你可以用一种连你自己都不知道解密密钥的方式编写你的代码。例如:使用用户名作为解密密钥。-登录时,您知道电子邮件,因此您可以解密它并找到用户。然后,将其保存在会话中,以便进行所有其他解密。唯一的缺点是用户以后无法更改用户名。