Subject: Re: PROPOSAL: adding capability for blowfish passwords
To: None <itojun@iijlab.net>
From: Steven M. Bellovin <smb@research.att.com>
List: current-users
Date: 05/23/2002 17:18:59
In message <28945.1022163677@itojun.org>, itojun@iijlab.net writes:
>>In my opinion, there's no technical reason to do it. If you want to
>>add a new scheme, SHA512 would be a much better choice. The only
>>reason I can see is password file compatibility with OpenBSD.
>
> did you check USENIX paper on openbsd $2$ password? i'm guessing
> you did, and am wondering why you reject their reasoning. are there
> any flaws in their logic?
>
The comparison against MD5 in the paper is somewhat flawed. They take
issue with the specific way md5crypt is instantiated in code, rather
than with the concept of using MD5 (or some version of SHA) as the base
for a secure password hash. If one iterated MD5 some number of times,
you could make it arbitrarily and tunably expensive to check a
password, just as with their Blowfish-based scheme (which makes the
number of rounds variable, i.e., it changes the inside of the
algorithm, rather than the outside).
My suggested algorithm is this:
s = salt; /* or s = hmac_sha512(site-specific-string, salt); */
for (i = 0; i < num_iterations; i++)
s = hmac_sha512(password, s);
There is a proof of security for HMAC, based on the black box
properties of the underlying hash function. Both the salt and the key
can be arbitrarily long (well, limited to 2^64 bits, I think). The
number of iterations is adjustable over time, just as with the Blowfish
scheme.
The Blowfish-based scheme has one advantage: it may be harder to build a
massively-parallel hardware cracker. I assert that if your threat
model includes adversaries who can afford such systems and who have
access to your hashed passwords, you're probably using token-based
authentication. Or at least, you should be...
The discussion of salt size has an important omission, too. The
authors note (correctly) that with too small a salt size, you can get
collisions, and hence a speedup of (roughly) num-pws/num-salts. They
then go on to assert that 2^12 salts are too few. That's far from
clear -- how large is your password file? Even if it's in the 10s of
thousands, the speedup factor is a rather small integer. While I
wouldn't mind a larger salt, for most systems that use password files
for authentication that factor is too small to be interesting.
So, as I said before: Blowfish isn't a bad way to hash passwords; it's
simply not designed for that purpose. SHA512 matches the requirements
much better.
--Steve Bellovin, http://www.research.att.com/~smb (me)
http://www.wilyhacker.com ("Firewalls" book)