Logging In
I'm using client-side data encryption to authenticate users, because clicking those surprise "Accept Certificate" forms always bothers me. It means VeriSign is a little bit richer than I thought. So away, mod_ssl! I need a decent MD5 implementation and RFC 1994.
So on the server we store an unsalted MD5 hash of the user's password, and give them a random challenge string along with the login form. They MD5 their MD5ed password with concatenated challenge string, and we do the same. They send, they match, they're in.
After thinking it through, however, I wonder how the password is first transmitted to the server? Without using SSL, I mean. Would I have to email them a generated password? That's lame. Digg just POSTs the password form to their server, that can't be secure. I'm investigating their scripts, but I don't see any indication of further processing.
Good security notes: PHP Security Consortium
Great javascript effects: MooTools