有关密码的辟谣

最近CSDN好多国内的大型网站/社区都纷纷出现了密码或者账户信息泄漏事故,而且目前来看情节都很恶劣。于是随之而来的是网上很多的密码设定教程,搞得人心惶惶去更改密码,还制定了什么密码生存战略,配置十、二十个密码分别使用什么的。

不知不觉中感觉很多人误入歧途了,所以特此发表这么一文章,以多年处理 CMS 和密码安全问题的经验来说明下什么是真正靠谱的密码策略。

一、黑箱子问题与安全保障

对于任何服务,若是有人希望破解你的密码,其实真实难度比理论值大很多,有时又小很多。一个黑客如果希望从外端成功破解一个密码,不采取社会工程学技术(比如诱导你把密码给他)和特殊网络拓扑结构(比如局域网、内网、后门程序),那么面对他的将是一个黑盒子。这时无密码多简单,破解都会是一件足够困难的事情。我们举个简单的例子:

小明这家伙是个很单纯的同学,他并不了解密码设置策略,所以他把自己的邮箱密码设定为了自己的生日(YYYYMMDD)这样的格式。

上面的例子中,小明的密码长度为8位,而且全是数字,那么“理论破解难度”是 10^8次(实际上,如果知道这些,破解难度大概会在 100 – 10000次而非10^8)。但是小明很走运,因为站点的密码要求提供 6 – 12 位的,可包含数字、大小写字母和“_-=.”这些符号的任何字符串,那么对于一个希望破解小明密码的人,他需要进行的实际尝试是 66^6 + 66^7 + 66^8 才会破开,而这已经是天文数字了(一般服务时会允许你尝试至多百次每日)。在黑盒子模式下,即使足够简单的密码,也足够难以破解或者是不可能破解的。如果仅是为了防止不当理由,大可使用简单好记的密码,前提是这密码不在字典里。这里小明同学的密码虽然是很个性化的,但由于全数字,所以很可能是黑客们首先尝试的序列,所以很可能在千次尝试内破解。

在一些需要一定安全度,但是你并不重视的账号上,大可以采取些简单的策略解决字典破解。比如小明同学如果把密码改成 “-YYYYMMDD-”虽然没有显著增加记忆成本,但是大大提高了抗字典性,即便被猜中了8位生日,由于破解者只能知道密码错误,所以依然不清楚密码。面对“Wrong Password”,人们完全不会知道其实已经猜中了4/5,反而还会怀疑你的密码是否真的和出生日期有关。

你不必花上半个星期琢磨新的密码,只要把旧的稍微变化下,安全度也基本会恢复。

二、密码分级

你说你的密码被CSDN漏出来了现在在改各种账号?我可以很负责任的告诉你,我的密码也在被泄露范围内,可是我什么都不用做这就是密码分级的魅力

jabbany # 000000 # k_abbang@*****.com

这条就是我的密码在CSDN 600W里面的呈现,傻了吧,这么简单的密码,自然破解的价值也就没有了。由于密码分级制度,我丝毫不用担心其他帐号的安全,因为我担心其安全的账号不可能使用这个密码

密码分级最近也被广泛的介绍了,我就不多说了,但是有人建立18个不同等级策略,我认为大可不必。一般来说,如果你不是安全控建立3-5个等级完全足够。

  • 第 0 级这级是你完全不在乎的账号,拥有这级的账号完全是属于被迫(比如:订阅服务,到论坛下载文件,提问社区提问等)并且没有任何实名信息,甚至邮箱都是你的“广告邮件/论坛注册专用邮箱”。这级的密码建议越简单越一般化越好,只要满足了站点安全度的最低要求即可。比如 000000 和 00000000是不错的选择,不但好输入,还很简单。如果不允许这种密码,可以尝试 =000000, a000000之类的(含有数字+字母/符号)。
  • 第 1 级这级是你稍微有些在乎的账号,这些帐号可能有些你的个人信息,又或者是有你的一些很容易复得的虚拟资产(积分、在线时长等)。他们被盗走你并不心痛,虽然可能会稍微困扰一下。这些帐号你可以选择稍复杂的密码,比如 -helloworld-, iwil-lrule 等,把你能想到的简单密码稍微变化一下即可,甚至0-0-0-0-0-0都符合此类安全需求。
  • 第 2 级这些帐号你可能和亲戚朋友联络的,丢失可能不会对你产生财产上的麻烦,但是用于补救的时间开销太大。这个等级应该涵盖你的大部分账号,请使用一个包含数字、字母和大小写的8位或以上密码(类似:haPPYnew2012,I<3CentOS级别的)。
  • 第 3 级网络银行,办公用。这里涉及你的敏感信息,丢失可能会对你有实质伤害如财产、生命安全等。这些帐号请设定包含数字、字母、大小写、符号的8位以上密码,其实也可以对 2 级密码加前缀后缀或变换来生成(如:后缀 _mybe$t,或者把 0 都换成小写  o )。不过如果你记忆力不好,不要变换太多(两种变换足够了)避免你自己也进不去了。

正如银行几乎不可能出现被盗密码事件一样,你安全的密码应该用于保护值得保护的东西,同理,不安全的密码用于保护不安全(没必要安全)的东西。和你不会把价值¥纪念版收藏邮票贴到给朋友的朋友的明信片上是一个道理。这样即便是被暴露密码,也可以淡定的在旁边笑。

 三、有关密码数学运算

一个很常见的误区就是,由于服务器保存密码可能是明文,事先把密码过一次哈希算法会更好。这里对所有非编程人员说:这样不仅不会更好,还会变得更加糟糕!不管你用的是 MD5还是 SHA-1或者是把结果又进行变换,你的密码不但没有变安全,反而变得不安全了。

大多数哈希算法会计算出给定字符串的固定长度的特征值,并且控制碰撞为最低。但是,正是因为此,哈希密码变得不如之前安全。比如如果我的密码是 HelloWorldThisIsMyPassword123456 (32字符),它的字符范围是 0-9 a-z A-Z(62)[难度在 62^32],而其相应的MD5范围只有 0-9 a-f (16)[难度在 16^32],同样长度,但是反而降低了安全度。一般的,一个18位的包含大小写数字的密码就足够与MD5匹敌了,又何妨去设个32位的呢?不但给自己增添了麻烦,还适得其反。

如果你真的担心安全度的话,或者万一明文被爆出,不希望别人知道你的特殊趣味(唐诗什么的)的话,请:A)选择一个你不怕丢弃的密码,如 000000 , B)找个随机数生成器来产出密码。用哈希除了你可以记简单密码来生成复杂的以外没有任何好处。况且,每次要去计算自己密码MD5或SHA-1是很可笑且困难的事情。特别是如果你的Windows登陆密码是个MD5。

四、简单密码不等于好破解,复杂密码不等于难破解。

密码难破解与否一大部分不取决于密码本身。如果你设定自己的生日、姓名、单位或者口头禅为密码,那么被破解的可能性会大大提高,因为这些信息别人可以轻易拿到,并写出字典。换一下,比如使用自己计算机型号,或者自己的手机IMEI,就产出了好查,好记且不好猜的密码。

密码之外的另一部分是你如何看待安全保护。再强的密码也敌不过键盘记录器、木马和钓鱼站点等的侵扰。所以请确保你的各种运行环境是干净的,你的常识是充足的,你的眼睛是雪亮的,你的意识是清醒的,再来谈密码。

五、一些可以扔掉的账号用密码

到下载站了?去某个论坛讨论区了?想下载那个插件但是需要注册?请用一个“可以扔掉的密码”和“可以扔掉的邮箱”。这里推荐几个:00000000(万能,而且很长),pass000000(能通过大部分密码难度验证),++++++++(不会被轻易猜到,虽然只有一个字符)。这些密码不需要你记住,而万一你成了论坛的返客或者又需要那个账号了,也能很快回忆起来。要是届时账号已经被改密码了,没关系,重新注册一个也无妨。

说了这么多,还是希望大家对密码和安全保护的知识能更加正确些。只要有了防备,其实这些密码泄露都是浮云

10 Comments

  1. 最悲剧的是完全不是密码,大家都知道重要的密码和不重要的不同,除非不是人额,但是我悲剧因为我在某论坛帐号的内容是XE的,但是另一个与周围人联系的帐号因为注册快速所以和上面的帐号有重复的,被同学认出来结果我先在看他们都觉得好像在议论= =////

    回复

发表回复

您的电子邮箱地址不会被公开。