Zufall erzeugen

Datum

Von Zufall spricht man dann, wenn für ein einzelnes Ereignis oder das Zusammentreffen mehrerer Ereignisse keine kausale Erklärung gegeben werden kann. Als kausale Erklärungen für Ereignisse kommen in erster Linie allgemeine Gesetzmäßigkeiten oder Absichten handelnder Personen in Frage. Die Erklärung für Zufall ist also gerade der Verzicht auf eine (kausale) Erklärung.

Quelle: wikipedia.org

Zum generieren von z.B. OpenSSL-Schlüsseln ist es wichtig, dass der verwendete Zufall so zufällig und unkontrolliert wie möglich ist.

Unter Linux hat man dazu 2 Devices:

  • /dev/random
    Hierbei handelt es sich um ein Block-Device. Der Zufallsgenerator sammelt Umgebungsrauschen von Gerätetreibern und anderen Quellen in einem Entropie-„Pool“. Beim Lesen gibt /dev/random nur solange Zufallszahlen zurück, bis die abgeschätzte Entropiemenge erschöpft ist; dann blockieren Lesezugriffe auf /dev/random, bis zusätzliches Umgebungsrauschen erhalten wurde.

  • /dev/urandom
    Im Gegensatz zu /dev/random blockiert es nicht, wenn eine definierte Entropieschwelle unterschritten wird.
    Als allgemeine Regel sollte /dev/urandom für alles außer langlebige GPG/SSL/SSH-Schlüssel verwendet werden.

Ermitteln der verfügbaren Entropie:

Ich verwende hier zum testen Ubuntu 16.04 LTS als Minimal-Installation.

Der aktuelle Füllstand des Entropie-Pools lässt sich unter Linux aus der Datei /proc/sys/kernel/random/entropy_avail ermitteln. Eine Ausgabe der Datei liefert die verfügbare Entropie in bit, wobei das Maximum von 4096 bit einem vollständig gefüllten „Pool“ entspricht.

root@ubuntu:~# cat /proc/sys/kernel/random/entropy_avail
120

Bei einem Wert von unter 1000 sollten dringend entsprechende Maßnahmen ergriffen werden um den Wert zu erhöhen.

Erhöhen der Entropie

haveged

Das Verfahren macht sich den Umstand zunutze, dass moderne Prozessoren Elemente zur Verzweigungsvorhersage (Branch Prediction), Caches, Pipelines und vieles mehr besitzen. Das normale Benutzen der CPU löst ein Trommelfeuer an Statusänderungen bei Tausenden dieser Elemente aus, und genau daraus produziert das Havege-Verfahren viel und hochwertigen Zufall.

Installation: apt install haveged

root@ubuntu:~# systemctl status haveged.service 
● haveged.service - Entropy daemon using the HAVEGE algorithm
   Loaded: loaded (/lib/systemd/system/haveged.service; enabled; vendor preset: enabled)
   Active: active (running) since Di 2018-03-27 16:39:16 CEST; 8s ago
     Docs: man:haveged(8)
           http://www.issihosts.com/haveged/
 Main PID: 1188 (haveged)
   CGroup: /system.slice/haveged.service
           └─1188 /usr/sbin/haveged --Foreground --verbose=1 -w 1024

Mär 27 16:39:16 ubuntu systemd[1]: Started Entropy daemon using the HAVEGE algorithm.
Mär 27 16:39:16 ubuntu haveged[1188]: haveged: ver: 1.9.1; arch: x86; vend: GenuineIntel; build: (gcc 5.2.1 ITV); collect: 128K
Mär 27 16:39:16 ubuntu haveged[1188]: haveged: cpu: (L4 VC); data: 32K (L4 V); inst: 32K (L4 V); idx: 19/40; sz: 31614/64718
Mär 27 16:39:16 ubuntu haveged[1188]: haveged: tot tests(BA8): A:1/1 B:1/1 continuous tests(B):  last entropy estimate 7.99893
Mär 27 16:39:16 ubuntu haveged[1188]: haveged: fills: 0, generated: 0
root@ubuntu:~# cat /proc/sys/kernel/random/entropy_avail
2437

Wie man sieht hat sich der Wert 20fach erhöht.

Rng-Tools

Auch hierbei handelt es sich um einen Daemon, welcher mehr Zufall (aus Hardware-Devices) in den Entropie-Pools leitet.

root@ubuntu:~# systemctl status rng-tools.service 
● rng-tools.service
   Loaded: loaded (/etc/init.d/rng-tools; bad; vendor preset: enabled)
   Active: active (running) since Di 2018-03-27 16:38:36 CEST; 6s ago
     Docs: man:systemd-sysv-generator(8)
   CGroup: /system.slice/rng-tools.service
           └─1378 /usr/sbin/rngd -r /dev/hwrng

Mär 27 16:38:36 ubuntu systemd[1]: Starting rng-tools.service...
Mär 27 16:38:36 ubuntu rng-tools[1366]: Starting Hardware RNG entropy gatherer daemon: rngd.
Mär 27 16:38:36 ubuntu systemd[1]: Started rng-tools.service.

Nach der Installation durch: apt install rng-tools zeigt auch hier die Ausgabe von cat /proc/sys/kernel/random/entropy_avail eine starke Erhöhung des Wertes:

root@ubuntu:~# cat /proc/sys/kernel/random/entropy_avail
3101

Autor
Kategorien Linux

PRTG Map