I'm not an expert, but that's correct. A too-fast or broken hash function will still be "vulnerable" to a brute force attack [1]. Salting doesn't prevent this.
Peter [1] http://stacksmashing.net/2010/11/15/cracking-in-the-cloud-amazons-new-ec2-gp u-instances/ On 2/11/11 9:57 AM, "william ratcliff" <william.ratcl...@gmail.com> wrote: > Hi! The scenario that I am considering is when the attacker has your > database--can they compromise the passwords in it? While I believe that a > salt will protect you against a "Rainbow Table" attack, I'm not convinced that > it will protect you against the brute-force attacks which are now possible. I > will try to consult some experts today and see if they are willing to go on > record. > > William > > On Fri, Feb 11, 2011 at 8:10 AM, Eduardo Cereto Carvalho > <eduardocer...@gmail.com> wrote: >> I'm not an expert on the subject. >> >> But I think that the hashes security issues are olved by the use of a "salt", >> salted hashes are known to be a very secure way to store data. >> >> >> >> On Fri, Feb 11, 2011 at 3:59 AM, William Ratcliff >> <william.ratcl...@gmail.com> wrote: >>> Hi! I'm new to the list and have started to look into authentication. I >>> find that I will need to patch it for my own needs, but would like to ask >>> the opinions of others who are more familiar with the code-base than I am. >>> I apologize if I make any mistakes in the protocol of the list in matters >>> such as including too much code. >>> >>> SHA1 is not secure. This is not a nationalism issue. For example: >>> http://www.darknet.org.uk/2010/11/sha-1-password-hashes-cracked-using-amazon >>> -ec2-gpu-cloud/ >>> >>> Or, from NIST: >>> http://csrc.nist.gov/groups/ST/toolkit/secure_hashing.html >>> >>> where the relevant excerpt is: >>> March 15, 2006: The SHA-2 family of hash functions (i.e., SHA-224, SHA-256, >>> SHA-384 and SHA-512) may be used by Federal agencies for all applications >>> using secure hash algorithms. Federal agencies should stop using SHA-1 for >>> digital signatures, digital time stamping and other applications that >>> require collision resistance as soon as practical, and must use the SHA-2 >>> family of hash functions for these applications after 2010. After 2010, >>> Federal agencies may use SHA-1 only for the following applications: >>> hash-based message authentication codes (HMACs); key derivation functions >>> (KDFs); and random number generators (RNGs). Regardless of use, NIST >>> encourages application and protocol designers to use the SHA-2 family of >>> hash functions for all new applications and protocols. >>> >>> I have also seen discussions in other venues from people who are worried >>> about the security of SHA1 in the event that their system is compromised, >>> can an attacker gain the passwords in the database? The appearance of >>> modules such as django-bcrypt: >>> https://github.com/dwaiter/django-bcrypt/ >>> show that this issue is becoming of more general concern. >>> >>> Current solutions: >>> 1) Monkey patch: >>> put a top level installed_app that has a listener to the class_prepared >>> signal that performs monkey patching throughout user. >>> This is rather ugly and it feels very fragile to me if the auth module >>> changes internally. >>> 2) Rewrite the Backend as Tom suggests by subclassing ModelBackend: >>> Again, it's not sufficient. Why? >>> >>> If we look at the Model Backend, we see that yes, the authenticate method >>> currently authenticates against User--but the problem is NOT the >>> authentication per se, but rather that the User class has several methods >>> such as: >>> check_password, set_password, etc. that have encryption hard coded. There >>> are admin commands associated with the User class which refer to methods >>> with a particular encryption method chosen. >>> >>> 3) For users of Django who cannot (say US government agencies, people who >>> have tight security concerns, etc.) use the current module, ignore the auth >>> module and roll their own: >>> This has been attempted before. However, the problem is that it is easy to >>> make mistakes doing this and most of the functionality in the auth module is >>> very good and simply copying most of it to make a few changes to User--and >>> to maintain those against modules which use the user module seems rather >>> excessive. >>> >>> While my first suggestion was: >>> Move the encryption related portions of the code that are hard coded to the >>> authentication backend. Make a default which follows best practices (I >>> would suggest moving to SHA2 in a backwards compatible fashion) that most >>> people will use. However, for those that want to use bcrypt for example, it >>> would be easy for them to simply write their own backend. >>> >>> However, there are also merits to Paul's approach of having a mapping in the >>> settings file. What I like about the backend approach is that it allows >>> for graceful fallbacks as function of python version, but gives the user the >>> ability to change the algorithm in a simple way. >>> Also, it saves one from distinguishing between sha1 and sha1 with >>> stretching....Perhaps a compromise would be to have a backend >>> which looks to the settings file for the location of a method? >>> >>> But, if I write a patch that works and maintains backwards compatibility >>> would it be accepted? Is it better to email it here, or to submit a ticket, >>> claim the ticket, and then add the patch? >>> >>> >>> Also, would it be better for me to work from the trunk, or from 1.2.5? This >>> is important because of: >>> http://code.djangoproject.com/ticket/13969 >>> >>> >>> Thanks, >>> William >>> >>> >>> >>> >>> >>> >>> -- You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to django-developers@googlegroups.com. To unsubscribe from this group, send email to django-developers+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-developers?hl=en.