Zitat von BIP32 :
Eine Schwäche, die möglicherweise nicht sofort offensichtlich ist, besteht darin, dass die Kenntnis eines übergeordneten erweiterten öffentlichen Schlüssels plus eines nicht gehärteten privaten Schlüssels, der davon abstammt, gleichbedeutend ist mit der Kenntnis des erweiterten übergeordneten privaten Schlüssels (und somit aller von ihm abstammenden privaten und öffentlichen Schlüssel).
Wie wird das gemacht?
Zuerst müssen wir verstehen, wie BIP 32 nicht gehärtete private und öffentliche Schlüssel ableitet.
Von BIP 32, Ableiten eines untergeordneten privaten Schlüssels von einem erweiterten übergeordneten privaten Schlüssel:
sei I = HMAC-SHA512(Key = c par , Data = ser P (point(k par ))) || ser32(i)).
Teilen Sie I in zwei 32-Byte-Sequenzen auf, I L und I R .
Der zurückgegebene untergeordnete Schlüssel K i ist Parse 256 (I L ) + k par (mod n).
Der private Schlüssel ist somit der übergeordnete private Schlüssel plus die ersten 256 Bits der HMAC-SHA512-Funktion, wobei der Schlüssel der Kettencode des übergeordneten privaten Schlüssels ist und die gehashten Daten die Verkettung der Serialisierung des öffentlichen Schlüssels sind, der dem erweiterten entspricht privater Schlüssel und der Index des untergeordneten Schlüssels. Wichtig hierbei ist, dass der HMAC-SHA512-Hash ein Hash des öffentlichen Schlüssels ist, nicht des privaten Schlüssels.
Von BIP 32, Ableiten eines untergeordneten öffentlichen Schlüssels von einem erweiterten übergeordneten öffentlichen Schlüssel:
sei I = HMAC-SHA512 (Schlüssel = c par , Daten = ser P (K par ) || ser32(i)).
Teilen Sie I in zwei 32-Byte-Sequenzen auf, I L und I R .
Der zurückgegebene untergeordnete Schlüssel K i ist Punkt(Parse 256 (I L )) + K par .
Der untergeordnete öffentliche Schlüssel ist der übergeordnete öffentliche Schlüssel, dem der öffentliche Schlüssel hinzugefügt wird, der aus den ersten 256 Bits der HMAC-SHA512-Funktion generiert wird, wobei der Schlüssel der Kettencode des übergeordneten Schlüssels und die Daten die Verkettung des übergeordneten öffentlichen Schlüssels mit dem Index von sind der öffentliche Kinderschlüssel.
Beachten Sie, dass Sie beim Ableiten des untergeordneten privaten Schlüssels und des untergeordneten öffentlichen Schlüssels tatsächlich dasselbe hashen? Sie führen die HMAC-SHA512-Funktion mit demselben Schlüssel (dem Kettencode der übergeordneten Schlüssel) und denselben Daten (der Verkettung des übergeordneten öffentlichen Schlüssels und dem Index des untergeordneten Schlüssels) aus. Die ersten 256 Bits dieses Hashs werden zu einer Art privatem Schlüssel, und dieser private Schlüssel wird dem privaten Master-Schlüssel hinzugefügt, um der tatsächliche untergeordnete private Schlüssel zu werden. Sein öffentlicher Schlüssel wird berechnet und mit dem öffentlichen Elternschlüssel hinzugefügt, um der öffentliche Kindschlüssel zu werden.
Um den privaten Hauptschlüssel zu erhalten, müssen wir also nur den untergeordneten privaten Schlüssel, den wir jetzt haben, nehmen und davon den von der HMAC-SHA512-Funktion erzeugten privaten Schlüssel subtrahieren. Dazu benötigen wir drei Dinge, den Chaincode, den übergeordneten öffentlichen Schlüssel und den untergeordneten Schlüsselindex.
Der Chaincode und der übergeordnete öffentliche Schlüssel stammen aus dem erweiterten übergeordneten öffentlichen Schlüssel ( xpub
), da er sowohl den Chaincode als auch den öffentlichen Schlüssel darin codiert.
Der untergeordnete Schlüsselindex kann trivial gefunden werden, indem öffentliche untergeordnete Schlüssel vom öffentlichen übergeordneten Schlüssel abgeleitet werden, bis wir den öffentlichen Schlüssel erhalten, der dem privaten untergeordneten Schlüssel entspricht, den wir haben, und den Schlüsselindex speichern.
Mit diesen drei Dingen können wir die HMAC-SHA512-Funktion ausführen und den 512-Bit-Hash erhalten. Jetzt können wir den untergeordneten privaten Schlüssel nehmen und davon die ganze Zahl subtrahieren, die die ersten 256 Bits des Hashs sind, den wir gerade generiert haben. Unser Ergebnis ist der übergeordnete private Schlüssel. Kombinieren Sie dies mit dem Kettencode, den wir aus dem erweiterten übergeordneten öffentlichen Schlüssel abgerufen haben, und wir haben selbst den erweiterten übergeordneten privaten Schlüssel.
Diese Technik gilt nur für nicht gehärtete Ableitungen. Die gehärtete Ableitung schützt davor, da sie den untergeordneten privaten Schlüssel durch Hashing des übergeordneten privaten Schlüssels generiert. Dies bedeutet jedoch auch, dass Sie den untergeordneten öffentlichen Schlüssel nicht aus dem übergeordneten öffentlichen Schlüssel generieren können.
Erwin Mayr
Andreas Chow
Erwin Mayr
Andreas Chow