Password Generator

2016/06/21 dev

都怪当初贪便宜,iPhone 选择的是最小容量,看着满屏幕的 app, 不知道该删掉哪一个。排在顶前面位置的,是 1Password,当初慕名下载,却用的并不多,关键还是觉得不保险——我这可是单机版,万一手机丢了,全部密码不都歇菜了?

说起密码管理工具,从当年 CSDN 密码泄漏事件开始,我便开始反思一站式密码的弊端,明白了密码分级管理的必要性:银行卡等身家性命为最高等级,QQ,微信以及重要网站 app 为第一等级,普通却常用的网站为次一等,其他一些一次性注册的论坛等,为最低级。密码的规则依次简化,那时对密码管理的理解也就是这样的层次了。

看了皓叔写的《如何管理并设计你的口令》 后,更加热衷于定义各类密码组合规则,却发现走入另一个误区,随着帐号越来越多,记忆开始出现混淆,尤其是随着密码记忆功能的普及,越少次数的登陆导致对密码的逐步陌生。以至于有时急于登录某帐号,试了好几个密码都未能成功,甚至还会把自己的帐号锁住,实在让人哭笑不得。

后来密码管理器的出现,的确帮我解决了一些问题。同时,云同步大行其道,手机上的 app,电脑上的客户端,甚至浏览器上的插件,几乎会帮你将所有密码维护在云端,你只需要记住主密码,就可以畅通无阻的在任意平台获取你随机生成的密码。随机降低了密码的耦合度,云保证了密码获取的便利。然而这依然取决于密码管理器的设计,1Password 是这类软件中的佼佼者,于此相匹配的,是它惊人的价格,它几乎涵盖了全部平台版本,但却皆为单独收费,且价格不菲。于是我仅仅在其限免之际,将 iPhone 版收入囊中。

意外的是,这么优秀的软件,我却用的极少,一些经常登陆的网站,我依然采用自己设计的规则管理密码,如微博、QQ、知乎、豆瓣、百度等等,我不想每一次浏览器缓存失效时,都掏出手机,输入长长的主密码,然后翻到要找的网站,然后显示该密码。本来是一个直接登录的简单过程,却生生因为所谓的安全性,变得极其复杂。就如一台高效运转的新操作系统,偏偏要给它装上一大堆杀毒软件,各种安全卫士,让其生生变成一台“卡巴斯基”。真不知道这是否得当。

并且,我并非手机不离手的人,本来很简单在电脑上登录淘宝,却因密码去找手机找了大半天。等密码找到了,都忘了要在淘宝上干啥了。

一次偶然的机会,我需要为一款软件制作 License 验证系统,也就是俗称的防盗版子模块。接触到了加密技术,才发现了密码可称之为“安全”的真正含义。

Hash 散列是最常见的一种加密方式,曾一度流行的 MD5 码,便是一种生成散列值的算法。我们常常通过 MD5 来校验自己下载的软件是否是正版可信的软件,也会通过 MD5 来标记一种独有的资源。这便是利用 MD5 的不可逆性,以及被碰撞的复杂度。但遗憾的是, MD5 作为一种加密手段仍稍显薄弱,在 2004 年,MD5 被证实无法防止碰撞。2009 年,一篇 《How To Find Weak Input Differences For MD5 Collision Attacks》 彻底让 MD5 走下神坛。

取代它的,是 SHA 家族,全称为:Secure Hash Algorithm. 该家族中目前运用最广泛的是 SHA-1 算法,它并不比 MD5 的命运好多少,在 2005-2006 年陆续有很多人找到了碰撞方法。但即使这样,想碰撞 SHA-1 仍然有很高的复杂度,需要投入较高的成本。

无论是上述哪一种加密算法,要保证的都是不可逆性,假如将加密后的字符串,作为密码。那么,无论哪一个密码泄漏,都不会据此推测出加密前的信息。这样就实现了降低耦合度的效果。

我初步设计了一套规则来生成我的密码:

{"username": "email/username", "app": "application name", "1Password": "your origin password"}

这就是三组健值对,构成密码对应的基本信息:哪个用户名/邮箱,哪个网站/app,原始密码。然后通过某种加密算法:如上面提到的 SHA-1 算法。得到一组加密后的字符串。对其进行适当的截取,即可作为一个密码。

我开发了一个简单的应用来实现我上述的想法:Password Generator for pezy ,目前我已经开始使用它来帮助自己管理密码了,所以基本算法规则不会变更。仅仅会微调一些界面元素。

另外欢迎用手机来访问该应用,我专门做了对于移动端的兼容。

姓名*:

电邮*:

网址(可选):

评论*:

Search

    Table of Contents