I think it is not widespread because it is not in any way whatsoever
an improvement when compared to sending credentials in the clear over
a non-secure connection. The only options are SSL or more complicated
protocols which do not use the transmission of a single password or
password-like credential.
--
"Bureaucrat Conrad, you are technically correct -- the best kind of correct."
> the security benefits of per-user salts are minor.
No.
- Ludvig
You need to requeste a challenge anyway. The challenge would include
a hash type, the password salt, and the challenge salt. The response
would look like HASH(challenge_salt + HASH(password_salt + password)).
That's not much more complicated than it'd be without a password
salt, except for needing to implement a hash or two in JS (which has,
no doubt, already been done).
One other detail on the server-side: if you're sending a randomized
response for a nonexistant user, it must use the same fake, random
password_salt each time--else you could tell that the user doesn't
exist due to the password_salt changing on each attempt. Just use
SHA1(SECRET_KEY + attempted_name).
That said, while I do think there's a benefit to this, the login is
still going to end up in a session cookie (whether with Django's
approach or any other), and there's no way to keep people from just
stealing that cookie (locking it to the IP only makes it a little
harder, and also more inconvenient for people on rapidly changing
dynamic IPs). It also doesn't deal with the need to send a new
password, when changing one or creating a new account. You'd still
need SSL to do that securely, and once you've bought a certificate and
have SSL set up, there's no need for this anyway.
There's still a benefit, because you're sending passwords in the clear
much less frequently--an imperfect improvement is still an
improvement. (Similarly, self-signed SSL certificates are much more
secure than plaintext, despite what your browser's ill-conceived
warnings might want you to believe.) But with these limitations, it
may not be worth the bother for most people.
--
Glenn Maynard