如何安全的存储密码 - hash、salt 以及更多

转载地址: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 chars
DES 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 和循环此处都有关系。

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值