主页 凑热闹,谈密码,Challenge-Response密码验证
Post
Cancel

凑热闹,谈密码,Challenge-Response密码验证

CSDN的密码事件闹得沸沸扬扬,600万用户数据的泄露应该是中国互联网历史上最严重的帐号信息泄露事件。让人不可思议的是,2009年4月之前的用户密码居然是以明文存储。使用明文存储密码本身就是一件相当扯淡的事情,而当这种事情发生在以程序员为主要客户的大型网站上,真是让人哭笑不得。

之后又陆续爆出人人、多玩以及各种知名网站的账户信息泄露的消息,虽然还未确知真伪,但也很是让人揪心。而“不能明文保存密码”这一个初级中的初级的错误之所以会在中国这篇神奇的土地上一次又一次的出现,我认为是与中国的网络审查制度和相关法制不全造成的(其实就算法令全了我估计在特权之下也只是一纸空文)。负责网络审查的大大们往往一个电话过来指明要XXX的密码,而在天朝这样的地方如果你拿不出这个密码的话,基本就被扣上了政治不合作和给领导难看的大帽子,很多时候程序员被逼无奈只能明文存储。而像这次CSDN这样的由于系统升级而遗留下的历史问题,可以相信溯其根源也或多或少会与这样的特权有关吧…

扯远了扯远了…作为有良知的程序员,绝不能用明文存储密码,而作为简单的密码存放验证解决方案,MD5的Challenge-Response验证方法可以满足绝大部分非机密级别的应用了。使用MD5存储密码在验证中是很常见的做法,虽然王小云教授提出了有效的MD5强无碰撞算法,但是作为民用级别的网站认证,简单的散列MD5的方便快速简单易用的特性还是相当吸引人。为了防止截取MD5伪造身份完成认证,再加入一个Challenge-Response机制,客户端请求验证时,由服务器随机一个串给客户端进行挑战,客户端使用密码的散列值与从服务器取得的串组合得到新的散列值,将此散列值提交给服务器生成的散列值进行应答验证,若两个散列一致则通过,否则失效。如果希望能够得到更加安全的散列算法,可以选择SHA-256,SHA-384或者SHA-512等还未被攻破的散列(仅限民用..我猜政府军事部门不太可能用散列这种悲剧又简单的摘要算法)。对于iPhone SDK来说,常用的散列算法都在<CommonCrypto/CommonDigest.h>头文件中均有说明。而libcommonCrypto.dylib和Security.framework中也都提供了相当多的安全方法,涉及网络应用的app开发的话,不论是作为自身修养的提升还是对自己的代码负责,都应当对安全问题有基本的认识和思索…

该博客文章由作者通过 CC BY 4.0 进行授权。

带边框的UIImage缩放

VVBorderTimer