一组随机的二级密码是否增加了任何安全性?

信息安全 验证 密码策略
2021-09-10 14:50:38

我的银行使用这种相当罕见的身份验证策略。他们当然有一个密码,该密码具有非常强的密码模式,例如“使用字母数字字符和符号,8+ 个字符”。

他们有一个二级密码,必须正好是 8 个字母数字字符。我们应该在登录时从这个二级密码中随机输入三个字符。下面是示例:

在此处输入图像描述

现在我希望他们将我的二级密码存储为 8 个哈希值,希望每个字母都用不同的盐进行哈希处理。让我们假设我的推测是正确的,并尝试找出这有多安全。

所以我的问题是,这种二级密码是否增加了安全性?或者,如果我们使用二级密码而不像这样随机化字母,我们会有多少额外的安全性?

2个回答

好吧,它当然不会使它更不安全。您仍然拥有您的主密码,我们假设它已正确存储。

除此之外(我将假设您必须输入两者,而不是其中一个;如果是这种情况,这将不是很安全,请参阅评论中提供的链接@DW。 ),他们有一个二级密码。让我们假设它以最糟糕的方式存储:明文(*)。

所以我们不关心万一攻击者窃取数据库会发生什么(这个额外密码的散列不会增加很多安全性)。

所以我的问题是,这种二级密码是否增加了安全性?

这仍然增加了安全性。随机化的好处是有人可以拦截您登录一次,但如果不采取进一步措施,他们仍然无法自己登录。

这不是增加很多安全性,但它是一些,我认为作为纵深防御策略是有意义的。

这可能会防止的示例:

你在朋友家(或者你的地方有访客,或者你在公共场合使用笔记本电脑进行网上银行[不要这样做])并且必须给他们寄一些钱。他们越过你的肩膀,看到你输入了密码。如果没有随机化,他们可以自己登录并查看你有多少钱,你花了多少钱等等。如果你忘记了你的手机并且正在使用 mTAN,他们可以从你那里窃取。

使用随机的第二个密码,他们将不得不暴力破解(在线登录或哈希,如果他们设法闯入银行(*)),或者看着你输入密码很多次。

有 8 个超过 3 = 56 个可能的字符组合要输入(假设您总是必须输入 3 个字符),所以在他们被问到完全相同的字符之前刷新可能会很烦人(或者可能会阻止它们)。

也许他们不太确定您的主密码,并希望尝试一些变体,这对于随机的辅助密码会困难得多。

所以是的,我认为这种随机密码可以保护现实世界的场景,尤其是针对技术上经验不足的攻击者。

(*) 在我看来,与拦截密码的人相比,闯入银行的可能性要小得多。

或者,如果我们使用二级密码而不像这样随机化字母,我们会有多少额外的安全性?

你的意思是只有两个“正常”密码?假设它没有告诉您哪个密码错误,这与在线暴力攻击的单个密码需要 16 个以上字符相同。如果他们确实告诉您哪一个是错误的,或者您设法获得了哈希值,那么它将增加 8 字符字母密码为您提供的安全性。

这当然不能抵御上述情况。

在我看来,即使它是随机的,也只是八个非常、非常、非常低熵的密码(1 个字符)。这将非常容易被蛮力破解(像往常一样,我们必须假设攻击者有盐)。如果攻击者知道二级密码,挑战的随机化将毫无用处。

但我认为如果将随机字母与主密码结合起来,这将具有额外的安全性。例如,如果密码最初是这样散列的:

hash_1 = hash(primaryPassword + letter_1_of_secondary + random_salt_1)
hash_2 = hash(primaryPassword + letter_2_of_secondary + random_salt_2)
// ... and so on.

现在这基本上相当于为同一个帐户设置了八个密码,并且必须提供八个随机密码中的三个用于身份验证。攻击者必须破解至少三个密码,并尝试登录,直到系统提示输入三个确切的密码,并希望系统不会因为多次尝试而锁定帐户。

正如Chris Murray在评论中指出的那样,这并不比拥有一个密码好多少。因为如果攻击者破解了一个密码,所有其他密码都可以很容易地被破解,因为它们共享相同的秘密。