Date: Tue, 6 Jul 1999 23:26:28 +0930 (CST) From: Kris Kennaway <kkennawa@physics.adelaide.edu.au> To: Peter Wemm <peter@netplex.com.au> Cc: security@freebsd.org Subject: Re: Improved libcrypt ready for testing Message-ID: <Pine.OSF.4.10.9907062308350.13993-100000@bragg> In-Reply-To: <19990706133410.58E2B78@overcee.netplex.com.au>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 6 Jul 1999, Peter Wemm wrote:
> I'd strongly suggest encoding the number of rounds as well, ie:
> $token$salt$rounds$password
For the two algorithms which currently support variable rounds, it's
already encoded into the password:
$Blowfish$xy$<salt><password> following the OpenBSD format (xy = log2 rounds),
and
_<rounds><salt><password> for New-DES. (<rounds> encoded as a base-64 binary
value).
I was thinking about defining the general format as you suggest, and leaving
the "rounds" null (or zero) for things like MD5/SHA-1 which have a static
count (or maybe allowing variable rounds there, although I don't know if there
are cryptographic implications to doing that).
It would probably also be worthwhile redefining New-DES and our blowfish
format to fit this common form:
$DES$<rounds>$salt$hash
The question then becomes whether we make <rounds> implementation-defined or
always log base-2?
> That way plain old crypt(3) can work without needing to dive off to
> /etc/login.conf.db. When passwd(1) generates the string it can set the
> number of rounds either from the count in login.conf, or perhaps some sort
> of time count. For example, suppose you specify that the root login is
> to have a minimum number of X rounds, and the has has to run for at least
> N seconds on this system. So, it could scale according to cpu speed.
That's an interesting idea. I'll have to think about that.
> Also, I don't think using $2a$ for openbsd blowfish is a good idea - use
> $2$ directly since it's what they use. Ther is no need to be different for
> the sake of it.
Are you sure? from lib/libc/crypt/bcrypt.c
static void
encode_salt(salt, csalt, clen, logr)
char *salt;
u_int8_t *csalt;
u_int16_t clen;
u_int8_t logr;
#endif
{
salt[0] = '$';
salt[1] = BCRYPT_VERSION;
salt[2] = 'a';
salt[3] = '$';
snprintf(salt + 4, 4, "%2.2u$", logr);
encode_base64((u_int8_t *) salt + 7, csalt, clen);
}
Having said that, the version doesn't actually seem to be used in their code
($2$ is equivalent to $2a$), but it's there presumably for forward
compatability.
Kris
-----
"Never criticize anybody until you have walked a mile in their shoes,
because by that time you will be a mile away and have their shoes."
-- Unknown
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-security" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.OSF.4.10.9907062308350.13993-100000>
