谈密码的管理方法
转自 http://shell909090.com/blog/2011/09/%E5%AF%86%E7%A0%81%E7%AE%A1%E7%90%86%E8%A7%84%E8%8C%83/
下面是贝壳自己总结的密码管理规范,大家可以参考一下。
概念解说
- 网络密码和本地密码。网络密码通常很难暴力攻击,尝试速度受到网络限制,而且尝试一定次数后还可能被管理员发现。而本地密码则相对比较容易攻击,我假定本地密码攻击可以达到每秒测试2^30个密码。
- 密码长度推定使用如下计算方式。使用年数乘以攻击频率,得出攻击者在密钥使用期限内能尝试的最大次数。为了安全起见,尝试范围不应当超过总体密码空间的一定比例。以此推算出密码空间大小,进而推算出信息位数,然后还原为密码位数。
- 数字密码,字母密码,数字字母混合密码,大小写数字混合密码。数字密码的信息量是3.3bit/位,字母为4.7bit/位,混合为5.17bit/位,全混合5.96bit/位。
密码原则
- 一次一密。除了零级密码,不要为多个系统设定一样的密码。有些系统并不像我们想像的安全,一旦这个系统出问题,被还原原始密码,就会牵连到其他系统。
- 定期更换。没有什么密码能用一辈子。
- 写下来。因为一次一密,所以我们会有大量的散碎密码。不写下来是不保险的,写下来是不安全的。折衷一下,还是写下来,保存好吧。推荐用高级密码加密低级密码的方法,例如keepass。
- 生成型密码。用一个特定字符串+网站名,做sha-1然后取最后8位。这样的密码满足一次一密,不容易破解,不需要写下来,唯一的问题是你要现算…
零级密码
- 零级密码是有些不需要保护的情况下,又非设定密码不可。对于这种情况,你只能设定一个不算密码的密码。例如常用机器的用户密码。这些密码可以通过livecd/liveusb轻易修改,因此没有一点保密价值。
- 零级密码不需要安全性和保密性,因此好记就行。例如111,222,选一个常用的,爱用多久用多久。
低级密码
- 低级密码是用于保护一些你不希望别人看到,然而别人看到并没有直接损失的内容。例如家里机器的性能数据,普通相册的访问密码。这些内容被别人看到不会产生伤害,然而无成本的放出这些内容有潜在的风险,或是你自己主观意愿希望保护,内容安全性要求又不特别高。
-
我假定低级密码在网络上会受到100次/年的攻击,本地密码会受到1小时/年的攻击,可用时间五年,穷举空间不超过总密码空间的1/1000。
- 网络密码的攻击信息量为log2(100 * 5 * 1000) = 18.93bit。使用数字密码应在6位以上,字母,混合,全混合应在4位以上。
- 本地密码的攻击信息量为log2(2^30 * 3600 * 5 * 1000) = 54.10bit。使用数字密码在17位以上,字母在12位以上,混合在11位以上,全混合在9位以上。
- 结论,低等级的密码长度小,使用数字也并不难记。推荐使用4位以上字母(反正混合使用长度也没有下降),不要使用常见组合还有单词。推荐方式是将自己喜欢的一句英文首字母简写前后颠倒使用。例如:I will be back,对应密码bbwi。
中级密码
- 中级密码用于保护一些你不希望别人看到,别人看到会对你产生损失的内容。例如你的帐薄,日记等等。中级密码使用时,最主要的风险已经不来自于密码本身,而是使用密码的环境。包括电脑是否安全,中途网络是否安全,旁边人的肩窥攻击。
- 我假定中级密码在网络上可能会受到10000次/年的攻击,本地密码会受到100小时/年的攻击,可用时间1年,穷举空间不超过总密码空间的1/100000。
- 网络密码的攻击信息量为log2(10000 * 1 * 100000) = 29.90bit。使用数字密码应在9位以上,字母在7位以上,混合应在6位以上,全混合应当在4位以上。
- 本地密码的攻击信息量为log2(2^30 * 3600 * 100 * 1 * 100000) = 65.07。使用数字密码在20位以上,字母在14位以上,混合在13位以上,全混合应当在11位以上。
- 结论,中级密码开始,数字密码的位数就太长了,人类记忆很难记得。推荐使用8位以上字母密码,产生方式同上。
高级密码
- 高级密码用于保护一些有价内容,例如公司标书,银行账户。高级密码要注意更换,最长不要超过半年。
- 我假定中级密码在网络上可能受到1000000次/年的攻击,本地密码会受到8700小时/年的攻击,可用时间0.5年,穷举空间不超过总密码空间的1/10000000。
- 网络密码的攻击信息量为log2(1000000 * 0.5 * 10000000) = 42.19bit。使用数字密码应在12位以上,字母和混合应在9位以上上,全混合应当在8位以上。
- 本地密码的攻击信息量为log2(2^30 * 3600 * 8700 * 0.5 * 10000000) = 77.15。使用数字密码在24位以上,字母在17位以上,混合在15位以上,全混合应当在13位以上。
- 结论,高级密码使用字母都很难记忆了,只有写下来。千万注意保存好写下的密码,一旦丢失或者泄露,绝对不是闹着玩的。熟悉计算机的可以使用keepass配合版本管理器,支持linux/windows/android。尤其是android版本,虽然不方便修改,但是方便使用,非常好用。
特殊密码
- 所谓特殊密码,就是银行账户。这类密码分级上应当属于高级密码,然而大家可以看到,高级密码长度应当在12位以上,而银行卡密码最大长度只有6位。这主要是因为银行为了安全做了特殊设计,五次密码猜错就会警告或者锁定,破解难度远远高于网络密码。如果你的银行密码是全随机的,可以放心使用,不过建议一年一换。如果你的银行没有五次猜错警告并锁卡功能,立刻换银行!
- 不过银行密码最大的风险,在于很多人为了方便记忆,使用了自己或者亲友的生日。根据统计,在银行密码中使用生日是最多的,其次是电话号码,车牌号码,门牌号码。不过限于实验次数,多数是实验生日。
- 对于这类密码,推荐一种好记又够强的数字产生方式。将亲友的生日顺序颠倒使用。不要对外说明或者暗示是哪个亲友,也不要泄露颠倒方法。这样造成的穷举范围通常在3000-5000之间。即使是你的熟人心怀鬼胎,也很难猜出密码。就算用的是他本人生日,都未必猜的到。如果将他们的电话号码顺序颠倒,则效果更好。
其实上面条例林林总总,贝壳自己都未必全部遵守。例如一次一密,有些账户密码还是一样的。不过经过我本人评估,这个风险比较低,可以接受而已。至于我的主密码长度——这个可以透露。是14位数字大小写混合密码,有效信息量82位。部分还带有特殊字符,信息量91位。即使以最严苛的标准来看,都足够解密者算到5年后了。