青青子衿, 悠悠我心, 但为君故, 沉吟至今
« 双11电商促销是纯增量 不会牺牲线下解读中国在线视频史上的四次结盟 »

设计自己的密码规则,实现强壮的自我保护

  现在已经不常上博客来了,因为移动互联网的到来,资讯的获取大多数时候是在微博、微信、Pad 客户端上。无意中看到月光博文的这篇《电信级的RSA加密后的密码的破解方法》,个人的感觉是“匪夷所思”,一个堂堂的巨大公司居然会盗取用户的密码,这世界真是太不可思议了……算了,也不去论证这种事情存在的原因,以及它对如此巨量用户的伤害,作为一个普通的用户个体,在无法寄望于正常的保护后,我们还是来想办法怎么自己保护自己吧。

  我们在网站上注册用户一般有两种原因,一种是临时性的,主要是为了下载或查看一些必须登录才有相应权限的资源资讯。在这种注册时,密码可以是很简单甚至固定的,同时用户名有一个特定的标识前缀或后缀,以便很容易区分,所有该类用户都可以用同一个密码。同时,这类用户名绝不发布包含个人重要信息或观点或有意义内容的帖子(以避免你一个很久以前不经意的帖子被判“违法”——央视社会与法频道前几天报道一个新郎,两年前为浏览一个成人页面而发了一些成人图片被判刑,婚礼泡汤。成人图片的意思大家懂的,我就不解释了)。当然,如果你担心有人登录你这样的账户并发表一些不合适的内容(似乎想陷害你),那你除了注意个人的身份信息外,可能还需要简单改进一下密码规则(见下面的技术)。

  另一种注册用户的原因就是你真正想在上面呆,这样的地方你肯定会发表有意义的内容和表达个人观点(请遵守网站自身的相关规定),并且一般情况下你的个人真实身份也可能会正常泄漏,所以密码的安全性很重要。那么应该如何构造一个既安全,又容易记忆的密码呢?

密码保护

  我是这样做的:

  在我的人生中,有一些重要的人、事件、时间、地点……它们都各自可以用一个字符串表示,如日期“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. 这个规则太简单,你可以设计得复杂一些——当然只有你自己知道。

  在馄饨的互联网上,保护自己或许并没有想象中的那么难。无需信任任何一方,你可以设计你自己的密码规则!祝所有的网友平安、健康,还有快乐!

  来源:尘戈投稿



  除非注明,月光博客文章均为原创,转载请以链接形式标明本文地址

  本文地址:http://www.williamlong.info/archives/3660.html
  • 文章排行:
  • 1.Jason
  • 有没有人用过Keepass+Dropbox组合, 真是强悍到爆
    Kepass负责加密, Dropbox负责同步
    Leo 于 2013-11-14 8:36:04 回复
    我就是采用3L的方式做密码管理的,全丢给KeePass了。
    呵呵 于 2013-11-14 10:46:29 回复
    kepass+微云
    7sDream 于 2013-11-14 20:21:01 回复
    keepass + 坚果云
    阿飞v 于 2013-11-25 0:46:29 回复
    Dropbox 在国内要考虑“连接性”的问题,最好加一个国内的网盘备份。
  • 2013/11/14 7:54:35   支持(17)反对(8) 回复
  • 2.passwordss
  • MD5出来的密码有32位,很多网站并不接受这么长的密码,怎么办?
  • 2013/11/16 20:59:33   支持(18)反对(11) 回复
  • 3.fwilyair
  • A => 心中的 AV 明星(yjly)
    为什么我瞬间就想到了樱井莉亚 = =敢问博主正确吗?
    搂住 于 2013-11-15 10:56:30 回复
    回答正确!+100
  • 2013/11/14 8:48:49   支持(19)反对(14) 回复
  • 4.云盘
  • 4. 最终在网站上使用的密码是:'ZmE2NjkzMDUxZWNlMzRhNzY5MWUxMTBlMDBhNGZhYWU';
    如果只是使用局部(无需那么长)会更安全,因为那就完全杜绝了暴力破解 MD5 原始字符串的可能。呵呵

    PS: 当然你也可以用 SHA 的哈希算法
    云盘 于 2013-11-15 13:24:30 回复
    补充:建议哈希是附上网站域名,即如:
    base64(md5('yjly0828stmwilliamlong.info'))

    这样规则很简单,但同样的密码每个网站就都不一样了。
    加上局部采用,完美解决!
  • 2013/11/15 11:43:14   支持(18)反对(13) 回复
  • 5.demick
  • 你好博主。
    我每天都会访问你的网站,从中获取了不少知识。
    如今,我也想做一个网站,个人网站是需要备案的。
    个人网站是否都属于非经营性网站?
    像一个非经营性网站投放广告是否违规?
    非经营性网站是杜绝网站盈利吗?
    replyer 于 2013-11-15 10:11:30 回复
    个人网站是否都属于非经营性网站?——可以在上面进行交易的网站才属于经营性网站吧
    像一个非经营性网站投放广告是否违规?——不违规
    非经营性网站是杜绝网站盈利吗?——不杜绝
  • 2013/11/14 22:31:52   支持(14)反对(10) 回复
  • 6.ashsh
  • 随着今天电脑运算速度的增强,你哪个字符代替哪个都是可能被算出的。你设计的密码太随机,也是你的一个非常明显记号,据我所知正常用户的密码不是这样。我觉得最好,第一,保护你的IP,第二,参照网站泄漏出的其他用户的密码,最好与之相同,那么即使IP泄漏了,也可能认为是那个用户
  • 2013/11/16 12:58:04   支持(18)反对(14) 回复
  • 7.bcatyan
  • 不怎么信任密码网站,所以就自己写了一个程序,放到网上某处,可以随时下载进行密码生成。
    我的做法跟博主类似,但是有所不同。
    考虑到注册网站会很多,所以,我把网站分为三类,一类是常用网站,一类是偶用的不重要网站,一类是能够获取到我的真实信息的网站(类似淘宝,支付宝)。每类网站有一个通用的用户名,方便记忆
    对于记忆密码,我是用 安全词+目标词 的方法生成,安全词,就是生成密码的保密部分,目标词,就是与网站或需要密码处所相关的词汇,所以,我只需要记住安全词,目标词就在网站上,方便记忆。
    至于生成的密码,md5生成的密码位32位,虽然很安全,但输入不便(很多网站由于安全因素,密码框禁止复制黏贴)虽然用过截半,或间隔抽字的方法,但容然有16位,而且国内很多网站只支持15位甚至12位一下的密码,且需要至少一个的大写字母。所以,我又将md5之后的密码进行sha1处理,处理为12位密码。
    所以,我只需要牢牢的记住自己的安全词就好了。
    另外,为了安全,我的密码并非直接由安全词+目标词生成。事实上,程序之中,还有一个隐藏词,也是一段字符串,用来同安全词和目标词穿插后生成最终的密钥。
    注意到博主说,hash后的密码很难被破解,我记得貌似网上已经有比较完备的hash词典存在了,虽然变量集同结果集并非一对一映射,但如果获得了多个密码的时候,还是有可能撞出密码规律的,所以,hash之后,抽取部分重新合成还是有必要的。
    遥远的酱油 于 2013-11-15 11:14:50 回复
    确实,这个规则可以复杂一点,比如计算出的“ZmE2NjkzMDUxZWNlMzRhNzY5MWUxMTBlMDBhNGZhYWU”,在网站实际使用时可以倒序使用后16个字符(局部)。
  • 2013/11/14 3:13:50   支持(13)反对(10) 回复
  • 8.虫子葛葛
  • 安全与便捷总会有些矛盾
  • 2013/11/14 20:52:22   支持(13)反对(10) 回复
  • 9.tkilee
  • 呵呵,对,没错,keepass,
  • 2013/11/22 5:51:34   支持(15)反对(12) 回复
  • 10.let
  • 请问hash是下载哪个啊,我用的chrome.在扩展程序里用hash关键词搜了一下,有三个带有hash的扩展程序,不知该用哪个啊~
  • 2013/11/24 14:36:13   支持(13)反对(10) 回复
  • 11.blue11
  • 有个明显的漏洞嘛,js都在记录你的键盘了,你在设计得多复杂都要用键盘输入的吗,无论hash,md5,还是什么的,它用记录的串不一样可以登录你的帐户吗?
  • 2014/11/5 7:40:23   支持(11)反对(8) 回复
  • 12.David
  • 我想问下,那个报道是什么时候的?
  • 2013/11/14 10:51:58   支持(12)反对(11) 回复
  • 13.yoo
  • 正在使用lastpass,一站一码,都是随机8位。
  • 2013/11/14 1:29:15   支持(13)反对(13) 回复
  • 14.qin
  • lastpass这类软件靠谱吗?
    David 于 2013-11-14 9:20:46 回复
    我也在盲目的用。。
  • 2013/11/14 8:34:25   支持(15)反对(15) 回复
  • 16.有空来泡泡茶
  • 每个人记密码方式一样,其实只要找到规律就可以了,然后给自己的密码分3-4个等级,1个是最重要的,几乎只用在1-2个网站,1个是中等,对于经常使用比如购物站这种,1个是类似论坛,1个就是随便看看,不过话说没有记本子还真不容易记住,特别是不经常用的
  • 2013/11/14 20:48:22   支持(15)反对(15) 回复
  • 17.IT屁民-于
  • 我们应该把自己的账户密码设置的更复杂一些。
  • 2013/11/14 20:56:22   支持(12)反对(12) 回复
  • 18.徐小花
  • 也许“花密”的chrome扩展会对你有帮助: flowerpassword点com O(∩_∩)O~
  • 2013/11/20 20:01:51   支持(13)反对(13) 回复
  • 19.xxx
  • 除了跟钱有关的密码比如支付宝,网银。其他都交给lastpass
  • 2013/11/14 10:40:45   支持(12)反对(13) 回复
  • 20.Lin
  • 我是你是我见过最用心的博主,认识你真好
  • 2013/11/14 20:51:05   支持(16)反对(17) 回复
  • 21.lu
  • 方便不安全

    安全不方便

    取個中間值就好了, 這些小伎倆也就防防菜鳥黑客, 你再複雜的密碼, 擋得住明文? 擋得住棱鏡? 擋得住我黨?
  • 2013/11/16 10:41:58   支持(13)反对(14) 回复
  • 22.真的金龙
  • 有这样的软件叫花密,有各种浏览器插件,也有本地运行端,还有网页形势的,本地就可以用,源码还可以自行修改,[email protected],可以自己定义输出hash后的密码,
  • 2013/11/18 9:47:25   支持(13)反对(14) 回复
  • 23.章为忠
  • 以后设置密码,再也不发愁了。。。
  • 2013/11/14 20:40:21   支持(11)反对(14) 回复
  • 25.von
  • 我使用lastpass,遇到不靠谱站需要注册的时候,就使用预设好的虚假身份填写注册表单,密码一般是随机生成的,类似于:468w4MWNaveyzcTAHG5dwS78
  • 2013/11/14 9:13:38   支持(9)反对(16) 回复

发表评论:

 请勿发送垃圾信息、广告、推广信息或链接,这样的信息将会被直接删除。

订阅博客

  • 订阅我的博客:订阅我的博客
  • 关注新浪微博:关注新浪微博
  • 关注腾讯微博:关注腾讯微博
  • 关注认证空间:关注QQ空间
  • 通过电子邮件订阅
  • 通过QQ邮件订阅

站内搜索

热文排行


月度排行

本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享. 转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议.
This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License.