Here's an authentication scheme I had in mind that combines the simplicity of HTTP Digest Authentication and the security of real crypto primitives. I have in mind the user-level authentication, ie login/password, not the TLS level.
I'd like to see if anything can go wrong with such a scheme:
Registration
- User chooses password $p$
- User generates salt $s$
- User generates key material $m=KDF(s, p)$
- User generates assymetric authentication keypair, say DSA, using $m$ as the "random" source, where randomness comes from the salt: $priv/pub$
- User sends server $s$ and $pub$ as authentication material
Login
- Server generates challenge $c$
- Server sends challenge $c$ and salt $s$ to client
- Client re-generates the private/public keypair with $s$ and $p$ and signs the challenge with the signing key
- Client sends the signed challenge, server verifies with $pub$
This scheme has some advantages over other methods of authentication:
- Actual password never leaves the client
- User doesn't have to generate and keep a certificate, a password is enough
- Instead of depending on the password only, the $priv/pub$ keypair also depends on a salt so that 2 users with the same passwords don't accidentally share anything
I guess the most important thing to consider here is whether the salt generation is "random enough" to accommodate even the worst case (everyone has the same password)
Would that scheme be sound to implement ? Are there any flaws that would make it foolish ?