📜  密码 |熵与裂化

📅  最后修改于: 2021-10-19 05:01:30             🧑  作者: Mango

在浏览互联网时,我们几乎在我们经常使用的每个网站上都被要求提供登录凭据。最重要的登录凭据之一是我们的密码,或者我应该说密码,因为我们为不同的帐户设置了不同的密码(如果您刚刚意识到您没有不同的密码,请继续更改它们)。本文讨论安全密码、不安全密码、如何选择一个好的密码以及如何破解它们。本文分为 3 个部分。让我们继续第一个。

密码是如何存储的?

每当您在网站上创建帐户并输入密码时,您输入的密码不会保存在数据库中。相反,它通过一个伪随机函数(散列函数)运行,它产生一个散列,通常看起来像纯粹的胡言乱语,但实际上在安全方面非常有用。它的哈希值不是纯文本密码,而是存储在数据库中,因此如果该网站被黑客入侵并且密码在线泄露,您得到的只是胡言乱语,而不是用户在创建他的网站时输入的真正纯文本密码/她的帐户。例如,我们的密码是“geeksforgeeks”,我们通过 SHA256 哈希函数运行它,我们得到的结果为

plain-text password: geeksforgeeks
Result: f8d59362da74ffe833332dc20508f12de6da6a9298c98b3b42873e7298fced78

每当用户登录网站时,他们都会在客户端输入相同的纯文本密码,然后通过相同的哈希函数运行,如果该哈希与存储在数据库中的哈希匹配,则该用户被授权使用该帐户.
如果不同的用户选择相同的密码,那么由于两个哈希值相同,就会发生称为冲突的情况。在这种情况下,将额外的纯文本添加到原始密码中,然后通过相同的散列函数,生成唯一的散列。最后,散列和额外的纯文本都存储在数据库中,以便将来识别用户。
这种存储密码的方法可以通过不同哈希函数的迭代运行它们而变得更加安全。

它们能被破解吗?

尽管采取了所有预防措施并遵循信息安全的最佳实践,但事情仍然可能出错。如果您和我一样是《机器人先生》节目的粉丝,那么您必须熟悉任何东西都可以被黑客入侵的残酷事实。假设一个网站遭到入侵,其所有用户的密码都以文本文件的形式泄露到您可以使用的网络上,但由于这些密码以散列的形式存储,因此我们在文本文件中获得的所有内容都是胡言乱语。现在有两种方法可以破解这些哈希值。

  1. 蛮力攻击:你们中的大多数人必须熟悉这种类型的攻击,因为它是最常见的。从它的名字可以看出,它会尝试所有纯文本密码的组合,通过哈希函数运行它们,并将获得的乱码与包含在我们文本文件中的不同哈希相匹配。
    您一定认为这将需要一生通过哈希函数运行所有排列并将它们与文本文件匹配,但是如果我告诉您黑客可以通过他的计算机访问高性能服务器并且服务器使用 4最新的 NVIDIA 显卡使其能够运行 400 亿次哈希/秒。现在它只是变成了几秒钟的事情。
    现在使用名为 CUDA HashCat 的软件,我们可以开始破解。因此,假设我们有一个名为 test.hash 的文件,其中包含所有哈希值,并且我们希望使用小写字母获取所有 7 个字符的密码,我们运行以下命令。
    ./hashcat -a 3 test.hash ?l?l?l?l?l?l?l

    a代表攻击,3是攻击模式,即蛮力,?l代表小写字母,重复7次表示7个小写字母。在几秒钟内,所有哈希与 test.hash 中的组合匹配的组合将显示在屏幕上。如果我们想破解6个小写字母和2个数字最后的密码,我们必须这样写

    ./hashcat -a 3 test.hash ?l?l?l?l?l?l?d?d

    随着字符数的增加,它会随着组合数的增加而减慢,这可以计算为字符集中的字符数与密码长度的幂

    第一个例子: 26^7第二个例子: 26^6 * 10^2

    随着搜索库变大,即使对于像 MD5 或 SHA1 这样的简单哈希函数,破解这些密码也变得更加困难,在这种情况下,蛮力攻击是不可行的,我们继续进行字典攻击。

  2. 字典攻击:我们将常用密码字典存储在一个文本文件中,我们尝试将它们与从站点数据库中获得的哈希值进行匹配。这比蛮力更有效。有一个名为“rock you”的密码列表,其中包含数百万个此类密码。让我们进行这样的攻击。
    ./hashcat -a 0 test.hash ./dictionaries/rockyou.dict

    0 代表字典攻击模式,我们提供字典文件的路径。
    可以通过将一组规则应用于字典然后运行散列来自定义这些攻击。这些规则只不过是人们试图认为他们使密码更安全的常见变体。它可以用1代替I或用3代替E。假设您现在将所有规则存储在名为 myrules.rule 的文件中,如果我们使用此文件运行攻击,它将运行一系列字典攻击,一次将一个规则应用于整个字典。为此,我们需要运行以下命令

    ./hashcat -a 0 -r ./rules/myrules.rule test.hash ./dictionaries/rockyou.dict

选择强密码

流行的在线漫画 xkcd 试图通过漫画来描述人们选择和记住密码的问题。

它谈论密码熵。究竟是什么?

密码熵:它只是密码中保存的信息量。密码的熵越高,破解所需的时间就越长。所以如果你有一个 6 个字符的密码,那么熵非常低,很容易被暴力破解。如果您有一个带符号的 10 个字符的密码,那么您就可以免受蛮力攻击,但仍然可以用字典破解它。

参考上面的漫画,它谈到“正确的马电池”作为密码的可能选择。由于它的 4 个单词附加在一起,因此它是‘un-brute-forcable’ 。即使不使用特殊字符,它也是一个很好的密码,因为它的熵很高,也很难被字典破解,但并非不可能。我们可以使用具有不同英语单词组合的字典攻击来代替使用字符组合。
为了使它真正安全,请使用 3 或 4 个不常见的英语单词,并在单词中间粘贴一个特殊字符,使其具有非暴力性和几乎字典证明的能力。但是,如果您认为这一切都很痛苦,那么您可以使用一个好的密码管理器,只需记住一个主密码即可。