密码为什么明文存放

  很早就写过一篇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门的隐患吧。
参考:《密码管理规范

89 thoughts on “密码为什么明文存放

  1. 是贝壳shellxy吗?- -好像不是。。路过。。

    shell 回复:

    当然不是,那是花喵。我们是贝壳家族。

    啊咧 回复:

    啊咧?你们说的是猫猫shiny咩?

  2. 很多网站都是明文存储密码的吧,这回的事可真给我蒙上一层阴影了。

    shell 回复:

    非常多,多的超乎你的想像。尤其是很多时候明文密码有利可图的时候。

  3. “在任何网站/服务上,你绝对不能使用同一个密码,零级密码除外。尤其请注意,不要在两家银行使用同样的银行卡密码/网银密码,原因不说。”
    IT业内估计也不会有很高比例的人能做到这一点吧,更不用说普通用户了

    shell 回复:

    这不是能不能做到的问题。不照做也可以,结果就是承担后果,像这次一样。

  4. “1.明文密码没法应付检查” 感觉这句应该是“没有明文密码没法应付检查”啊。。

    shell 回复:

    是的是的,这样说比较明白些。

  5. 原来还有这么多问题,这每个网站和银行卡要是设的密码都不一样,那得多费脑子啊…….

    shell 回复:

    所以我教你个简单的办法,每个银行找个亲戚朋友,比较熟,知道生日,但是不要太熟,自己,老婆,父母,都不太合适。
    然后你用这个朋友对应上银行,例如——招行就是张XX。
    然后用同样的方法颠倒年月日——例如日月年。
    好,现在,即使是和你很熟的朋友,知道你这个方法,在猜你密码的时候,他怎么知道招行是哪个朋友的什么颠倒顺序?
    而且每个银行还不一样。

    無拘野馬 回复:

    其实这种方法也不好。我的银行卡密码是俩个我常用的数字加上银行卡的某个位置的四位,这样导致我的所有银行卡密码都不一样 甚至在拿到卡之前我都不记得
    比如说我用的数字是12 某俩个卡的位数是5555 和6666那么密码就是125555 126666

    shell 回复:

    这个在知道你的算法后,密码强度会降低到只有两位。

    phoful 回复:

    这个方法好,因为这个算法可以自己再加以改进,并且没有人知道你有这个算法

    shell 回复:

    实话说,只是我不大喜欢而已。密码学的一个基础假定就是,算法公开,密码保密。这个其实是把算法当作了一个密码。
    而这个强度本身就需要再推导——也不算很烦,就是把你的算法再抽象,然后根据其中泛化出来的量来估算产生了多少附加信息。

  6. 我觉得就是上头审查的事,据说是09年开始要的,09年也是政府因为google不配合,攻击gmail账户,把google搞走的一年,说不定那次之后政府顿悟了什么。。。

    shell 回复:

    不一定,不是每个网站都需要审查明文密码的,但是我对中国的网站持有最高戒心。
    不过即使是国外网站,我还是坚持一次一密。

    Sunny 回复:

    “我向来是不惮以最坏的恶意来推测中国人的”

    shell 回复:

    我也是。。。

  7. 这个真是借口了…..可以开个绿色通道….不用密码就可以进入某人账户啊….

    shell 回复:

    要进入某人账户,即使用hash密码也可以阿。从数据库中dump出hash,然后用临时值update一下。行了,随便去用吧。
    用好了update回去,再delete from XXX where time >= XXX;你都没法发现。

    lonegunman 回复:

    你这个会被当事人发现的。。。

    shell 回复:

    所以少说少纷争。

    shell 回复:

    而且,也未必会阿,脚印都被擦干净了。
    万一发现,删掉帐号,说用户是竞争对手造谣。

    卢达 回复:

    既然网站已经打算配合上级准备提供密码以方便上级调查了,在这个过程中你的隐私已经被出卖了;
    一个愿意出卖你隐私的网站,还会花费大力气来为你的密码加密吗?

    shell 回复:

    两码事,即使是需要上级登录,我也会通过功能而非不加密来完成。因为hash密码最主要的防范目标是内部员工和数据库暴库,而不是上级检查。

  8. 第1条是在河蟹横行的天下没法避免的,2、3让我觉得这种工程师实在没救了

    shell 回复:

    实话说,这种人不多,可每次出来都很无语。

  9. 密码多了太难记. 不常用的网站.过段时间就忘掉了.
    不过这次被暴库是什么原因导致的呢”

    shell 回复:

    不知道,这个没有足够的数据知道为什么——原因被掩盖在迷雾下。

  10. 第一条 不是理由吧:
    要检查可以把用户的密码在数据库里改掉,然后让领导登录的呀。
    或者 开发一个 可以切换到任何用户的 功能,也没有多难。

    shell 回复:

    不,领导要登录当然不用这么麻烦。问题是监管部门就是需要原始密码——他们要去同密码测试国外网站。

    ethan 回复:

    那就随便给他个密码,登不上也怪不得我们。所谓上有政策下有对策。

    shell 回复:

    嘿嘿,一次两次这么糊弄没问题,估计最开始的时候也是糊弄的。
    到后来上级就不好糊弄了,作为当事人程序员,没道理得罪上级吧?

    vanxining 回复:

    我觉得cos.x说得很对,第一条根本不是什么理由,感觉楼主首先把领导说得什么都不懂,忽然又懂这个密码在国外网站同样适用,有点好笑。
    一个人假如 被政治蒙蔽了双眼,那么看一切都会不顺眼,都会找理由自圆其说

    shell 回复:

    领导是讲理的地方么?好比我和老板讨论为啥我的程序在IE下就是不行——我照着规范来了啊。他倒是简单——IE是讲道理的东西么?
    领导通常性情况下,都是想到一出是一出的。逻辑上说,不懂一次一密的危害,就不会想到去国外网站试试国内密码了?我不懂门锁钥匙原理还不懂拿到你裤子上那个钥匙环一个个试么?想到这出,马上就一个电话过去。下面的人,给我搞来XX人,就那个不听话的XX,其他网站的密码,我们去试试——
    ——当然,这只是推测。不过因为政治因素要求保留原始密码的需求确实存在,不是每个人都碰到,也有不少程序员有亲身经历。找几个人求证一下就应该知道所言非虚。
    另外,我觉得被政治蒙蔽眼睛的不是我,反而是来这里的人。我上面列出了一堆原因,其实我觉得可能性最高的是什么?我今天白天发之后和朋友说过,我觉得是五。但是基本来的每个人,都在讨论一,弄的好像我在指责中国的互联网制度一样。前面的文章作证,我可是一二三四五列了一堆啊。

  11. 真希望这篇文章是危言耸听,看着毛骨悚然。。。

    shell 回复:

    我还有篇你更加毛骨悚然的文章正在写,明天发出来,估计八成看的人都一身冷汗。

    carly 回复:

    好的,期待!也希望看你讨论下为什么手机不是一个足够安全的设备。

  12. 居然还有这些原因。。。。好吧这里是天朝

    popone 回复:

    法国议会正在讨论中的一项数据保留法律,如果密码不是以明文而是以哈希密码形式储存,将被宣布为非法。

    shell 回复:

    所以干脆在客户端哈希,你留着吧。

    popone 回复:

    面对任何一种国家暴力机器想要靠密码来保护隐私?爱国者法案会表示可笑,另外我记得米国政府根本不允许民用设施使用强度高于某个级别的加密措施——其涵义不言而喻。哈希和所谓的密码管理规范只能用来防防刚入门的小贼。

    shell 回复:

    那是93年的事情,具体看我写的软件自由英雄谱。96年已经放松。中国制作,提供十米精度的地图就是违法的,这个是88年的规定。

  13. Pingback: Raising Sand » password

  14. 如果为了对付上级…倒是不如主动做一个超级用户,有权限修改,查看任何用户数据…起码比明文存储密码要强…

    shell 回复:

    这个照例是有的,不仅是应付上级,有的时候有人捣乱也得处理啊。

  15. 悲催,我和老婆双双中弹,csdn我恨你。幸好我现在已经是一个网站一个密码,而且密码绝不相同了。

    shell 回复:

    我早就改掉了,我老婆的密码我不管她。

  16. 服务器时间是错误的。

    shell 回复:

    不好意思,买了国外的服务器,那个时间不是我设定的。有人知道wordpress怎么改用另一个时区,或者设定时间修正么?

    carly 回复:

    settings-general-timezone

  17. 另外说明一下,不要乱猜是哪家银行了。我记得这个是几年前的事情,现在是不是还明文不确定。但是无论是不是,你都假定他是明文存放的。在这个假定下你不受影响,才是安全的。依靠银行必须加密存放的安全根本不靠不住。

  18. Pingback: 国内观光:谁弄丢了你的帐号和密码 | 勇者无畏

  19. Pingback: 国内观光:谁弄丢了你的帐号和密码 « The New Vault of Pan Weizhi

  20. 第一条,所见略同了。比如新浪微博的“被原作者删除”如此诡异,不仅仅可能是后台做的手脚,更有可能是直接通过后台登录用户的帐号然后直接删除……而新浪微博这个地方更符合LZ在分析时的第一条,上面有多少人是不领导们不希望看到说话的……

    shell 回复:

    这个还用不到明文保存密码的手段,只要给一个穿某马甲的功能就好了。

  21. Pingback: 不落哥 | CSDN/人人/开心/美空/世纪佳缘/百合/多玩被泄密

  22. 你好, 我想请教两个问题: 对那些用密文存放密码的网站, 登录时密码是在本地(比如浏览器)加密后传到服务器, 还是将密码传送完然后在服务器端加密再储存和匹配的呢? 我比较希望是前者:-) 另外如果想知道上个问题的答案应该看什么资料? 谢谢了!

    shell 回复:

    通常性情况下,都是传到服务器端后加密的,这就是为什么我说你只能假定服务器端明文传送密码。安全的登录必须使用ssl。
    这个问题你可以看密码学的相关文章,而具体是否过程,你需要看rfc2616,里面有http/https过程的具体实现。

    abellong 回复:

    明白了: SSL 登录会将用户名密码加密传输, 这个可以防止中间人窃听. 但不会将密码用hash函数加密后, 再将用户名和密码hash值加密传输, 其实这才是我想要的: 服务器端就根本接触不到密码的明文. 谢谢你的回复:-)

    abellong 回复:

    我觉得密码就应该在客户端hash加密, 不知道这个有什么问题, 为什么没人用, 抑或有而我不知道?

    abellong 回复:

    还是不行, 只在客户端加密密码, 黑客盗取服务器的数据库后一样可以使用(登陆时选择不hash加密密码…)

  23. Pingback: 冷眼·Digest >> CSDN爆库内幕:密码为什么明文存放?

  24. Pingback: CSDN密码泄漏问题 | 小库のBlog

  25. Pingback: zz 密码为什么明文存放 | 人傻不能复生

  26. 不是,就从一个朋友的一个个例,而且这个个例还是所谓“推断”出来的,就写文章说这是硬性要求。有点过了吧。又给cn的网络审查加上浓重的一笔。

    shell 回复:

    首先,我从来没说过是硬性要求,你可曾看到我说,“硬性”,“必须”?
    其次,这也不是一个个例,而是一些。
    最后,如同我文章中所写的,把技术问题意识形态化的不是我,而是来的每一个人。我在讲述的时候,只是说,这是可能性之一。你看到我在上面列了六种可能性,他还不是最长的那个。然而每个人都兴致勃勃的和我讨论,网络监察部门有没有要求明文保存密码。实际上,我哪知道呢,我又不是他们公司的股东,他们老板还得和我汇报过程。我只能说,我可以肯定,网管部门是这个事情的来源之一——即使开始的时候只是领导的一句话。你总无法排除他是明文保存密码的原因之一吧?

  27. “程序员们就往往会得到一条死命令,保存明文密码。”
    这里的确没有“硬性”这个词,我不觉得在这里死扣字眼很有意思。

    “实际上,我哪知道呢,我又不是他们公司的股东,他们老板还得和我汇报过程。我只能说,我可以肯定,网管部门是这个事情的来源之一——即使开始的时候只是领导的一句话。你总无法排除他是明文保存密码的原因之一吧?”

    的确没法排除,但是正如你所说 你“哪知道”。所以我个人觉得你在文中使用如此肯定的论述语气是不妥的。 看看这篇文章的影响 ,看看群众们的留言,影响依然发生了,如果你还在哪里说“我没说硬性、肯定啊 你们非要那么理解” 那我就不继续留言下去了。事实上,我已经决定这是最后的留言了。

    shell 回复:

    好吧,我也不打算和你辩论这个问题了,实际上如此说网管部门只能说非常给他们留面子的。
    你知道网监部门在所有论坛上都需要安装监控软件么?这不是一个听闻或者推测,而是已经公开的事情。这些软件会对你插入数据库的数据进行分词比对,如果有问题,他们很快就能得到通知。更搞笑的是——这个软件还得被监控者自己出钱购买。不过谢天谢地,好像软件只有windows版。实际上,这个软件可以直接读取数据库,或者操作服务器。又有谁来保证这个软件的安全呢?
    我如此愤怒的原因,不在于你说我用肯定的语气论述不确定的事情,而是你在毫无疑问的政治化一个技术问题。我说lastpass上传了密码,因此有被破解的可能。实际上我的朋友看过他们的行为,他们在本地进行了加密。然而我只是质疑,对于一个源码不透明的系统,是否可以肯定没问题?好,这件事情上,我以非常肯定的语气陈述了我毫无理由的推测,你一点异议都没有。我在第四个理由上的论述——系统的管理者,每个人都没有足够的动力去修改系统——也是一个推论。难道我可以无可辩驳的了解每个人的内心,并且公正的下结论说,他们确实没有动力修改系统么?对此你也没有异议。你单单抓住第一点说,即使无法排除,以肯定的语气论述也是不妥的。
    我们在做分析的时候,对所有公权力部门/大企业,都是以肯定的方式做出合理的推测,这是符合新闻常规的。美国媒体可以质疑政府庇护华尔街,我们可以质疑美国实行贸易保护,难道都有不可动摇的,无可辩驳的证据么?缘何网监处如此特殊,我要批评他的时候必须有完全肯定的证据?我有朋友合理的讲述了一个过程,我认为任何正常人都可以得出结论,你质疑这不能说明问题,不能以肯定的语气陈述。那么如果我说我听到他说了,你会不会质疑我口说无凭?如果我说我录音了,你会不会质疑我进行编辑?我说我证据全了,你会不会质疑这是美国政府操纵的阴谋?我只是表述我自己看到的事情而已,为何要如此小心翼翼呢?

    shell 回复:

    另外,您是北京交大的?您的浏览记录的refer是从北京交大知行论坛上过来的,IP地址是中国数字王国有限公司。北京交大是他们的客户之一。
    我为有您这样的校友感到羞愧。

    shell 回复:

    哦,对了,应该叫北方交大。

  28. Pingback: CSDN爆库内幕:密码为什么明文存放? | 说笑吧

  29. Pingback: Google Reader Share: 密码为什么明文存放及其他 « Kailai's Lifestream

  30. Pingback: 密码为什么明文存放 | PS' Blog

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>