操纵随机密码会显着降低其熵吗?

信息安全 密码
2021-08-15 14:15:29

假设我使用安全随机数生成器和所有可用的字符类生成密码。例如,c.hK=~}~$Nc!]vFp9CgE

考虑到此密码可能需要在无法复制/粘贴的环境中使用;每次都必须在键盘上手动输入。有很多按下和释放Shift键来输入它,这很快就让人讨厌。

如果重新排列密码的字符,以便所有Shifted 字符在密码的一侧组合在一起(soK~}~$N!FCEc.h=c]vp9gc.h=c]vp9gK~}~$N!FCE),是否会显着降低密码的熵(和实际安全性)?这会使输入更容易一些,因为一半的密码可以通过懒惰地放在Shift钥匙上来输入,而另一半则不用。但是在提供的安全性方面是否有太多的权衡?

4个回答

任何关于密码熵的问题都需要先讨论“密码熵”的真正含义,以及您试图保护自己免受哪种攻击。

简而言之,密码熵是对攻击者在偶然发现您的密码之前必须做出多少错误猜测的估计。这些估计是基于可在线获得的标准暴力破解字典

如果您将密码输入密码熵估计器并且它会给您一个很长的破解时间,那么您可能可以反对“偷偷摸摸”破解尝试。我所说的“偷渡”是指您没有成为特别的目标,您只是受到攻击的大量帐户的一部分。(作为旁注,请注意不要将您将要使用的密码输入到在线熵估计器中,除非您检查过该站点的源代码,否则您无法保证他们不会将您的密码添加到字典中!)


其他人要回答的是,如果攻击者知道您喜欢对大写字符进行聚类并且他们为您构建了一个自定义字典(或者许多人开始这样做并且“路过”字典开始包含该模式),那么您的密码会丢失大约一半的熵。好吧,但这真的是你应该担心的吗?

如果你正在做一些非标准的事情(比如聚集你的鞋面)并且我们假设攻击者知道这一点,那么我们已经超出了“偷渡式”攻击的范围,我们还应该考虑以下事情:

  • 您的任何帐户以前是否曾被黑客入侵?您的密码是否出现在泄露的密码数据库中[1] [2]如果是这样,他们可以获得多少关于您使用的“模式”的信息?

  • 他们是否可以访问您的电子邮件、短信、博客文章等,以查看您使用的字词类型?

  • 他们可以为您制作有针对性的网络钓鱼电子邮件吗?

  • 在输入密码之前,您是否总是检查页面的证书信息?

  • 你从网上下载软件吗?

如您所见,一旦我们脱离了“偷渡式”攻击的范围,密码的理论熵很快就不再是重点。

我强烈主张一旦攻击者花费精力了解您的信息,密码熵的整个想法就不再有意义。


底线:由于您从随机密码开始并且仅应用非常温和的模式,因此您仍然有大量的熵。如果您担心驱动式字典攻击以外的攻击,那么密码的熵在很大程度上是无关紧要的,因为其他因素变得更加重要。

由于您专门询问了熵,因此我将首先介绍您问题的客观方面。

熵减少了,因为你从每一边拿走了一半的键空间。

为了简化这一点,如果一个 10 个字符的密码包含小写和大写字符的熵是

log2(52^10) = ~ 57 bits of entropy

然后你从前半部分删除大写字符,从后半部分删除小写字符,你的熵是有效的

log2(26^10) = ~ 47 bits of entropy

加上 1 位,因为反过来也可能发生 48 位。以上假设密码是使用加密安全的伪随机数生成器生成的 - 即它是完全随机的,并且不包含人脑生成的任何模式,这些模式将在许多方面无意中预测。

密码的熵基于生成技术,因此如果知道这一点,那么您已经按照上述方法减少了熵。不要依赖于秘而不宣的方法。

但是,如果您想这样做以便于输入,只需在密码中再添加两个字符:

log2(26^12) = 56

加上 1 位,然后您就有 57 位来获得与原始方法等效的安全性。

但是,您还询问了这如何影响密码的实际安全性。如前所述,除非攻击者知道您的密码的生成方法,在这种情况下,X 个无需 shift 键即可输入的字符和 X 个需要 shift 键的字符,任何密码猜测攻击都将是通用的。也就是说,他们并没有特别针对您,因此他们对您的特定生成方法一无所知。这意味着他们将尝试通用单词列表和常见字符序列,而不是适合您的生成模式的序列。因此,他们的攻击空间的熵与您的密码生成方法所拥有的熵不匹配。

在您的情况下,假设一个随机生成的 20 个字符的密码,这通常会给出 ~131 位,并且按照所述将 ~113 位拆分。两者都高于NIST推荐的 80 位密码强度。

是的

演示 15 个字符的密码(值是近似值):

第一个密码:熵= log2(90)*15 = 100

90 个字符集中的 15 个字符

第二个密码: entropy = log2(90/2)*15+4 =89 15 char 接受 90/2 的字符集并在字符 N 之后保持移位(N 在 1 和 15 之间,然后熵 = 4)

休息时间 p1 = 休息时间 p2* 2^(100-89)

您修改后的密码与删除所有移位的字符几乎相同

不,它不会“显着降低密码的实际安全性”。

密码是一个“全有或全无”的难题攻击者不知道密码每一侧的字符集。所以熵在这里甚至没有用。长度是最重要的(无论如何,这反过来会影响熵最大)。如果攻击者在他使用的字典中没有它,他永远不会得到它。在蛮力中,攻击者必须考虑您正在使用的所有字符集(假设他知道这些字符集)。那么安排不会有太大的不同。在找到它之前,他仍然必须开始蛮力强制它。