NHS 的密码错了吗?

信息安全 密码 密码策略
2021-08-08 22:58:44

我认识的一位 NHS 医生最近必须做他们的在线强制性培训问卷,其中询问了一系列有关临床实践、安全和安保的问题。同一份问卷将发送给这个 NHS 信托的所有医生。

问卷包括以下问题:

以下哪项是最安全的密码?选择一项:

一个。6个字母,包括小写和大写。
湾。10个字母大小写混合。
C。7 个字符,包括数字、字母和特殊字符的混合。
d。10 个字母全部大写。
e. 5个字母全部小写。

他们回答“b”,但他们失去了分数,因为“正确答案”显然是“c”。

我的理解是,通常,延长密码长度比扩展字母表增加了更多的熵。我想 NHS 可能会争辩说,人们通常会用非常可预测的单词来形成长密码,这使得它们很容易被猜到。但是,如果您强迫人们引入“特殊字符”,他们也倾向于以非常可预测的方式使用它们,而密码猜测算法则不会遇到麻烦。

虽然完全披露,但我不是密码专家 - 我主要从 Randall Munroe 得到这个印象(点击讨论):

密码强度

我错了吗?

4个回答

无论如何,他们都错了:

七个随机可打印 ASCII:95 7 = 69 833 729 609 375 个可能的密码。

十个随机字母:52 10 = 144 555 105 949 057 024 个可能的密码,或超过 2000 倍。

长度很重要。如果您是随机生成密码,那么它的重要性远远超过任何其他让密码难以猜测的方法。

理论视角

让我们在这里算一下。有 26 个字母,10 个数字,比方说大约 10 个特殊字符。首先,我们假设密码是完全随机的(一组中的字符不会比另一组中的字符更可能被使用)。

然后可以将可能的密码数量写成字母的大小和C = s^n字符的数量。密码的熵定义为:sn

log2(C) = log2(s^n) = log2(s)*n

让我们将问题中的数字插入到此:

     s    n   Entropy (bits)
A   52    6   34.2
B   52   10   57.0
C   72    7   43.2
D   26   10   47.0
E   26    5   23.5

所以在这种情况下,C 只是仅次于 B 和 D 的第三好的选择。

实用的观点

但这都是在随机性的假设下。对于人们如何生成密码,这不是一个合理的假设。人类只是不这样做。因此,我们必须选择一些其他假设来了解密码是如何生成的,以及攻击者在她的字典中尝试密码的顺序。

一个不无道理的猜测是,许多字典以单词开头,然后才继续进行替换和添加特殊字符。在这种情况下,短密码中的单个特殊字符将比一个非常长且常见的单词更好。但另一方面,如果攻击者知道总是使用特殊字符,她会先尝试这些密码。另一方面,字典可能以完全不同的原则为中心(例如在泄露的数据库中出现的情况)。

我可以一直猜测这件事。

为什么是问题而不是答案是错误的

问题是密码的生成方式有很多可供选择的原则,我可以任意选择一个来使几乎任何答案都是正确的。因此,整个问题毫无意义,只会掩盖世界上任何密码策略都无法强制执行的重要观点:密码包含的字符不是使其强大 - 而是它是如何生成的。

例如,Password1!包含大写、小写、数字和特殊字符。但这不是很随机。ewdvjjbok另一方面,只包含小写但更好,因为它是随机生成的。

他们应该做的

如果您只是停止依赖非常容易出错和有限的人类记忆,那么字符集和长度就不再是您必须相互权衡的限制因素。你可以拥有丰富的两者。

一种方法是使用密码管理器。正如Dan Lowe在评论中指出的那样,这对医院来说可能不是一个可行的选择。第二种选择是使用某种双因素身份验证(例如硬件令牌或钥匙卡),使第一个因素(密码)的安全性变得不那么重要。

这是系统管理员而不是最终用户的责任来实施。他们必须提供允许最终用户以实用和安全的方式执行其工作的工具。再多的用户教育也无法改变这一点。

我意识到已经有很多好的答案,但我想澄清一点。

这个问题无法回答,因为它没有指定字符集,也没有指定密码选择方法。

首先要解决第二点,我们应该假装密码是在允许的域内真正随机生成的,否则我们甚至无法开始对此进行推理。

对于我们的另一点,举个极端的例子,让我们说 b 意味着仅在英文字母表中的字母,所以让我们说 52 个可能的符号。这给出了每个字符大约 5.7 位的熵,因此总体上大约有 57 位的熵。

另一方面,让我们说(也许有点不合理)答案 c 意味着任何完全随机的 Unicode 代码点,它被认为是一个字符(而不是 BOM 等)。截至 Unicode 6,目前大约有 109,000 个。这意味着每个字符大约 16.7 位熵,总共 117 位熵。

另一方面,如果答案 c 仅限于 ASCII 或 ISO 8859-15 或其中的某个子集,则很容易得出相反的结论。

这当然是完全不合理的,但突出了问题的不合理性以及人们如何合理地证明任一答案的合理性。要成为一个明智的测试问题,它的措辞必须更加严格,这将使技术或数学知识有限的用户更难解决。

最后,我建议这个测试可能毫无意义,因为理想情况下,组织不会要求用户记住密码要求,而是会在技术上强制执行(我认为背诵有用的唯一要求是不要重复使用相同的密码在多个地方)。

在理想情况下,NHS 是否错误地认为哪些密码最安全?是的,绝对 - 其他答案已经非常彻底地涵盖了这一点。

NHS 是否错误地认为在 NHS 环境中哪些密码最安全?也许不会。

长密码怎么可能比这更糟--?

有一些遗留系统会人为地限制密码的长度——例如,旧的 Windows LANMAN/NTLMv1 密码散列将长度限制为 14 个符号,而旧的基于 DES 的 UNIX 密码散列将其限制为 8 个。更糟糕的是,密码在这样的系统上输入通常会让您输入密码,只要您愿意,并且忽略前n 个符号之后的所有内容。

事实上,NTLMv1 似乎很可能是他们正在运行的特定遗留方案。正如@MarchHo 指出的那样,NTLMv1 将您的密码分成两半,每半最多 7 个字符,每一半都可以单独破解。因此,如果您使用 NTLM 和 10 位字母数字密码,那么您真正拥有的是 7 位字母数字密码和 3 位字母数字密码。前者显然比完整符号集中的 7 个字符差,而后者可以在 10 年的 PC 上在几毫秒内破解。

为什么这么古老的东西仍然普遍使用?

基本上,因为它有效并且升级成本很高。

现在,这是我的推测,但是:由于医疗保健的敏感性,我建议医疗保健环境尤其可能运行遗留系统。新系统在被接受为解决方案之前可能需要非常彻底的审查,这意味着医疗保健系统的升级往往会缓慢而昂贵。

因此,如果您知道有一些常用的系统以这种方式运行,而您无法修复它们,那么您能做的最好的事情就是告诉您的用户使用尽可能大的符号池选择一个长度为 n的密码。

一般来说:您确定您的密码没有被截断吗?

不幸的是,这对一般情况也有影响,特别是对于我们长期喜欢我们的密码的人。我们有多确定我们不能仅使用密码的第一个或两个单词在https://example.com上登录我们的帐户?与使用众所周知的“correcthorsebatterystaple”一样糟糕,不小心使用“correct”会更糟。为了确保您的密码安全,仅确保生成足够的熵是不够的。您还必须确保另一端的系统不会丢弃大部分内容。