IT人士对用户密码安全问题的常见误解

此次国内网站用户数据库大规模泄露事件,暴露出来的不仅仅是几个网站的安全问题,更让我们看清了不少所谓软件工程师的缺陷:缺乏常识。下面我们总结一下,事件中的各方人士到底在多少基本常识上犯了错误。
当然我很有自知之明,我这样一个业余脚本员、IT门外汉,斗起胆子来点评专业IT从业者的不是,认识必然不够深入,言辞必然会犯不少错误。但幸好我的姿态比他们低,我不会打肿脸充胖子,如果任何人发现我有任何不足,请及时告诉我,我不想一直一直犯同一个错误:)

IT人士对安全问题的常见误解:

1. 明文存储用户密码

明文存储用户密码无疑是愚蠢的,在互联网业界混饭吃的准则之一就是不能假设自己的数据库万无一失。事实上互联网从业者鱼龙混杂,小型公司草创之期体系不够完善,大型公司更可能混入不少半拉子码农。这些水平不一的码农们合力堆砌出来的产品参差不齐,极有可能存在SQL注入漏洞而泄露数据。服务器运行管理不规范也可能导致数据库和代码泄露。

2. 强制用户使用强密码

我在CSDN泄露的数据库中没有找到我的用户名和密码,这反倒加重了我的担忧,因为我实在想不起来自己当时到底用了什么密码。这就是强制用户使用强密码的一个缺点:难以记忆密码。
我在《我认为人人网没有明文存储用户密码》一文中表达过这样一个观点:一个普通用户只可能记住一两个强密码,只应该在有限的几个网站上使用这一两个强密码。如果一个不重要的网站强制用户使用强密码,这既是对用户体验的伤害(我在CSDN注册过好几次,也数次重置密码),也是对安全性的伤害。

3. hash加密

CSDN 事件爆发初期,有不少同学参与了围观,发动群嘲。对于这种因愚蠢而导致巨大损失的行为,嘲讽当然没有什么不对,但令我惊讶的是,这些围观者自身的水平也堪忧。其中的一个常见错误就是拿hash加密[email protected] 就是这么一个自扇耳光的典型。

新浪微博上图虫网的工程师@沈振宇 主动泄露用户的密码md5
[email protected] 主动泄露用户的密码md5

hash的安全性隐患主要来自彩虹表攻击。就目前为止泄露的数据库来看,明文存储用户密码的网站实际上不多(我只观察到CSDN 一个),更多的是把密码一次md5。用户的密码一般是有限位数的数字字母,各md5数据库里一般都会收录有这些组合的字典。利用这些预先计算好的结果进行反查,成功率非常高,所以一次md5的安全性基本上与明文无异。著名的cmd5更是对多次md5等也进行了收录。
而金山的“密码泄露快速查询”也把用户提交的数据进行了md5 hash,此举虽然不能说有什么不对,但确确实实是多此一举。

4. salt与key

真正的数据安全是这样一种状态:即便数据和算法同时泄露,攻击者也无法在有效的时间和空间内完成对数据的解译。显然上述提到的明文存储密码和一次或多次md5都无法达到这个要求。
我在果壳上看到我校sqybi同学的一篇文章,《CSDN 数据库泄露!那些网站够安全吗?》,写得通俗易懂,排版清新整洁,我很喜欢,推荐各位都去一读。这篇实际上已经是中文IT评论里较好的一篇,但在对盐(salt)的理解上,我认为sqybi 仍有不足
hash里的salt是这样一种东西:随机生成的字符串,与用户密码一道进行hash。使用salt的意义在于,由于salt是可变的,最终生成的hash更富变化,攻击者无法利用cmd5等数据库进行碰撞,不同的用户密码对应不同的salt,攻击者所需要的时间和空间就要成倍增加。
sqybi 同学所说的盐有的人对盐的理解则有所偏差,他认为盐是固定的,一个网站上的所有用户都使用同一个字符串进行协同摘要。国内一般把这种固定的字符串叫做固定盐,把随机生成的字符串叫做随机盐,这实际上是对盐的误解。
盐这个概念本身就包含了“随机生成”的要素,如果用于协同摘要的字符串是固定的,那么它根本不应该叫做盐,而应该叫做key。
key也会增加攻击的成本,攻击者不能利用现有的hash数据库,必须先获取key,再根据这个key重新生成一个hash数据库。而salt则要求攻击者必须根据每一个用户的salt生成一个hash数据库,这成本是无法接受的,攻击者只能放弃hash反查这条路,另觅他途。

本站文章除注明转载外,均为本站原创编译
转载请注明以下信息
文章转载自:鲁夫的爱 [ https://opengg.me/ ]
本文标题:IT人士对用户密码安全问题的常见误解
本文地址:https://opengg.me/685/common-misunderstandings-about-user-password-security/

《IT人士对用户密码安全问题的常见误解》有5个想法

  1. Salt只能防止彩虹表, 不能防止暴力破解. 由于现代CPU强大计算能力, 暴力破解中等强度密码是很容易事情. 所以貌似现在业界都推荐使用bcrypt之类方式存储密码, 加大hash算法CPU计算时间来防止暴力破解.

    1. 是的,“攻击者只能放弃hash反查这条路,另觅他途”,这个“他途”指的就是暴力与字典。不过业界是不是都推荐bcrypt呢,就我接触到的项目来说,几乎没有,可能我还是比较外行吧。

  2. 想想去年的这个大事件对我的冲击依然存在,还是有一些小网站偶尔去一次就要去修改原来的密码。我现在的新密码体系是小网站统一密码,大网站再小网站的简单密码上加1-2个字符冗余,这也符合那些大网站的要求,至于网银则使用另外一套密码,保证了以上密码泄漏绝对不会有财产损失。此方法行之有效,记忆要求低,各网站也存在不同的密码变种,不会一篮子鸡蛋全部打碎。不过依然会存在博主说的小网站喜欢强制强密码破坏我这种体系。。。搞得我有时候要记错密码

  3. 这个事件的时候我就想过,其实把用户的密码用一个简单的散列函数对应到一个比较小的整数,再进行对应次数的MD5,类似这样在HASH之前进行一次杂乱的效果是很有效的

发表评论

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