EGD v0.1

Brian Warner warner at lothar.com
Sun Jan 31 05:28:49 CET 1999


Well, here's a start at the Entropy Gathering Daemon. Attached for your review
you'll find two signed files: egd.pl (the daemon) and egc.pl (a sample
client). You'll need perl5 and the Digest::SHA1 module from CPAN to use it.
Verify and extract with 'gpg --decrypt egd.pl.asc >egd.pl' (my key is
available at <http://www.lothar.com/warner-gpg.html>).

Invoke the daemon with something like:

 egd.pl ~/.gnupg/entropy

Then check the entropy count with

 egc.pl ~/.gnupg/entropy get

and read 20 bytes of the entropy out with

 egc.pl ~/.gnupg/entropy read 20

The daemon basically does the following:
 listen on a UNIX socket for clients
 On occasion, stir the entropy pool: Take the SHA1 sum of the whole pool,
  xor it into the Nth 20 bytes, N++, repeat for the whole pool.
 if we need more entropy, find a suitable gatherer program (taken from the list
  of gatherers in rndunix.c). Run it, collect the output, scale the output by
  some constant (N bits of entropy gathered for each byte of output). Add in
  the entropy by splitting up the gathered output into 20 byte chunks, SHA1ing
  the chunk, xor the result into the Nth 20 bytes of the pool, stir. The number
  of outstanding gatherer programs is limited (to 2) to keep the daemon from
  exploding your load average upon startup.
 if a client wants entropy, stir, then fill their buffer by SHA1ing the whole
  pool and giving them 20 bytes at a time, stirring between chunks.

An entropy count (in bits) is kept. Collecting output from gatherers raises
it, clients reading entropy will lower it. If it goes below a threshold,
gatherers are run until it rises above a higher threshold. The amount of
entropy is slowly aged (it decays over time) to trigger refreshes every once
in a while.

There is a select loop to avoid any busy-waiting, and to time-out gatherers
that get stuck (for instance if a netstat of some sort triggered a DNS lookup
that blocked for a long time).

The daemon can listen on a combination of TCP and UNIX sockets driven from the
args passed in. The simple protocol is documented at the end of the daemon
code. There are three basic commands: "tell me how much entropy you have", "I
want N bytes of entropy but don't want to block. Fine you'll get M bytes, here
they are", and "I really want N bytes of entropy. Fine, I'll give you that
many, but if I don't have enough in the pool then you'll block while I go
gather more, here they are".

Current problems:
 too sensitive to constant text output. maybe throw out anything but digits
  for some gatherers, maybe also gzip the output?
 some gatherers shouldn't be run too frequently. some can be.
 any stderr text from gatherers goes to the console, should be discarded
 written in perl, should be in autoconf'ed C for portability
 need more gatherers. I don't have too many systems to test on, but most of
  the gatherers listed aren't useful on my linux boxes (granted the whole 
  daemon is unnecessary on a linux box).
 is my stirring/adding/reading technique ok? /dev/random uses faster methods
  but I would think repeated SHA1 is slow but secure, and I didn't understand
  the twisted-GFSR enough to try to reimplement it in perl.

Anyway, here it is, I think it should be useful enough for testing at least.
Feedback is greatly appreciated.

cheers,
 -Brian
   warner at lothar.com

egd.pl:
-----BEGIN PGP MESSAGE-----
Version: GnuPG v0.9.2 (GNU/Linux)
Comment: For info see http://www.gnupg.org

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
8z/6m/8F35d0Ng==
=UcqK
-----END PGP MESSAGE-----

egc.pl:
-----BEGIN PGP MESSAGE-----
Version: GnuPG v0.9.2 (GNU/Linux)
Comment: For info see http://www.gnupg.org

owJ4nK1Wz28bRRROWyjKShwqhMTxZWvJNtp447aqlE1sVFWojUCmQIuQSoR2d8br
IeuZZWfcJKrKGaEeeqnEAdT+A4CEEBzhD+iB/hFw4Ic4cOPEm92ZtTd2XLWqD1Y8
ed973/veN2/33sunVk6eubf58OfHm4/ePvHN6tfRaZrEnSy9+MP1f8+u+ROZ+6mI
w9SPGPczmqewvu84E0lh550geF/Ee1RtOc5ZoFzlIjuEOGX4J4bwlEoJrcal9658
cHNjtw23HcBPljOuwL0hw4QGUBaDbRLSseB92I7FeBxy0oeb22GeyP7uR9zdmgUC
lLEBjIRUQSZyxSdjEDn4WahGvhL+hLMDXxbU5tGmgAzm/4WfhKoAIKdqknMJEVMS
xLDqjXHIhEgXInMaEhgEoHJGJSihU8EAokNFZ3N4wAWPUNI9xpNjE0U6EyaQCzMs
he/nTFEN13kkDHMxBqkI4x6EhBQJdVdI0HZVa4keMNXaaG85dxynUSoNPZAjNsQx
N4x40xOHDXHENu4z8APfDrohMYzT/RmjBMHO4M3rreY1SvNLhORN6PXBoHVJoCka
awn8xmDnwxJ+FOoQRsGNxSQlvKlwylyFsaq80lhzwTiyIS1t2w39FJoodrNiPpYJ
Fs/CeK/lXnY92DjY0JKUtNb78lAWKrd0oAcp5YkaFT/aJmp8CA1eOKJnEfpXqxFN
hh5cMFEFZcIKwkVwmKZwwQwcvSY4RZ2FcqGgWyZc61V4XQU7xtH3sLmS7sD1dJF2
3RgmbJmfC/HnZNElK110vZJcNf95uYxeXc/EPkfdujO62WGa6B50j9fkck2TJQVK
5ILp6Lush6NG1IrnzlMo4TXlE6Eq8Y/c4wBczzK8+rqh6LlPGEb0TNM490zTMD3g
NsSddgsXjqXe6XSqhaFpWD/1wDWn+yOWYuayJhJeXT7ZitxqGkpVVxYPqwIdBCNA
H5Wtr/emUSXd4yTVrO7MtkXwei0Ru9CmLra+PTWt9SkJVYinnwjGW82mt91vzxnA
9ay4OhgJGS9Md/PcJscnbqoFZ8rUPXJ1K0B93NzM+7xXwqZjLSq3oVMSrheTlBNd
7IgftRNmxHuyZxYLGYlkImtCLnDo5nn93T1XF88SK1LAGD2BLw1PQUhHyZTSrNWd
WTCFgapts3jT2HVfLt7CwZVaiuEmwAcMp7GiZGou+/SqIglOKqPExjLBZ5xYe9gZ
RBQS+36y8IH8+RunXlzRb2b2je3Myd9+XHnAxMc/vfrXo5f+/O/LX+D31678/dUL
r6w82OWn4d1vf/3un87DtS+u3b/7x/dvPf4f98MEUw==
=2eZv
-----END PGP MESSAGE-----




More information about the Gnupg-devel mailing list