- Client sends its username
- Server extracts a tuple in the form of
(username, salt, hashed_password)from its database, where
usernamematches the client's username
hashed_passwordis the result of
hash(salt + password)(where
hashis a modern cryptographic hash function) which has been computed when the tuple has been written to the database (e.g. during user registration).
- Server sends
- Client computes
h := hash(salt + password)and sends
hto the server.
- Server compares
hashed_passwordand grants access if the hashes match.
If we assume that the server has not computed the hash during the user's registration (instead, the client computed the hash and sent the tuple
(username, salt, hashed_password) to the server in order to store it in the database), why is this scenario not considered a zero knowledge password proof? Or is it in fact a ZKP?
From my understanding the server has never seen the actual password, but it can be verified that the client posses the original password which was used to create the initial hash.