有许多操作系统和程序会使用密码进行身份验证。 即使他们可以用许多不同的方式加密密码并保存密码 为什么他们保存他们的哈希? 加密它们的问题唯一的原因可能是破坏和解密它们还是有其他原因? 感谢您提前回答
答案 0 :(得分:6)
用户凭据(≈passwords)是存储在应用程序中的最有价值的资产之一。它们是攻击者的主要目标,作为开发人员,您希望尽可能地保护他们。
深度防御(和常识)的原则表明,你可以放置更多的保护层,它会越安全。正如您所提到的,哈希密码的目的是即使存在违规行为,攻击者仍然无法获得实际的用户凭据。
加密问题始终是密钥管理。如果密码以加密方式存储,则需要对密码进行解密(或使用相同密钥加密的接收密码)才能验证密码。为此,应用程序需要访问密钥。但这否定了加密的目的,攻击者也可以在发生破坏时访问密钥。 (公钥加密可能会使其更加困难,但基本上相同的密钥管理问题仍然存在。)
因此,简而言之,只使用足够慢以防止暴力攻击(如PBKDF2或Bcrypt)的算法存储盐渍哈希是最简单和最安全的。 (还要注意,普通的盐渍哈希已经不够了。)
答案 1 :(得分:0)
考虑需要:您定义新密码,然后每次登录时对输入的密码进行哈希处理并根据存储的值进行检查。这是处理此问题的最简单,最安全的策略(因为没有人能够从存储的值重新构造您的密码)。此外,假设您在多个系统中使用相同的密码。如果Windows能够(无论有多难)从Windows系统中存储的内容重新构建密码,那么(很多)人会指责微软在其他系统上的安全漏洞(可能会导致法律诉讼)。
总结,简单和商业逻辑方法。
答案 2 :(得分:0)
嗯,实际上它是出于安全性的原因。
Hash functions通常不是可恢复的,所以即使有人发现了哈希值,他也很难找到生成该哈希值的密码。
显然,您可以尝试使用字典攻击或强力攻击,尝试找出生成哈希的密码,但这可能需要很长时间。
考虑您拥有一个包含用户的数据库及其 passowrd ,请注意很多人在任何地方都使用相同的密码。
现在想象一下,如果一个破解者设法破解你的数据库并发现所有密码写得清楚。那将是一场灾难。