Considere el siguiente algoritmo hipotético para el inicio de sesión basado en contraseña para, digamos, SSH:
-
El cliente envía su
usernameyclient_auth = HMAC(password, client_timestamp)al servidor. -
El servidor verifica el
client_authy responde conserver_auth = HMAC(password, server_timestamp). -
El cliente verifica el
server_authy comienza la comunicación cifrada usando elkey = HMAC(HMAC(password, client_auth), server_auth)compartido.
Una cosa más: asuma que el password fue computado a partir de un secreto oculto que pertenece al cliente, de la siguiente manera: password = HMAC(private_secret, public_server_address) .
El cliente utiliza este único secreto oculto para generar contraseñas para todos los servicios que utiliza.
Mi pregunta es:
¿Este esquema es tan seguro como la autenticación de clave pública? Y si no, ¿cuál es la ventaja de la autenticación de clave pública?
(Obviamente, suponga que private_secret se generó con suficiente entropía).