[j-nsp] Format of SHA1 Passwords

Paul Goyette pgoyette at juniper.net
Tue Dec 3 12:20:15 EST 2013


Looks like the output is identical to what would be generated by 
the *BSD pwhash(1) utility.

	# pwhash -S 24680 stuff
	$sha1$23933$/WgTkHoe$25rdwdZ95cfgY/Tl6li2/LRIbuVT
	#

pwhash(1) in turn calls the crypt(3) library function after it 
generates a salt.

Digging through the sources, we find the following comment block 
in src/lib/libcrypt/crypt-sha1.c

* The format of the encrypted password is:
 * $<tag>$<iterations>$<salt>$<digest>
 *    
 * where: 
 *      <tag>           is "sha1" 
 *      <iterations>    is an unsigned int identifying how many rounds
 *                      have been applied to <digest>.  The number
 *                      should vary slightly for each password to make
 *                      it harder to generate a dictionary of
 *                      pre-computed hashes.  See crypt_sha1_iterations.
 *      <salt>          up to 64 bytes of random data, 8 bytes is
 *                      currently considered more than enough.
 *      <digest>        the hashed password.



-----Original Message-----
From: juniper-nsp [mailto:juniper-nsp-bounces at puck.nether.net] On Behalf Of Chris Morrow
Sent: Tuesday, December 03, 2013 9:06 AM
To: chip at 2bithacker.net; juniper-nsp at puck.nether.net
Subject: Re: [j-nsp] Format of SHA1 Passwords



On 12/03/2013 11:46 AM, Chip Marshall wrote:
> On 2013-12-03, Chris Morrow <morrowc at ops-netman.net> sent:
>>> I get things like "$sha1$19418$aoTClyGU$cix8MhZsXwG6OrwUgeHAoOA8f.AX"
>>> where it appears to have the format, some number, what I think is
>>> the salt, and then the hash.
>>>
>>> Anyone know how these things are calculated?
>>
>> we do this calculation.... I believe your intended format is:
>>   $1$salt$hash
>>
>> or that seems to be what our code does.
> 
> That's for MD5 passwords. I have a requirement to use SHA-1.

oh, ha! :( hrm... so, I set a passwd of 'flipfl0p!' for a user after
setting the passwd format to sha1 ... and I see:

"$sha1$19295$mROzSQ4a$SFnJ1fAbP4cHqw/16.xDV4s1LpMA"

and yea.... the format isn't as simple as:

>>> import hashlib
>>> p = 'flipfl0p!'
>>> s = 'mROzSQ4a'
>>> hashlib.sha1(p+s).hexdigest()

bummer.
_______________________________________________
juniper-nsp mailing list juniper-nsp at puck.nether.net
https://puck.nether.net/mailman/listinfo/juniper-nsp






More information about the juniper-nsp mailing list