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;
+ 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) {
+ r += 1;
+ duration *= 2;
+ }
+ r -= 1;
+
+ return r;
+}
+
+
void
print_passwd(char *string, int operation, void *extra)
{
@@ -160,7 +185,10 @@ main(int argc, char **argv)
if (operation != -1)
usage();
operation = DO_BLF;
- rounds = strtonum(optarg, 1, INT_MAX, &errstr);
+ if (strcmp(optarg, "a") == 0)
+ rounds = ideal_rounds();
+ else
+ rounds = strtonum(optarg, 1, INT_MAX, &errstr);
if (errstr != NULL)
errx(1, "%s: %s", errstr, optarg);
extra = &rounds;