安全的密码存储保证,用户的明文密码永远不会暴露给除用户本人外的其他人,尤其是被“脱裤”时不会暴露给攻击者。
以下是关于一些系统保存密码的总结:
1.加密存储——不可以
加密的过程是可逆的,开发者一定了解加密的方法,因此这种方法只是保证系统外部的人员无法了解密码,实际上倘若系统的加密算法泄露,那么所有的密码跟明文存储没有任何区别,此时密码的安全性等同于加密方法的安全性。
2.Hash存储——通常使用的方法,但依然有缺陷
通常是用的Hash算法包含MD5,SHA-1,SHA-256等 算法,通常明文密码经过Hash后得到的结果我们称之为摘要(digest)。相同明文密码Hash后的摘要是相同的,这也是我们验证密码的方法,因此攻击者建立一个明文密码+对应摘要的表(称之为彩虹表)暴力试验,当摘要匹配后即可得到明文密码。为了防止这种简单的撞击破解,通常在Hash前的明文密码中引入“随机因素”成为salt,这样即便是相同的明文密码的Hash结果也是不同的,在这种情况下,明文密码的安全性取决于salt的安全性。
3.专家级Hash存储——可行,但系统负担大
BCRYPT、SCRIPT、PBKDF2是专门为密码设计的Hash算法。这类算法有一个特点,算法中都有个因子,用于指明计算密码摘要所需要的资源和时间,也就是计算强度。计算强度越大,攻击者建立rainbow table越困难,以至于不可继续。也就是说,故意延长一个密码匹配的计算时间,如果一个密码匹配需要1秒钟,那么匹配1000万个密码组合就需要115天,这个开销就非常大,有效防止攻击者玻璃破解。
网友评论