“密码敲门”是个好主意吗?

信息安全 验证 密码 敲门
2021-08-19 02:10:41

使用端口敲门,您必须按定义的顺序“敲门”特定端口,以公开正在运行服务的端口。

密码敲门怎么办?例如,您有三个密码ABC它们本身都不正确,但按此顺序一一输入,它们将授予您访问权限。

让这个想法更清晰的一些场景:

情景 1。

  • 你:密码A
    • 服务器:密码无效。
  • 你:密码B
    • 服务器:密码无效。
  • 你:密码C
    • 服务器:密码接受

情景 2。

  • 你:密码A
    • 服务器:密码无效。
  • 你:密码C
    • 服务器:密码无效。
  • 你:密码B
    • 服务器:密码无效。

情景 3。

  • 你:密码A
    • 服务器:密码无效。
  • 你:密码B
    • 服务器:密码无效。
  • 你:密码B
    • 服务器:密码无效。
  • 你:密码C
    • 服务器:密码无效。

情景 4。

  • 你:密码A
    • 服务器:密码无效。
  • 你:密码A
    • 服务器:密码无效。
  • 你:密码B
    • 服务器:密码无效。
  • 你:密码C
    • 服务器:密码接受

我想不出这种方法比常规单一密码登录有任何缺点。此外,每增加一个密码,字典攻击的难度就会成倍增加。

我意识到它是默默无闻的安全性,并且不会消除对强密码的需求。密码序列本身与所使用的密码串联一样强大。此方法中增加的安全性来自出乎意料的复杂过程。

这是个好主意吗?它比经典密码更好吗?

4个回答

问题中概述的系统实际上比简单地要求长度为 A+B+C 的单个密码要弱,因为它允许一类不能针对单个密码使用的攻击:

假设您的三个密码组合是E F G. 攻击者可以发送密码,以两次的价格A B C D E F G进行五次攻击(、、、、A B C对此的通用术语是de Bruijn 序列,它允许您使用比可能的组合更少的尝试来攻击任何基于状态的系统(例如数字锁)。B C DC D ED E FE F G

从原始安全角度来看,您的密码只是“AB C”,密码的相对强度会相应计算。

从用户的角度来看,这可以说是太难用了。服务器没有给出任何关于当前状态的指示(它还在寻找第二个密码吗?),因此用户无法判断要提供哪个密码。

从防御的角度来看,这里有少量价值。密码攻击的执行变得更加复杂,并且必须重写现有的攻击工具以适应这种奇怪的方案。这可能足以说服攻击者继续前进,但如果你是一个重要目标,那么它根本无济于事。

我将在这里谈几点。

首先,假设攻击者不知道密码方案是一个错误的假设,而你是正确的,它是通过默默无闻的安全性。如果每个用户都可以学习这种登录方案,那么攻击者也可以。因此,敲门并不比只有一个密码ABC好。

您可能会想,“密码越多,暴力猜测的次数不是会成倍增加吗?” 答案是不。考虑一个长度为z的字母表和三个长度为 abc的密码每个可能的密码数量分别为z az bz c如果要按每个可能的顺序尝试每个密码的所有可能值,则需要z a * z b * z c猜测,等于z (a + b + c). 恰好单个密码ABC的长度为a + b + c,因此所需的猜测次数也是z (a + b + c)

还有一个设计问题是用户会对这个系统感到困惑和/或沮丧,特别是如果他们难以记住他们的密码。人们很难记住他们访问的每个站点密码(这就是许多人重复使用密码的原因)。三个密码更难记住,如果您的某些用户对所有三个密码都使用相同的字符串,我不会感到惊讶。

要求三个表单提交才能登录肯定会减慢暴力攻击,但您可以通过在服务器端密码验证中添加延迟来轻松实现这一目标。

这是通过默默无闻的安全性——如果被广泛采用,攻击者只会尝试三遍。此时,您最好只有一个密码,但设置更长的最小密码长度,以确保它与三个单独的密码连接起来一样长。