tech-crypto archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: getentropy() support



On Wed, Jun 20, 2018 at 03:49:44PM +0000, Taylor R Campbell wrote:
> > From: Kurt Roeckx <kurt%roeckx.be@localhost>
> > - It blocks when the kernel CSRNG hasn't been initialized yet.
> 
> The blocking behaviour isn't documented in
> <http://man.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man2/getentropy.2>,
> and I don't think it would be a good idea.  In particular, if a system
> call _might_ block, it should do so regularly so that the blocking
> code path is exercised, rather than only once in a great while and
> especially not during interactive testing.

For OpenBSD it's like expected behaviour, why would you return
insecure random numbers. What is the point in documenting that
it's not insecure? But if it helps, I can ask them to document that
part.

In any case, it is documented on all other operating systems:
Linux, http://man7.org/linux/man-pages/man3/getentropy.3.html

       A call to getentropy() may block if the system has just booted and
       the kernel has not yet collected enough randomness to initialize the
       entropy pool.  In this case, getentropy() will keep blocking even if
       a signal is handled, and will return only once the entropy pool has
       been initialized.

FreeBSD,
https://www.FreeBSD.org/cgi/man.cgi?query=getentropy&apropos=0&sektion=0&manpath=FreeBSD+12-current&arch=default&format=html

     Similar to reading from /dev/urandom just after boot, getentropy() may
     block until the system has collected enough entropy to seed the CSPRNG.

Solaris,
https://docs.oracle.com/cd/E88353_01/html/E37841/getentropy-2.html

   The getentropy() function is always a blocking call, it is
   expected to be used only to seed a userspace implementation of a
   random bit generator.


Kurt



Home | Main Index | Thread Index | Old Index