Software::Kernel
Systemaufruf für Zufallszahlen vorgeschlagen
Einem Wunsch der Entwickler von LibreSSL nachkommend hat Linux-Veteran Theodore »Ted« Ts'o einen neuen Systemaufruf vorgeschlagen, der eine Reihe zufälliger Bytes liefert.
Linux Foundation
Theodore Ts'o
Der bisherige Weg, Zufallszahlen, genauer gesagt zufällige Bytes oder Bits, vom Kernel zu erhalten, führt über die Dateien
/dev/random und
/dev/urandom. Beide werden aus einem Zufallsgenerator gespeist, der über den Mindestwert der enthaltenen Entropie Buch führt. Dies ist notwendig, um sicherzustellen, dass die Zufallszahlen kryptografisch stark sind. Nur wenn genug Entropie enthalten ist, ist sichergestellt, dass ohne Kenntnis des inneren Zustands des Generators keine Vorhersage der nächsten generierten Zahl möglich ist.
Die Zufallszahlen aus dem Kernel werden verwendet, um Zufallsgeneratoren, die in den Anwendungen enthalten sind, mit Anfangswerten zu belegen. /dev/random kommt zum Einsatz, um Bytes mit garantiert ausreichender Entropie zu erhalten. Das Lesen von /dev/random blockiert jedoch, wenn dem Kernel gerade nicht genug Entropie zur Verfügung steht. Wenn etwas weniger Sicherheit genügt, kann auch /dev/urandom verwendet werden, das nie blockiert und immer die gewünschte Zahl von Bytes liefert. Anwendungen, die nicht sicherheitskritisch sind, brauchen nicht auf diese Dateien zuzugreifen, sie können auch einfach eine Kombination aus Zeitzähler und Prozess-ID zur Initialisierung des Zufallsgenerators verwenden.
Dass Zufallszahlen bisher nur über /dev/random und /dev/urandom zu erhalten sind, hat sich im Lauf der Zeit als problematisch erwiesen. Zum einen könnte es sein, dass die Dateien in einer chroot-Umgebung oder einem Container gar nicht existieren, entweder absichtlich oder weil sie vergessen wurden. Zum anderen benötigt ein Programm einen Datei-Deskriptor zum Öffnen der Dateien. Datei-Deskriptoren sind aber nur begrenzt verfügbar. Es sind Szenarien denkbar, in denen ein Angreifer alle verfügbaren Deskriptoren belegt, so dass ein Programm /dev/random oder /dev/urandom nicht mehr öffnen kann und auf eine kryptografisch wesentlich schwächere Initialisierung des Zufallsgenerators zurückgreifen muss.
Diese Schwächen wurden von OpenBSD erkannt und mit dem Systemaufruf getentropy
beseitigt. Die Entwickler von LibreSSL, die neben einer OpenBSD- auch eine portable Edition für andere Betriebssysteme bereitstellen, haben nun den Wunsch geäußert, dass auch Linux einen solchen Systemaufruf anbietet. Linux-Veteran Theodore »Ted« Ts'o hat daraufhin den neuen Systemaufruf getrandom
ausgearbeitet und auf der Mailingliste vorgestellt. Wie er später erläuterte, ist getrandom
eine Obermenge der Funktionalität von getentropy
und hat daher einen anderen Namen. getentropy
kann dann leicht als Spezialfall von getrandom
in der C-Bibliothek implementiert werden.
Der vorgestellte Patch ist ziemlich kurz, da er lediglich vorhandene Funktionalität auf neue Weise zugänglich macht. Trotzdem wurden von anderen Kernel-Entwicklern zahlreiche Kritikpunkte vorgebracht, die Ts'o in mehreren Schritten abgearbeitet hat, so dass der Patch jetzt mindestens in der vierten Version vorliegt. Es ist zu vermuten, dass die Änderung kurz vor der Vollendung steht und direkt nach der Freigabe von Linux 3.16 in den Kernel aufgenommen wird. Linux 3.17 könnte dann den neuen Aufruf offiziell machen.