Password-Based Key Derivation Function 2 ist eine deterministische Ableitungsfunktion mit den Parametern Eingabe, Salt, Iterationszahl, Pseudozufallsfunktion und Ausgabelänge. BIP39 legt ein konkretes PBKDF2-HMAC-SHA512-Profil fest, nicht alle möglichen PBKDF2-Anwendungen.
Die als password bezeichnete Eingabe ist die Wortfolge in UTF-8 NFKD. Das Salt ist mnemonic + passphrase, ebenfalls in UTF-8 NFKD; ohne Passphrase wird ein leerer Wert angehängt. BIP39 verlangt HMAC-SHA512, 2048 Iterationen und 64 Bytes beziehungsweise 512 Bits Ausgabe. [BIP39 — Mnemonic generation and seed conversion]
PBKDF2 bildet das erste Zwischenergebnis aus Passworteingabe, Salt und Index des Ausgabeblocks. Weitere Zwischenergebnisse entstehen mit derselben Pseudozufallsfunktion aus dem vorherigen Ergebnis; die Werte werden mit XOR verknüpft. Bei HMAC-SHA512 hat ein Block 64 Bytes, sodass BIP39 einen Block benötigt. SHA-512 einfach 2048-mal auf den Text anzuwenden reicht nicht. [RFC8018 — PBKDF2 construction] [BIP39 — Mnemonic generation and seed conversion]
Gleiche normalisierte Eingaben und Parameter liefern denselben Seed. Die 2048 Iterationen willkürlich zu erhöhen oder bei der Wiederherstellung die Funktion zu ändern verbessert nicht die Sicherheit der bestehenden Wallet: Das Ergebnis entspricht nicht mehr der vorgeschriebenen BIP39-Ableitung. Auch die Übersetzung in eine andere Wortliste ist keine neutrale Änderung. [BIP39 — Mnemonic generation and seed conversion]
Iterationen erhöhen den Aufwand je Versuch, fügen aber keine unabhängige geheime Zufälligkeit hinzu. Ein Angreifer mit den Wörtern und Wallet-Vergleichsdaten kann schwache Passphrasen offline testen. Eine 512-Bit-Ausgabe bedeutet daher keinen Schutz entsprechend 512 Entropiebits; 2048 ist keine allgemeine Empfehlung für neue Systeme. [RFC8018 — PBKDF2 construction] [BIP39 — Mnemonic generation and seed conversion]
Die BIP39-Prüfsumme hilft, Fehler in den Wörtern vor ihrer Verwendung zu erkennen. Die PBKDF2-Umwandlung selbst ist von Erzeugung und Prüfung der Wortfolge getrennt; sie bestätigt nicht, dass die Passphrase zur gesuchten Wallet gehört. BIP32 oder andere deterministische Verfahren können den Seed anschließend in einem weiteren Schritt verwenden. [BIP39 — Mnemonic generation and seed conversion]
Öffentliche BIP39-Testvektoren nennen Entropie, Wörter und erwarteten Seed mit der Test-Passphrase TREZOR. Eine korrekte Implementierung muss die gesamte Ausgabe reproduzieren und NFKD beachten. Diese bekannten Eingaben dürfen niemals die eigene Sicherung für Mittel sein; ein passender Test allein prüft auch nicht die Sicherheit der gesamten Anwendung. [BIP39 — Mnemonic generation and seed conversion]
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.