如何安全的存储密码 - hash、salt 以及更多
来源:互联网 发布:java在线考试系统代码 编辑:程序博客网 时间:2024/05/16 17:31
转载地址:http://www.oschina.net/question/28_57478
最近爆出的网站安全问题越来越多,甚至有部分网站的密码泄露,这是一篇简单的教程,教你如何更加安全的保存密码。我这里说的“安全”是指当密码泄露以后,对方需要相当一段时间来破解以获得明文密码。
下面我列出了常用的密码存储手段,从不安全到安全:
明文存储
hash 存储,例如 MD5,SHA,SHA256
hash 加盐(salt)存储
使用 bit/key stretching 机制
大家已经知道,即使是大型网站例如 Linked-In,存储密码也是简单的 hash。我认为这是一个严重的疏漏。我们有很多方法来加强密码的存储以防止暴力破解和 彩虹表。在这里,我要大声的说一遍,仅仅加盐(salt)是不够的!
首先让我们来看看不同的技术出现的时间:
明文存储:有史以来
hash 存储:20世纪70年代早期
加盐 hash:20世纪70年代晚期
bit/key stretching: bcrypt 2002, scrypt 2009, PBKDF2 2009
不同技术的耐破解程度
Technique / KDFYearBruteforceDictionnaryRTGPUFPGAASIC
Hash1970NoNoNoNoNoNo
Salted Hash1976NoNoYesNoNoNo
PBKDF2 *2000YesYesYesPartialNoNo
Bcrypt2002YesYesYesYes**??No
Scrypt *2009YesYesYesYes**YesYes
RT - Rainbow Table 彩虹表
在一年内破解一个密码的开销
Technique / KDF6 LL8 LL8 chars10 charsDES CRYPT< 1$< 1$< 1$< 1$MD5< 1$< 1$< 1$1.1K$MD5 CRYPT< 1$< 1$130$1.1M$PBKDF2 (100ms)< 1$< 1$18k$160M$bcrypt (95ms)< 1$4$130K$1.2B$scrypt (64ms)< 1$150$4.8M$43B$PBKDF2 (5.0s)< 1$29$920K$8.3B$bcrypt (3.0s)< 1$130$4.3M$39B$scrypt (3.8s)900$610K$19B$175T$解释:
- "DES CRYPT" 和 "MD5 Crypt" 是加盐的
- "LL" : 小写字母,例如"aeterws"
- "chars" : 95 个可打印字符,例如"6,uh3y[a"
- 括号中的数字是算法设置所需要的时间,跟 CPU 和循环此处都有关系。
- 如何安全的存储密码 - hash、salt 以及更多
- MD5 Hash + Salt的密码存储方式实现
- 如何安全的存储密码
- 如何安全的存储密码
- 如何安全的存储密码
- 如何安全的存储密码
- 如何安全的存储密码
- 如何安全的存储密码
- 如何安全的存储密码
- 如何安全的存储密码
- 如何安全的存储密码
- 如何安全的存储用户的密码
- 如何安全的存储用户的密码
- 如何安全的存储用户的密码
- 如何安全的存储用户的密码
- 如何安全的存储用户的密码
- 如何安全的存储用户的密码
- 网站密码加salt存储
- Kik 比 Whatsapp 晚了一年,为什么发展速度比 Whatsapp 快?
- 表格合集
- 哪类应用的用户日活跃度最高?
- 表单验证集合
- 富文本编译器
- 如何安全的存储密码 - hash、salt 以及更多
- 如何来分析活跃用户和留存用户?
- json插件
- 选项卡
- MongoDB 索引数据类型优化,节省60%内存
- Android 滑动引导页
- Tomcat 常用优化和配置
- sql笔试题
- iOS 上的「来电归属地+超豪华通讯录专业版」这个应用的原理是什么?