On Mon, May 13, 2013 at 17:30 -0400, Ted Unangst wrote: > On Mon, May 13, 2013 at 20:44, Stuart Henderson wrote: > > On 2013/05/13 19:32, Mark Lumsden wrote: > >> I agree. tedu suggest 9 for the number of user rounds and 11 for > >> root back in 2010. Are these numbers reasonable on most archs? > > Note that login.conf defaults can be adjusted on a per arch basis. We > are mostly split between old-slow and new-fast archs, with the > exception of i386, where people run everything from 200mhz geodes to > 4ghz xeon. > > > Actually iirc there was a diff to encrypt(1) to make it automatically > > pick a value which wasn't too slow on the machine, which might be a decent > > default setting (as long as those who are more concerned about the speed > > of attackers machines can raise it above this value). > > That would be this: > > encrypt -b a picks a nice number for you. I get 11 on a fast i5, > which is still imperceptible. Minus one knob. > > On a slower machine, this will effectively raise the minimum to 7, > while reducing the root value to 7 as well. I think that's fair. > > Index: encrypt.c > =================================================================== > RCS file: /cvs/src/usr.bin/encrypt/encrypt.c,v > retrieving revision 1.28 > diff -u -p -r1.28 encrypt.c > --- encrypt.c 14 Jul 2007 21:26:38 -0000 1.28 > +++ encrypt.c 20 Feb 2013 13:43:31 -0000 > @@ -63,6 +63,31 @@ usage(void) > exit(1); > } > > +int > +ideal_rounds() > +{ > + clock_t before, after; > + int r = 8;
I think the minimum number of rounds needs to be documented somehow. > + char buf[_PASSWORD_LEN]; > + int duration; > + > + before = clock(); > + strlcpy(buf, bcrypt_gensalt(r), _PASSWORD_LEN); > + crypt("testpassword", buf); > + after = clock(); > + > + duration = after - before; > + > + while (duration < 50) { I think this magic number needs to be documented. > + r += 1; r++? > + duration *= 2; > + } > + r -= 1; > + Isn't it simpler to start with measuring how long it takes to bcrypt with r = 7 and increment that? Otherwise a comment is needed to describe why do you pick r+1 for the measurement. > + return r; > +} > + > +