密码是用户单独或受限用户组知道的秘密短语或单词。无数网站需要密码来保护用户的帐户。密码可能需要最少数量的字符或符号和数字组合。
但这能保证密码更安全吗?
无论网络用户的意图如何,政策通常都会迫使他们选择糟糕的密码。证据表明,当执行任意程序序列时,用户会变得烦躁并选择糟糕的密码。发生这种情况的部分原因是大多数人不知道如何操纵他们的密码。
尽管网络安全社区一再发出警告,但许多人认为为数字变体(如“3ebra”)切换字母会使他们的密码在攻击期间更难破解,而它什么都不做。一旦发生这种情况,用户就会遇到两个问题:不安全的密码和安全错觉,因为密码对他们来说似乎很难,但对计算机来说很容易破译。
您可以通过更好地了解密码是如何被泄露的以及所涉及的数学来生成或教其他人如何设置好的密码。
假设一个扒手偷走了你的信用卡,然后试图用它来访问你的帐户。 (我们还认为您的银行不会像现在那样在五次或更多次不成功的尝试后冻结被盗的信用卡)。与大多数银行一样,使用 4 位 PIN 码从 ATM 取款。那么,您的资金安全的可能性有多大?
他只是偶然成功猜出您的密码的几率是多少?
有十种可能的组合,因为您的 PIN 的第一个数字可以是 0 到 9 之间的任何数字。还有十个选项,因为第二个数字没有限制他的可能性(例如,如果你不能t 使用带有重复号码的 PIN)。第三位和第四位数字也是如此。
有 10,000 个可能的密码,其中一个可能是您的:10 x 10 x 10 x 10=10,000。 10,000 个密码的随机样本将使攻击者准确预测您的密码的概率为 10,000 分之一。
因为人类无法生成随机数或其他任何东西,所以这在现实中并不完全正确。我们大脑中的偏见俘虏了我们。即使看起来我们是随机得出数字的,但我们倾向于使用连续数字,并且更频繁地以两个或四个数字为一组进行思考。
在实践中,这 10,000 种可能性中的一部分在现实世界中出现的频率要高得多。例如,1234 或 1111 比 7148 更频繁地出现。
尽管犯罪分子不可能有足够的时间在 ATM 中输入 10,000 个组合,但标准计算机每秒可以执行数百亿次尝试。攻击者可以轻松解码 4 位 PIN。
然而,虽然犯罪分子不太可能有足够的时间在 ATM 中输入 10,000 个组合,但今天的普通计算机每秒可以完成数百亿次的试验。一个 4 位数的 PIN 将被迅速破解。尽可能增加密码的样本空间可以使其难以破解;从一万亿个组合中推断出正确的密码比一千个更难。
密码空间是特定字母、字符集和最大密码长度的可能密码组合总数。它通过计算在蛮力攻击期间可以找到密码的随机猜测次数来衡量密码的安全性和脆弱性。
允许的字符(字母、数字、符号等)的大小和密码的长度决定了潜在的密码空间有多大。结果,使用的密码越长越复杂,由于密码空间变宽,攻击者暴力破解密码的难度就越大。
从前面讨论的信用卡示例中,我们通过乘以允许数字的允许字符数来计算 PIN 的样本空间。每个数字输入十个符合条件的字符; 10 x 10 x 10 x 10 或 104。
要计算密码样本空间,我们可以使用公式S = CN
在哪里:
S = 样本空间中可能的密码总数
C = 可用字符池中的字符数
N = 我们密码中的字符数。
• 如果您使用的密码只有大写字母,则 C =26 • 如果您使用的密码有大写字母且至少有一个小写字母,则 C =52 • 如果您使用的密码有大写字母,则至少有一个小写字母和数字,则 C =62 • 如果您使用的密码涵盖所有字符,则 C =95 现在,让我们比较不同的密码,看看它们的样本空间有何不同:示例:YGMEOH C = 26 (仅限大写)N=6 S = 308,915,776 或约 3.09 亿个密码组合
S= CN S= 266 = 308,915,776 个组合 使用所有字符并将密码长度保留为 6 个字符,我们有:
示例:@Q:t-2
C = 95
N=6
S = 735,091,890,625 或约 7350 亿个密码组合
S= CN S= 956 = 735,091,890,625 种组合。
仅使用大写字母并将长度增加到 16 个字符,我们有
示例:tfucbxqhjyepvgmw C = 26
N = 16 S = 43,608,742,899,428,874,059,776 个密码组合,大约是我们上一个示例 @Q:t-2 的 590 亿倍。 S= CN S= 2616 = 43,608,742,899,428,874,059,776 种组合。从上图可以明显看出,样本空间使密码难以破解,而不是包含符号或数字。您可以使用更多字符来增加样本空间的长度。
熵在这方面是对特定密码的样本空间大小的度量,即密码强度的度量。在不知道密码是如何生成的情况下,很难衡量破解密码的难度。尽管如此,拥有一个数字(以熵位表示)来显示密码是容易破解还是难破解会派上用场。熵越高,密码越难破解;熵越低,越容易破解。回想一下十进制数字有十种可能性; 0 到 9,但二进制数字(也称为位)只有两种可能性,即 0 和 1;即S=CN 十进制数为10N,位为2E;其中 E 是位数。因此,如果一个比特代表两种可能性的样本空间,那么 50 比特的熵将定义一个 250= 2 x 2 x 2 x … 可能性的空间。因此,将从包含 250 个唯一密码的池中获取 50 位熵的密码。同样,51 位密码将从 251 的集合中获得,比 50 位密码更难破解。下面的公式可以用来计算一个密码的熵E= log2 (CN) OR E = N x log2 (C)比如我们计算BerbeCUE201的熵 这里C= 26 +26 + 10 =62 N = 11 E = N x log2 (C) E = 11 x log2 (62) = 11 x 5.9541 E = 65.5 bits 从 S= 2E S = 265.5 S = 52,175,271,301,331,128,849.398 个组合对于 Berbecue2(!0>}}},熵将为 E = N x log2 (C) E = 16 x log2 (95) = 16 x 6.5698 E = 105.1 bits From S= 2E S = 2105.1 S = 43,476,296,738,970,232,553,127,150,068,066.389 组合 上面的例子验证了熵越高,越难破解这样的密码. 所以熵显示了暴力破解密码需要多少次尝试。从统计上讲,攻击者会比最后一次尝试更早地获得密码;他们不需要经过所有组合才能获得正确的密码。所以在计算密码的强度,考虑预期的猜测次数;这通常是尝试正确猜测次数的 50% .对于 105.1 位密码,S= 2E – 1 S = 2105.1 – 1 S = 21,738,148,369,485,116,276,563,575,034,033.194 种组合。
选择安全密码涉及许多因素,其中包括密码熵。如果两个密码具有相同的熵,则一个密码强度适中,而另一个密码强度极低。这是由于密码字典,这是互联网上可用的泄露密码目录。
使用这样的目录被称为字典攻击,任何试图破解您的密码的对手都会在尝试暴力攻击之前尝试密码字典。因此,如果您在此字典中使用密码,则熵的位数无关紧要,因为密码将被迅速破解。
如果网络管理员在他们的服务器上以纯文本形式存储密码,那么即使攻击者可以访问网络服务器,他们也很容易获得密码,即使密码很强大。这就是为什么强烈建议在存储密码之前对密码进行加盐和哈希处理。不是存储密码本身,而是通过散列机制生成密码的签名,并存储散列。
密码加盐涉及在散列密码之前将 32 个或更多随机字符的字符串添加到密码中。
散列算法是一种单向过程,它使得从散列签名中重建密码在计算上是不可能的。该算法将密码变成一系列不透明的不可逆数字和字母。许多算法可用于散列,包括 bcrypt、MD5、SHA、NTLM 等。
样本空间中所有可能密码的散列由于不可能将散列密码反转回纯文本,因此破解密码的方法是对该样本空间的所有可能密码进行散列并找到与目标匹配的散列。如果找到,那么您已经成功破解了密码。散列密码需要散列率——计算能力——并且与其他散列算法相比,一些散列算法更难计算,这使得它们耗时甚至无法破解。这就是为什么 SHA-1 算法是一个糟糕的散列选择的原因,因为 SHA-1 散列是由计算机非常快速地计算出来的,这使得它很容易受到攻击。
如前所述,您的密码样本空间越全面,攻击者在找到任何匹配的散列之前必须散列的可能性就越大。有时,更广阔的样本空间可以使破解您的密码变得不可能,需要数十万年才能破解。
蛮力攻击蛮力攻击是指攻击者试图从样本空间的密码可能性中猜出正确的密码。这是通过提交许多密码直到找到正确的密码来完成的。这种方法相对不常见,因为它非常无效。只有当您的密码非常短(例如少于八个字符)或攻击者知道您只使用了特定字符集(例如,数字、字母或单独的字母数字)时,它才有效。
字典攻击攻击者通常会假设人们如何创建密码,尤其是较长的密码,而暴力攻击是低效的。正如前面提到的人类偏见,我们的选择受到某些行为的影响。因此,攻击者创建了一个常用短语、模式和密码(如“mypassword”)的目录,并开始尝试它们以查看其哈希值是否与目标匹配。如果没有,他们会稍微调整一下,比如将其更改为“myp4ssword”,然后重试。
由这种类型引起的任何攻击都称为字典攻击,其中使用计算能力从大多数人可能使用的单词中创建虚拟密码。