Hilfe, die Entropie ist leer!

Auf meinem Server hatte ich plötzlich das Problem, dass der SVN-Server hing. Nach einigem Suchen viel mir auf, dass es an /dev/random lag von dem SVN Zufallszahlen besorgen wollte. Und warum lieferte /dev/random keine? Nun, /dev/random soll im Gegensatz zu /dev/urandom sichere Zufallszahlen liefern. Die dafür nötige Entropie sammelt es scheinbar von Mausaktionen und Tastatureingaben oder auch Festplattenaktivität. Nun, da an dem Server weder eine Maus noch eine Tastatur hängen gab es nicht viel zu fresse für /dev/random und auch die Festplatte hat nicht laufend was zu tun.

Nachschauen wieviel Entropie vorliegt konnte ich mit:

$ cat /proc/sys/kernel/random/entropy_avail
156

Nach ein paar Checkouts über SVN konnte ich feststellen, dass nach kurzer Zeit kaum noch Entropie vorhanden war und SVN blockierte und auf weitere Entropie wartete.

Als kurzen Workaround hab ich dann /dev/random verschoben und einen Verweis auf /dev/urandom angelegt.

$ cd /dev
$ mv random random.bak
$ ln -s /dev/urandom /dev/random

Problematisch nun allerdings, dass alle Anwendungen, die sichere Zufallszahlen benötigen greifen jetzt auf /dev/urandom zu, welches zwar immer Zufallszahlen hergibt und nicht blockiert, aber nicht unbedingt die sichersten. Dazu der Eintrag aus der man-Page:

When read, the /dev/random device will only return random bytes within the estimated number of bits of noise in the entropy pool. /dev/random should be suitable for uses that need very high quality randomness such as one-time pad or key generation. When the entropy pool is empty, reads from /dev/random will block until additional environmental noise is gathered.

Mein Workaround war also nicht so sehr hilfreich, statt dessen müsste irgendwie /dev/random mit Entropie gefüllt werden. Nach ein wenig Suchen fand ich dann rng. Ein kurzer Auszug aus der man-Page:

rngd – Check and feed random data from hardware device to kernel random device
[..]
This daemon feeds data from a random number generator to the kernel's random number entropy pool, after first checking the data to ensure that it is properly random.

Okay, rngd soll nun also mein /dev/random mit Entropie versorgen. Also den Workaround wieder rückgängig machen:

$ rm -rf random
$ mv random.bak random

So, und jetzt rng besorgen, mit emerge (Gentoo) und dann starten:

$ emerge -av rng-tools
[..]
$ /etc/init.d/rngd start
[..]

Und nun besorgt rngd genügend Entropie. Zum testen hab ich mir dann ein wenig die vorhandene Entropie angeschaut und parallel ein paar mal mit SVN einen checkout gemacht.

$ watch "cat /proc/sys/kernel/random/entropy_avail"

Ja, und es funktioniert – es gab Entropie genug und keine Hänger mehr.

Kann sein, dass der Blogeintrag ziemlich öde ist, aber vielleicht hilfts ja wem ;)

P.S: Wer einmal kurzzeitig etwas Entropie benötigt und nicht auf rngd zurückgreifen kann, der kann ja mal ein wenig seine Festplatte durchstarten lassen, z.B. mit "du"

$ cat /proc/sys/kernel/random/entropy_avail
3603
$ du /
[..]
$ cat /proc/sys/kernel/random/entropy_avail
4032

Kommentare (10)

ManuelJune 26th, 2006 at 09:00

Das funktioniert nur wenn ein Hardware RNG vorhanden ist und das passende Kernel-Modul geladen ist.

AntiHypeJuly 14th, 2006 at 08:52

Jein, rngd kann, falls keine passende Hardware vorhanden ist, auch mit Daten aus /dev/urandom benutzen um die Entropie aufzufüllen.
Ganz optimal ist das wohl nicht, aber besser immernoch als hängende Anwendungen :)

Stefan BauerJuly 30th, 2006 at 11:31

danke für ein Eintrag, hat mir weiter geholfen. Hatte ärger mit exim4 und saslauthd welcher nen Hänger hatte bei der Erstellung der SSL-Keys.

TillOctober 23rd, 2006 at 13:05

Hi,

was SVN angeht:
Der Bug mit verschwenderischem Umgang mit der Entropie des Systems ist in neueren SVN-Versionen gefixt.

Viele Grüße,
Till

Ingo LindholmApril 16th, 2007 at 08:32

Danke, Dein Eintrag hat mir sehr geholfen! Ich habe mit strace das /dev/random Problem aufgespürt und bin so auf Deine Seite gestossen.

Wieso ist das überhaupt ein Problem?
Zufallszahlen gibt es doch zuhauf ;-)

iL

Guido JäkelAugust 13th, 2007 at 09:54

von wegen “ziemlich öde”!

Ich hab schon an der Hardware (ein Testrechner aus dem “Keller”) und auch an mir gezweifelt, nachdem svn nach ersten Tests am Freitag plötzlich nicht mehr richtig (und scheinbar undeterministisch) funktionierte!

Heute morgen bin mit strace auch dem Probem auf die Spur gekommen und habe dank Deinem Artikel sofort eine Lösung zur Hand gehabt.

Danke

Guido

Alexander GranJanuary 20th, 2008 at 01:01

Top Sache, genau das Problem hatte ich gerade!

HubkabelJune 4th, 2008 at 22:08

Super Tipp. Hat mein Problem beim Generieren von GPG-Keys mittels gpg –gen-key gelöst.

*strange*

Red*StarJuly 25th, 2008 at 16:59

Von mir ebenfalls ein Danke, der Beitrag hat mir viel sinnlose Sucherei nach dem Fehler erspart.

> Hi,

> was SVN angeht:
> Der Bug mit verschwenderischem Umgang mit der Entropie > des Systems ist in neueren SVN-Versionen gefixt.

> Viele Grüße,
> Till

Also bei mir ist er in der Version 1.4.irgendwas immer noch da gewesen. Ich hab einen SVN-Server auf der NSLU2 laufen, und musste zu der dirty-hack-Lösung greifen, random durch dur urandom zu ersetzen, um überhaupt irgendwas zum Laufen zu bekommen.

Weiß jemand, wie es mit der 1.5.0 von Subversion aussieht? Die hab ich jetzt nämlich installiert, aber noch keinen Bock dazu gehabt, die Sache mal zu testen (weil es mich schlichtweg nervt ^^)

Gruß,

Red*Star

[...] Hilfe, die Entropie ist leer! Posted by AntiHype Filed in Linux Tags: entropie, entropy, Linux, random, urandom [...]

Kommentieren?

Dein Kommentar