没有 HSM 的“请输入第 N 个字符”

信息安全 加密 密码 哈希 hsm
2021-08-24 17:18:18

这个问题已经被问过好几次了,但总是格式如下

“如何examplewebsite.com实现他们的‘请输入密码的第 th 和 th 个字符’功能xyz

并且通常假设答案是他们使用的HSM能够根据存储的密码通过/失败来回答此类查询。

在我看来,必须有一种明智的方法可以在使用安全硬件的情况下实现这一目标。这可能是一种不太可能的情况,因为任何对安全性足够关心以实施此类键盘记录缓解措施的人都可能拥有使用 HSM 的预算和专业知识。但是从学术的角度来看,有没有好的实现呢?

一种天真的方法可能是存储所有3 choose n组合,其中n是密码长度,choose数学组合函数

但是存储这些三元组是有问题的;

  • 鉴于搜索空间很容易被暴力破解,再多的盐渍也无法保护数据库。
  • 长密码有大量可能的组合,导致查找和存储问题。我们可以将数字限制为固定上限,但这开始损害密码强度(以相当复杂的方式,取决于您选择存储哪些三元组)。
  • 用于生成每个三元组的索引也需要存储,以上两点也适用。

这种方法很差,有没有更好的方法不需要使用 HSM?

1个回答

假设发送给客户端的问题大约是三个字符:服务器要求(例如)密码的第 4、第 7 和第 8 个字符。

冻结时间!在那个时候,服务器已经问了上面的问题,并且能够验证来自客户端的答案。这意味着在其完整状态下,有足够的信息来判断三个字符值的特定序列是否是正确答案。它可以看出,在投入有限数量的 CPU 之后,最多可以在服务器上进行一秒钟的计算。

如果那只是软件,那么状态可以恢复。我们设想攻击者劫持了机器,因此他可以获取硬盘的完整副本。那时,攻击者拥有一切,因此他可以在自己的机器上运行服务器的仿真。特别是,他可以将服务器回到已知的先前状态。

因此,攻击者现在可以通过尝试和倒带模拟服务器来对三个字符值进行详尽的搜索。

这是不可避免的。如果没有专用的不可克隆硬件(即 HSM),这种攻击必须有效。这基本上意味着密码强度是三字符密码的强度,即没有什么值得吹嘘的。