我们在网站上注册用户一般有两种原因,一种是临时性的,主要是为了下载或查看一些必须登录才有相应权限的资源资讯。在这种注册时,密码可以是很简单甚至固定的,同时用户名有一个特定的标识前缀或后缀,以便很容易区分,所有该类用户都可以用同一个密码。同时,这类用户名绝不发布包含个人重要信息或观点或有意义内容的帖子(以避免你一个很久以前不经意的帖子被判“违法”——央视社会与法频道前几天报道一个新郎,两年前为浏览一个成人页面而发了一些成人图片被判刑,婚礼泡汤。成人图片的意思大家懂的,我就不解释了)。当然,如果你担心有人登录你这样的账户并发表一些不合适的内容(似乎想陷害你),那你除了注意个人的身份信息外,可能还需要简单改进一下密码规则(见下面的技术)。
另一种注册用户的原因就是你真正想在上面呆,这样的地方你肯定会发表有意义的内容和表达个人观点(请遵守网站自身的相关规定),并且一般情况下你的个人真实身份也可能会正常泄漏,所以密码的安全性很重要。那么应该如何构造一个既安全,又容易记忆的密码呢?
我是这样做的:
在我的人生中,有一些重要的人、事件、时间、地点……它们都各自可以用一个字符串表示,如日期“2013.11.11”、地点的拼音串 “zhonguoshenzhen”、生日“1989.09.01”(是的,用生日没关系……),它们都在我的心中,不会忘记也无需记忆。毫无疑问,这些字符串不能直接拿来做密码,因为网站很可能明文记录它们,这样你心中的这些标识就泄漏得一干二净了(很危险的事)。同时你还需要记住那个用户名对应心中的哪个标识,如果你记性不好,可能把它记在纸上,而这也不安全!
那该如何做呢?
其实无需记住哪个用户名对应哪个密码,也不用明明白白记在纸上。你需要做的是建立一个心中的映射:把心中的那些重要标识用一个易于联想的单词(甚至只是一个字母)对应起来,然后在纸上记录这个联想词及其所属帐号。所用联想词一般组合使用更好,如 A 代表你喜欢的一位 AV 明星的名字,B 代表你第一位暗恋者的生日(Best),记在纸上的“BA”标识就代表那个生日加上另一个名字(~哈哈,莫要鄙视俺啊)。这样,密码被记在了纸上但依然安全。在你未来的一生中,你会注册的网站会很多很多,远远超出你的想象~,so……隐私很重要!
记在纸上的密码安全了,但网站那一端呢?如果登录的网站被第三方不可抗拒的植入了 JS 键盘记录代码,或者网站本身就无法保护你留下的密码呢?我们该如何面对?
答案是:
在浏览器上装一个 Hash 插件(MD5、SHA 等皆可),在插件中输入从联想词翻译过来的密码,Hash 出一个字符串(当然也可以多次执行,如先 MD5,然后再 Base64)作为最终在网站端使用的密码。这样做的安全性如下:
1. 在插件中输入密码,使得浏览器中目标网站的页面即便被注入了 JS 代码,但页面中的 JS 代码没有能力获得插件中的输入;
2. 最终提交给网站的密码串经过了 Hash 计算,这是一个不可逆的类随机字符串,无论谁都无法知晓“你心中的那些永久标识”(PS:那些标识的数量是有限的,所以也是珍贵的);
3. 当然,浏览器和操作系统干净是总前提,否则一切安全性面谈;
总结一下:
1. 临时账户用简单密码甚至固定,账户名具有一定特征,不发表有意义内容。如果担心身份被盗用,密码可以加一个 Hash 保护;
2. 建立一个“心中重要事物的标识”清单,用易于联想的字词对应。联想词作为准密码记录在纸上;
3. 在安全的浏览器上(如 chrome)安装一个 Hash 类插件;
4. 真正注册时使用的密码是由联想词翻译出来的标识串 + Hash 计算后的类随机字符串;
安全性与适用性
1. 不论网站页面是否被强制注入 JS 盗取密码(附带说一句,这样的盗取代码很简单),也不论是否网站本身安全性就有问题,这样做都可以保护你。
2. 因为最终用到网站上的密码是使用 Hash 计算而来,不存在破解可能,你心中的那些重要标识不会被知晓,那么它们就可以永远使用。如果需要修改密码,调整一下联想词组合即可;
3. 联想词记录在纸上,无记忆负担。同时无人知道那些联想词对应什么(建议组合使用),那样即便很熟悉你的人也不可能完全清楚它们是什么;
4. 建立一个自己人生中“重要事物的标识清单”并用简单词联想并不难,——它还会逐步丰富,动态扩展。
5. 总的来看,你需要记住的只是一样东西——一些自己很难忘记的东西(构造标识可以简单使用拼音,或者其它,你自己清楚即可);
更精简一点的表述
1. 心中:重要东西标识串 => 联想词。例如:A => 心中的 AV 明星(yjly);B => 初恋女友的生日(0828);C => 我最喜欢的编程语言界大哥(stm);
2. 纸上:用户名,密码为联想词组合。记录:网站 HttpX;用户名 巴地草;密码 ABC;
3. 网站:用户名,密码为 Hash(联想词翻译)。计算:base64(md5('yjly0828stm'));
4. 最终在网站上使用的密码是:'ZmE2NjkzMDUxZWNlMzRhNzY5MWUxMTBlMDBhNGZhYWU';
5. 这个规则太简单,你可以设计得复杂一些——当然只有你自己知道。
在馄饨的互联网上,保护自己或许并没有想象中的那么难。无需信任任何一方,你可以设计你自己的密码规则!祝所有的网友平安、健康,还有快乐!