Patch to enable multiple possible sources of entropy

mouring at etoh.eviladmin.org mouring at etoh.eviladmin.org
Fri Aug 24 03:48:36 EST 2001


Multiple Entropy sources won't be in 3.0.. It's getting far to late in
the process for including features.  Maybe post 3.0...

- Ben

On Thu, 23 Aug 2001, Dave Dykstra wrote:

> Ben & Damien,
>
> Do you still expect to get this feature in before the next release?
> (The included text is only part of the patch).  I see there have been
> hardly no changes to entropy.c in the current CVS.  If you want me
> to update the patch to the latest CVS, let me know.
>
> - Dave Dykstra
>
> On Sun, Jun 24, 2001 at 02:19:23AM -0500, mouring at etoh.eviladmin.org wrote:
> >
> > To let you know I'm not ignoring this.  Damien has code like this already
> > from the sounds of it.  Just working out minor detials of how to deal with
> > ssh-keygen, etc which don't read the sshd_config nor ssh_config for the
> > admin's perfer order of entropy gathering.
> >
> > - Ben
> >
> > On Mon, 11 Jun 2001, Dave Dykstra wrote:
> >
> > > On Sun, Jun 10, 2001 at 10:41:14PM -0400, Michael Stone wrote:
> > > > On Sun, Jun 10, 2001 at 12:49:18PM -0500, mouring at etoh.eviladmin.org wrote:
> > > > > Hmm.. my only complaints about the patch is that seed_rng and init_rng are
> > > > > pretty unreadable due to #ifdef/#end
> > >
> > > I could make it a lot more readable by having it always do access() to
> > > probe for RANDOM_POOOL and PRNGD_SOCKET even if one of them is the only
> > > choice.  I initially elected to trade off exact compatibility for
> > > readability, but I'd be happy to change it.  I've included the more
> > > readable init_rng() below for you to take a look at.  The difference is
> > > that even if only one of RANDOM_POOL or PRNGD_SOCKET is compiled in, if it
> > > isn't there the error message will be the more generic
> > >     Couldn't find source for random number generator seed
> > > rather than a message about the problem accessing the specific source.  I
> > > put in some debug level 2 messages to help debugging that case (those are
> > > good even if you choose to keep the extra ifdefs), and I slightly improved
> > > the fatal error message.
> > >
> > > Also, the ifdefs for PRNGD_SOCKET and USE_BUILTIN_ENTROPY do not really
> > > need to be in the else case of PRNGD_PORT because configure enforces that
> > > already, but I think it's more understandable this way.
> > >
> > >
> > >
> > > > > and that I don't know if I like the
> > > > > idea of ssh/sshd stepping down in entropy quality on a whim.  Which is
> > > > > what this patch would do if for some odd reason prngd is offline at
> > > > > startup of sshd/ssh.
> > > >
> > > > What if there were some kind of warning message? We've already seen the
> > > > obnoxious key-is-1023 message, what's one more?
> > >
> > > I don't mind a debug message but I really would not want a warning message
> > > because that's going to be the normal case on a lot of my systems.  My
> > > answer is that most likely even if prngd is offline, the PRNGD_SOCKET will
> > > still exist even though there's no process listening on the other side.  In
> > > that case, ssh will go ahead into the prngd_get_random_bytes case but get a
> > > Connection Refused error (this happened during my testing).
> > >
> > > Another idea would be to improve the fatal error message by saving some
> > > information when the access() calls fail rather than just printing debug
> > > messages.  For example, there could be a variable that points to the error
> > > message to use if it gets to the fatal condition at the end.  Do you like
> > > that better?  I don't think that complication is necessary.
> > >
> > >
> > > > Obviously the entropy
> > > > requirement depends on the application, but there are a lot of machines
> > > > where I'm far more concerned about not getting in at all (because prngd
> > > > is busted) than I am about bad entropy in that case. It's no worse than
> > > > if prngd weren't being used at all, and might make it easier to accept
> > > > prngd.
> > >
> > > Good point.
> > >
> > > - Dave Dykstra
> > >
> > >
> > > ------ more readable init_rng() follows ------------------------
> > >
> > > void
> > > init_rng(void)
> > > {
> > > 	check_openssl_version();
> > >
> > > #ifdef RANDOM_POOL
> > > 	if (access(RANDOM_POOL, F_OK) == 0) {
> > > 		seed_source = POOL_SOURCE;
> > > 		return;
> > > 	}
> > > 	else {
> > > 		debug2("Random pool %s does not exist", RANDOM_POOL);
> > > 	}
> > > #endif /* RANDOM_POOL */
> > >
> > > /* it's not trivial to probe for an open port so just make it
> > >  *  take priority over the other sources if it is defined
> > >  */
> > > #ifdef PRNGD_PORT
> > > 	seed_source = PRNGD_SOURCE;
> > > #else
> > >
> > > #ifdef PRNGD_SOCKET
> > > 	if (access(PRNGD_SOCKET, F_OK) == 0) {
> > > 		seed_source = PRNGD_SOURCE;
> > > 		return;
> > > 	}
> > > 	else {
> > > 		debug2("Entropy socket %s does not exist", PRNGD_SOCKET);
> > > 	}
> > > #endif /* PRNGD_SOCKET */
> > >
> > > #ifdef USE_BUILTIN_ENTROPY
> > > 	seed_source = BUILTIN_SOURCE;
> > > 	prng_init_rng();
> > > #endif
> > >
> > > #endif /* PRNGD_PORT */
> > >
> > > 	if (seed_source == 0)
> > > 		fatal("Couldn't find entropy source for random number generator");
> > > }
> > >
>




More information about the openssh-unix-dev mailing list