抱歉,你查看的文章不存在

我的密码之旅:从统一密码,到云同步的随机密码器

取一个变量很纠结,取一个密码很头痛,为此我们并不能取一个简单的密码。

硅谷

而出于以下的背景:

  1. 10 年前我使用一个固定的、统一的密码,直到一系列的明文密码泄露事件,我在不同的平台采用了不同的密码。
  2. 在经历了一系列的忘记密码之后,我开始采用平台限定的密码,即不同的平台,密码是半动态的。
  3. 现今的大部分重要网站都采用了二次验证,或是 Google Authenticator,或是短信验证。
  4. 在 ThoughtWorks,我们的密码需要每三个月换一次,它足够的长,并且有一系列的复杂规则。

于是,我终于编写了自己的随机密码器,然后它也是“云同步”的。

统一密码

大家都懂的。。。

如果你的所有账号只有一个密码,那么你完了。。。

最好不要拍些艳照什么的。

快速密码:解锁电脑

当我还在使用 Windows 时,从来就没有想过,可以拥有这样的一个密码:

1qaz2wsx

它在输入上特别快速,并且解锁起来又特别的快。

因为,对应于键盘上的:

1qaz2wsx

它有一些变体,比如说:

1234qwer

又或者是:

1qaz@WSX

也会有一些其它高级的变体。

特定平台 + 固定密码

10 年前我使用一个固定的、统一的密码,直到一系列的明文密码泄露事件,我在不同的平台采用了不同的密码。在经历了一系列的忘记密码之后,我开始采用平台限定的密码,即不同的平台,密码是半动态的。如下就是一个简单的,对应于不同平台的代码体系,如:

  • 京东: tb-1qaz2wsx
  • 淘宝: jd-1qaz2wsx

而这样的密码本身也是不安全的,如果有人知道密码规则的话。那么,这无异于一场灾难。于是,我在设计出规则到现在,仅会在一些重要的网站上,采用这种规则。

使用密码管理器

在几年前,我初次接触到了密码管理:LastPass、1Password——对于普通用户来说,它们是一个相当不错的工具。1Password 可以使用 iCloud 同步,可惜我是个 Android 用户。因此,一旦需要我输入密码到手机的时候,就变得有点可怕。并且 1Password 也有对应的 Chrome 插件,可是 Chrome 的自动填充是另外一个问题——所以,尽量不要把电脑借给别人

然而,1Password 和 LastPass 的密码策略,让我觉得它也是不可靠的——Master Password,也就是一个密码可以解锁其它密码。

特定平台 + 生成密码

考虑到上面的密码在固定部分是不安全的,我便想到了一种更优雅的方式:基于 Git 的 SHA-1 算法生成的 commit 号,来实现:特定平台 + 生成密码。如下是一个 git log 的示例:

commit b40c83cb772d4b496d1f9ecec136e21d46f6a765Author: Phodal HUANG <h@phodal.com>Date: Tue Mar 13 17:00:11 2018 +0800 [mooa] log: add basic logiccommit 3c8badf0bd6671368910fb22eada5a850a3fcf88Author: Phodal HUANG <h@phodal.com>Date: Tue Mar 13 16:46:53 2018 +0800 [mooa] rename staus filter to status helper

其中的: commit b40c83cb772d4b496d1f9ecec136e21d46f6a765,即对应了一个随机密码。于是我们的密码就变成了:

  • 京东: tb-b40c83cb
  • 淘宝: jd-3c8badf0

当然了 btoa('jingdong'),也是一个不错的实践: amluZ2Rvbmc=

作为一个程序员,最后我采用的策略是,半动态的密码 + 生成的密码。

代码生成密码 + GitHub 存储密码

虽然,我不知道怎么样的密码是真的安全的,但是我觉得一个二十位左右的密码就是安全的。于是我编写了一个七行的 Python 脚本来生成一个 12 位的密码:

from random import choicefrom string import hexdigits, punctuationimport timebase_time = str(time.time())[12:16]base_string = ''.join(choice(hexdigits) for i in range(6))base_punctuation = ''.join(choice(punctuation) for j in range(2))print(base_string + base_punctuation + base_time)

首先,生成器将从时间戳里,取第 12~16 位的字符,如下:

1520944501.967865

接着,生成器将从十六进制数字中,随机取 6 位:

0123456789abcdefABCDEF

最后,再从所有的特殊字符中取出几个字符:

!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

就有了这部分的密码:

09a86a{#4242

PS:我使用的是 Python 3,你们这些 Python 2.6 的异教徒。

最后,需要有一个地方来同步我的密码,于是,我将密码存储在了 GitHub 上了——我的 GitHub 需要二次验证。

结论

最后,请不到你的密码贴在笔记本上:

Password in Latop

最近缺粉,来一堆关注吧

原文发布于微信公众号 - phodal(phodal-weixin)

原文发表时间:2018-03-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

phodal

144 篇文章57 人订阅

相关文章

来自专栏美团技术团队

Logan:美团点评移动端基础日志库揭秘

背景 对于移动应用来说,日志库是必不可少的基础设施,美团点评集团旗下移动应用每天产生的众多种类的日志数据已经达到几十亿量级。为了解决日志模块普遍存在的效率、安全...

62512
来自专栏做全栈攻城狮

程序员,一起玩转GitHub版本控制,超简单入门教程 干货2

本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制。帮助大家摆脱命令行工具,简单快速的使用GitHub。

1103
来自专栏网站漏洞修补

网站漏洞修补与网站逻辑漏洞修复加固方案

在网站安全的日常安全检测当中,我们SINE安全公司发现网站的逻辑漏洞占比也是很高的,前段时间某酒店网站被爆出存在高危的逻辑漏洞,该漏洞导致酒店的几亿客户的信息遭...

1402
来自专栏架构师之旅

浅谈大型Web系统架构

动态应用,是相对于网站静态内容而言,是指以c/c++、php、Java、perl、.net等服务器端语言开发的网络应用软件,比如论坛、网络相册、交友、BLOG等...

4377
来自专栏刺客博客

FinalShell: 优秀 SSH 客户端 / 堪比Xshell

5833
来自专栏FreeBuf

企业安全漏洞通告引擎

? 背景 ? 如今大多数企业都在用漏洞扫描+漏洞通告,存在如下两个问题: 1、漏扫存在“扫描周期长、扫描库更新不及时”等情况,同时扫描报告中有无数干扰项,导致...

2215
来自专栏琯琯博客

大型分布式网站术语分析

一、I/O优化 1、增加缓存,减少磁盘的访问次数。 2、优化磁盘的管理系统,设计最优的磁盘方式策略,以及磁盘的寻址策略,这是在底层操作系统层面考虑的。 3、设...

2424
来自专栏编程

Node.js VS PHP—你应该选择哪一个?

现在,WEB开发公司和开发人员可以选择多种技术栈来构建Web应用程序。早期网络发展,不同的技术被用于前端和后端开发。但是,随着Node.js的发布,布局发生了变...

4057
来自专栏Timhbw博客

Windows下iOS开发环境搭建教程

2016-06-1513:59:42 发表评论 2,027℃热度 1.下载工具 2.安装基本文件 3.开始主要步骤 4.总结 目录 可能许多初学者并没...

1K8
来自专栏知识分享

1-关于ESP8266配网,单片机程序远程升级(我的配网和升级程序方式)

9044

扫码关注云+社区