(之前已经在首页上挂了一天了,放在这里只是给自己做个备份,先说明一下,看过的大仙就不必浪费时间了,由于当时文章写的非常仓促,有不周之处希望批评指正。)
我不得不惨痛地写在前面的是,这是一个安全崩盘的时代。在过去一年,已经证实遭遇入侵的、并导致关键数据被窃或者被泄露的公司,包括索尼、世嘉这样的大型游戏设备厂商,包括花旗银行这样的金融机构,也包括了RSA这样的安全厂商。
这些事件中最令业界瞠目的是RSA的被入侵,这导致多家工业巨头遭遇连锁地攻击,还有很多安全企业本身也使用RSA的令牌。而比RSA弱小很多的荷兰电子认证公司DigiNotar已经在被入侵后,宣告破产。
就在上半年,我们还是站在旁观者的立场讨论这些事情。但随即我们就遭遇了CSDN、多玩和天涯的数据库泄露……其中最为敏感的一方面是用户信息,另一个当然就是用户口令。由于身份实名、口令通用等情况等影响,一时人人自危,各个站点也陷在口水当中。
但根据推断,这些入侵实际上都是一些过去时——这些库早就在地下流传。这次同时泄露,也许只是一个集体性的心理效应。
这种针对数据库记录的窃取,被一些攻击者称为脱库,于是有了一个自然而谐音的戏称“脱裤”。只是攻击者日趋不厚道,从前只是偷了人家的裤子,但现在还要晾在大街上,并贴上布告说:“看,丫裤子上还有补丁呢”。
如果脱库是很难避免的,那么采用合理的加密策略,让攻击者拿到库后的影响降低到更小就是必要的。
明文存放口令的时代肯定是要结束了,但加密就安全么?
那些错误的加密策略:
明文的密码固然是不能接受的,但错误的加密策略同样很糟糕。让我们看看下列情况。
简单使用标准HASH
我想起了一个90年代黑客笑话,有人进入一台UNIX主机,抓到了一个shadow文档,但破解不了。于是,他用自己的机器做了一个假的现场,故意留下这个shadow,然后看看别人用什么口令来试,最后再用这些口令与渗透原来的主机。遗憾的是,那时我们都把这个当成一个joke,充其量回复一句“I服了you!”,而没有反思使用标准算法的问题。
目前来看,在口令保存上,使用得最为广泛的算法是标准MD5 HASH。但实际上,很长时间,我们都忽略了HASH设计的初衷并不是用来加密,而是用来验证。系统设计者是因为HASH算法具有不可逆的特点所以“借”