Considere el siguiente algoritmo hipotético para el inicio de sesión basado en contraseña para, digamos, SSH:
-
El cliente envía su
username
yclient_auth = HMAC(password, client_timestamp)
al servidor. -
El servidor verifica el
client_auth
y responde conserver_auth = HMAC(password, server_timestamp)
. -
El cliente verifica el
server_auth
y 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).