486 / 736SEED-GEN

Seed Generation

Erzeugung des Wallet-Seeds

Wenn du eine neue Wallet anlegst, müssen ihre Sicherungswörter auf Zufallsdaten beruhen, die niemand anders vorhersagen kann. Seed Generation bezeichnet die Erzeugung und Verarbeitung dieses geheimen Ausgangspunkts. Dass eine Wallet eine Folge mit der richtigen Wortzahl akzeptiert, macht sie noch nicht sicher.

Beim verbreiteten BIP39-Verfahren werden Zufallsdaten zu Sicherungswörtern, der Seed Phrase. Aus diesen Wörtern und einer optionalen Passphrase, einem zusätzlichen Passwort, entsteht der Seed: geheime Daten, aus denen BIP32 einen Baum von Wallet-Schlüsseln ableiten kann. Zufallsdaten, Wörter, Seed und Schlüssel sind verschiedene Stationen desselben Wegs. Andere Sicherungsformate können anders funktionieren.

Stell dir vor, du möchtest dir deine Sicherung leicht merken und wählst Wörter aus deinem Lieblingsbuch. Sie mögen dir ungewöhnlich erscheinen, doch ein Angreifer kann gezielt Zitate und vertraute menschliche Muster ausprobieren. BIP39 beginnt deshalb mit computergenerierter Zufälligkeit und stellt sie erst anschließend als Wörter dar. Ihre Unvorhersagbarkeit wird durch Entropie beschrieben. Die Wörter machen geheime Daten lesbar; sie sind keine Aufforderung, einen eigenen Satz zu erfinden. [1]

Die Wallet muss tatsächlich Zufallsdaten erhalten, nicht nur eine passend benannte Funktion aufrufen. Linux stellt etwa getrandom() bereit, das standardmäßig wartet, bis die Systemquelle bereit ist. Mit GRND_NONBLOCK kann es stattdessen EAGAIN melden: Die Daten sind noch nicht verfügbar. Das Programm muss das Ergebnis und die Anzahl der erhaltenen Bytes, also Dateneinheiten, prüfen. Nach einem Fehler so weiterzumachen, als wäre der geheime Eingangswert erfolgreich entstanden, könnte eine scheinbar funktionierende, aber unsichere Wallet erzeugen. [2]

Auch Browser bieten eine Schnittstelle für sichere Zufallsdaten. Web Crypto getRandomValues() füllt ein Ganzzahl-Array mit kryptografisch sicheren Bytes; Anfragen über 65536 Bytes scheitern mit QuotaExceededError. Das beschreibt jedoch eine einzelne Funktion und ist kein Sicherheitsnachweis für die Website. Eine Seite könnte gute Zufallsdaten erhalten und anschließend die Sicherungswörter weitergeben. Daher sind auch der geladene Code und seine Verarbeitung des Ergebnisses zu prüfen. [3]

Schreibst du ein Wort falsch ab, kann die Wallet den Fehler mithilfe einer Prüfsumme erkennen: einer kurzen, aus den ursprünglichen Daten berechneten Kontrolle. BIP39 ergänzt 128 Eingabebits um 4 Prüfbits zu 12 Wörtern; aus 256 Eingabebits und 8 Prüfbits werden 24 Wörter. Ein Bit ist eine grundlegende Informationseinheit. Die Prüfbits stammen aus einem mit SHA256 berechneten Datenfingerabdruck, nicht aus zusätzlicher unabhängiger Entropie. Eine gültige Prüfsumme belegt weder Geheimhaltung noch sichere Erzeugung der Wörter. [1]

Wörter lassen sich gut sichern; die Software muss daraus genau definierte Daten berechnen. BIP39 verwendet dazu die Ableitungsfunktion PBKDF2-HMAC-SHA512 mit 2048 Wiederholungen und erzeugt einen Seed mit 512 Bit. Neben der Wortfolge fließt ein Parameter namens Salt ein: hier der wörtliche Text mnemonic, gefolgt von der Passphrase oder einer leeren Zeichenfolge, wenn keine verwendet wird. Wortfolge und Parameter werden in UTF-8 NFKD verarbeitet, das die Zeichendarstellung vereinheitlicht. Eine längere Ausgabe erzeugt keine fehlende Zufälligkeit; ihre Länge beweist keine 512 Bit Eingabeentropie. [1]

Den nächsten Schritt beschreibt BIP32. Es leitet einen privaten Hauptschlüssel und einen chain code ab, also Begleitdaten für die Ableitung weiterer Schlüssel. So kann die Wallet neue Adressen aus einem gemeinsamen Ursprung erzeugen. Technisch verwendet sie HMAC-SHA512 mit dem festen Text Bitcoin seed als Schlüssel dieser Funktion und teilt das Ergebnis. Dieser öffentliche Text ist nicht dein Geheimnis. Ein abgeleiteter privater Schlüssel mit dem Wert null oder außerhalb des erlaubten Bereichs ist ungültig. Der Seed wird also nicht einfach in einen privaten Schlüssel umbenannt. [4]

Entwickler müssen prüfen können, ob ihre Software richtig rechnet. Testvektoren enthalten dafür bekannte Eingaben und erwartete Ergebnisse. BIP39 veröffentlicht Datensätze mit Entropie, Wörtern und Seed, einschließlich der Test-Passphrase TREZOR. Ein passendes Ergebnis bestätigt die Umwandlung dieser Eingabe, nicht die Unvorhersagbarkeit der tatsächlich erzeugten Geheimnisse. Weil die Testdaten öffentlich sind, dürfen sie niemals als geheime Sicherung für echtes Guthaben dienen. [1]

Zwischen Zufallsquelle, Wörtern und aufbewahrter Sicherung liegen mehrere Schritte. NIST SP 800-90C beschreibt, wie Entropiequellen mit Mechanismen zur Erzeugung von Zufallsdaten verbunden werden. Bei der Prüfung einer Wallet zählen außerdem die konkrete Softwareversion, die Fehlerbehandlung und die Datenübergabe zwischen den Schritten. Eine gründlich geprüfte Komponente garantiert nicht, dass eine andere das Geheimnis weder verliert noch offenlegt. Entscheidend ist der ganze Ablauf, nicht eine einzelne vertrauenerweckende Bezeichnung. [5]

Für ein möglichst vollständiges Bild lies diesen Eintrag zusammen mit Random Number Generator, BIP 39, HD Wallet, Seed Phrase. Auf diesen Eintrag verweisen außerdem Random Number Generator, CSPRNG, Deterministic RNG, Entropy Mixing.

DOC · 001BIP39 — Mnemonic generation and seed conversionSpezifikation DOC · 002Linux getrandom — Initialization and return valuesDokumentation DOC · 003W3C Web Crypto — getRandomValues contractSpezifikation DOC · 004BIP32 — Master key generationSpezifikation DOC · 005NIST SP 800-90C — Random bit generator constructionsSpezifikation
Überarbeitet: Quellenbasiert · Keine Anlageberatung