On 11/03/2011 05:10 PM, Jonathan Nieder wrote:
> Why would that be?  When someone dumps in 20 bits of data from a
> strong, in-hardware, random number source, even if the PRNG is utterly
> stupid, it can have an unguessable 20 bits of internal state.  After
> reading enough random numbers, I will have enough information to guess
> the seed and learn what comes next.

If you want to attack a PRNG, you need very little of the output
state--only enough to distinguish between the possible values of the
generator seed.  What you do need is for the generator seed to be
partially guessable; otherwise, you will be trying to brute-force a
128-bit or 256-bit seed, which is impractical.

If I somehow know the initial generator state, and you reseed your
generator with only 20 unguessable bits, I will be able to determine
those bits using 20 bits of output and 2^20 effort (which is easy), and
then I will know all of the generator state again.  However, if you
reseed with enough unguessable bits that I can't brute-force them, it
doesn't matter how much output I see; I will never again be able to
determine the internal state.

For the Fortuna generator, for instance, if I discover a way to
determine the generator state solely by observing the output, then I
will also have discovered a plaintext recovery attack against AES-256.

For more, see chapter 9 of _Cryptography Engineering_.

> A good PRNG helps mitigate that somewhat

More than "somewhat".  Any PRNG which doesn't have the above properties
in its generator is insecure for any cryptographic purpose, and would be
considered a security bug in the operating system.

In another message, Peter Samuelson wrote:
> apr_time_now() has microsecond resolution.

It has microsecond precision but not necessarily microsecond accuracy.
For instance,
http://fixunix.com/kernel/378888-gettimeofday-resolution-linux.html
suggests that two requests arriving within a 10ms window could get the
same nonce.

Reply via email to