Secure User authentication using HMAC and SKID2
In some cases it may be usefull to provide secure authentication
without the need of an encryption layer. We'll now discuss how to
implement the protocol SKID2 using the mhash HMAC functions.
Ok let's now assume we're on the server side and we want to authenticate
a client using username-password but without transmitting the password
in the clear.
Step 1. The server sends a random string (over 8 bytes) to the client
Let's call it RANDOM1.
We send client RANDOM1.
Step 2. The client reads RANDOM1 and gets
the username and password from the user.
The client now calculates
X = HMAC( password, RANDOM1+RANDOM2).
RANDOM2 is a random string generated by the client. Client sends
the server X, USERNAME, RANDOM2.
Step 3. The server now has the values: RANDOM1, RANDOM2, USERNAME, X.
a. Checks the users database for USERNAME and retrieves the
user's password (PASSWORD).
b. Checks if HMAC( PASSWORD, RANDOM1+RANDOM2) == X
If it is not the same abort.
Now we have the user authenticated.