散列和盐渍密码如何使应用程序安全?

时间:2009-03-30 09:56:28

标签: security passwords

据我所知,保密密码是一个好主意,因为他可以尝试使用相同的密码来接收用户的电子邮件并登录他的邮箱(因为许多用户到处使用相同的密码)

除此之外,我没有看到重点。我知道这会使字典攻击变得更加困难但是......如果有人未经许可进入数据库,那么担心密码是否为时已晚?这家伙现在可以访问数据库中的所有表格,并且可以获取所有数据并做任何他想做的事情。

或者我错过了什么?

11 个答案:

答案 0 :(得分:8)

更大的问题是people tend to use the same password everywhere。因此,如果您获得了一个用户名和未加密码的密码数据库,那么他们可能会在其他地方工作,例如hotmail,gmail等。

答案 1 :(得分:6)

这家伙可能会做他/她想要你的系统的所有事情,但是你不应该允许他/她对其他系统做任何事情 (通过使用用户的密码)。

密码是您用户的财产。你应该安全地保管它。

答案 2 :(得分:6)

您的许多用户在您的网站上使用与其银行相同的凭据(用户名/密码)。如果有人可以获得凭证表,他们可以立即访问一堆银行账户。失败。

如果您实际上没有存储密码,那么攻击者只需抓住凭据表就无法窃取用户的银行帐户。

答案 3 :(得分:6)

它依赖于哈希是单向函数的事实。换句话说,它很容易将密码转换为哈希,但很难做到相反。

因此,当用户注册时,您将他们选择的密码转换为哈希并存储它。稍后他们使用他们的密码登录,然后将密码转换为其哈希并对其进行比较,这是因为,如果(passwordhashA == passwordhashB)则为高水平的概率,则passwordA = passwordB。

Salting是解决相关问题的方法。如果您知道某人的密码是,例如ABCDEF,那么您可以尝试计算所有可能密码的哈希值。迟早你可能会发现哈希('狗')= ABCDEF,所以你知道他们的密码。这需要很长时间,但是可以通过使用预先创建的“词典”来加速该过程,其中,对于给定的哈希,您可以查找相应的密码。然而,腌制意味着被散列的文本不是简单的英语单词,或简单的单词组合。例如,我在上面给出的案例中,将被散列的文本不是'dog',而是'somecrazymadeuptextdog'。这意味着任何随时可用的字典都是无用的,因为它包含该文本的散列的可能性比它包含'dog'的散列的可能性要小得多。如果salt是随机的字母数字字符串,则这种可能性会变得更低

答案 4 :(得分:5)

本文深入探讨了散列和腌制密码的积极方面:

http://www.developerfusion.com/article/4679/you-want-salt-with-that/

答案 5 :(得分:4)

网站管理员可能不是唯一可以访问您密码的人。总是有可能意外地将整个数据库转储到公共共享上。在这种情况下,世界上每个拥有互联网访问权限的人都可以下载并阅读密码,这些密码非常方便地以明文形式存储。

是的,这已经发生了。还有信用卡数据。

是的,极有可能会再次发生。

答案 6 :(得分:3)

“如果有人未经许可进入数据库,担心密码是否为时已晚?”

您假设数据库设计不佳,其中授权数据与应用程序数据混合在一起。

“关注点分离”原则和“最少访问”原则建议用户凭证应与其他所有凭据分开。

例如,将您的用户凭据保存在LDAP服务器中。

此外,您的问题假定数据库凭据是唯一凭据。同样,最少访问原则表明您拥有与数据库凭据分开的应用程序凭据。

您的网络应用程序用户名和密码不是数据库用户名和密码。同样适用于桌面应用程序。应用程序身份验证可能不一定是数据库身份验证。

此外,良好的安全性表明对用户名和密码的访问与应用程序数据分开。在拥有大量数据库用户的大型组织中,一名管理员应该是“安全官”并处理身份验证和授权。没有其他用户可以修改授权,安全人员无权访问应用程序数据。

快速审核以确保安全人员永远不会访问数据。这有点复杂,但另一个审计可以确定数据授权的人是真人,而不是安全人员的别名。

散列密码是工作安全策略的一部分。

答案 7 :(得分:2)

当然,存储密码而不是纯文本不会使您的应用程序安全。但这是一项提高安全性的措施。正如你所提到的,如果你的服务器是由这个措施组成的,那么这个措施不会为你节省,但它会限制你的伤害。

链只有最薄弱的链接

哈希密码只是加强链的一个链接。所以你必须做更多的事情。

答案 8 :(得分:2)

除了关于盐渍的说法之外,还有另一个解决问题的方法:

如果你到处使用相同的盐(或根本没有盐),可以说只需查看数据库,用户foo和用户栏都有相同的密码(即使你不知道密码是什么)是)。

然后,如果一个人获得了foo的密码(例如使用社交工程),那么bar的密码也是已知的。

此外,如果盐到处都是相同的,可以建立一个专用于这种特定盐的字典,然后使用这个“盐渍”字典进行暴力攻击。

答案 9 :(得分:1)

这可能有点偏离主题,但偶尔会发现一些网站没有使用散列(例如,当我点击忘记密码按钮时,他们以明文形式发送我的密码而不是让我选择另一个)。

我通常只是取消订阅,因为我认为我不相信那些没有采用散列密码的基本预防措施的人设计的网站。

这是腌制的另一个原因:)

答案 10 :(得分:0)

人们似乎对此过于自满!威胁不是那些有shell访问你的系统或备份媒体的人,它可能是任何可以看到你网站的未受保护(但动态)部分的脚本小子(*)和一个被忽视的SQL注入威胁。一个查询突然他可以作为任何用户登录,甚至可以作为管理员登录。哈希密码使得攻击者可以使用他们的密码以任何特定用户登录的可能性大大降低 - 或者用他们自己的密码更新记录。

(*)“unprotected”包括可以作为自注册用户访问的站点的任何部分。例如,与银行网站相比,您必须拥有现有的银行帐户才能访问该网站的大部分内容。攻击者仍然可以开设一个银行账户来访问该网站,但是当他试图破解该系统时,发送更大枪支的大家伙会更容易。