(前面不想看的可以跳到最后,直接看密码设置方法) 信息时代,安全二字出镜率极其地高。各种安全事件层出不穷,一出都是大事。 这方面头绪太多,以我粗浅的认识捋一捋。别的放到后面简单说,先探讨一下一个噩梦般的存在:密码! 一、密码是怎么被保存的1、明文保存你输入了两次密码“12345”,注册了一个账号。好了,现在服务器上存有你的密码了,12345。 真的吗? 真的……很多无良网站,就是这么干的,这就是密码的第一种保存方式:明文。 明文保存密码,如果在互联网刚刚开荒的年代还情有可原。今天的网站如果还这么干,只能说是居心不良了。 怎么判断:你点“忘记密码”,他给你发一封邮件,里面就是你的密码。 2、哈希保存不是嘻哈,是哈希。 哈希什么意思,英文Hash,中文翻译叫“摘要算法”、“散列算法”。看了这个翻译,怎么样,是不是更懵了。 其实哈希就好比打马赛克。 给定算法,给定原文,生成一个哈希值。为什么叫摘要呢?如果算法是128位的,那么就算你原文长达100个英文字符,出来的也就是16个英文字符。 你看着似乎是乱码,实际……也是乱码,从哈希值里你看不出任何的原文信息。它不是压缩算法,所以你可以从原文算出密文,但不能从密文还原原文。 曾经你以为有一种技术可以“反马赛克”,但其实没有。 早先互联网洪荒时代大家都用MD5算法算哈希,后来发现MD5很容易找到“collision”,也就是说,比较容易找到两个原文,生成的MD5值一模一样。有个中国女人叫王小云的,还找出了一种算法,能在极短的时间内找出collision,这就尴尬了。于是有职业道德的网站开始用一些新的哈希算法: SHA、MD5 salt等等,前者是一类较新的、尚未能快速找到collision的算法,后者则是给每个用户一个随机生成,但固定不变的字符串,称为“salt”,用原始密码,加上这个salt,合起来再生成MD5,这就保证即使两个用户使用了一样的密码,记录的MD5也完全不同。 与马赛克不同的是,原文信息改动一点点,出来的哈希值天差地别。 比如,用.net标准的MD5算法计算“12345”,结果是:
计算“12346”,结果是:
完全不一样了吧,这也是salt的意义。但是,salt在服务器端生成,你无法确定这个网站够不够勤快,有没有加上salt。 3、高级保存之所以说高级,是因为一般不会给你用。比如之前帖子里介绍过的公钥加密算法:RSA、DSA,还有AES等等。 不详细讲了,因为我也不太懂。 4、硬件加密比如招行专业版,登录也得用USBKey。原理是什么呢? 我还是不懂,请自行搜索。 二、密码是怎么丢的?这事说来话长啊。 既然上面第3种、第4种密码保存方式我不懂,那么就说说明文和哈希保存的密码一般是怎么给盗的。 1、暴力破解啥意思呢,就是穷举,对明文和哈希都有用。6位数字就从000000试到999999。当然加上字母吧,这个组合就巨多无比了。当年电脑慢,暴力破解很耗时间。可是黑客多聪明呢?搞了个字典破解。 原理很简单:人太懒。懒了就不愿意记太复杂的密码,123456多好记?还有callmehandsome,这些都是基于常用的数字组合和英文单词。用这种方式,再加上电脑速度突飞猛进,暴力破解就快了很多。 可是我们的程序员们多聪明呢,发明了一个神器:输入错误n次锁定。 但是这个对记性不是很好的用户来说,毕竟不方便。 程序员又发明一个神器:验证码。 很简单:每次验证码都是随机的,你怎么暴力破?不可能嘛。这招就是防电脑的。 当然后来又出现了可以分析验证码的破解方法,于是验证码就越来越难看明白了啊。 2、碰撞碰撞是专门针对哈希码的。啥意思呢?就是说黑客们找到了一些算法,可以快速找到一个可能和原始密码完全不同的字符串,但是算出来的哈希值和原始密码算出来是一样的。 MD5就是因为比较容易碰撞,逐渐被人抛弃了。当然MD5 salt之类正在给它续命,实际上现在用得也蛮普遍。 3、木马比如键盘记录器木马,把你按的键记录下来,密码不也记录了吗?还有的从发送的数据里抓取密码。然后发送到某个邮箱里去。 当然,上面三种都是正经黑客干的事。实际上来说现在黑客们干的可比这low多了。像下面这些: 4、拖库顾名思义,把人数据库给拖下来了。当然有时候是网站管理员自己干的。 5、撞库好比你从A站拖了个库,是明文密码的,然后你到B站去,用那些明文的用户名和密码来登录,10个里面有5个能登录,这就是撞库了:从一个站破解出的密码,去用到其它网站。 6、社工库这个名字有点难以捉摸,其实就是用户名-密码,或者哈希值-密码原文的比对库。黑客们把已经破解的这些数据做成数据库,分享出来,就是社工库。这样,如果你在一个地方被盗了密码,所有会用社工库的人就都知道了……哪怕只是知道Hash值,在一些社工库也能比对出密码来。 7、买卖这个不用解释了。 8、其它比方说网络数据抓包啊之类的,这些是针对小范围或者特定人的攻击破解。 三、怎么设置密码最安全呢?从以上破解方法你应该知道,根本没有绝对的安全。我们只能尽可能地防。 所有的网站都试图告诉你:要用尽可能长、要同时有大小写字母、数字甚至符号混起来用,这样的密码,强! 然而这个指引,只是在增加暴力破解所需要的时间罢了。不要说有了验证码技术以后暴力破解已然很难,就算能,也没有黑客愿意花时间做这个事。 针对以上各种破解,好的密码设置,应该做到: 1、比对不了任何字典 这样就不容易被暴力破 2、每个网站记录的哈希值都不同 这样就避免了撞库,社工库的危害也小了些。 3、和别人的不一样 同上。 因此我总结的设置密码(安全)三条原则: 1、不要用现成的单词 2、不同的网站用不同的密码 3、不能过分难记 具体来说,提供一种方法供大家参考: 第一步:把你的网站分成4大级别S1级:跟钱有关系(支付宝、网银,切记一定要有一个使用S1级密码的邮箱,用来绑定这些帐户) S2级:跟个人隐私有关系(QQ、微信等各种IM、SNS、重要的Email等) S3级:频繁使用,账号丢了很心疼的(smzdm啊,论坛啥的) S4级:无所谓的网站(有时候为了看一个帖子,但是隐藏了,你必须注册了才能看的那种) 第二步:选两个单词和一个数字串比如spring brother,你的生日19810908。 数字缩一下:918 从里面选几个字母,比如: spribrt 数字加进去: (密干)sp91rib8rt 大小写: (密干2)sP91rib8Rt 好了,其实这个原密B已经很像乱码是不是?还不够 我们在里面空两个位置出来,比如: (原密A)sp91ri_b8rt_ (原密B)sP91ri_b8Rt_ 第三步:分级设置密码和安全工具S1级这种的用密码还嫌不够,如果有USBKey,就买一只。钱不多,安全性提升不少。然后咱还得有个密码,就用原密B,然后在两个空位里填上这个网站的关键字母,比如淘宝,密码就设成这样: sP91ritb8Rtb S2级按S1的密码方式设置为好。 S3级同S2,只是用原密A而不是原密B,因为这样比较容易输入。 S4级建议用小号用户名,密码随便啦。 当然了,现在这个时代,密码仅仅是安全上的一个小部分。千万不要以为有了好密码就万事大吉。漏洞无处不在,各位还是小心再小心。 |
|