Hardware-Zufallszahlengenerator verwenden

Dices

Für die Verschlüsselung per z.B. von HTTPS, die Generierung des Private-Keys oder von Session-Ids werden Zufallszahlen benötigt. Je mehr Verschlüsselt werden soll umso mehr Zufall wird benötigt. Die Menge an Zufallszahlen die bereitgestellt werden kann wird Entropie genannt. Linux verwendet hierfür gewöhnlich den IO (Festplattenzugriffe) und die Eingaben von Tastatur und Maus. Server hat of keine Tastatur und Maus angeschlossen, darum fallen diese Quellen für die Entropie weg. Da der Raspberry PI Hardware für die Generierung von Zufallszahlen besitzt, kann dieser für diese Aufgabe verwendet werden.

Verfügbare Entropie anzeigen

Je nach Beitrag den ich gelesen habe ist ein Wert von weniger als 1000 schlecht. Im Artikel Check available entropy in Linux wird aber auch erst ein Wert von unter 100 bis 200 als schlecht bemängelt.

cat /proc/sys/kernel/random/entropy_avail 676

Kernelmodule anzeigen

Die benötigten Kernelmodule bcm2835-rng werden über folgenden Befehl ausgelastet. Diese Kernelmodule werden nicht per lsmod angezeigt, da die Module statisch in den Kernel mit einkompiliert wurde.

grep rng /lib/modules/$(uname -r)/modules.builtin kernel/crypto/rng.ko kernel/drivers/char/hw_random/rng-core.ko kernel/drivers/char/hw_random/bcm2835-rng.ko

Wie hier zu sehen, ist das Modul bcm2835-rng geladen, damit der Hardwarezufallszahlengenerator (TRNG) des Raspberry PI verwendet werden kann. Dieser wird über die Datei /dev/hwrng bereitgestellt. Der Kernel verwendet diesen Zufallszahlengenerator aber nicht für /dev/random oder /dev/urandom.

rng-tools installieren

Damit die Entropie auch für alle Programme über /dev/random oder /dev/urandom bereitgestellt werden, müssen die rng-tools installiert werden. Da das Init-Script von rng-tools automatisch den Zufallszahlengenerator erkennt, ist keine weitere Konfiguration notwendig um diesen einzubinden.

sudo apt install rng-tools Paketlisten werden gelesen... Fertig Abhängigkeitsbaum wird aufgebaut. Statusinformationen werden eingelesen.... Fertig Die folgenden NEUEN Pakete werden installiert: rng-tools 0 aktualisiert, 1 neu installiert, 0 zu entfernen und 0 nicht aktualisiert. Es müssen 48,7 kB an Archiven heruntergeladen werden. Nach dieser Operation werden 160 kB Plattenplatz zusätzlich benutzt. Holen: 1 http://mirrordirector.raspbian.org/raspbian/ jessie/main rng-tools armhf 2-unofficial-mt.14-1 [48,7 kB] Es wurden 48,7 kB in 5 s geholt (8.690 B/s).

rng-tools beim booten starten

sudo systemctl enable rng-tools Synchronizing state for rng-tools.service with sysvinit using update-rc.d... Executing /usr/sbin/update-rc.d rng-tools defaults Executing /usr/sbin/update-rc.d rng-tools enable

Testen

Der Wert von /proc/sys/kernel/random/entropy_avail hat sich jetzt deutlich erhöht.

cat /proc/sys/kernel/random/entropy_avail 3724

Benchmark mit dd

Wie zu sehen, kann dir der Kernel über 50 KB pro Sekunde an Entropie bereitstellen. Sollten die rng-tools nicht installiert sein, so wird dieser Test entweder sehr lange dauern oder muss sogar mit STRG+C abgebrochen werden.

dd if=/dev/random of=/dev/null bs=128 count=1024 iflag=fullblock 1024+0 Datensätze ein 1024+0 Datensätze aus 131072 Bytes (131 kB) kopiert, 2,51669 s, 52,1 kB/s

Benchmark mit openssl

In etwa 5 Minuten und 50 Sekunden war die Generierung abgeschlossen. Ohne die rng-tools hatte OpenSSL etwa 91 Minuten für die gleiche Aufgabe benötigt.

time openssl dhparam -out /tmp/dhparam-benchmark.pem 2048 Generating DH parameters, 2048 bit long safe prime, generator 2 This is going to take a long time … real 5m50.520s user 5m50.480s sys 0m0.030s

Das Artikelbild wurde von https://www.pexels.com/photo/casino-cubes-dice-gambling-40508/ geladen und wurde unter der CC0 License lizenziert.

2 Gedanken zu „Hardware-Zufallszahlengenerator verwenden

  1. Pingback: Sichere Host-Keys generieren – Mein Raspberry PI Blog

  2. Pingback: A+ beim SSL Server Test erreichen – Mein Raspberry PI Blog

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.