On Wed, 22 May 2002, Aaron Bannert wrote:
> On Wed, May 22, 2002 at 08:24:04PM -0700, Justin Erenkrantz wrote:
> > IIRC, /dev/random is a "better" source of entropy than /dev/urandom
> > because /dev/random can block waiting for good enough bits gathered
> > from the system while /dev/urandom must always spit out something, so
> > its entropy isn't guaranteed to be as good.
>
> You're correct, but it's the blocking part that's the problem here.
> I'm not sure how much entropy is required by mod_auth_digest, but
> something tells me that we need to do one of the following:
>
> 1) prefer /dev/urandom over /dev/random
> 2) disable mod_auth_digest by default [in binbuilds]
> 3) open /dev/random in non-blocking mode and defer EAGAIN reads
> until later (read it at startup; if it would block, try again when
> the entropy is actually needed, failing if it isn't ready by then
> -- no idea if this would even work).
Can we come to a consensus on this? For those just joining the
conversation, the problem is that APR's apr_generate_random_bytes()
currently prefers /dev/random over /dev/urandom, which causes Apache's
mod_auth_digest to hang at startup if there's not enough entropy available
from /dev/random. I proposed the following patch:
Index: configure.in
===================================================================
RCS file: /home/cvs/apr/configure.in,v
retrieving revision 1.449
diff -u -d -r1.449 configure.in
--- configure.in 14 May 2002 07:38:16 -0000 1.449
+++ configure.in 25 May 2002 21:22:39 -0000
@@ -1527,13 +1527,13 @@
dnl #----------------------------- Checking for /dev/random
AC_MSG_CHECKING(for /dev/random)
-if test -r "/dev/random"; then
- AC_DEFINE(DEV_RANDOM, [/dev/random])
- AC_MSG_RESULT(/dev/random)
- rand="1"
-elif test -r "/dev/urandom"; then
+if test -r "/dev/urandom"; then
AC_DEFINE(DEV_RANDOM, [/dev/urandom])
AC_MSG_RESULT(/dev/urandom)
+ rand="1"
+elif test -r "/dev/random"; then
+ AC_DEFINE(DEV_RANDOM, [/dev/random])
+ AC_MSG_RESULT(/dev/random)
rand="1"
else
case $host in
Thanks,
Cliff