设想:
- 客户端将其用户名发送
u到服务器。 - 服务器
(username, salt, hashed_password)从其数据库中提取一个username与客户端的用户名匹配的元组u。hashed_password是在元组被写入数据库时(例如,在用户注册期间)计算的结果hash(salt + password)(其中hash是现代密码散列函数)。 - 服务器发送
salt给客户端。 - 客户端计算并发
h := hash(salt + password)送给h服务器。 - 服务器比较
h与hashed_password和授予访问权限,如果哈希匹配。
如果我们假设服务器在用户注册期间没有计算哈希(相反,客户端计算了哈希并将元组发送(username, salt, hashed_password)到服务器以便将其存储在数据库中),为什么这种情况不被认为是零知识密码证明?或者它实际上是一个 ZKP?
据我了解,服务器从未见过实际密码,但可以验证客户端拥有用于创建初始哈希的原始密码。