我最近经历了一个漫长的过程,将所有密码都改成了更安全的密码。我按照现在普遍推荐的方式做了——我把密码改成了 16 个字符,包括符号、数字、大写字母、小写字母等,直到最终结果看起来或多或少像一串随机的数据。
然后我遇到了以下问题xkcd漫画,这实际上是在告诉我,最好连续使用几个单词,因为这样可以保证 99% 的实际安全性,同时也更容易记住。
所以我的问题是,这个漫画有多正确?
答案1
是也不是。Security.SE 上有很多关于这个话题的讨论。让我们先引用一下Jeff Goldberg 的回答:
XKCD 漫画未能有效传达的是,单词的选择必须(均匀)随机。如果你要求人类随机挑选单词,你会对具体名词产生强烈的偏见。这种偏见可以而且将会被利用。
这可能是对 XKCD 方案最重要的打击。人类在想出任何随机的东西方面都很差劲[需要引用]。“我非常爱我可爱的狗和猫“确实够“长”,但也不是不可预测的。
(顺便说一句,Jeff 还指出,XKCD 方案实际上并不是 Randall Munroe 的原创:
“类似 XKCD” 密码的总体思路至少可以追溯到S/Key 一次性密码从 1980 年代初开始。
)
这得票最高的答案提醒我们需要知道我们在防御什么:
关于密码没有统一建议的众多原因之一就是威胁建模问题。你到底想防御什么?
例如:您是否试图防范专门针对您且了解您的密码生成系统的攻击者?或者您只是某个泄露数据库中数百万用户中的一个?您是否在防御基于 GPU 的密码破解,还是只是防御薄弱的 Web 服务器?您的主机是否感染了恶意软件?
我认为你应该假设攻击者知道你生成密码的确切方法,并且只是针对你。xkcd 漫画在两个例子中都假设生成密码的所有细节都是已知的。
看看这个简短的列表。如果你符合这个条件,那么 XKCD 方案可能适合你:
1. 密码仅在一个地方使用。
2. 您只关心如何让诚实的人和脚本小子远离您的帐户或数据。
3. 嗯...确实没有3。
说白了,除非你愿意使用骰子软件生成一个容易记住的密码,不要为任何严肃的事情担心 XKCD 方案。Troy Hunt 不久前分析过这一点正如他在该帖子结尾处所说,“最佳”密码建议是使用完全随机的密码和密码管理器:
所以总的来说,我跟踪了 130 个账户。即使你现在想不起所有账户,也很少有人会读到这篇文章,而且他们只拥有不到 30 个账户(你真的能记住你创建过的每个账户吗?)说实话,把它们全部加起来,看看你能得到多少,即使是那些你不经常使用的账户。如果你现在没有 30 个账户,那么你还要多久才能拥有呢?我最近和我 60 多岁的父亲一起经历了密码管理练习,而且我并不是技术背景,我知道,在最坏的情况下,任何普通的在线用户几乎肯定会拥有比他们用手指和脚趾数得出来的更多的账户,而且肯定比他们能用记忆力记住的还要多。
我没有 130 个账户,但我的密码管理器里肯定有不少东西。每次我更改工作电脑的密码时,我都要花大约三周的时间才能记住。而这大概是我手动输入的 2-4 个密码之一!尝试将其扩展到 30-100 个账户,它根本不起作用。
答案2
想要安全的密码 - 而不只是一个?使用密码生成器,将密码随机化,尽可能长且复杂 - 爱德华·斯诺登声称 NSA 每秒可以尝试大约十亿种可能性,所以你最好做好准备 :-) 然后使用密码管理器来跟踪你的所有密码。