Escenario:
- El cliente envía su nombre de usuario
ual servidor. - El servidor extrae una tupla en forma de
(username, salt, hashed_password)de su base de datos, dondeusernamecoincide con el nombre de usuario del clienteu.hashed_passwordes el resultado dehash(salt + password)(dondehashes una función hash criptográfica moderna) que se ha calculado cuando la tupla se ha escrito en la base de datos (por ejemplo, durante el registro del usuario). - El servidor envía
saltal cliente. - El cliente calcula
h := hash(salt + password)y envíahal servidor. - El servidor compara
hconhashed_passwordy otorga acceso si los hashes coinciden.
Si asumimos que el servidor no ha calculado el hash durante el registro del usuario (en su lugar, el cliente calculó el hash y envió la tupla (username, salt, hashed_password) al servidor para almacenarlo en la base de datos), ¿por qué este escenario? ¿No se considera una prueba de contraseña de conocimiento cero? ¿O es de hecho un ZKP?
Según tengo entendido, el servidor nunca ha visto la contraseña real, pero se puede verificar que el cliente posee la contraseña original que se utilizó para crear el hash inicial.