Scenario:
- Client sends its username
uto server. - Server extracts a tuple in the form of
(username, salt, hashed_password)from its database, whereusernamematches the client's usernameu.hashed_passwordis the result ofhash(salt + password)(wherehashis 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
saltto client. - Client computes
h := hash(salt + password)and sendshto the server. - Server compares
hwithhashed_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.