密码啊密码!

(前面不想看的可以跳到最后,直接看密码设置方法)

信息时代,安全二字出镜率极其地高。各种安全事件层出不穷,一出都是大事。

这方面头绪太多,以我粗浅的认识捋一捋。别的放到后面简单说,先探讨一下一个噩梦般的存在:密码

一、密码是怎么被保存的

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级

建议用小号用户名,密码随便啦。


当然了,现在这个时代,密码仅仅是安全上的一个小部分。千万不要以为有了好密码就万事大吉。漏洞无处不在,各位还是小心再小心。

Leave a Reply

Your email address will not be published. Required fields are marked *