481 / 736RNG

Random Number Generator

Zufallszahlengenerator

Wenn eine Wallet ein neues Geheimnis erzeugt, braucht sie Zahlen, die niemand sonst erraten kann. Ein Zufallszahlengenerator liefert solche Werte. Doch nicht jeder Generator eignet sich zum Schutz von Geld.

Ein Random Number Generator, kurz RNG, ist ein Gerät oder Programm, das Zahlenwerte erzeugt. Eine Wallet braucht einen kryptografisch sicheren Generator: Frühere Ergebnisse oder der Erstellungszeitpunkt dürfen es einem Angreifer nicht ermöglichen, das neue Geheimnis mit vertretbarem Aufwand vorherzusagen. Entscheidend sind die Entropiequelle, der Algorithmus und seine Verwendung in der Anwendung. Entropie beschreibt hier die Ungewissheit, die für einen Angreifer über das Ergebnis bleibt.

Stellen Sie sich eine Wallet vor, die ihr Geheimnis allein aus der aktuellen Uhrzeit ableitet. Das Ergebnis mag kompliziert aussehen. Wer den Erstellungszeitpunkt kennt, hätte aber viel weniger Möglichkeiten auszuprobieren. RFC 4086 warnt vor solchen vorhersehbaren Eingaben. Ein Generator für Spiele oder Simulationen eignet sich deshalb nicht automatisch für Schlüssel. Auch eine gute statistische Verteilung beweist für sich genommen keine Sicherheit. [2]

Meist arbeiten mehrere Teile zusammen. Eine Quelle liefert Ungewissheit, ihre Ausgabe wird bei Bedarf aufbereitet, und ein kryptografischer deterministischer Generator erzeugt aus einem geheimen internen Zustand weitere Werte. Deterministisch heißt: Derselbe interne Zustand und dieselben Eingaben führen zum selben Ergebnis. Deshalb muss dieser Zustand geheim bleiben. Die Anwendung fordert sie über eine Systemschnittstelle an. Nicht jedes ausgegebene Bit erfordert also eine neue physikalische Messung. NIST SP 800-90C beschreibt die Verbindung von Generatoren nach 90A mit Quellen nach 90B. [1]

Bei BIP39 entsteht die Grundlage für die Wiederherstellung der Wallet, bevor das erste Wort erscheint: Der Generator erzeugt 128 bis 256 Bit Ausgangsentropie. Ein Bit ist eine grundlegende Informationseinheit, eine Null oder eine Eins. Entscheidend ist, dass ein Angreifer die entstehende Folge nicht vorhersagen kann. Hinzu kommt eine Prüfsumme, ein kurzer Wert, der manche Übertragungsfehler erkennbar macht. Das Ganze wird in Wiederherstellungswörter umgewandelt. Sie können diese durch eine Passphrase ergänzen, einen zusätzlichen geheimen Text. Die Funktion PBKDF2 leitet daraus einen 512-Bit-Seed ab: den geheimen Ausgangswert für die Schlüssel der Wallet. Weder eine längere Ausgabe noch eine Prüfsumme ergänzt fehlende Zufälligkeit. Wählen Sie Ihre Wiederherstellungswörter deshalb nicht selbst aus. [6]

Ein Gerät muss Fehler erkennen können, etwa wenn eine Rauschquelle immer denselben Wert wiederholt. NIST SP 800-90B verlangt daher Prüfungen beim Start und im Betrieb sowie den Umgang mit erkannten Fehlern. Man darf einen Fehler nicht einfach ignorieren und die Ausgabe weiter als geprüfte Zufälligkeit behandeln. Diese Prüfungen überwachen die Quelle; sie garantieren nicht die Sicherheit der gesamten Wallet. [3]

Ein deterministischer Generator speichert einen internen Zustand, aus dem er weitere Ergebnisse berechnet. NIST SP 800-90A beschreibt Einrichtung, Generierung, Zuführung frischer Entropie (Reseed) und Beendigung. Wird der Zustand bekannt, stellt ein weiterer Aufruf allein die Sicherheit nicht unbedingt wieder her. Dafür braucht es ein geeignetes Verfahren und neue, dem Angreifer unbekannte Entropie. Bereits offengelegte Schlüssel bleiben ihm bekannt. [7]

Sie müssen keinen eigenen RNG programmieren. Achten Sie darauf, ob Erzeugung und Fehlerbehandlung für die konkrete Wallet-Version nachvollziehbar dokumentiert sind. „Hardware“ oder „offline“ allein belegen das nicht. Eine Prüfung muss Quelle, Algorithmus, Initialisierung und Anwendungsschnittstelle umfassen. Auch ein korrekt erzeugtes Geheimnis verliert seinen Schutz, wenn Sie später seine Sicherung offenlegen. [1] [2]

Linux getrandom() wartet standardmäßig auf die Initialisierung von urandom; mit GRND_NONBLOCK kann es stattdessen EAGAIN zurückgeben. Nach der Initialisierung werden urandom-Anfragen bis 256 Byte garantiert vollständig und ohne Unterbrechung durch ein Signal erfüllt. Für größere Anfragen gilt diese Zusicherung nicht. Das Programm muss Rückgabestatus und tatsächlich empfangene Bytezahl korrekt prüfen. [4]

Web Crypto bietet getRandomValues(), um ein unterstütztes Ganzzahl-Array mit kryptografisch starken Werten zu füllen. Über 65536 Byte wird QuotaExceededError ausgelöst. Für Schlüssel unterstützter Algorithmen empfiehlt die Spezifikation generateKey(); das ist kein universeller Bitcoin-Wallet-Generator. Auch korrekte API-Nutzung belegt nicht die Vertrauenswürdigkeit einer Seite: Ihr Code kann Zugriff auf das erzeugte Geheimnis haben. [5]

Für ein möglichst vollständiges Bild lies diesen Eintrag zusammen mit Cryptographic Entropy, CSPRNG, Seed Generation, Brute Force Search Space. Auf diesen Eintrag verweisen außerdem CSPRNG, Deterministic RNG, True Random Number Generator, Seed Generation.

DOC · 001NIST SP 800-90C — RBG constructionsSpezifikation DOC · 002RFC 4086 — Unpredictability and weak inputsSpezifikation DOC · 003NIST SP 800-90B — Source health and failure handlingSpezifikation DOC · 004Linux getrandom(2) — Initialization and return behaviorDokumentation DOC · 005W3C Web Crypto — getRandomValues and key generationSpezifikation DOC · 006BIP39 — Initial entropy and mnemonic-to-seed derivationSpezifikation DOC · 007NIST SP 800-90A Rev. 1 — DRBG lifecycle and reseedingSpezifikation
Überarbeitet: Quellenbasiert · Keine Anlageberatung