Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 19 Apr 2008 17:56:55 +0100
From:      RW <fbsd06@mlists.homeunix.com>
To:        freebsd-hackers@freebsd.org
Subject:   Yarrow's Counter
Message-ID:  <20080419175655.51a37bb2@gumby.homeunix.com.>

next in thread | raw e-mail | index | archive | help
The random number generator in FreeBSD's Yarrow implementation uses
AES256 in counter mode. When a reseed occurs the generator is
reinitialised like this:

 - generate a new cypher-key from the pool[s] and the old key
 - zero the counter
 - encrypt the (zeroed) counter with the new key


My question is: why zero the counter?

If it's not zeroed then the old counter is encrypted instead, and after
a few reseeds the counter will accumulate an independent 256 bits of
entropy, rather than being a function of the new key. 

Should I submit a patch, it's simply a matter of deleting two
lines in reseed() in sys/dev/random/yarrow.c. 


   yarrow_hash_finish(&context, temp);
   yarrow_encrypt_init(&random_state.key, temp);

   /* 4. Recompute the counter */

   for (i = 0; i < 4; i++)                  <---
           random_state.counter[i] = 0;     <--- 

   yarrow_encrypt(&random_state.key, random_state.counter, temp);
   memcpy(random_state.counter, temp, sizeof(random_state.counter));




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080419175655.51a37bb2>