用户密码怎样设计可以算是安全?
作者:sem 网易新闻 开发工程师
我们无法控制用户想要设置的密码,也就是说,用户想设置一个简单的密码便于记忆也是没有办法的。所以,我觉得问题在于代码层面的加密,而不是如何去引导用户去设置一个安全的密码。
众所周知目前破解密码的方式主要有:字典攻击与暴力攻击、查表法、反向查表法、彩虹表等。
字典攻击与暴力攻击同属暴力破解范筹,其特点是适合简单的、常规性密码的破解,破解速度慢,但无法避免,只要时间成本足够终会破解成功。
查表法对于算法相同的哈希值有着极快的效率,主要思想是预先按照某种哈希算法对字典中的密码进行计算,然后把哈希值与密码存储一个用于快速查询的数据结构中,然后通过查表时行破解。反向查表与彩虹表,原理大多与此类似。
推荐一些算法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。
关键字:产品设计, 产品经理, 密码
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!