Warum wird der Root-Seed einer HD-Wallet einem zusätzlichen HMAC-SHA512-Hash unterzogen, um den privaten Master-Schlüssel und den Master-Chain-Code zu generieren?

Soweit ich weiß, wird der Wallet Seed erstellt, indem in PBKDF2 (unter Verwendung von HMAC-SHA512, von dem 2048 Runden angewendet werden) eine Reihe von mnemonischen Codewörtern und ein optionales Salt (standardmäßig "mnemonic") eingegeben werden. Dies erzeugt einen 512-Bit-Seed, der für Brute-Force völlig unpraktisch ist. Dies ist ein Bild des Prozesses, auf den ich mich beziehe, aus Mastering Bitcoin. Warum wird es dann erneut mit HMAC-SHA512 gehasht, außer zum Erstellen von 512-Bit-Ausgabe (in dem Fall, in dem es ursprünglich 128 oder 256 gewesen sein könnte)? Warum nicht einfach nur einen SHA512-Hash verwenden (vorausgesetzt, der Grund besteht darin, nur 512 Bit zu erstellen)? Was ist der Sinn des HMAC hier? Längenerweiterungsangriffe aus den vorherigen Iterationen während PBKDF2 hätten vermieden werden sollen, oder?

Antworten (1)

Dies liegt daran, dass der Root-Seed möglicherweise nicht 512 Bit beträgt, sondern beispielsweise 128 Bit oder 256 Bit, wie in dem von Ihnen verlinkten Bild zu sehen ist. Somit wird der endgültige SHA-512 auf den Seed angewendet, sodass unabhängig vom Seed immer 512 Bits generiert werden.

Die in BIP 39 beschriebene Seed-Generierung ist unabhängig vom Schritt Seed -> erweiterter privater Schlüssel in BIP 32. Ich gehe davon aus, dass BIP 32 HMAC-SHA-512 anstelle von nur SHA-512 verwendet, da es keine Annahmen darüber trifft, wie der Seed generiert wurde. und möchte sicherstellen, dass der erweiterte private Schlüssel eindeutig für die Verwendung von BIP 32 generiert wird, anstatt nur irgendeinen alten SHA-512-Hash zu verwenden, der von woanders stammen könnte.

Aber warum HMAC-SHA-512 im Gegensatz zu einem normalen SHA-512-Hash? War dies nur willkürlich, da es zuvor verwendet wurde?
Ah tut mir leid, dass ich deine Frage falsch verstanden habe. Ich habe meine Antwort aktualisiert :)
Können Sie erklären, warum HMAC-SHA-512 keine Annahmen darüber trifft, wie der Seed generiert wurde, SHA jedoch schon?
Einfach gesagt, wir wollen einen Schlüssel, der speziell für diesen Zweck aus dem Seed generiert wird, und nicht irgendeinen alten SHA-512-Hash