使用零知识证明身份验证强制使用新密码

信息安全 srp
2021-08-23 14:15:53

假设使用 ZKP(例如 SRP6a)进行密码验证。

假设我需要强制用户更改他们的密码(所以我有当前密码的盐和验证器)。为此,客户端需要向我发送新的盐和验证器值。但是如果盐是随机的,我无法检查使用的密码是否相同。

我打扰的原因是因为初始密码可能通过不太安全的方式传递,我不希望该密码流连忘返。

我发现确保密码不同的唯一方法是要求新盐与旧盐相同。

更改密码的机制作为 API 公开给客户端,我不一定相信客户端会进行验证。

问题是:

  1. 有没有更好的办法?
  2. 如果不是,那么要求相同的盐有什么不利之处,即我是否会妥协任何东西?
1个回答

首先,注意如果服务器生成了第一个不安全的密码,那么他很容易检查客户端是否切换了密码。因为这个方案中唯一的秘密值是密码本身。因此,服务器可以尝试生成 v 变量并简单地检查它们是否相同。所以你原来的问题就是这样解决的。

据我了解,该方案中加盐的想法正是为了防止对手弄清楚何时使用相同的密码。在我看来(还没有检查过,但快速浏览一下)如果您为每个客户修复随机盐,该方案将足够安全。在这种情况下,似乎唯一的优势是服务器可以检测到密码重用。