evol128[Blog]

I am the bone of my code

一个安全的个人密码系统

本文写于2011-05-28

一早发现我的gmail有从异地登录的记录,这让我很震惊。我自认为是一个很有安全观的人,密码这种东西一向是小心处理的;同时我也是一个懒人,所有网站都用了同一个密码。虽然我很莫名,但我不得不承认,我的密码在某时某地以某种方式泄露了。这次密码泄露对我来说损失惨重,我不得不手动更新了其它主要网站的密码。

痛定思痛,我决定启用一种更加安全的密码机制。其能够达到以下几个目标:

1.能够用大脑轻松记住密码或密码的构造方式

2.不同网站不同密码

3.即使密码泄露,也只影响到被泄露的那个密码,而不会被推测出其它密码

4.即使知道我的密码构成方式,也不能破解我的密码

5.即使有人通过某种神通广大的方式获得了我的所有密码,他仍然不能破解我的密码

 

基本思路:one way hash, 单向散列加密,不清楚的朋友们可以参考一下wiki (http://en.wikipedia.org/wiki/Cryptographic_hash_function)。我们平常用的md5,sha256都是比较出名的hash算法。

简单说来,这种加密算法有2个特性:

1. one way单向:就是说你没有能力(这里我避免使用“不能”这个说法,如果有几千年的寿命应该可以吧,呵呵)去根据密文来破解明文,不管给你多少信息都不行

2. collision free冲突免疫:你没有办法构造2段明文来让它们的密文相同

这样,一旦我用hash加密了我的密码,然后把密文当做新密码的话,任何人都没有办法破解我的密码

 

具体方法:

工具: hash generator(网上随便下,千万别用在线版,你发出去的http请求可不会加密),字母表转换器(自己写)。通常hash函数是将一个字节流映射到另一个字节流的,我们必须把结果转化为能够从键盘输入的字符流。

方式:alphabet(hash(key, website))  把网站名也hash进去就保证了每个网站密码不同