如何生成安全的密码

Author: R.W.Flurando

Tags: 密码

起因

现在流行无密码认证,或者多因素Multi-Factor-Authentication认证。

原因是人们特别喜欢用弱密码,直到写这篇博客的前夜,还有人发布应该用个好记的密码,而且所有帐号都用一个的言论,理由是技术是用来造福人的,而不是折磨人的。这些人是报着“反正我帐号没什么重要的东西,我也没什么好藏的”心态,摆出一副正义的样子,估计自己都信了。

而事实是什么呢,确实,没人在意你连pornhub到底看什么东西,把你的微信聊天记录倒贴钱给我我还嫌浪费硬盘空间呢,真正的问题根本不是你在你的帐号下有没有藏东西,而是你的帐号本身。

别人用了你的帐号,如果是社交媒体,就可以拿去发广告甚至跟你的好友家人骗钱,用你的名义。如果是企业数据库管理帐号呢,更重要的内容在后面怎么办,难道出了事你两手一摊,我已经用admin234而不是123当密码,被“破解”了关我什么事能走得掉吗?即便没有帐号,只是一个挂到你设备上的木马,甚至一个奇怪的js文件,都可能被用来发动僵尸网络攻击。

多因素有个问题,就是它不支持广义上的匿名认证,自己电脑上加解密文件发SMS有什么意义。本质上,特别是OAuth,就是用一个受信任的第三方为你担保而已。

更多的场景,你只能靠一个密码来认证,即便只是加密存储一个本地的文件。

这种时候,一个不易被攻破的密码就特别重要。

现状

目前整个加密系统都在为后量子时代的到来而恐慌。

原本人们认为的有生之年不用担心的量子计算,在各大巨头和国家主体的强力投入下,已经可以在实验室进行,可能四五年就能投入生产。

而这里的“生产”是什么,就是解密之前存下来的加密网络流量,人们在云存储商那里加密存储的内容。

可以说,今天的任何加密数据传输,只要你不确定它抗量子,就应按照明文的危险等级来应对。

除了一个例外,那就是对称加密,比如用特别长密钥的AES-GCM之类,配合AEAD认证传输。

下面,讲一下怎么生成安全的密码。

常见谬误

  1. 不能用脑子

    只要是你人脑想出来的,按目前人类的构造,就永远不是随机的,至少表意识是这样。也就是你想出来的再长再“复杂”的密码,都只是生日的升级版而已。

  2. 必须用脑子

    不能用脑子,那就是只能用机器了,其实也不是。但有一点是确定的,你的脑子得用来记住一个复杂的密码。

    至少得记一个,不然你就会在记事本里明文写密码了。

方法

首先我们讲一下你脑子里能记的密码怎么弄。

我想你也猜到了,信息安全时代,记忆力真的是稀缺资源。

这个要靠色子+词典。

如果想快速体验,可以用python下一个diceware试试

运行pip install diceware就可以了

如果你的机器不值得信任,或者熵很低,建议找几个色子来自己投。

先下词典,它是五个数字对应一个英文单词,在这里 https://theworld.com/%7Ereinhold/diceware.wordlist.asc

然后开始投色子,最后那些词连起来就是密码。

几年前的最低要求是7个词,当然这个是你能记越多越安全,重要场景至少记12个。

那么不用脑子记,放在被人脑记忆的密码保护的钥匙串里的密码,当然只会更安全,建议下载KeePassXC软件生成。

如果你用的是Linux,也可以在命令行运行cat /dev/urandom | tr -cd "0-9a-zA-Z" | head -c <你需要的密码长度>来生成强密码

这个命令读取/dev/urandom文件,将输出给TRuncate截取数字和字母大小写部分,再将结果的头部多少个字符作为最终输出

比如cat /dev/urandom | tr -cd "0-9a-zA-Z" | head -c 10就是10位密码

参考

自行搜索了解彩虹表攻击,以及泄露密码库