[gnutls-dev] Speed of random data generation
Alex Hudson
home at alexhudson.com
Wed Jun 13 18:07:12 CEST 2007
Hi everyone.
I'm a developer on a project called Bongo
(http://www.bongo-project.org/), which uses GNUTLS to implement SSL/TLS
encryption on various connections.
Bongo is actually composed of a variety of daemons (we call them agents,
but..), and part of the setup process is to create the various
encryption data these agents need to use GNUTLS, e.g:
* we save a random seed;
* we create Diffie-Hellman parameters using
gnutls_dh_params_{init|generate2}, and save that to a file;
* we create RSA parameters using a similar process;
* we create a public/private keyset for the various server
sockets.
Now, the problem we have is that during setup, it can take a long time
to create all that data. The problem seems to be entirely entropy
starvation - and is particularly bad on headless server-type equipment.
One user had to wait over a day for the process to finish, for most it's
nothing like that slow, but can easily take a half hour.
I have a couple of questions:
* Does it sound like we're doing something wrong? Originally, we
didn't create much of this data at install time, but did it at
runtime - and that was terribly, terribly bad, like some kind of
entropy vampire. So, we know this is a big improvement - it's
just still really bad, specifically on headless hardware.
* Are there any improvements we can make? E.g., is there some way
of deriving the data in a different order or something, so that
it's not using so much entropy? I know we can ask people to
install hardware RNG drivers and rngd or something, but that's
again hardware-dependent.
Our project did use OpenSSL at one stage, and that seemed to work fine.
But, I'm wary of meddling in things I don't understand - and the choice
of strength of random data is not really something I feel I grasp well.
However, I would be happy to look into e.g., creating DH/RSA params from
a PRNG or something if that is advisable?
Many thanks,
Alex Hudson.
More information about the Gnutls-dev
mailing list