Hi, all,
Right now, Django's auth system pretty much uses sha1 hardwired in (literally,
in the case of User.set_password) for the hash. For a discussion of why a
general-purpose hash function is not the best idea in the world for password
encryption, see:
http://codahale.com/how-to-safely-store-a-password/
I'd like to propose a backwards-compatible method of allowing different hash
algorithms to be used, while not adding new dependencies on external libraries
to the core.
1. Add a setting DEFAULT_PASSWORD_HASH. This contains the code for the
algorithm to use; if it is absent, 'sha1' is assumed.
2. Add a setting PASSWORD_HASH_FUNCTIONS. This is a map of algorithm codes to
callables; the callable has the same parameters as auth.models.get_hexdigest,
and return the hex digest its parameters (to allow for a single function to
handle multiple algorithms, the algorithm aprameter to get_hexdigest is
retained). For example:
PASSWORD_HASH_FUNCTIONS = { 'bcrypt':
'myproject.myapp.bcrypt_hex_digest' }
3. auth.models.get_hexdigest is modified such that if the algorithm isn't one
of the ones it knows about, it consults PASSWORD_HASH_FUNCTIONS and uses the
matching function, if present. If there's no match, it fails as it does
currently.
4. User.set_password() is modified to check the value of DEFAULT_PASSWORD_HASH,
and uses that algorithm if specified; otherwise, it uses 'sha1' as it does not.
(Optional: Adding the algorithm as a default parameter to User.set_password().)
Comments?
--
-- Christophe Pettus
[email protected]
--
You received this message because you are subscribed to the Google Groups
"Django developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/django-developers?hl=en.