前言

现在保护您的数字隐私变得越来越容易。iPhone现在加密了大量的个人信息;Mac 和Windows 8.1计算机上的硬盘现在自动锁定;就连Facebook 也在聊天工具 WhatsApp 中提供端到端加密。但是,如果您不知道如何想出一个好的密码短语,那么这些技术都无法提供您想象的那么多保护。

密码短语类似于密码,但更长、更安全。从本质上讲,它是您记住的加密密钥。一旦您开始更深入地关心您的隐私并改善您的计算机安全习惯,您将遇到的第一个障碍就是必须创建密码。

例如,当您对硬盘驱动器、U盘或计算机上的文档进行加密时,磁盘加密的强度通常仅与您的密码一样强。如果您使用密码数据库或 Web 浏览器中的密码保存功能,您需要设置一个强大的主密码来保护它们。如果您想使用 PGP 加密您的电子邮件,您可以使用密码保护您的私钥。爱德华·斯诺登在给 Laura Poitras 的第一封电子邮件中写道:“请确认没有人拥有您的私钥的副本,并且它使用了强密码。假设你的对手每秒能够进行一万亿次猜测。”

在这篇文章中,我们将介绍一种简单的方法来提供易于记忆但非常安全的密码短语。事实证明,通常情况下想出一个好的密码短语是非常困难的。如果你的对手真的有能力每秒猜测一万亿次,那么你的密码将会变得很不安全。如果您使用完全随机的字符序列,它可能非常安全,但记住也很痛苦(老实说,浪费脑力)。

人们经常从流行文化中挑选一些短语——歌曲中最喜欢的歌词或电影或书中最喜欢的台词——然后通过改变一些大小写或添加一些标点符号或修改该短语中每个单词的第一个字母来稍微改变它。其中一些密码短语可能看起来不错并且完全无法猜测,但很容易低估那些投入猜测密码短语的人的能力。

想象一下,你的对手已经从每首歌曲的歌词、每部电影和电视节目的剧本、每本书的数字化文本以及维基百科的每一页中提取了每种语言的文本,并将其用作猜测列表的基础。你的密码还能安全吗?

如果您只是通过出一个好的密码来创建密码,那么很有可能它还不足以抵抗间谍机构的力量。例如,您可能会想出“To be, or not to be, that is the question.” 如果是这样,我可以保证您不是第一个使用这句经典莎士比亚名言作为密码的人,而且攻击者知道这一点。

使用莎士比亚名言作为密码短语糟糕的原因是它缺少称为的东西。您可以将熵视为随机性,它是密码学中最重要的概念之一。事实证明,人类无法以真正随机的方式做任何事情。

即使您不使用引用,而是在脑海中编造一个短语,您的短语仍然远非随机,因为语言是可预测的。正如一篇关于该主题的研究论文所述,“用户无法选择由完全随机的单词组成的短语,但会受到短语在自然语言中出现的概率的影响”,这意味着用户选择的密码短语不包含像你想象的那样多的熵。你的大脑倾向于继续使用减少随机性的常用习语和语法规则。例如,在副词后面加上动词,反之亦然。

来自流行文化、关于你的生活的事实或任何直接来自你脑海的密码短语比从大自然中收集到的充满实际熵的密码短语要弱得多。

但幸运的是,这种可用性与安全性之间的矛盾可以解决。有一种生成密码短语的方法,即使是最强大的攻击者也无法猜测,但人类却很可能记住。该方法称为Diceware,它基于一些简单的数学运算。

什么是Diceware

一旦您承认您的旧密码并不像您想象的那么安全,您就可以使用 Diceware技术了。

Diceware 是一种由 Arnold Reinhold 创造的生成密码短语的方法。使用 Diceware 需要一份词表和至少一个骰子。词表由7776(6^5) 个不同的单词构成,每个单词对应一个5位“骰子序号”(如 "46134"),每掷5个/次骰子便可选中一个随机的单词。掷30个/次骰子就能生成一个高强度的6词密码短语。由于每个单词有明确的意思,这样的密码短语通常比相同强度的由随机字符组成的密码更容易记忆。

如何使用Diceware

最初的 Diceware 词表 是英文的,且生僻词较多,不易于中文母语者使用。之后多种其他版本/语言的 Diceware 词表陆续出现,本文使用的中文词表由Chenfeng Bao制作:https://github.com/cfbao/chinese-diceware

首先,获取一份Diceware 单词表(可以到https://cdn.gd1214b.tk/diceware/diceware_chinese_wordlist.txt上去下载),其中包含 7,776 个单词——大约37 页。您会注意到,每个单词旁边都有一个五位数字,每个数字介于 1 和 6 之间。以下是单词列表的一小段摘录:

11111 aba 阿爸
11112 afuhan 阿富汗
11113 aichou 哀愁
11114 aidai 爱戴
11115 aidao 哀悼
11116 aie 挨饿
11121 aifu 爱抚
11122 aiguo 爱国
11123 aihao 爱好

为了保证安全,您应该将单词表打印下来,而不是使用电子版。然后确保您处于一个安全的环境中(旁边没有其他人和摄像头)

现在拿起一些六面骰子(是的,真正的物理骰子)并掷几次,写下你得到的数字(建议在坚硬的表面上书写,因为这样难以留下痕迹)。您总共需要掷五次骰子才能得出密码短语中的第一个单词。您在这里所做的是生成熵,从自然界中提取真正的随机性并将其转化为数字。

如果您滚动数字五、二、二、五、一,然后在 Diceware 单词列表 52251 中查找,您会看到“shuxue(数学)”这个词。这将是您密码中的第一个单词。现在重复。

使用 Diceware,您最终会得到看起来像“haoshi aosang roucuo lizhan cesuan teshi”、“bang vivo threadductknipple train”和“pichai beichu budebu minyao yecao xingge”的密码短语。如果你想要一个更强的密码,你可以使用更多的单词;如果您可以使用较弱的密码短语,则可以使用更少的单词。

对于像“sanhui beibu fuqiao dongwu yinju guolai (散会-北部-浮桥-动物-隐居-过来)”这样的密码短语来说还不错,大多数人完全有可能记住。将其与“aE6,kP3^fT1"mA5)”这样一个随机密码相比,其熵比七字的 Diceware 密码略少,而且更难记住。

生成密码后,下一步是牢牢地记住它。

我们建议您将新密码写在一张纸上,并随身携带,直到您不再需要它为止。每次需要输入时,请先尝试从记忆中输入,但如果需要,请查看纸张。假设你一天打几次,在你不再需要纸之前不应该超过两三天,这时你应该把它销毁(建议用火烧掉)。

根据对高熵密码短语的研究,定期输入密码短语可以让您通过称为间隔重复的过程记住它。

关于Diceware的安全性

Diceword 密码短语的强度取决于它包含的单词数量。如果您选择一个单词(从 7,776 个单词的列表中),攻击者有 7,776 分之一的机会在第一次尝试时猜出您的单词。要猜出你的密码短语的话,攻击者至少需要尝试一次,最多尝试 7,776 次,平均尝试 3,888 次(因为攻击者有 50% 的机会会在他们完成单词列表的一半时猜出你的单词)。

但是,如果您为密码选择两个单词,则可能的密码列表的大小会呈指数增长。仍然有 7,776 分之一的机会正确猜测您的第一个单词,但对于每个第一个单词,也有 7,776 分之一的机会正确猜测第二个单词,攻击者不会知道第一个单词是否正确而无需猜测整个单词密码。

这意味着对于两个单词,有7,776^2或 60,466,176 个不同的潜在密码短语。平均而言,在前 3000 万次尝试后,可以猜出两个单词的 Diceware 密码。一个五字密码短语,有 7,776^5 个可能的密码短语,可以在平均 14 千亿次尝试后猜出(14 后面有 18 个零)。

密码短语(或加密密钥或任何其他类型的信息)中的不确定性量以熵的位数来衡量。您可以通过包含多少位熵来衡量随机密码的安全性。Diceware 列表中的每个单词都值大约 12.92 位熵(因为 2^12.92 大约是 7,776)。因此,如果您选择七个单词,您最终会得到一个具有大约 90.5 位熵的密码(因为 12.92 乘以 7 大约是 90.5)。

换句话说,如果攻击者知道您使用的是 7 个单词的 Diceware 密码短语,并且他们从 Diceware 单词列表中随机选择 7 个单词进行猜测,那么他们一次猜测成功的概率为 :
1/1,719,070,799,748,422,591,028,658,176。

以每秒一万亿次的猜测——根据爱德华·斯诺登 2013 年 1 月的警告——猜测这个密码短语平均需要 2700 万年。

相比之下,一个五字密码短语将在不到六个月的时间内破解,而一个六字密码短语平均需要 3,505 年(每秒猜测一万亿次)。牢记摩尔定律,计算机将不断变得更强大,不久之后,每秒 1 万亿次猜测可能会开始变得更快,因此最好给您的密码短语留出一些安全的空间。

使用这样的系统,您选择的单词列表是否公开并不重要。列表中的单词是什么甚至都没有关系。重要的是单词列表有多长以及列表中的每个单词都是唯一的。猜测由这些随机选择的单词组成的密码短语的概率随着您添加的每个单词而呈指数级减小,并且使用这个规律可以制作永远无法猜测的密码短语。

我们如何使用 Diceware 保护我们的个人信息

当您将 Diceware 密码短语输入计算机以在本地解密某些内容(例如硬盘驱动器、PGP 密钥或密码数据库)时,它们非常适合。

您不太需要它们来登录网站或互联网上的其他东西。在这些情况下,您从使用高熵密码短语中获得的好处较少。如果每次猜测都需要与互联网上的服务器通信,那么攻击者将永远无法每秒猜测一万亿次。在某些情况下,攻击者将拥有或接管远程服务器——在这种情况下,他们可以在您登录并发送密码后立即获取密码,无论密码强度如何。

要登录网站和其他服务器,请使用密码数据库。推荐使用KeePassX,因为它是免费的、开源的、跨平台的,而且它从不在云中存储任何东西。然后将所有密码锁定在您使用 Diceware 生成的主密码短语后面。使用您的密码管理器为您登录的每个网站生成和存储不同的随机密码。

我真的必须使用骰子吗?

这是一个复杂的问题,但简短的回答是:使用物理骰子会给你一个更强有力的保证,不会出错。但这既费时又乏味,使用计算机生成这些随机数又是会很方便。
这里有一个用于生成Diceware短语的程序(仅适用于Windows):
点击下载

参考资料