首先是安全的密码,密码本身安全就是说密码不容易被人猜到,而且当黑客得到你加密的密码和加密算法后使用暴力枚举的方式很难找到你的真正密码。很容易想到,其实最安全的密码就是足够长的由所有可以做为密码的字符随机构成的密码,长度应该尽量超过10位字符,应该同时包含大小写字符、数字及特殊符号,比如这个16位的密码ZAzg_E;9T0b3c.o5就是相对比较好的密码。但是一般来说,为了便于记忆我们使用对自己有意义的字母和数字构建长度足够的密码也是可以的,比如删除前面密码中的特殊字符后ZAzg_E9T0b3co5这个14个字符的密码也是相对安全的。
为什么我的密码不安全?从最近泄漏出来的数据库来看,不说明文,加密的密码很多是直接把用户密码取MD5值存放。在这个背景下来看:
短密码:现在的电脑的处理能力(数据计算)非常高,一台普通的家用电脑计算所有7位字符的排列的散列的时间不超过一天,计算8位字符排列的时间不会超过1个月,每增加一位字符所需的时间大概增加30倍,所以很容易看出来,当你使用10位安全的密码(完全随机)的时候,在知道你密码的散列值的时候(抛开MD5本身漏洞不考虑),用普通电脑暴力破解你的密码已经不太现实了(40年)。
不太随机的密码:有人说我的密码是字符加数字的组合,而且长度超过10位,但是还是很快被人破解了。这就有可能是你使用某种不安全的规创建的密码,1.密码中的字符或者数字跟你用户名中的一致;2.密码中的字符或者数字跟你生日、地址、电子邮件或者任何其它可能跟密码存放到同一数据库中的信息一致;3.使用了英文单词做为你的密码;4.密码使用简单规则,比如a1b2c3d4e5(简单顺序)、1q2w3e4r5t(键盘顺序)、ilovexxx123(单词)、someenglishword123等。试想,存放在数据库中的个人信息是有限的,密码取自这里面的字符,必然大大降低破解者的计算难度,如果你的用户名是billgates,你用了bill123gates456,好了,暴力破解从你的用户名开始,在不同的位置加字母,相当于破解了一个六位的纯数字的密码。取自其他个人信息以及简单规则密码道理相同,都是降低了破解者的计算复杂度。
其次就是做为网站来说,怎样安全的存放密码,即使数据库被盗,破解者也不会在短时间内拿到所有用户的密码。看到这次泄漏出来的数据库中有些密码是MD5加密存放的,说明网站有一定的安全意识,但这是不行的。密码存放不能只由单一的密码进行加密,即使使用了不可逆的MD5算法,username:md5(password)这样的存放方式也是不安全的,密码存放应该在算法中为每位用户使用单独的密钥,防止批量暴力破解。比如:username:salt:md5(password+salt),用这样的方式存放。重要的是:要用被证明安全的算法加密用户密码,不要试图设计一个加密算法,期望永远不被别人知道来保证密码安全,简单的说,数据库都被盗了,还有什么加密的代码是安全的呢?即使是二进制文件,也可能反汇编看到算法。这时如果被人发现算法有漏洞怎么办。
Linux用户可能都看到过系统密码存放,abc:password:salt。那个password是md5加密的,但是salt是做什么用的?为什么有这么一个字段呢?先看看为什么只存放MD5不安全,假如我们有两个用户alice、bob,他们的密码都是mypassword,这样用user:pass的方式存放,密码文件如下:
alice:34819d7beeabb9260a5c854bc85b3e44
bob:34819d7beeabb9260a5c854bc85b3e44
看到问题了吧,假如alice的密码被破解,bob的密码也就丢失了。据某网站分析,泄漏数据中使用随机字符和数字组合长度足够的高强度密码大概只有三十分之一,也就是使用单纯MD5加密的方式存放密码,破解在有限时间内的单次遍历计算中就能破解96%的用户的密码!
再回来看看linux存放密码的方式,使用salt字段,alice为123,bob为456,密码文件如下:
alice:9c87baa223f464954940f859bcf2e233:123
bob:4ae95041d151e8997a3dde671bf8ae59:456
可以看到生成的加密的密码已经不一样了,这样不能再同时解得两个密码了。破解者在计算的时候需要计算的是md5(pass+salt),由于salt不同,有多少个用户,就得进行多少次遍历计算。虽然不能防止目的为单个用户的攻击,也不能增加破解计算单个用户密码的复杂度,至少我们能大大延长破解所有用户密码所需要的时间。
最后说说做为用户的我们怎么安全的使用密码。从这次泄漏事件看出,网络安全问题切实存在。而且大量的明文密码泄漏说明使用单一的安全密码并不能保证我们的网络安全,应该为不同的网站使用不同的密码。如果这太复杂的话我们可以把网站分类,1.Gmail、Hotmail这类邮件经常做为我们注册其它网站和接收重置密码邮件用,要单独使用密码;2.网上银行、购物网站等与现金安全相关的要使用单独的密码;3.普通小网站的密码要和QQ、新浪、网易等大网站使用不同的密码。Last But Not Least,不要将密码存在网上,也不要存放到电脑上,如果要存放在本子上,确保本子不被其他人看到。这次事件给大家的教训就是:不要相信网上的任何牛人和任何知名网站。更不要相信仅凭我说的这些就能让你更安全。
没有评论:
发表评论