On Jul 30, 2009, at 10:26 PM, Bottiger wrote:

>
>> That may not be a good idea, I think. That makes your password  
>> longer but with a possible cryptographic weakness because it's  
>> following a known generation rule (being formed by a string  
>> repeated 3 times).
>
> The primary concern is a precomputed rainbow hash table.
>
> Anything related to password generation strength depends on the
> person's original password and even a random salt does not help,
> because if the database is compromised, then the attack knows which
> salt to generate hashes for. Therefore there really isn't anything
> wrong with just doubling or tripling the password as a salt.
>
> In fact, many websites such as Reddit (which I examined the source
> code) does this.

Still a bad idea.

A rainbow table is basically a precomputed dictionary attack. The size  
of the dictionary is a function of the number of distinct passwords  
that we're trying to guess. Dictionary attacks work for short  
passwords, but are impractical against longer passwords. A password  
using letters, numbers and a few special characters carries in excess  
of 6 bits of information per character. 10 bytes of password plus 10  
bytes of random salt gives us 120 bits total, for a dictionary space  
of 2^120 hashes.

Precomputing the possible hashes for each base password requires a  
table of 2^60 hashes *per password*. On the other hand, a hash of a  
single deterministic transform of each password requires one hash per  
password.

That's the point of salt.

And no, I'm not concerned about spending a few extra bytes per  
password. I just paid $90 for a terabyte drive; that'll store plenty  
of password hashes, even if we "waste" a few bytes each making them  
more secure.

>
> On Jul 30, 9:51 pm, Francisco Gama <francisco....@gmail.com> wrote:
>> On Jul 31, 5:16 am, Bottiger <bottig...@gmail.com> wrote:
>>
>>> As long as the salt is different for every password, it pretty much
>>> makes it infeasible for someone to create a large enough rainbow  
>>> hash
>>> table attack.
>>
>>> The Unix salt of 12 random bytes is ok, but comes at the cost of  
>>> extra
>>> storage and pretty much the same benefit. To put a larger barrier on
>>> computational speed, you could double or triple the original  
>>> password
>>> before putting it through the hash.
>>
>> That may not be a good idea, I think. That makes your password longer
>> but with a possible cryptographic weakness because it's following a
>> known generation rule (being formed by a string repeated 3 times).
>> That makes the diversity of possible passwords much smaller which
>> isn't a good password policy.
>>
>> Besides, the complexity is the same (which is close to say that the
>> computational speed is also close) and an attacker would need the  
>> same
>> number of attempts to break the password by brute force because all  
>> he
>> had to for each attempt X, the attempt XXX. He doesn't need to try X
>> or XX.
>>
>>> On Jul 30, 8:38 pm, Jonathan Lundell <jlund...@pobox.com> wrote:
>>
>>>> On Jul 30, 2009, at 8:30 PM, Bottiger wrote:
>>
>>>>> I know you have the mantra of not breaking backwards  
>>>>> compatibility,
>>>>> but it is a pretty bad idea to have unsalted MD5 passwords.
>>
>>>>> For example, let's say your password is "massimo". The MD5 hash of
>>>>> that happens to be "8cac5ac44b51f182143a43c4cdb6c4ac".
>>
>>>>> Even forgetting rainbow tables, you can simply do a search for  
>>>>> it on
>>>>> Google and you have 10+ pages telling you that it is the hash for
>>>>> "massimo".
>>
>>>> How about a new validator that does the right thing, and  
>>>> deprecating
>>>> CRYPT?
>>
>>>> I'd prefer some less-predictable salt than the suggestion below,
>>>> though. How about the old Unix passwd trick of choosing a some  
>>>> random
>>>> salt, and appending the salt in plaintext to the hash?
>>
>>>>> http://www.google.com/search?q=8cac5ac44b51f182143a43c4cdb6c4ac
>>
>>>>> On Jul 30, 8:10 pm, mdipierro <mdipie...@cs.depaul.edu> wrote:
>>>>>> We cannot break backward compatibility. People should specify a  
>>>>>> key
>>>>>> and use the HMAC+SHA512 anyway.
>>
>>>>>> Massimo
>>
>>>>>> On Jul 30, 9:49 pm, Bottiger <bottig...@gmail.com> wrote:
>>
>>>>>>> The CRYPT validator is unsecure because it uses unsalted MD5.
>>
>>>>>>> There are public rainbow tables that have unsalted MD5 passwords
>>>>>>> of up
>>>>>>> to 10 characters long including symbols.
>>
>>>>>>> I highly recommend that if no "key" is specified, that CRYPT  
>>>>>>> will
>>>>>>> automatically salt the password based on a substring of the  
>>>>>>> password
>>>>>>> itself. For example:
>>
>>>>>>> password = "secretpass"
>>>>>>> hash = md5(password+password[-1])
>>
>>>>>>> This will of course break backward compatibility, but this is  
>>>>>>> a real
>>>>>>> security vulnerability.



--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To post to this group, send email to web2py@googlegroups.com
To unsubscribe from this group, send email to 
web2py+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to