PBKDF2 steht für Password-Based Key Derivation Function 2. Das Verfahren erzeugt aus einer Passworteingabe und dem zusätzlichen Parameter Salt einen abgeleiteten Schlüssel. Das Ergebnis hängt außerdem von der Zahl der Wiederholungen, der verwendeten Rechenfunktion und der gewünschten Länge ab. Gleiche Eingaben und Einstellungen liefern dasselbe Ergebnis. BIP39 verwendet die konkrete Variante PBKDF2-HMAC-SHA512; bei anderen Anwendungen können die Parameter anders aussehen.
Die Wiederherstellungswörter bilden die Eingabe namens password. Der Parameter salt ist eine zweite Eingabe: der wörtliche Text "mnemonic", direkt gefolgt von der Passphrase, einem optionalen zusätzlichen Passwort. Dazwischen kommt weder ein Trennzeichen noch eine weitere Kopie der Wörter. Ohne Passphrase bleibt Salt "mnemonic" und ist nicht leer. Beide Eingaben durchlaufen NFKD, eine Vereinheitlichung bestimmter Zeichendarstellungen, und die Kodierung UTF-8. BIP39 verwendet HMAC-SHA512, 2048 Wiederholungen und eine Ausgabe von 64 Bytes beziehungsweise 512 Bit. Diese Ausgabe ist der Seed. Salt ist keine weitere Sicherung, die du anlegen musst. [1]
Im Inneren arbeitet HMAC, ein Verfahren, das einen Schlüssel mit einer Nachricht kombiniert. In jeder Runde bleibt dieselbe Passworteingabe der Schlüssel. Für das erste Zwischenergebnis werden Salt und die Nummer des Ausgabeblocks verwendet; die folgenden Runden verarbeiten das vorherige Zwischenergebnis. Die Ergebnisse werden mit XOR verknüpft, einer Operation zwischen den jeweils entsprechenden Bits. HMAC-SHA512 liefert 64 Bytes, weshalb für BIP39 ein solcher Block genügt. Nur SHA-512 2048-mal auf Text anzuwenden wäre eine andere Berechnung mit einem anderen Ergebnis. [2] [1]
Stell dir eine Wiederherstellung in einer anderen Wallet vor. Für denselben Seed braucht sie dieselben normalisierten Angaben und Einstellungen. Die vorgeschriebenen 2048 Wiederholungen zu erhöhen verbessert die Wiederherstellung nicht: Damit würdest du von BIP39 abweichen und ein anderes Ergebnis erhalten. Auch eine Übersetzung der Wörter in eine andere Wortliste ist keine neutrale Änderung. Wiederherstellung braucht Übereinstimmung, keinen selbst angepassten Algorithmus. [1]
Wiederholte Berechnungen machen jeden Versuch aufwendiger, erzeugen aber keinen neuen unabhängigen Zufall. Kennt ein Angreifer deine Wörter und hat er Angaben, an denen er die richtige Wallet erkennt, kann er schwache Passphrasen offline auf seinem eigenen Rechner ausprobieren. Ein 512 Bit langer Seed bedeutet deshalb nicht 512 Bit Unvorhersagbarkeit. Auch 2048 ist keine allgemeine Empfehlung für neu entwickelte Systeme, sondern hier Teil eines bestimmten Wiederherstellungsstandards. [2] [1]
Die Prüfsumme von BIP39 hilft, falsch abgeschriebene Wörter zu erkennen. PBKDF2 beantwortet eine andere Frage: Wie lässt sich aus den übergebenen Eingaben ein Seed berechnen? Diese Berechnung bestätigt nicht, dass die Passphrase zu deiner ursprünglichen Wallet gehört. Anschließend kann beispielsweise BIP32 den Seed verarbeiten, um eine ganze Familie von Schlüsseln abzuleiten. Die Aufzeichnung zu prüfen, daraus einen Seed zu berechnen und Schlüssel zu erzeugen sind zusammenhängende, aber nicht austauschbare Schritte. [1]
Entwickler können Ergebnisse mit öffentlichen Testvektoren vergleichen: bekannten Eingaben und den dazu erwarteten Ausgaben. BIP39 veröffentlicht die ursprünglichen Zufallsdaten, Wörter und den vollständigen Seed für die Test-Passphrase TREZOR. Eine korrekte Umsetzung muss dieses Ergebnis einschließlich der NFKD-Regeln reproduzieren. Deine echte Sicherung wird dafür nicht benötigt. Verwende öffentliche Beispiele niemals für Geld, denn jeder kennt sie. Ein bestandener Rechentest beweist außerdem nicht, dass die gesamte Anwendung sicher ist. [1]
Für ein möglichst vollständiges Bild lies diesen Eintrag zusammen mit BIP 39, BIP39 passphrase, Seed Generation, HD Wallet. Auf diesen Eintrag verweisen außerdem BIP39 passphrase.