Scenario:
- Client sends its username
u
to server. - Server extracts a tuple in the form of
(username, salt, hashed_password)
from its database, whereusername
matches the client's usernameu
.hashed_password
is the result ofhash(salt + password)
(wherehash
is 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
salt
to client. - Client computes
h := hash(salt + password)
and sendsh
to the server. - Server compares
h
withhashed_password
and 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.