【问题标题】:Why are passwords with repeating substrings weak?为什么带有重复子串的密码很弱?
【发布时间】:2010-11-22 14:24:52
【问题描述】:

许多网站都有密码强度检查工具,它会告诉您密码的强度

假设我有

st4cK0v3rFl0W

这总是被认为是超强的,但是当我这样做时

st4cK0v3rFl0Wst4cK0v3rFl0W

它突然变得超级弱。我也听说过,当密码只有很小的重复序列时,它会弱很多。

但是第二个怎么可能比第一个弱,因为它的长度是第一个的两倍?

【问题讨论】:

  • 密码长度只会使密码更安全地抵御暴力攻击。实际上,这在很大程度上是不得已而为之。
  • 我认为大多数这样的密码强度工具都是没有意义的。
  • 如果您能发布您听到的链接,那就太好了。
  • 如果你不同意最后一部分,关于暴力攻击是最后的手段,那么更多的数学也将证明这一点。为了有一个简单的输入集,我们将假设 64 个字符(base64 字符),以及 8 个字符的 SET 密码长度(如果您说 6-8 个字符,还有更多选项)。 64 ** 8 = 281,474,976,710,656(约 281 万亿)。假设我们有一个非常优化的算法和一台高端计算机可供我们使用,我们每秒可以运行大约 50,000 个密码。暴力破解此密码需要 178.51 年。
  • 我不明白为什么这应该是超级用户......这是一个对程序员知道答案很有用的问题! =)

标签: security passwords


【解决方案1】:

我能想到的最佳理由来自 NIST 发布的 Electronic Authentication Guide。它给出了如何估计密码熵的一般经验法则。

长度只是熵的一个标准。还涉及密码字符集,但这些不是唯一的标准。如果您仔细阅读香农对用户选择密码的研究,您会注意到较高的熵分配给初始位,而较低的熵分配给后者,因为很有可能从前一个位推断出密码的下一位。

这并不是说较长的密码不好,只是说字符选择不佳的长密码与较短的密码一样弱。

【讨论】:

    【解决方案2】:

    这可能是密码强度检查器的一个缺陷——它识别出一个模式……模式不适合密码,但在这种情况下,它是复杂字符串上的模式……另一个原因可能是Wael Dalloul 的回答指出了这一点:Someone can see the repeated text when you type it。任何间谍都有两次机会看到你输入的内容...

    【讨论】:

      【解决方案3】:

      虽然在实践中,更长的可能更强,但我认为当您深入了解加密和密码的工作原理时可能存在潜在的弱点......可能......

      除此之外,我会回应您使用的强度检查器没有非常准确地考虑所有方面的其他回答。

      只是一个想法......

      【讨论】:

        【解决方案4】:

        算法坏了。

        要么使用双峰检测并立即将其视为不良记录。或者计算在某种程度上相对于字符串长度的强度,并且重复的字符串比等长的可比较的完全随机字符串弱。

        【讨论】:

          【解决方案5】:

          我的猜测是,检查是否有人攻击您的密码很简单。尝试将每个密码翻倍或翻三倍也只是工作的两倍或三倍。但是,在密码中包含更多可能的字符(例如标点符号)会大大增加暴力破解密码的复杂性。

          但是,在实践中,几乎所有具有 8 个或更多字符的非显而易见(阅读:不受字典攻击 [是的,包括 1337 化字典单词])密码都可以被认为是相当安全的。以某种方式从您那里进行社会工程或仅使用键盘记录器通常会少得多。

          【讨论】:

            【解决方案6】:

            听起来密码强度检查器有缺陷。我想这不是什么大问题,但是重复的强密码并不比原始密码弱。

            【讨论】:

            • 恰恰相反:密码越长,它就越坚固。
            • 在某个点之后(随着硬件功能不断变化,但我估计目前大约有 8 个字符,没有并行计算)它变得不再安全(实际上),因为无论如何,它不能被蛮力强迫。其他攻击向量忽略输入长度,或者因为它们不尝试重新创建输入,或者因为它们尝试从输出向后工作。或者因为他们追捕你,用户告诉坏人密码。
            • 密码的熵可能只有每个字母几位,因此,为了安全起见,我会将最小安全长度设置得稍高一些 - 例如,大约 11 个字符(甚至具有出色的强度 - 每个字符至少 7 个字符)。无论如何,您的观点是正确的;一个相当强的密码几乎是不可猜测的,如果它被破解,即使如果攻击者拥有密码的哈希值,也不是暴力破解。
            • 当然,大多数用户不会对密码的整体熵有合理的直觉,因此密码强度估计器(如果可行的话)并不是一个坏主意。
            【解决方案7】:

            我猜是因为您需要使用键盘输入两次密码,所以如果有人在您面前可能会注意到它。

            【讨论】:

              【解决方案8】:

              我的猜测是它可以生成更“明显”的哈希。

              例如 abba -> a737y4gs,但 abbaabba -> 1y3k1y3k ,当然这是一个愚蠢的例子,但其想法是在 key 中重复模式会使哈希看起来不那么“随机”。

              【讨论】:

              • 哈希函数不是为相似的输入生成非常不同的输出吗?
              • 正如我所说,这是一个愚蠢的例子。 :) 没有哈希函数会那么弱。再说一遍..
              • 哈希函数(至少用于密码哈希)旨在为所有输入生成非常不同的结果,并且对更改的输入产生不可预测的结果。
              • 还有(CRC32等)。它们不是为散列密码而设计的,它们被设计为快速健全性检查。 MD5、SHA*等是密码哈希一般使用的哈希,并显示我描述的属性。
              猜你喜欢
              • 2020-04-12
              • 2013-06-30
              • 2013-01-12
              • 2020-11-11
              • 1970-01-01
              • 2021-03-02
              • 2014-10-19
              • 1970-01-01
              • 2012-11-19
              相关资源
              最近更新 更多