Consider the following hypothetical algorithm for password-based login for, say, SSH:
The client sends its
client_auth = HMAC(password, client_timestamp)to the server.
The server verifies the
client_authand responds with
server_auth = HMAC(password, server_timestamp).
The client verifies the
server_authand begins encrypted communication using the shared
key = HMAC(HMAC(password, client_auth), server_auth).
One more thing: assume that the
password was computed from a hidden secret belonging to the client, as follows:
password = HMAC(private_secret, public_server_address).
The client uses this one single hidden secret to generate passwords for all services it uses.
My question is:
Is this scheme as secure as public-key authentication? And if not, what is the advantage of public-key authentication?
(Obviously, assume that
private_secret was generated with sufficient entropy.)