据我所知,当网站密码泄露时,它们会以加密形式泄露。所有这些密码都同样容易解密吗?我的预感是 10 个字符长的密码可能会在几分钟内被解密,但如果密码是 100 个字符长,则需要数天或数年才能解密。是否有意义?
设置一个很长或很难的密码真的可以防止泄漏吗?我什至在询问密码,例如passpasspasspass11111passpasspasspasspass
与pass11111
.
据我所知,当网站密码泄露时,它们会以加密形式泄露。所有这些密码都同样容易解密吗?我的预感是 10 个字符长的密码可能会在几分钟内被解密,但如果密码是 100 个字符长,则需要数天或数年才能解密。是否有意义?
设置一个很长或很难的密码真的可以防止泄漏吗?我什至在询问密码,例如passpasspasspass11111passpasspasspasspass
与pass11111
.
正如其他人所提到的,“大多数网站”对密码进行哈希处理,它们不会对其进行加密。但是网站可以选择做任何他们想做的事情。有些网站有加密的密码,有些网站将密码存储为明文。显然,如果它们以明文形式存储,那么密码的长度没有区别。
但是让我们假设该站点做了他们应该做的事情并用盐对密码进行了哈希处理。密码的长度确实会影响暴力猜测哈希值的能力,但前提是密码是随机的。
众所周知的 100 个字符长密码的哈希将很快被破解。这是很多人忘记考虑的一个因素。如果您必须一次猜测每个字符,长度会使猜测变得更加困难。但是,如果您使用的是众所周知的密码字典,那么如果您的密码在该字典中,那么长度就不再是一种保护。
所以,你的问题很好。并非所有密码都可以像其他密码一样容易破解,长度可能是破解难易程度的一个因素,但要考虑的总体因素是密码的可猜测性。长度会使猜测变得更加困难,但不是单独猜测。
据我所知,当网站密码泄露时,它们会以加密形式泄露。
首先,一般来说,密码没有加密,它们使用良好的密码散列算法(如 PBKDF2、SCrypt、Argon2)对每个密码使用随机盐进行散列。密码散列算法是单向函数的候选者,因此没有它们的逆算法,其中解密是借助密钥的加密的逆算法。对这些密码散列算法的常见攻击是搜索一些空间并测试已知密码集;John the Ripper和Hashcat是可以使用的一些工具。
像Facebook 这样的一些网站以干净的格式存储密码。当被黑客入侵时,黑客很容易得到一切。如果密码得到很好的保护,那么攻击者需要应用搜索。
所有这些密码都一样容易解密吗?我的直觉是,一个 10 个字符长的密码可能会在几分钟内被解密,但如果一个密码是 100 个字符长,则需要数天或数年才能解密。是否有意义?
在这里,假设我们对密码的哈希进行暴力破解,在这种情况下,这 10 个字符(包括区分大小写和字母数字)每个字符的熵为5.954 。这产生了 59.54 熵,这可以通过超级计算机或比特币矿工的集体力量来实现。大约,他们可以到达
2 67.9秒,2 84小时,2 84.3一天,2 92.8一年。这可以让我们深入了解可能拥有相同或更多权力的机构。
必须记住,像矿工一样运行 SHA256d 与运行 PBKDF2、SCrypt 和 Argon2 不同,这些都是内存硬密码哈希算法。内存硬度阻止了 GPU、ASIC 和 FPGA 上的大规模并行化。由于挖矿的节点不准确,因此估计并不容易,但是,如果我们看一下使用 Tesla V100 27,648 的 Summit 的 Titan SUper 计算机,Titan 每年可以计算大约 2 47 PBKDF2-HMAC-SHA256 哈希值。根据hashcat 结果,这比 2 74有所下降。
100 个字符有意义而不是。将其设置为 100 会使 594.4 的熵远远不够。对于所有人来说,少于 256 应该就足够了。然而问题是,人类无法记住那种东西,因此研究人员开发了dicewire和 Bip39 类型的密码系统,以便它们具有良好的熵并且易于记忆。必看的是XKCD/936。
设置一个很长或很难的密码真的可以防止泄漏吗?我什至询问passpasspasspass11111passpasspasspasspass之类的密码,并与pass11111进行比较。
一旦您的密码具有良好的熵并且每个站点/应用程序都有不同的密码,那么您应该是安全的。通常的方法是使用密码管理器来管理所有密码,如密钥通行证,并使用具有良好熵的密码来保证密码安全。
实际上搜索这种模式的密码集也存在竞争。忘记它们并使用 dicewire 类型的密码,您可以非常轻松地测量密码的强度。
“设置一个很长或很难的密码真的可以防止泄漏吗?”
密码复杂性(长度、字符使用、缺少模式)旨在防止暴力攻击,而不是“泄漏”。
如果有人要使用 MD5 散列的 256 个字符的密码,由于冲突(两个或多个值产生相同结果),它有可能落入暴力攻击(重复猜测)。您的 256 个字符可能会与只有 8 个字符长的猜测匹配。
当这 8 个字符用于登录帐户时,它们会生成与您的 256 个字符的密码相同的哈希,因此系统会认为登录是有效的。
如果您在使用 SHA1 进行散列的网站上使用相同的 256 个字符的密码,那么(上图)强制使用的 8 个字符的密码将不起作用,因为这 8 个字符不会使用不同的算法生成相同的散列(导致冲突被剥削)。
彩虹表(带有解密哈希的哈希列表)曾经是一个问题。使用称为盐的局部变量的系统可以缓解这种情况。这样一来,您就无法在不知道附加局部变量(盐)的情况下使用彩虹表。
密码应该很复杂(密码短语)。密码应该是令人难忘的。不应重复使用密码。您应该能够恢复密码。您不应该通过对预选问题的五个或六个字符的答案来做到这一点。为什么?因为猜测问题的答案(蛮力)比正确长度/复杂性的密码更容易。
但最重要的是,您使用的任何系统都应该需要多因素身份验证。
设置一个很长或很难的密码真的可以防止泄漏吗?
否。如果密码保持散列,则仅使用提供的密码的散列进行身份验证。许多密码可以产生相同的哈希值。例如,即使是 10-12 个字符的密码也可以给出与 100 个字符的密码相同的哈希值。这就是为什么更长的密码并不一定意味着暴力破解。
为了保护密码免受暴力破解,请使用资源昂贵的哈希算法,如 Argon2、Lyra2、scrypt 等。如果参数选择得当,每个候选密码将需要相对较多的 CPU 和 RAM。暴力破解可能非常昂贵并且可能需要很长时间。
然而,使用这些算法进行散列并不意味着使用任何简单的密码都是安全的。
示例:假设您配置了参数,使得单个哈希需要 1 秒,并且在普通 PC 上需要 1 GB RAM。如果您使用由 64 个字符集中的字符组成的 3 个字符的密码,那么要测试的密码总数为 64^3 = 262144。如果攻击者拥有具有相似核心能力的 8 核 CPU,那么它将花费 262144 / 8 = 32768 秒 = 9 小时。因此,三字符密码很容易被破解。
合理的最小长度是多少?要回答这个问题,请考虑风险。你的秘密值多少钱?使用特定 CPU 和内存参数暴力破解特定长度的密码需要多少钱?然后您会看到,对于您的特定情况,即使是 8 个字符的密码也可能就足够了。