过去一段时间来,众多的网站遭遇用户密码数据库泄露事件,这甚至包括顶级的互联网企业–NASDQ上市的商务社交网络Linkedin,国内诸如CSDN一类的就更多了。
层出不穷的类似事件对用户会造成巨大的影响,因为人们往往习惯在不同网站使用相同的密码,一家“暴库”,全部遭殃。
那么在选择密码存储方案时,容易掉入哪些陷阱,以及如何避免这些陷阱?我们将在实践中的一些心得体会记录于此,与大家分享。
菜鸟方案:
直接存储用户密码的明文或者将密码加密存储。
曾经有一次我在某知名网站重置密码,结果邮件中居然直接包含以前设置过的密码。我和客服咨询为什么直接将密码发送给用户,客服答曰:“减少用户步骤,用户体验更好”;再问“管理员是否可以直接获知我的密码”, 客服振振有词:“我们用XXX算法加密过的,不会有问题的”。 殊不知,密码加密后一定能被解密获得原始密码,因此,该网站一旦数据库泄露,所有用户的密码本身就大白于天下。
以后看到这类网站,大家最好都绕道而走,因为一家“暴库”,全部遭殃。
入门方案:
将明文密码做单向哈希后存储。
单向哈希算法有一个特性,无法通过哈希后的摘要(digest)恢复原始数据,这也是“单向”二字的来源,这一点和所有的加密算法都不同。常用的单向哈希算法包括SHA-256,SHA-1,MD5等。例如,对密码“passwordhunter”进行SHA-256哈希后的摘要(digest)如下:
“bbed833d2c7805c4bf039b140bec7e7452125a04efa9e0b296395a9b95c2d44c”
可能是“单向”二字有误导性,也可能是上面那串数字唬人,不少人误以为这种方式很可靠, 其实不然。
单向哈希有两个特性:
1)从同一个密码进行单向哈希,得到的总是唯一确定的摘要
2)计算速度快。随着技术进步,尤其是显卡在高性能计算中的普及,一秒钟能够完成数十亿次单向哈希计算
结合上面两个特点,考虑到多数人所使用的密码为常见的组合,攻击者可以将所有密码的常见组合进行单向哈希,得到一个摘要组合,然后与数据库中的摘要进行比对即可获得对应的密码。这个摘要组合也被称为rainbow table。
更糟糕的是,一个攻击者只要建立上述的rainbow table,可以匹配所有的密码数据库。仍然等同于一家“暴库”,全部遭殃。以后要是有某家厂商宣布“我们的密码都是哈希后存储的,绝对安全”,大家对这个行为要特别警惕并表示不屑。有兴趣的朋友可以搜索下,看看哪家厂商躺着中枪了。
进阶方案:
将明文密码混入“随机因素”,然后进行单向哈希后存储,也就是所谓的“Salted Hash”。
这个方式相比上面的方案,最大的好处是针对每一个数据库中的密码,都需要建立一个完整的rainbow table进行匹配。 因为两个同样使用“passwordhunter”作为密码的账户,在数据库中存储的摘要完全不同。
10多年以前,因为计算和内存大小的限制,这个方案还是足够安全的,因为攻击者没有足够的资源建立这么多的rainbow table。 但是,在今日,因为显卡的恐怖的并行计算能力,这种攻击已经完全可行。
专家方案:
故意增加密码计算所需耗费的资源和时间,使得任何人都不可获得足够的资源建立所需的rainbow table。
这类方案有一个特点,算法中都有个因子,用于指明计算密码摘要所需要的资源和时间,也就是计算强度。计算强度越大,攻击者建立rainbow table越困难,以至于不可继续。
这类方案的常用算法有三种:
1)PBKDF2(Password-Based Key Derivation Function)
PBKDF2简单而言就是将salted hash进行多次重复计算,这个次数是可选择的。如果计算一次所需要的时间是1微秒,那么计算1百万次就需要1秒钟。假如攻击一个密码所需的rainbow table有1千万条,建立所对应的rainbow table所需要的时间就是115天。这个代价足以让大部分的攻击者忘而生畏。
美国政府机构已经将这个方法标准化,并且用于一些政府和军方的系统。 这个方案最大的优点是标准化,实现容易同时采用了久经考验的SHA算法。
2) bcrypt
bcrypt是专门为密码存储而设计的算法,基于Blowfish加密算法变形而来,由Niels Provos和David Mazières发表于1999年的USENIX。
bcrypt最大的好处是有一个参数(work factor),可用于调整计算强度,而且work factor是包括在输出的摘要中的。随着攻击者计算能力的提高,使用者可以逐步增大work factor,而且不会影响已有用户的登陆。
bcrypt经过了很多安全专家的仔细分析,使用在以安全著称的OpenBSD中,一般认为它比PBKDF2更能承受随着计算能力加强而带来的风险。bcrypt也有广泛的函数库支持,因此我们建议使用这种方式存储密码。
3) scrypt
scrypt是由著名的FreeBSD黑客 Colin Percival为他的备份服务 Tarsnap开发的。
和上述两种方案不同,scrypt不仅计算所需时间长,而且占用的内存也多,使得并行计算多个摘要异常困难,因此利用rainbow table进行暴力攻击更加困难。scrypt没有在生产环境中大规模应用,并且缺乏仔细的审察和广泛的函数库支持。但是,scrypt在算法层面只要没有破绽,它的安全性应该高于PBKDF2和bcrypt。
分享到:
相关推荐
Qt钥匙扣QtKeychain是一个Qt API,用于安全地存储密码和其他机密数据。 数据的存储方式取决于平台: macOS:密码存储在macOS钥匙串中。 Linux / Unix:如果正在运行,则使用GNOME密钥环,否则QtKeychain尝试使用...
PasswordManager:安全存储密码的应用
6.用可还原的加密来存储密码:禁用;在桌面上按下Win键+R键,打开“运行”窗口:输入:gpedit.msc;4、打开“组策略”窗口 ;在“组策略”窗口中依次选择“计算机配置”>“Windows设置”>“安全设置”>“账户策略”>...
像Dropbox一样安全地存储你的密码
密码管理器一个用于安全存储密码的CLI应用程序。开始使用将此仓库克隆到本地计算机。 运行pip install requirements.txt 。 创建一个.env文件以存储密码。 在.env设置USER_KEY = 和ENCRYPTED_KEY = <your> 。然后您...
USB安全存储专家(USSE)2005破解版(Build 308)
Password Vault 是安全存储密码的最佳解决方案。 这个怎么运作? Password Vault 未连接到任何在线服务器或数据库来存储您的密码。 相反,Password Vault 使用只有您可以访问的本地存储,并将所有内容存储在那里。 ...
然后在安全设置中“启用指纹识别”,然后对没有指纹的USB存储设备设置过滤条件(阻止/只读)。 4, 内部保密功能,使你的USB存储设备不能正常使用,这样当你的U盘等丢失也不用担心里面的数据泄漏。 内部标志的功能是...
软件名:USB安全存储专家(USSE)2005(Build 308)破解版 简介: USB安全存储专家(以下简称USSE)是一套计算机USB端口屏蔽、USB端口控制、实时监视、实时监控于一体的计算机网络安全控制系统。它通过USB存储协议...
使用行业标准加密安全存储密码,快速将密码自动输入到桌面应用程序中,并使用我们的浏览器扩展程序登录网站。 KeePassXC 加密 使用行业标准 256 位 AES 完成数据库加密。与 KeePass Password Safe 格式完全兼容。...
即使对于较 高的安全层次,你还可以结合这两种方式。密码自身可以被进行组织并根据多种不同的排序/查找条件来表示、分组,或者进行层次式的安排。你可以导出密码列表,从CSV文件中导入密码,在程序的两个实例中传输...
启动后你就可以开始储存密码,在 KeePass Password Safe 软件中已经有一些预设的密码分类,你可以自己再根据需要建立自己喜欢的密码储存分类。 KeePass 是一款管理密码的开源的免费软件,KeePass 将密码存储为一个...
启动后你就可以开始储存密码,在 KeePass Password Safe 软件中已经有一些预设的密码分类,你可以自己再根据需要建立自己喜欢的密码储存分类。 中文名 keepass 外文名 KeePass Password Safe 软件版本 2.35 软件大小...
启动后你就可以开始储存密码,在 KeePass Password Safe 软件中已经有一些预设的密码分类,你可以自己再根据需要建立自己喜欢的密码储存分类。 KeePass 是一款管理密码的开源的免费软件,KeePass 将密码存储为一个...
云计算中基于动态虚拟化电子流密码的安全存储.pdf
KeePass是一个密码管理软件,专门为了解决人类记不得众多密码的问题所...启动后你就可以开始储存密码,在 KeePass Password Safe 软件中已经有一些预设的密码分类,你可以自己再根据需要建立自己喜欢的密码储存分类。
软件名:USB安全存储专家(USSE)2005(Build 308)破解版 简介: USB安全存储专家(以下简称USSE)是一套计算机USB端口屏蔽、 USB端口控制、实时监视、实时监控于一体的计算机网络安全控制系 统。它通过USB...
secure-password 使密码存储更安全
KeePass Password Safe 就是专门为了解决人类记不得众多密码的问题所...启动后你就可以开始储存密码,在 KeePass Password Safe 软件中已经有一些预设的密码分类,你可以自己再根据需要建立自己喜欢的密码储存分类。
软件是集成了加密、移动加密、虚拟安全存储、防泄密反窃密等多种技术而开发的一款免费、专业、绿色的加密和信息安全存储管理软件。支持本地常规加密、优盘移动加密、光盘归档加密多种应用。免安装、免卸载、无插件。...