如何在不牺牲安全性的情况下生成易于键入的密码?

信息安全 密码 可用性
2021-09-06 00:11:10

如何生成易于键入但不牺牲安全性的密码?一个易于输入但牺牲安全性(我想)的密码示例是 qwe123!@#。

对于这个问题,我们将使用相当宽松但标准的密码策略。比方说:

  • 8+ 个字符
  • 至少 1 个大写字母
  • 至少一个数字
  • 至少 1 个符号

我希望这会从古老的格言“以可用性为代价的安全以牺牲安全为代价”中的“可用性”方面有所作为。我知道密码管理器或类似的东西会是一个更理想的解决方案,但并不是每个人都愿意加入类似的东西。

** 在这里阅读所有答案和评论后。我对“易于打字”的最初意图是在键盘上彼此靠近或交替双手之间平滑过渡,这就是为什么我接受了我所做的答案。也就是说,其他答案(以及被接受的答案)让我意识到我一直在以错误的方式思考这个问题。

4个回答

强制“使用密码管理器!”。但你似乎已经意识到这一点。继续。


有许多技巧。以我的经验,“易记”和“易打字”通常意味着“完整的英文单词”;我的手指/大脑处理单词比处理任意字符序列要容易得多。想到的两个系统是:

骰子

拿一份 Diceware 单词列表 [ Article ]、[ large_wordlist.txt ] 并掷骰子!这份 6 5 =7,776 个独特单词的列表经过精心挑选,易于记忆。维基百科将这些示例作为典型的 diceware 密码:

  • 连体英镑安全地闲聊旋转骨盆
  • 大米 不道德 令人担忧的 购物 遍历 充电器

另外:强制 XKCD提倡这种风格的密码。

密码

我主张我们应该放弃英语中的“密码”——因为它鼓励人们用单个单词来思考——除了一些特别愚蠢的银行之外,所有系统现在都接受密码中的空格,所以为什么不考虑“密码”?

我听说的一个聪明的技巧是设置一个密码短语,代表你想要实现的一些个人生活目标或你想要记住的事实。A)由于您每天多次输入密码,这自然会提醒您做这件事,并且 B)一旦您完成了这件事,您自然有理由更改密码!以下是一个月左右自然要更改的示例:

  • “更新我的 401(k) 的 $%”
  • “每天吸烟量低于 10 次”
  • “桑迪的宝宝将于 8 月 24 日到期”
  • “计划爷爷的第 80 个生日派对”

[ps。我正在等待这个建议的火焰战争。我的通用答案:使用更长的密码!]

免责声明:我将这个问题中的“易于键入”从字面上解释为连续字符或类似的打字模式,这与“易于记忆”的密码不同。我指出这一点是因为其他答案似乎都没有以这种方式解释这个问题。

如何在不牺牲安全性的情况下生成易于键入的密码?

简短的回答:不要打扰

原因是它不值得,除非你是一个非常慢的打字员。我刚刚尝试了一个实验,我选择了两个密码,两个密码都很容易记住,一个(似乎)比另一个更容易输入。为了更容易地用我的秒表测量时间,我输入了 3 次密码并进行了比较:

选项 1:(12 秒输入 3 次)

This password is easy to remember
This password is easy to remember
This password is easy to remember

选项 2:(10 秒输入 3 次)

1234qwerasdfzxcv7890yuiohjklnm,.
1234qwerasdfzxcv7890yuiohjklnm,.
1234qwerasdfzxcv7890yuiohjklnm,.

我实际上尝试了几次,上面显示的时间是我最后一组 3 次。前几次我弄乱了“易于键入”的密码,因为我走得太快并撞到了其他键。

我的结论:很可能是这样的情况,如果你选择任何容易记住的密码,输入起来不会比看起来更“容易输入”的密码慢多少。(我的平均时间是 3.3 秒和 4.0 秒。)此外,易于键入的密码最终出现在字典列表中的可能性略高,我会回避它。

每天我都要输入数百次密码。因此,我按照以下建议(根据我自己的经验)设计了一个“易于输入”的密码:

1)如果我不必使用“小指”手指会更好(长时间使用后会感到疲倦)。我建议避免在键盘的最左端或最右端出现任何字符或符号。因此,不应使用太多大写字母(您需要使用小指作为 shift 键,对吗?)。

2)大写字母应该可以用右手(如果你是右手的话)或左手的食指和中指输入。原因是(对我来说)使用左移比使用右移更容易(因为离中心更远)。试试这个:与 Shift(左手)+P(右手)相比,Shift+q 似乎会给你的手增加压力。

3)如果您可以单手输入密码会更好。有时我的一只手很忙,单手输入 Shift+7 可能不太舒服。我想说,如果您要使用大写字母,请尽量将它们靠近 shift 键。

4) 相邻的字母很容易输入(例如:QWERTY 键盘中的 hj)但通常更容易出错(jh 而不是 hj)。我在这里的建议是尽量不要在密码的中间或结尾使用相邻的字符,以免出错。

5) 流量也很重要。我发现当所有字母/数字/符号从一侧移动到另一侧时(例如弹钢琴),输入内容很容易。如果您从左侧开始并在键盘右侧完成(反之亦然)。单手打字也可能更容易。例如:9641 vs 9164(使用右手)

6)如果您在打字时交替双手更容易(恕我直言)。例如:“jspenro”与“jkustwp”。尽量保持每手最多 2 个字符。大多数英语单词都是这样的(手自然交替)。

7) 不是那么重要,但如果你能够在不看它的情况下输入它是一个加号。我的一个密码我什至不知道,但我可以非常快地输入它(因为我没有在脑海中重复它),我只是让我的双手为我做:程序记忆

以上几点对我有用,但对其他人可能不起作用。如果您正在为自己寻找易于输入的密码,请尝试我的建议。否则,请坚持已经建议的内容:使用密码管理器。

字典密码是要走的路。Wikipedia 建议使策略可预测可能不是最好的方法,但在这种情况下却是。

来自维基百科信息论/熵

例如,抛硬币的熵是 1 香农,而抛硬币的熵是 m 香农。通常,如果 n 是 2 的幂,您需要 log2(n) 位来表示可以取 n 个值之一的变量。如果这些值的概率相同,则熵(以香农为单位)等于位数。比特数和香农数之间的相等性仅在所有结果的可能性相同时才成立

因此,如果一切都同样可能,我很可能将“a”或“2”或“<”作为一个值,那么选项和长度都是最重要的。考虑到这一点,任何语言中的单词都远远多于字母+数字+符号。足以让 4 个字的密码轻松胜过 10 个字符的密码。

为了显示有多大的不同:

26 个字母,10 个数字,也许 15 个符号 = ~50 个选项。10 个字符的密码 = 9.76 x10^16 个选项。如果我们的计算机每秒猜测 400 万次,这是一个粗略的、慷慨的猜测,我们大约需要 775 年才能猜出密码。相当安全。而且,我们可以轻松记住大约 7 个字符,其中 10 个是可行的,尤其是通过密码式重复。

这是 10 个字符,所有字符的概率均相等,这是合理的,因为它可能是胡言乱语,我们必须在手背上才能记住。

从此:

1) 在这种情况下,密码的长度很重要。每个角色都大大增加了安全性。更长的密码总是更好。例如,如果我们将密码缩减为 7 个字符,那么我们最多只能用 2.25 天的时间来破解每个字符的 50 个选项。

2)但是说如果我像 XKCD 漫画描述的那样设置密码,没有什么能阻止任何人像“记住大象迷失的树林”这样的密码。假设我使用 john the ripper,它有大约 3000 个单词,并且可以选择使每个复数形式或以 1 结尾的 s 截断,那么可能有大约 6000 个单词。如果我的密码中有 4 个单词,那么 6000^4 种可能性 = 1.3 x10^15, 10 年

相当安全。而且,开膛手约翰实际上不会破解密码:

正确的马电池订书钉

开膛手约翰正在使用通用密码。如此普遍以至于只有“马”实际上出现在那里。假设我使用了破解字典没有预料到的不常见的单词,那么最后一个选项是合法的字典攻击。

如果我使用 Fedora 的默认字典,包含非常全面的500 000 个单词,对于 4 个单词的密码,有 6.25 x10^22 的可能性,我们大约需要 5 亿年的破解时间。但说这最多可以减少到其大小的 25% 并不牵强,尤其是在使用“正确的马电池订书钉”等常用词的情况下。所以,有 12.5 万种可能性。仍然是 2.44 x10^20,也就是大约 200 万年。

如果我们可以将其减少到 %1 会怎样?所以5000字。那是 6.25 x10^14 的可能性,几乎与开膛手约翰攻击的数量相同,最多大约 5 年。降到1%真的可行吗?如果不使用最常用的词,可能不会。

但这也取决于空格分隔符。如果我有

azkaban_P0tter*flubber st@ple 然后我们破坏了 shannons 对话中的第一个比特相等,但即使攻击者完全预料到了这种策略,也增加了不可逾越的变量数量。

此外,如果可以使用一个较小的字典,比如 200 000,将其减少到 1% 仍然最多 45 天,并且避免使用最常见的单词并使用不同的单词分隔符会大大增加这个持续时间,并在其中添加一两个单词如果这很容易,另一种语言。