密码为什么明文存放及其他

2011年12月28日 | 分类: 乱七八糟 | 标签: , ,

密码为什么明文存放

很早就写过一篇blog,说到过,你的密码应当一次一密,至少某些密码泄露时不至于波及太广。结果这次CSDN不幸中枪。我不去讨论多少人急急忙忙修改密码,多少人数据泄露,单说说为什么很多时候密码是明文存放的。

  就我有记忆以来,我写应用就从来没有明文存放过密码。最起先是md5方式存放。md5可以让你找到hash值,有的时候也会被用于穷举。但是无论如 何,md5密码本身比明文安全很多。后来改成了challenge-response验证模式,也是用md5做的hash后进行c-r的。再后来,md5 的碰撞冲突的论文出来,后面用的多数都是sha256了。从头到脚,我就没做过密码明文存放,并且,我认为这是正常程序员最起码的修养。(当然,明文存放 的代码不是没有,不过那是调试模式) 但是现在我所知,很多系统的身份验证都是密码明文存放的,为什么?其实我不大理解。不过有时候问起,有些人和我说了几个我觉得不是搪塞的理由,现在抄录如 下,告大家知。

 

1.不用明文密码没法应付检查。大家知道互联网审查,有时往往会一个电话过来,要XX用户的密码。如果你没法给出,上头就认为你不配合,事情各 种难搞。作为审查机构的老板,当然没必要知道明文密码的危害。他们只知道,我要密码,为什么不行。所以,悲崔的程序员们就往往会得到一条死命令,保存明文 密码。

 

2.压根不知道明文密码有什么问题。中国的互联网有太多的没基础的新人,从石头的缝隙中顽强的生长出来。这不是坏事,坏事的是这些人往往会在一 些基础问题上出现奇怪的毛病。例如有些程序员,写程序很快,但是居然从来不知道密码明文存放会导致什么问题。更神奇的是,这些人中,有一家银行…

 

3.自信暴棚的混帐。有些人的自信总比别人强,而且强在莫名其妙的地方。例如:我的服务器肯定是没问题的,所以我的密码一定要明文存放。如果不,就是质疑我的技术。
实话说,这种人真是少数中的少数。

 

4.遗留系统。很多系统设计的时候因为某个其他理由,使用了明文密码。等后来这个理由不存在了,密码系统升级成了一个困难。因为密码系统太重要 了,所以在没有太大利益的情况下,总是倾向于不修改系统。但是有什么足够利益来推动系统修改呢?用户安全问题在发现前不是一个问题——好比这次的 CSDN,不是被暴出来的话就根本不会被当作一个问题。系统的管理者,每个人都没有足够的动力去修改系统。

 

5.世界的阴暗角落。有的时候,程序员/老板明文存放的理由,是为了方便盗窃用户其他网站资料。例如我所知的某钓鱼案例,你注册网站,就提供很 多免费服务,网站看起来也很靠谱——除了后来突然爆出这家网站其实暗地中用你的生日/密码猜解信用卡/银行卡密码,大家才突然发现,这家网站其实根本没有 在美国注册,而是一个听都没听说过的国家。
而且很多网站提供从其他网站导入之类的功能,更加的危险。以前经常爆出twitter密码被窃取,主要就是因为OAuth开放以前,twitter上的第三方应用需要提供原生密码,导致很多小应用的目的其实就是收集密码…

 

6.为了给用户提供方便。这个理由和上一个很类似,不过不是为了某些险恶的目的。而是客户经常要求——为什么我不能做XX事,为什么我不能blahblah。好吧,为了让你能,我们就必须保存明文密码。

 

  明文密码的保存原因很多,不过结论都是一样的。在任何网站/服务上,你绝对不能使用同一个密码,零级密码除外。尤其请注意,不要在两家银行使用同样的银行卡密码/网银密码,原因不说。
  从未来进化的角度说,密码的未来进化趋势是核心授权体系。就是你要向某个网站验证身份,只需要向身份验证商验证,剩下自动完成。现在的openid就是一 种解决方案。密码都没了,还谈什么泄露呢?同时,实体交互和授权的精细划分也是一个趋势。某个网站访问别的网站的数据的时候,会形成一个访问令牌。这个令 牌对需要访问的内容详细写明,并且需要用户授权。OAuth就是这个趋势的代表。另外一个趋势是利用某个足够安全的设备作为以上两者的终端载体。目前这个 设备用的是手机,可是——手机不是一个足够安全的设备。也许这会是下一个XX门的隐患吧。
========
关于密码——你们不知道的很多事情

1.hash密码安全么?
只要你的原始密码不大复杂,hash密码也完全没有安全性可言。不信?echo ‘abc’ | md5sum,去www.cmd5.com,看看有没有。同样,拿你自己的密码试试看

注:null同学对此提出了异议,表示这个网站的可信性也值得怀疑,不要输入你自己的密码。我考虑过后觉得有道 理。从基本安全性上说,网站只能收集密钥,无法收集用户,所以密码泄漏的风险不大。从我个人来说,一个网站如果爆出hash泄露,基本等同于密码泄漏。所 以本质上避免问题的方法是一次一密。但是鉴于国内很多网站还是直接使用了hash(尤其是md5)保存了密码,在这个网站上输入了密码等于将自己的密码加 入了字典,从而减低了安全性。

在此,向所有被我忽悠的同学诚挚致歉。如果你在里面输入过密码,建议你将密码改为一次一密。即每个网站使用不同的密码。通常一次一密的同学不会再把自己的密码到这个网站上进行搜索了吧?

2.国内哪些网站不是明文密码。
我说出来你信么?再说,配合1,这个问题重要么?一次一密,经常修改才是王道,长度和频率看这篇文章《密码管理规范》。另外,现在记得去公布出来的密码表里面搜一下自己的密码。

3.一次一密就安全了么?
    差了远了去了。你有没有在别人机器上登录的经历?你可以信任他么?你自己家里装的一堆插件你都相信么?你确定他们对你的银行密码没有兴趣?你要知道,银行 开发安全插件的人和做恶意插件的人是同一个圈子的人——不会攻击就不能防范么。而且我们阴谋论一点说,你就确定这些软件商没有接到上级指令要求加入后门? 现在你还敢在自己家里的机器上装中国软件么?QQ,迅雷,这些都算大软件,看着的人比较多。你自己可以搜他们抓你行为上传的文章——用谷歌搜。其他小站点 的各种软件呢?你装了多少?
4.还有哪些比较低级的情况?
    当年,有一个网站,提供一个功能。你可以在他的网站上直接登录其他邮箱。相信我,这可比这次的问题严重多了,那可是一收集一批阿。
5.为什么我以前都不知道?
    要和你说我们有安全问题,你还用不用了?
    再说我和很多人说起过这些问题,他们当年的态度都是——没关系,反正没人会对我的信息感兴趣的。我估计这次,还有不少人会说——没关系,反正我没有CSDN帐号/人人网上面的数据看到就看到咯。
    很多人第一次知道安全问题的严重性,都是在他们丢了钱之后。往往都是莫名其妙,钱怎么丢的?
6.那银行呢?
    银行还是相对安全的,不过你要确认银行有以下几个功能。登录失败警告功能。五次登录失败自动锁定账户,要隔天由本人解锁,解锁后最好强制更换密码。关闭网 银和电话银行功能,不拿着本人身份证经过24小时以上申请不能打开。密码丢失需要一周以上的时间才允许重设。大额取款通知用户功能。
    听上去很麻烦?通常来说,越麻烦的银行越安全。以上功能都有了,并且使用了,那么银行本身而言,还是比较安全的。
7.可是我要用网银。
    那你用U盾,而且不要用水货版的。我07年选择招行的理由是,招行是唯一当时我觉得没有安全问题的银行。现在这个列表应该加入浦发,并成为首选——对linux友好而且不容易破解。但是不要用只有手机动态密码的模式。
    有些U盾就是密码文件隐秘的放入的一个U盘,这种U盾我都可以复制出一堆来。用上这种U盾,最多满足你自己的心理因素。
    而且,更好的方法是对信用卡申请网银,而银行卡关闭(如果银行支持的话)。这样的话损失最大不超过一张信用卡可用额度,我目前的信用卡而言,最多一次损失 几千——总好过几万的学费吧。同类的思路可以选择支付宝,你一次打个1000进去可以用一阵,丢了只有这1000。
8.你知道U盾的正确用法么?
    U盾应该在需要的时候才插上去,用完立刻拔出。虽然说不像拆炸弹,不过还是插入时间越短越好。
    因为很偶尔的情况下,入侵者刚好在看你的电脑。发现U盾后,可以指挥你完成登录的网银系统进行交易。但是网银交易必须以U盾为基础,拔掉他们就干不了坏事了。
9.为什么手机不是安全设备。
    手机安全是相对的,只能说比电脑安全。你以为手机就安全?首先,智能机上面已经满足了恶意软件存在的基础。例如小米——虽然我很喜欢他——你确定雷布斯没 有在小米里面加入后门,截取你的密码再偷偷转发?现在没有——以后呢?同样,你确定你信得过苹果?将来苹果也不会出现安全漏洞?
    即使退一步说,你的手机很安全。来,把手机给我,不要看它,然后告诉我,手机里有多少软件可以读取你的本机信息,有多少可以读取短信?即使是完全安全的系 统,我只要写个小游戏,号称因为需要短信分享,需要操作你的短信。你会怀疑么?我趁着你不注意,读取你的手机,和泄露出来的卡号-手机信息交叉比对。对你 的卡号申请动态密码,然后让我的程序偷偷的拦下来短信 ,不让你知道,发送到服务器端。你是不是丢钱丢的莫名其妙?
    相信这条写到这里,九成九的用智能机的朋友已经满脸汗了——妈的这些程序能读取我的银行卡动态密码?技术上说,真可以。
    普通手机用户也别高兴,我没记错的话,GSM协议已经被破解了。就是说,我可以在你旁边拿个设备直接接受你能收到的短信。这TMD叫安全设备?
10.那你说的keepass?
    这东西能在手机和电脑上运行,就肯定不安全。数据文件放在硬盘上的时候没问题,即使入侵者拿到也没办法。但是你输入密钥的时候有keylogger就完蛋了。
    所以我只在linux和android上用,虽然android不安全,但是目前我还不知道有keylogger。
11.妈的,我还有什么安全的。
    这个真没有,RMS说过,安全是个笑话。让用户来完成安全更是笑话中的笑话。当然,没有用户的安全意识,银行/网站再努力也没用。但是本质上说,应当以侵犯隐私去起诉泄密单位,而且应该打下来是巨额赔偿。
    然后这个事情就会变成,各家单位纷纷表示,我们不对免费用户的信息安全负责,并且推出免责条款。然后又是扯不清的糊涂帐——如同我们今天的EULA一样。
    只是在景德镇,你连操作第一步的机会都没有。还是用脚投票,放弃一些实在不安全的公司吧。例如业界很知名的某个做恶意软件出身的公司,还有某个买了这个公 司的前身的大搜索软件商。某个以动物作为Logo的公司,还有被国家大哥曝光多次的某家公司。凡是业界已经臭了名声的,最好都别用。
12.日子还过不过了?
    淡定,我明天还会写一篇,你要注意的东西。虽然不说一定安全,不过普通用用问题不大的。
========
密码三文的补充
  前两天写了两篇关于密码的文章,其实没说什么,都是程序员的常识和经历。实话说比较有意思的是大家的反应。

    一个是,大家为什么纷纷盯上了第一条?我在写的时候,主要考虑的最多的是第五条,就是网站本身方便盗窃其他网站资料,或者为网站本身提供便利。具体可以看 某个投诉知乎的帖子。但是来的人几乎无一例外,都在和我讨论第一条。我不知道理由是什么,大家都觉得政府这么值得怀疑么?实际上,除非政府觉得你有资格收 集密码,否则基本没有听说密码必须明文存放的潜规则。你想想,你在国内搭建一个小论坛,需要备份明文密码么?
    上级要求明文密码的过程大概是怎么发生的?我听一个朋友聊天的时候说到,网管部门要他们系统上某个用户的密码原文,还必须是原文。当然,作为管理部门,是 不需要解释原因的。他们表示,密码都是md5之后的。做不成,对方也没有什么表示。后来老板说,设计系统的时候,密码就用明文吧。从这个闲扯中反推,我大 概能窥见事情是怎么发生的。不过神奇的是,这个简单的事情,怎么会发展成“网管部门有保存明文密码的要求”的,我描述的太模糊了?
    另一个是无所谓的忧虑。我发现很多过来的搜索都是“哪家银行明文保存密码”,还有朋友加我gtalk问我google是否安全。实话说我觉得大家太多虑 了,而且考虑方向还错了。与其考虑谁明文保存密码,不如先无良的假定“你们都是坏人,密码都是明文”。然后再想,我的钱是不是还安全?我的系统是不是还安 全?我要不要关注这个安全?你指望对方设计的时候使用了hash,多重hash,salt,还不如指望自己的密码强度足够,而且符合使用规范。
    密码是什么?从信息学角度说,密码是某个密码空间中的一个随机值。你和服务器约定,提供这个随机值,服务器就验证你的身份。从这个角度说,每两个实体间验 证身份都需要一个独立的随机数,而且这个随机数空间还必须够大。现在的主要问题,是大部分人对这个值的选择太过有规律,太过简单,而且更危险的,对所有场 合使用同一个值。如果真的需要使用同一个密钥,除非你的密码体系是公钥体系。否则即使是challenge-response模式,也有差分攻击这个问 题。
    另外顾虑google的那位朋友就有点神经过敏了。当年google退出中国的理由是什么?被攻击。作为一个被攻击后,事情没人知道的情况下,反应这么大 的公司,无论如何比其他闷声不响的公司更加重视安全,也应当更加安全吧?你们知道索尼的网站也有密码泄露么?你们知道国内网站在这次之前有多少入侵事件 么?在事情没有曝光前主动反应的,google是最大,最严重的一家。如果他不可信,我觉得要找另一家可信的公司就更困难了。
  1. 2012年1月1日23:04

    那天发现新浪微博竟然有丢失密码后申诉可以取回原来的*原文*密码的功能!
    新浪微博这种东西反正我是……不敢用~推特才是王道!
    我的新浪微博号已经被盗掉了~~~~~~~~~~~

  2. 2012年1月1日23:02

    呜呜~我在CSDN上的帐号已经被黑了~~

  3. 小zz的好朋友
    2011年12月29日10:03

    好文章!这次的泄密事件,给中国网民上了一堂生动的网络安全课!这也是个好事!

    • ShareCC
      2012年1月1日15:55

      我个人理解这此大爆裤是中国的爱国黑客(不是爱国愤青那种爱)给那些自以为是颐指气使以和(谐)为贵的中共傻B官员和领导人上了一课,实名制是不能搞的,韩国已经付出惨痛代价了

      • iGFW
        2012年1月1日19:23

        希望是有作用吧

  4. henandudu
    2011年12月29日08:47

    天生多疑 :压根就不是黑客盗取各个网站的数据库!
    黑客直接黑了最高层管理当局的数据库!
    大家留意几个一下有关网站的声明什么的消息,有一个有趣的数字:2009
    那一年发生鹅什么事知道吗,奥运后全方位收紧管理,估计当时还叫各大网站将数据库明文备份上缴。
    后面发生神马事,可想而知!

    这个 有想法

  5. Andes
    2011年12月29日04:33

    “所以我只在linux和android上用,虽然android不安全,但是目前我还不知道有keylogger。”
    让人笑翻掉了,一句话就暴露了作者是个真实的门外汉!

  6. autoreg
    2011年12月29日02:10

    ND5(自己写的密文库)+MD5+时间效验+不超过3个人知道的小范围传播,如何?当然凡事无绝对,当CSDN被爆菊花后我们才知道,忒么的竟然有这么SB的admin。。。幸好没注册..

  7. 天生多疑
    2011年12月28日21:13

    压根就不是黑客盗取各个网站的数据库!
    黑客直接黑了最高层管理当局的数据库!
    大家留意几个一下有关网站的声明什么的消息,有一个有趣的数字:2009
    那一年发生鹅什么事知道吗,奥运后全方位收紧管理,估计当时还叫各大网站将数据库明文备份上缴。
    后面发生神马事,可想而知!