This is an attempt to summarize a wide-ranging discussion
and see if we have a consensus.

There's been much discussion on at least three lists:

    [EMAIL PROTECTED]
    [EMAIL PROTECTED]
    [EMAIL PROTECTED]

of design of random number generators in general and
Linux /dev/random in particular. Much of it is archived
on a /dev/random page at:

http://www.openpgp.net/random/

Some of the ideas in the discussion are from papers
on the Counterpane site, analyzing other random number
generators with respect to various attacks and
proposing their own:

http://www.counterpane.com/pseudorandom_number.html
http://www.counterpane.com/yarrow.html

Two problems provoked this discussion, one a question
on coderpunks as to whether any analysis of /dev/random
had been done and the second some very specific concerns
raised on linux-ipsec that it might not work well on an
IPSEC gateway machine (or other server using crypto: SSL,
SSH, ...) where demand for random numbers is heavy and
neither keyboard nor mouse provides useful entropy. 

Conclusions I've reached that I hope there's agreement on:

More analysis is needed, especially in the area of how
to estimate input entropy.

(Yarrow does this quite differently than /dev/random.
I'm not convinced either is right, but I've nothing
else to propose. This is clearly a hard problem.) 

There could be a serious weakness on a gateway machine.
At a minimum, such machines should use the largest
possible entropy pool (2K 32-bit words for current
/dev/random) and enable all entropy sources.

Yarrow's two-stage design, where the output from
hashing the pool seeds a pseudo-random number
generator based on a strong block cipher, offers
significant advantages over the one-stage design
in /dev/random which delivers hash results as
output. In particular, it makes the hash harder
to attack since its outputs are never directly
seen, makes denial-of-service attacks based on
depleting the generator nearly impossible, and
"catastrophic reseeding" prevents iterative
guessing attacks on generator internal state.

So possible actions are:

Continue discussions on cryptography list,
focussing on the hardest problem: acquiring and
estimating entropy.

FreeS/WAN project should take steps in docs or
scripts to ensure /dev/random is appropriately
compiled on gateway systems.

/dev/random should become two-stage, preferably
using an AES candidate cipher with 256-bit key,
128-bit block and reseeding operations which
change at least 128 bits at a time.

I'll make a detailed proposal for that in
another post.

Reply via email to