这个问题已经被问过好几次了,但总是格式如下
“如何
examplewebsite.com
实现他们的‘请输入密码的第 th 和 th 个字符’功能x
?y
”z
并且通常假设答案是他们使用的HSM能够根据存储的密码通过/失败来回答此类查询。
在我看来,必须有一种明智的方法可以在不使用安全硬件的情况下实现这一目标。这可能是一种不太可能的情况,因为任何对安全性足够关心以实施此类键盘记录缓解措施的人都可能拥有使用 HSM 的预算和专业知识。但是从学术的角度来看,有没有好的实现呢?
一种天真的方法可能是存储所有3 choose n
组合,其中n
是密码长度,choose
是数学组合函数。
但是存储这些三元组是有问题的;
- 鉴于搜索空间很容易被暴力破解,再多的盐渍也无法保护数据库。
- 长密码有大量可能的组合,导致查找和存储问题。我们可以将数字限制为固定上限,但这开始损害密码强度(以相当复杂的方式,取决于您选择存储哪些三元组)。
- 用于生成每个三元组的索引也需要存储,以上两点也适用。
这种方法很差,有没有更好的方法不需要使用 HSM?