用户密码怎样设计可以算是安全?

标签:安全密码

访客:14270  发表于:2016-08-05 16:44:27

 

众所周知目前破解密码的方式主要有:字典攻击与暴力攻击、查表法、反向查表法、彩虹表等。

字典攻击与暴力攻击同属暴力破解范筹,其特点是适合简单的、常规性密码的破解,破解速度慢,但无法避免,只要时间成本足够终会破解成功。

查表法对于算法相同的哈希值有着极快的效率,主要思想是预先按照某种哈希算法对字典中的密码进行计算,然后把哈希值与密码存储一个用于快速查询的数据结构中,然后通过查表时行破解。反向查表与彩虹表,原理大多与此类似。

推荐一些算法PBKDF2、bcrypt、scrypt来加密密码。

PBKDF2它的特点:

1、可以通过调整KEY来扩展,从而避免暴力破解,通过key扩展的基本思路是,在将密码哈希后,再使用key加上哈希值再使用相同的算法进行多次的哈希。如果黑客尝试去破解的话,他会因此多花费几十亿次计算的时间。前面提到过,越慢越好,PBKDF2可以通过指定迭代次数,你想让他多慢,他就有多慢。

2、通过加盐的方式预防彩虹表的破解方式。盐是一个添加到用户的密码哈希过程中的一段随机序列。这个机制能够防止通过预先计算结果的彩虹表破解。每个用户都有自己的盐,这样的结果就是即使用户的密码相同,通过加盐后哈希值也将不同。然而,在将盐与密文存储的位置上有很多矛盾的地方,有的时候将两者存在一起比较方便,有的时候为了安全考虑又不得不将两者分开存储。由于PBKDF2算法通过key的机制避免了暴力破解,我觉得没必要将盐隐藏起来,就跟密文存储在同一个位置。

3、不需要额外的库或者工具,这是一个开源的实现,在工作环境中能很方便的使用。

bcrypt是专门为密码存储而设计的算法,基于Blowfish加密算法变形而来。其最大的好处是有一个参数(work factor)可用于调整计算强度,而且work factor是包括在输出摘要中的。随着攻击者计算能力的提高,使用者可以增大work factor,而且不会影响己有用户的登录。

scrypt不仅计算时间长,而且占用内存多。使得并行计算多个摘要异常困难,因此利用rainbow table进行暴力攻击更加困难。scrypt没有在生产环境中大规模应用,并且缺乏仔细的审察和广泛的函数库支持。但是,scrypt在算法层面只要没有破绽,它的安全性应该高于PBKDF2和bcrypt。

来源;PMCAFF 作者 sem 网易新闻 开发工程师

评论(0)

您可以在评论框内@您的好友一起参与讨论!

<--script type="text/javascript">BAIDU_CLB_fillSlot("927898");