收藏本站|设为首页

您现在的位置: 首页 > 新闻中心 > 建站经验 > 详细内容

若何平安的存储密码

2012-09-21 11:45 来源: 卓杰科技 www.zhuojie.cc [ ]

曩昔一段时刻来,众多的网站遭遇用户密码数据库泄露事务,这甚至搜罗顶级的互联网企业–NASDQ上市的商务社交收集Linkedin,国内诸如CSDN一类的就更多了。 

层出不穷的近似事务对用户会造成巨年夜的影响,因为人们往往习惯在分歧网站使用不异的密码,一家“暴库”,全数遭殃。 

那么在选择密码存储方案时,轻易失踪入哪些陷阱,以及若何避免这些陷阱?我们将在实践中的一些心得体味记实于此,与巨匠分享。 

直接存储用户密码的明文或者细密码加密存储。 

若何平安的存储密码 

菜鸟方案: 

往后看到这类网站,巨匠最好都绕道而走,因为一家“暴库”,全数遭殃。 

单向哈希算法有一个特征,无法经由过程哈希后的摘要(digest)恢回复中兴始数据,这也是“单向”二字的来历,这一点和所有的加密算法都分歧。常用的单向哈希算法搜罗SHA-256,SHA-1,MD5等。例如,对密码“passwordhunter”进行SHA-256哈希后的摘要(digest)如下: 

入门方案: 

“bbed833d2c7805c4bf039b140bec7e7452125a04efa9e0b296395a9b95c2d44c”

 可能是“单向”二字有误导性,也可能是膳缦沔那串数字唬人,不少人误觉得这种体例很靠得住, 其实否则。 

单向哈希有两个特征: 

进阶方案: 

若何平安的存储密码 

这个体例对比膳缦沔的方案,最年夜的益处是针对每一个数据库中的密码,都需要成立一个完整的rainbow table进行匹配。 因为两个同样使用“passwordhunter”作为密码的账户,在数据库中存储的摘要完全分歧。 

10多年以前,因为计较和内存巨细的限制,这个方案仍是足够平安的,因为抨击袭击者没有足够的资本成立这么多的rainbow table。 可是,在今日,因为显卡的恐怖的并行计较能力,这种抨击袭击已经完全可行。 

这类方案的常用算法有三种: 

专家方案: 

2) bcrypt 

若何平安的存储密码 

居心增添密码计较所需破耗的资本和时刻,使得任何人都不成获得足够的资本成立所需的rainbow table。 

scrypt是由闻名的FreeBSD黑客 Colin Percival为他的备份处事 Tarsnap开发的。 

2)计较速度快。跟着手艺前进,尤其是显卡在高机能计较中的普及,一秒钟能够完成数十亿次单向哈希计较 

更糟糕的是,一个抨击袭击者只要成立上述的rainbow table,可以匹配所有的密码数据库。仍然等同于一家“暴库”,全数遭殃。往后若是有某家厂商公布揭晓“我们的密码都是哈希后存储的,绝对平安”,巨匠对这个行为要出格警语并暗示不屑。有乐趣的伴侣可以搜索下,看看哪家厂商躺着中枪了。 

将明文密码混入“随机身分”,然后进行单向哈希后存储,也就是所谓的“Salted Hash”。 

1)PBKDF2(Password-Based Key Derivation Function) 

将明文密码做单向哈希后存储。 

曾经有一次我在某知名网站重置密码,结不美观邮件中居然直接包含以前设置过的密码。我和客服咨询为什么直接细密码发送给用户,客服答曰:“削减用户轨范,用户体验更好”;再问“打点员是否可以直接获知我的密码”, 客服振振有词:“我们用XXX算法加密过的,不会有问题的”。 殊不知,密码加密后必然能被解密获得原始密码,是以,该网站一旦数据库泄露,所有用户的密码自己就年夜白于全国。 

若何平安的存储密码 

PBKDF2简单而言就是将salted hash进行多次一再计较,这个次数是可选择的。如不美观计较一次所需要的时刻是1微秒,那么计较1百万次就需要1秒钟。假如抨击袭击一个密码所需的rainbow table有1万万条,成立所对应的rainbow table所需要的侍旧送是115天。这个价钱足以让年夜部门的抨击袭击者忘而生畏。 

美国政府机构已经将这个体例尺度化,而且用于一些政府和军方的系统。 这个方案最年夜的利益是尺度化,实现轻易同时采用了久经考验的SHA算法。 

bcrypt是专门为密码存储而设计的算法,基于Blowfish加密算法变形而来,由Niels Provos和David Mazières揭晓于1999年的USENIX。 

bcrypt最年夜的益处是有一个参数(work factor),可用于调整计较强度,而且work factor是搜罗在输出的摘要中的。跟着抨击袭击者计较能力的提高,使用者可以慢慢增年夜work factor,而且不会影响已有用户的上岸。 

连系膳缦沔两个特点,考虑到年夜都人所使用的密码为常见的组合,抨击袭击者可以将所有密码的常见组合进行单向哈希,获得一个摘要组合,然后与数据库中的摘要进行比对即可获得对应的密码。这个摘要组合也被称为rainbow table。 

bcrypt经由了良多平安专家的细心剖析,使用在以平安著称的OpenBSD中,一般认为它比PBKDF2更能承受跟着计较能力增强而带来的风险。bcrypt也有普遍的函数库撑持,是以我们建议使用这种体例存储密码。 

3) scrypt 

和上述两种方案分歧,scrypt不仅计较所需时刻长,而且占用的内存也多,使得病行计较多个摘要异常坚苦,是以操作rainbow table进行暴力抨击袭击加倍坚苦。scrypt没有在出产情形中年夜规模应用,而且缺乏细心的端详和普遍的函数库撑持。可是,scrypt在算法层面只要没有马脚,它的平安性应该高于PBKDF2和bcrypt。 

1)年夜统一个密码进行单向哈希,获得的老是独一确定的摘要 

这类方案有一个特点,算法中都有个因子,用于指明计脚缦丬码摘要所需要的资本和时刻,也就是计较强度。计较强度越年夜,抨击袭击者成立rainbow table越坚苦,以至于不成继续。 

文章来历:坚不美观云博客,转载请注明出处。