物理学和信息科学中的熵只是相同可能性的数量的对数(通常是物理学中的自然对数;计算机科学中的以 2 为底的对数),因为处理和考虑这些异常大的对数通常更容易可能性的数量比直接的可能性。
如果我随机生成 128 位作为我的随机 AES-128 密钥(我存储在某处),很容易看到有 2 128 = 340,282,366,920,938,463,463,374,607,431,768,211,456 个可能的密钥我可以使用(每个位有 2 个同样可能的选择;并且概率相乘) )。在谈论信息复杂性时,谈论具有 128 位熵的密钥比谈论340 x 10 36或 340 undecillion (short scale) 更简单,特别是如果您想将其与 256 位密钥进行比较2 256 =115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,936 种可能性。
现在,如果我给你一个随机用户的密码,从技术上讲,不可能给它唯一地分配一个熵。
您只能将熵分配给生成密码的模型。因此,如果要求您估计密码的熵,您的任务是假设可能生成该密码的模型。
如果我给你一个密码,P[rmDrds,r
你可能会假设我从一组 95 个可打印的 ASCII 字符中随机选择 10 个字符,并且为了暴力破解,你将不得不经历 95 10 ~ 2 65.7种可能性,它的熵为 65.7 位。但是,这只是一个非常弱的密码OpenSesame
,我将键盘上的手移到了右侧的一个字母上(这可能是 2^6 ~ 64 种常用方法之一来改变输入一个易于记忆的低熵密码)。如果您可以OpenSesame
在列表中找到 1,000 (1000 ~ 2 10 ) 个最常见的密码,那么实际上 的熵P[rmDrds,r
更接近 16 位(可能性为 2 10 x 2 6),当密码生成是选择 64 种常用密码隐藏方法之一,然后从 1000 个常用密码列表中选择一个密码。因此,经过大约 64,000 次尝试后,一个尝试过这种攻击途径的复杂暴力破解者可能会到达P[rmDrds,r
,因此将其熵估计为大约 16 位比 65.7 位更准确,即 2 65.7-16 ~ 2 49.7 ~ 914 万亿倍比 65.7 位密码更暴力。
现在,显然一些不太复杂的蛮力攻击者可能忽略了在浏览常用密码列表时将键盘上的字符向左移动一个空格的可能性。但是为了安全起见,您忽略愚蠢的攻击者并假设非常老练的攻击者已经考虑了您所有的密码生成方法(Kerckhoffs 的原则是通过模糊来避免安全性;假设敌人已经考虑了您的秘密技术以及许多其他方法)。因此,当有人说您需要一个高熵密码时,您的目标不是一个看似高度随机的密码(以及一些简单的密码测试将其标记为高熵)。您想要一个随机密码,该密码由大量随机选择构成,并输入到密码生成过程中。你不应该选择对你有意义的词,并用一些晦涩的技巧来为它编一个密码,比如四处移动字母或 leetspeak 替换。对于强密码,您应该依赖 80 位以上的非人为随机性输入到您的程序中。您应该注意,密码生成过程中的一点熵等同于两个选项的决定(例如,可以通过掷硬币来确定的东西)。
再说一次,你可以用很多随机选择随机生成一个密码的可能性很小,它最终会得到一个非常弱的密码;例如,从技术上讲,您可以随机选择 12 个字符并得到password1234
or dddddddddddd
。在实践中,这是一种可能性,尽管它不太可能发生(例如,如果您使用生成 90 位密码的过程,那么它生成的密码也可以使用仅 34 位的更简单的过程生成的可能性是2 34 /2 90 = 2 56中的 1 次,这大约是连续购买两张 Mega Millions 彩票并两次赢得头奖的几率)。