Database 在数据库中存储加密的用户名哈希

Database 在数据库中存储加密的用户名哈希,database,security,Database,Security,我目前正在为我正在组装的一个应用程序进行基本的用户身份验证,但我在安全方面没有太多经验 这就是说,我理解在数据库中以blob形式存储(加密的)密码散列的做法(和必要性),而不是密码(加密的或不加密的)。我已经实现了这个 与明文(或加密)用户名相比,对用户名进行盐析/散列并将散列存储在数据库中是否有什么好处?我觉得这会使确定哪些用户可以使用数据库访问系统进行身份验证变得更加困难 既然让某人很难破解用户帐户的密码是至关重要的,那么增加确定哪些用户可行的难度难道不是很有意义吗 编辑:我使用的某些语言可

我目前正在为我正在组装的一个应用程序进行基本的用户身份验证,但我在安全方面没有太多经验

这就是说,我理解在数据库中以blob形式存储(加密的)密码散列的做法(和必要性),而不是密码(加密的或不加密的)。我已经实现了这个

与明文(或加密)用户名相比,对用户名进行盐析/散列并将散列存储在数据库中是否有什么好处?我觉得这会使确定哪些用户可以使用数据库访问系统进行身份验证变得更加困难

既然让某人很难破解用户帐户的密码是至关重要的,那么增加确定哪些用户可行的难度难道不是很有意义吗

编辑:我使用的某些语言可能不是100%正确的:请随意更正:-)

Edit2:我改变了我的第一个观点,以表示盐碱哈希法——感谢大家指出我错过了这个:-)


Edit3:删除了表示我正在加密/解密密码的措辞。我使用的是咸哈希,并将其存储在数据库中——感谢Scotty指出这一点。

将密码存储在纯文本中对您的用户不太公平,因为访问您数据库的每个人都可以看到他们的密码。你应该用盐腌的土豆条


简短回答:很可能是否定的

详细回答:您的情况似乎缺少“我的用户名之所以敏感是因为…”这一关键,这就提出了一个问题:“为什么?保护用户名可以解决什么具体、明显的问题?”

如果没有这个问题,您所描述的是与安全相关的开发(实际上是作为一个整体的开发)中的一个常见陷阱:提出一些想法来保护或混淆系统的某些部分,然后寻找使用它的原因。与软件开发中的任何事情一样,在出现只有使用特定工具才能解决的明确问题之前,您应该避免做除所需之外的任何事情


额外提示(免费!):。简单的旧散列是不可能的。

孤立地查看系统的单个部分,永远无法正确地评估系统的安全性。你在哪里存储解密密码的密钥

有权访问数据库的人是否也有权访问您存储EncOption密钥的位置?如果是这样的话,那么通过加密密码,您在安全性方面只获得了一点小小的改进,而通过加密用户名,您可能不会获得更多的改进


如果解密密钥和使用它的程序比数据库更安全(这是非常不寻常的,通常数据库处于最安全的位置),那么加密用户名可能会带来额外的好处,因为在暴力攻击中,您会剥夺攻击者的有用信息。

可能不会。这样想吧——用户名是应用程序确定用户试图登录哪个帐户的方式。密码是应用程序判断用户是否被允许作为该帐户登录的方式。实际上,这意味着您将使用用户名作为索引在accounts表中查找一行。通过对用户名进行加密,只会使查找正确的行变得更加困难

但是,如果您使用相同的加密方案来加密用户名和密码,它们的安全性几乎是相同的——如果您可以破坏其中一个,那么您可以破坏另一个。因此,对两者进行加密会使查找用户变得更加困难,但不会增加任何额外的安全性


注意:在您的问题中,您谈到了解密密码字段。你可能想让这变得不可能(字面上)。大多数人使用某种单向散列函数(MD5和SHA256很流行)以及salt加密密码。“单向”部分仅仅意味着,一旦你通过函数运行了一些东西,你就不能使用你得到的东西来获得你开始使用的东西。但是,如果您从相同的输入开始,您将始终获得相同的输出。salt是一个只有您的应用程序知道的秘密(有点像加密密钥),在通过单向散列运行之前,它会被添加到您正在加密的内容中。这样就不可能对来自两个不同站点的两个加密密码进行匹配(假设它们使用不同的密码)。

如果对用户名进行了加密和哈希处理,则会给自己带来一点鸡和蛋的问题


如果对用户名进行salt和hash运算,您将如何在数据库中找到它?您需要查找用户记录以查找用于对用户名进行哈希运算的salt…

这取决于上下文 评估所提供材料的敏感性非常重要。为了更深入地挖掘,我将提供几个用例

场景1:社交网络应用程序

用户的所有交互都是在公共场所进行的。他们的电子邮件地址将用作用户名。该用户名不被认为是私有的,因为他们的名字出现在所有帖子中。其他用户可以搜索用户名和/或启用电子邮件邀请

判定-哈希=错误

场景2:电子商务网站

用户可能参与也可能不参与公共互动(如评论、评论)。使用电子邮件地址作为用户名可能是个坏主意,因为通过使用密码恢复,受损的电子邮件帐户意味着站点上的受损用户帐户

这里有很多灰色区域,通常是为了“方便”而利用的。如果你的网站使用电子邮件作为用户名、存储发货历史和信用卡号码;一封泄露的电子邮件可能意味着大量的身份信息