Ich lese gerade das Buch Mastering Bitcoin und bin verwirrt über Wallet-Key-Ableitungen in Kapitel 4. Keys, Addresses, Wallets .
Das Buch erwähnt zuerst eine Ableitung eines privaten untergeordneten Schlüssels, bei der der private untergeordnete Schlüssel aus drei Eingaben abgeleitet wird: (öffentlicher übergeordneter Schlüssel, der zuvor vom privaten übergeordneten Schlüssel abgeleitet wurde, übergeordneter Kettencode, Index).
Als nächstes behandelt das Buch erweiterte Schlüssel und erwähnt zwei Arten: erweiterte private Schlüssel und erweiterte öffentliche Schlüssel.
Die erweiterten öffentlichen Schlüssel werden verwendet, um die öffentlichen Schlüssel der Kinder von den öffentlichen Schlüsseln der Eltern abzuleiten, um zu vermeiden, dass die privaten Schlüssel preisgegeben werden, wodurch die Sicherheit erhöht wird. Dies ist das Blockdiagramm für den erweiterten öffentlichen Schlüssel .
Andererseits erwähnt das Buch, dass der erweiterte private Schlüssel verwendet wird, um den privaten Schlüssel eines Kindes unter Verwendung des privaten Schlüssels und Kettencodes des Elternteils abzuleiten.
Obwohl der erweiterte öffentliche Schlüssel den privaten Schlüssel nicht offenlegt, ist seine Verwendung dennoch riskant, da er die Kettencodes offenlegt. Wenn ein privater Schlüssel durchgesickert ist, können sie zusammen verwendet werden, um andere untergeordnete Schlüssel abzuleiten.
Schließlich schlägt das Buch vor, den gehärteten Schlüssel zu verwenden , der für mich genau die gleiche Beschreibung wie der erweiterte private Schlüssel ist.
Meine erste Frage ist, ist der erweiterte private Schlüssel dasselbe wie die Ableitung des gehärteten Schlüssels?
Meine zweite Frage ist, welche Technik tatsächlich beim Ableiten des privaten Schlüssels für Kinder verwendet wird, die erste, die ich in meiner Frage erwähne, oder die zweite, die den erweiterten privaten Schlüssel verwendet, was für mich genau dasselbe ist wie die Ableitung des gehärteten Schlüssels.
Hier gibt es viel Verwirrung, hauptsächlich Teile des gesamten Schemas, das eine hierarchische deterministische Ableitung ist, und schließlich zwei Fragen, die darauf hinzudeuten scheinen, dass ein Punkt darin fehlt. Die Antwort auf die erste Frage ist Nein. Die zweite Frage ist interessanter:
Beginnen wir mit erweiterten Schlüsseln, insbesondere BIP32-Schlüsseln. Wie private Schlüssel und öffentliche Schlüssel können erweiterte Schlüssel entweder „privat“ oder „öffentlich“ sein. Ich habe beide in Anführungszeichen gesetzt, da beide Arten von erweiterten Schlüsseln private Informationen enthalten. Zumindest genug, um die Schlüsselverwendung zu verfolgen. Dieser Mechanismus wird von Hardware-Wallets und „watchonly“-Software-Wallets auf einem PC verwendet.
Ein erweiterter Schlüssel ist nur eine base58-codierte Serialisierung einiger Daten:
[ magic ][ depth ][ parent fingerprint ][ key index ][ chain code ][ key ]
Dabei key
kann es sich entweder um einen öffentlichen oder einen privaten Schlüssel handeln. Privaten Schlüsseln wird ein einzelnes Byte vorangestellt 0x00
, sodass die Länge dieses Blobs gleich bleibt. Ein erweiterter Schlüssel wird normalerweise abgeleitet, indem path
einige path
. Ich werde in dieser Antwort aufhören, "erweitert" zu verwenden. Von jetzt an bezeichne ich einen erweiterten privaten Schlüssel als xprv
und einen erweiterten öffentlichen Schlüssel als xpub
, und manchmal nur "Schlüssel". Nicht erweitert sind nur "Private Key" oder "Public Key".
Ein xprv oder xpub magic
sind 4 Bytes, um das Netzwerk anzugeben, zu dem es gehört: Testnet oder Mainnet ( t
bzw. x
) und die Art des Schlüssels ( pub
bzw. prv
). Das depth
ist ein Byte, das angibt, wie tief ein xpriv oder xpout in einem Pfad ist, beginnend 00
mit der Tiefe des master
Schlüssels und um eins erhöht, wenn die Ableitung weiterer untergeordneter Schlüssel entlang des Pfads erfolgt. Beachten Sie, dass bis jetzt der einzige Unterschied zwischen den Schlüsseln xprv
und xpub
, den ich erwähnt habe, der Teil prv
oder pub
in der Magie ist. Es sollte auch klar sein, dass ein xprv
und xpub
auf demselben Pfad und in derselben Tiefe sein können. Dies bedeutet, dass für ein solches Paar von xprv
und xpub
, die[ key ]
Ein Teil von hat einen privaten 32-Byte-Schlüssel (mit einem vorangestellten 00
Byte) in der xprv
, und einen öffentlichen 33-Byte-Schlüssel, der der öffentliche Schlüssel ist, den Sie aus dem privaten Schlüssel in der erhalten xprv
.
Der Fingerabdruck eines Elternteils sind die ersten 4 Bytes des hash160
öffentlichen Schlüssels des Elternteils. Das bedeutet , dass selbst wenn ein Elternteil xprv
verwendet wird , um ein Kind abzuleiten xprv
, es dasselbe hat , parent fingerprint
als wenn ein Elternteil xpub
verwendet wird , um ein Kind abzuleiten xpub
. Eine Eltern-Kind-Beziehung zwischen Schlüsseln bedeutet, dass sie in einem Pfad benachbart sind.
A path
ist ein n-Tupel von Indizes, normalerweise zur Basis 10, getrennt durch /
. Der Bereich eines Index kann zwischen 0 und 4294967295 (oder 2^32-1) liegen, wobei alles in der nicht[0,2147483647]
gehärteten Ableitung folgt und Indizes in der gehärteten Ableitung folgen . Sie können sehen, dass jede Hälfte des Indexbereichs für eine andere Methode verwendet wird. Wir können sagen, dass es zwei Bereiche gibt. für nicht gehärtete Schlüssel und für gehärtete Schlüssel. Das gibt an, dass der Index (wir nennen ihn ) als behandelt werden sollte . Sie werden die Notation wahrscheinlich eher als Caret sehen , also , aber ich denke nicht, dass es sehr hübsch ist, also bleibe ich vorerst dabei .[2147483648,4294967295]
[0,2147483647]
[0h,2147483647h]
h
i
i + 2147483648
h
'
1' == 1h
h
Ein Beispiel dafür, wie ein Pfad aussieht, ist:
m/0h/1/2h/2/1000000000
Das m
bedeutet, dass der Schlüssel an diesem Index ein master xprv
oder ist master xpub
. Ein kleines m
bedeutet, dass dieser erweiterte Schlüssel ein ist master xprv
, und ein großes M
ein master xpub
. Wenn Sie den vorherigen Definitionen folgen, können Sie feststellen, dass m
das der übergeordnete Schlüssel des Schlüssels at 0h
ist und der Schlüssel at 2h
das Kind des Schlüssels davor bei index ist 1
. Um dies leichter nachvollziehen zu können, werden wir die verschiedenen Schlüssel im Pfad mit Buchstaben versehen {a..e}
, wenn wir meinen, dass dies xprv
s und {A..B}
wenn xpub
s sind.
m / 0h / 1 / 2h / 2 / 1000000000
m a b c d e
Ein Pfad wird normalerweise mit Indizes in Base10 angegeben, aber im Schlüssel selbst sind sie in Hex (Base16) codiert, sodass a [ key index ]
immer 4 Bytes mit vorangestellten Nullen ist, falls erforderlich. Die depth
und index
eines Hauptschlüssels sind beide immer null, also 00
und 00000000
, und sie können maximal FF
und FFFFFFFF
erreichen. So m
und a
sind Elternteil und Kind, und so sind d
und e
. Der depth
von b
ist 02
und sein Index ist 00000001
, und der depth
von c
ist , 03
während sein Index 80000002
(80000000 + 2) ist. Der letzte abzuleitende untergeordnete Schlüssel ist e
. Wir können sagen, dass wir einem Pfad gefolgt sind, der bei beginnt m
, von dem wir den Schlüssel a
bei index abgeleitet haben 0h
, dann vona
Wir haben den Schlüssel b
bei Index abgeleitet 1
.. und so weiter. Aber was bedeutet es, einen neuen Schlüssel abzuleiten?
Die verbleibenden zwei Elemente im erweiterten Schlüsselformat, die des Elternschlüssels [ chain code ]
und [ key ]
werden zusammen mit dem verwendet, was der untergeordnete Schlüssel wäre index
, um ihn abzuleiten. Das bedeutet, dass wir, um von abzuleiten, eine Funktion mit c
' s and , and 's füttern würden . Ein konkretes Beispiel für unser und wäre:b
b
chain code
key
c
index
b
c
b :
0488ADE4
02
5C1BD648
00000001
2A7857631386BA23DACAC34180DD1983734E444FDBF774041578E9B6ADB37C19
003C6CB8D0F6A264C91EA8B5030FADAA8E538B020F0A387421A12DE9319DC93368
c :
0488ADE4
03
BEF5A2F9
80000002
04466B9CC8E161E966409CA52986C584F07E9DC81F735DB683C3FF6EC7B1503F
00CBCE0D719ECF7431D88E6A89FA1483E02E35092AF60C042B1DF2FF59FA424DCA
Die Felder sind wie in der obigen Struktur geordnet. Bei beiden magic
heißt es xprv
, das depth
wird zwischen dem Elternteil und dem Kind erhöht, das fingerprint
at c
ist das hash160
des öffentlichen Schlüssels, den Sie vom privaten Schlüssel bei erhalten würden b
, und b
's index
befindet sich in der ersten, nicht gehärteten Hälfte des Bereichs, während c
' s ist die zweite, gehärtete Hälfte. Schließlich werden die chain code
und key
s jedes der xprv
s codiert.
Das Ableiten von chain code
und key
for c
von b
erfolgt mit einem Prozess namens CKDpriv
, was bedeutet, dass ein untergeordnetes Element xprv
von einem übergeordneten Element abgeleitet wird xprv
. In diesem Prozess haben wir das chain code
and key
from b
und das index
from verwendet c
. Der wichtige Punkt: Wir haben erst codiert, c
nachdem wir seine abgeleitet haben chain code
und key
von dem, was sein wäre index
.
Any xprv
kann mit verwendet werden , um ein untergeordnetes Element at any CKDpriv
abzuleiten . Die spezifische Art und Weise , wie auf die Eingabe reagiert wird, hängt davon ab, ob sich das Kind im verhärteten Bereich oder im nicht verhärteten Bereich befindet. Im Grunde läuft eine Funktion auf dem und des übergeordneten Elements und dem des untergeordneten Elements . Diese hmac-Funktion nimmt zwei Werte a (nicht zu verwechseln mit unseren Vorkommen von , wird als bezeichnet ) und . Der des Elternteils wird als verwendet , während der sich aus dem Elternteil in der Form des privaten Schlüssels zusammensetzt, wenn sich der Index des Kindes im gehärteten Bereich befindet , und im öffentlichen Schlüsselxprv
index
CKDpriv
index
CKDpriv
HMAC-SHA512
chain code
key
index
key*
key
hkey
text
chain code
hkey
text
key
[0h,2147483647h]
bilden, wenn der Index im nicht gehärteten Bereich liegt. Es wird dann mit dem des Kindes verkettet index
.
c
Der Index von liegt im gehärteten Bereich, daher CKDpriv
läuft der hmac-sha512 von mit den Eingaben:
HMAC-SHA512( 2A7857631386BA23DACAC34180DD1983734E444FDBF774041578E9B6ADB37C19,
003C6CB8D0F6A264C91EA8B5030FADAA8E538B020F0A387421A12DE9319DC9336880000002 )
Was einen 64-Byte-Hash zurückgibt:
8F6154A0A82D0F68B9E5B586EA66D951DAAA071BEBD390097CC516285C791A6204466B9CC8E161E966409CA52986C584F07E9DC81F735DB683C3FF6EC7B1503F
Die 32 Bytes in der rechten Hälfte dieses Hashs werden 04466B9C...C7B1503F
zu den des Kindes ( c
hier) chain code
, und die 32 Bytes auf der linken Seite werden zum "Optimieren" verwendet, was in diesem Beispiel nur "Hinzufügen von mod n" zum Schlüssel des Elternteils bedeutet:
8F6154A0A82D0F68B9E5B586EA66D951DAAA071BEBD390097CC516285C791A62
+
3C6CB8D0F6A264C91EA8B5030FADAA8E538B020F0A387421A12DE9319DC93368
=
CBCE0D719ECF7431D88E6A89FA1483E02E35092AF60C042B1DF2FF59FA424DCA mod n
00
vorangestellten Bytes hier nicht in die Schlüssel geschrieben, weil dies nur das Hinzufügen von Zahlen ist, aber diese Null-Bytes sind sehr wichtig für die Hash-Funktion, also habe ich sie absichtlich dort eingefügt.Jetzt, da wir c
's chain code
und key
(in privater Schlüsselform) haben, möchten wir tatsächlich codieren c
, damit es ein verwendbares ist xprv
. Um die fingerprint
from zu erhalten b
, müssen wir den öffentlichen Schlüssel der key
from kennen b
. Da es sich um einen privaten Schlüssel handelt, müssen wir multiplizieren:
CBCE0D719ECF7431D88E6A89FA1483E02E35092AF60C042B1DF2FF59FA424DCA * G
= 03501E454BF00751F24B1B489AA925215D66AF2234E3891C3B21A52BEDB3CD711C
Nehmen Sie die hash160
dieses öffentlichen Schlüssels, und der zurückgegebene Hash ist BEF5A2F9A56A94AAB12459F72AD9CF8CF19C7BBE
. Die ersten vier Bytes sind b
der Fingerabdruck: BEF5A2F9
. Den Rest zu codieren c
ist einfach. Beginnen Sie mit der Magie , xprv
da wir ein Kind abgeleitet xprv
haben, erhöhen Sie die Tiefe von b
um eins, dann die fingerprint
. Als nächstes wird codiert c
. index
Wir leiteten den Index ab 2h
, also wäre dies 80000002
, und dann das neue chain code
und key
, von dem wir gekommen sind CKDpriv
.
Dies ist im Grunde das, was gehärtete Ableitung ist. Der private Schlüssel und der Kettencode des Elternteils werden verwendet, um den Kindschlüssel an einem gehärteten Index abzuleiten. Was ist, wenn wir ableiten wollen d
? Es ist bei index 2
, also ein nicht gehärteter Index. Dies ist der zweite Fall von CKDpriv
.
Der Unterschied besteht darin, was für den text
Parameter der HMAC-SHA512
Funktion verwendet wird. Anstatt den Elternschlüssel in privater Schlüsselform zu verwenden, verwenden wir die öffentliche Schlüsselform. Um also am Index von key
abzuleiten , finden wir zuerst den öffentlichen Schlüssel von :d
2
c
c
CBCE0D719ECF7431D88E6A89FA1483E02E35092AF60C042B1DF2FF59FA424DCA * G
= 0357BFE1E341D01C69FE5654309956CBEA516822FBA8A601743A012A7896EE8DC2
Fahren Sie dann mit den gleichen Schritten wie oben fort:
HMAC-SHA512( 04466B9CC8E161E966409CA52986C584F07E9DC81F735DB683C3FF6EC7B1503F,
0357BFE1E341D01C69FE5654309956CBEA516822FBA8A601743A012A7896EE8DC200000002 )
tweak chain code
437984D45C4A2F5840C65B3DC6D7274E2859AD25D092DB032C49AA4D006A426B|CFB71883F01676F587D023CC53A35BC7F88F724B1F8C2892AC1275AC822A3EDD
* Beachten Sie, dass dem 00
nicht vorangestellt wird text
, da dies ein öffentlicher Schlüssel ist.
437984D45C4A2F5840C65B3DC6D7274E2859AD25D092DB032C49AA4D006A426B
+
CBCE0D719ECF7431D88E6A89FA1483E02E35092AF60C042B1DF2FF59FA424DCA
=
0F479245FB19A38A1954C5C7C0EBAB2F9BDFD96A17563EF28A6A4B1A2A764EF4 mod n
hash160( 0357BFE1E341D01C69FE5654309956CBEA516822FBA8A601743A012A7896EE8DC2 )
finger
print
EE7AB90C|DE56A8C0E2BB086AC49748B8DB9DCE72
Der Rest ist einfach, und wir können codieren:
d :
0488ADE4
04
EE7AB90C
00000002
CFB71883F01676F587D023CC53A35BC7F88F724B1F8C2892AC1275AC822A3EDD
000F479245FB19A38A1954C5C7C0EBAB2F9BDFD96A17563EF28A6A4B1A2A764EF4
Der Unterschied zwischen diesen beiden Methoden zur Ableitung von Kinderzahlen xprv
ist subtil, aber wichtig. Es aktiviert , was eine Funktion ist , um untergeordnete s von einem übergeordnetenCKDpub
Element abzuleiten . funktioniert fast genauso wie die nicht gehärtete Ableitung von , aber es führt die Ableitung durch Punktaddition durch, also anstatt Ganzzahlen zu addieren, um untergeordnete private Schlüssel zu erstellen, addieren wir Punkte, um untergeordnete öffentliche Schlüssel zu erstellen. Beachten Sie, wie wir in der nicht gehärteten Ableitung den öffentlichen Punkt des übergeordneten Elements für den verwendet haben, wir haben den als Mehrwert zum übergeordneten privaten Schlüssel verwendet, um den untergeordneten privaten Schlüssel abzuleiten, insbesondere haben wir den privaten Schlüssel von abgeleitet.xpub
xpub
CKDpub
CKDpriv
HMAC-SHA512
tweak
d
Um das zu verstehen CKDpub
, ist es hilfreich, zuerst etwas über eine weitere BIP32-Funktion mit dem Namen zu wissen Neuter
. xprv
Sein Zweck ist es, eine in eine umzuwandeln xpub
. Lassen Sie uns Neuter
auf unserer xprv
d
. Wir nennen das Ergebnis xpub
D
. Neuter
macht zwei Dinge mit einem xprv
: 1. Ersetzt das magic
von 0488ADE4
bis 0488B21E
(ersetzt xprv
durch xpub
) 2. Ersetzt den privaten Schlüssel im key
Feld` durch den öffentlichen Punkt des gleichen privaten Schlüssels
für unsere xprv
d
ist der öffentliche Punkt:
0F479245FB19A38A1954C5C7C0EBAB2F9BDFD96A17563EF28A6A4B1A2A764EF4 * G
= 02E8445082A72F29B75CA48748A914DF60622A609CACFCE8ED0E35804560741D29
(Dies ist nur ein normaler Prozess von privatem Schlüssel -> öffentlicher Schlüssel)
das Ergebnis ist also:
D:
0488B21E
04
EE7AB90C
00000002
CFB71883F01676F587D023CC53A35BC7F88F724B1F8C2892AC1275AC822A3EDD
02E8445082A72F29B75CA48748A914DF60622A609CACFCE8ED0E35804560741D29
Jetzt d
ist "neutralisiert", D
hat den öffentlichen Schlüssel verschlüsselt, aber sehen Sie, wie die chain code
, depth
, fingerprint
und index
bestehen bleiben. Der xpub
D
befindet sich an der gleichen Position im Pfad wie der xprv
d
. Wir werden den chain code
und key
(öffentlichen Schlüssel) für verwenden CKDpub
, genauso wie CKDpriv
bei der nicht gehärteten Ableitung, aber wie für CKDpriv
, haben wir den untergeordneten privaten Schlüssel abgeleitet, indem wir Folgendes verwenden:
tweak + (parent private key) = child private key
denn CKDpub
wir werden verwenden:
tweak*G + (parent public key) = child public key
Das funktioniert, weil parent public key
es wirklich gerecht (parent private key)*G
ist und child public key
gerecht ist (child private key)*G
. Das heißt, wenn wir die CKDpriv
Tweak-Gleichung nehmen und alle Elemente mit multiplizieren G
, erhalten wir genau die CKDpub
Tweak-Gleichung. CKDpub
kann nur untergeordnete xpub
Schlüssel im nicht gehärteten Indexbereich ableiten. Dies liegt daran, dass die im übergeordneten Element enthaltenen Informationen xpub
, insbesondere der öffentliche Schlüssel im [ key ]
, nur für den nicht gehärteten Bereich gelten. Wo CKDpriv
wir den privaten Schlüssel verwenden könnten, um den öffentlichen Schlüssel zu kennen, können wir nicht in die andere Richtung gehen. die HMAC-SHA512
Runde, die öffentliche Schlüssel verwendet, CKDpriv
gilt für den nicht gehärteten Indexbereich.
Nachdem wir nun kastriert haben d
, um xpub zu erstellen D
, ist der nächste Pfad im Pfad e
's mit dem Index 1000000000 (oder ), der sich im nicht gehärteten Bereich befindet, sodass wir in der Lage sein sollten, das untergeordnete Element von using 3B9ACA00
abzuleiten . Wir beginnen mit hmac-sha512 des Elternteils als und Elternteil (öffentlicher Schlüssel) , verkettet mit dem Index des Kindes:E
xpub
D
CKDpub
chain code
hkey
key
E
HMAC-SHA512( CFB71883F01676F587D023CC53A35BC7F88F724B1F8C2892AC1275AC822A3EDD,
02E8445082A72F29B75CA48748A914DF60622A609CACFCE8ED0E35804560741D293B9ACA00 )
tweak chain code
37D3E49D8ECB854CC518BBA096F46795A9707860BF0FC95E5B19278C997098D4|C783E67B921D2BEB8F6B389CC646D7263B4145701DADD2161548A8B078E65E9E
Multiplizieren Sie die Optimierung mit dem Generator G
, damit wir den öffentlichen Schlüssel des übergeordneten Elements mithilfe der Punktaddition optimieren können:
37D3E49D8ECB854CC518BBA096F46795A9707860BF0FC95E5B19278C997098D4 * G
= 0327E992F68217BC3E88CFFC3FEAB475880145413CBE008DB22B496DF4E1C3F864 <- tweak*G
Fügen Sie die Anpassung zum übergeordneten Punkt hinzu. Das Ergebnis ist der öffentliche Schlüssel des Kindes:
0327E992F68217BC3E88CFFC3FEAB475880145413CBE008DB22B496DF4E1C3F864
+
02E8445082A72F29B75CA48748A914DF60622A609CACFCE8ED0E35804560741D29
=
022A471424DA5E657499D1FF51CB43C47481A03B1E77F951FE64CEC9F5A48F7011
Holen Sie sich den Fingerabdruck der Eltern:
hash160(02E8445082A72F29B75CA48748A914DF60622A609CACFCE8ED0E35804560741D29) = D880D7D8....
Endlich können wir codieren E
:
0488B21E
05
D880D7D8
3B9ACA00
C783E67B921D2BEB8F6B389CC646D7263B4145701DADD2161548A8B078E65E9E
022A471424DA5E657499D1FF51CB43C47481A03B1E77F951FE64CEC9F5A48F7011
Neutrieren d
um D
dann Ableiten zu machen E
, können wir sagen, dass unser Pfad jetzt so aussieht:
m / 0h / 1 / 2h / 2 / 1000000000
m / a / b / c / D / E
Oder wir können die N()
Notation (für Neutrum) verwenden, um zu zeigen, wo CKDpub
verwendet wurde, aber ich denke, es ist weniger hübsch.m / a / b / c / N(d / e)
Um Ihre Frage noch einmal zusammenzufassen, gibt es drei verschiedene Ableitungsmethoden, zwei mit privaten Schlüsseln und eine mit öffentlichen Schlüsseln:
CKDpriv
xprv
um ein untergeordnetes Element bei einem gehärteten Index abzuleitenCKDpriv
um ein xprv
untergeordnetes Element bei einem nicht festgeschriebenen Index abzuleitenCKDpub
xpub
um ein untergeordnetes Element bei einem nicht gehärteten Index abzuleitenEs fällt mir auch schwer, die Dinge dort zu verstehen. Das verstehe ich:
Eine einfache Einsicht besteht darin, dass für die erweiterte Ableitung privater Schlüssel und die erweiterte Ableitung öffentlicher Schlüssel alle dieselbe Eingabe haben (ein übergeordneter öffentlicher Schlüssel und ein übergeordneter Kettenknoten). Als Ergebnis haben sie die gleichen linken 256 Bits und rechten 256 Bits.
Der Unterschied besteht darin,
für die Ableitung des erweiterten privaten Schlüssels werden die linken 256 Bits zum privaten Elternschlüssel hinzugefügt, um den privaten Kinderschlüssel zu erzeugen.
Und für die Ableitung eines erweiterten öffentlichen Schlüssels werden die linken 256 Bits zum öffentlichen Elternschlüssel hinzugefügt, um den öffentlichen Kindschlüssel zu erzeugen.
Beide erweiterte Schlüsselableitungen verwenden ihren rechten 256-Bit-Ausgang als Kettenknoten, sodass der Kettenknoten für beide Ableitungen gleich ist.
Für die gehärtete Schlüsselableitung unterscheidet sich die Eingabe von der obigen erweiterten Schlüsselableitung.
Anstatt den übergeordneten öffentlichen Schlüssel zu verwenden, verwendet es den übergeordneten privaten Schlüssel mit Kettenknoten als Eingabe , wodurch eine andere 512-Bit-Ausgabe erzeugt wird. Die rechte 256-Bit-Ausgabe, die als Kettenknoten verwendet wird, unterscheidet sich also von dem obigen Mechanismus.
Da der Kettenknoten unterschiedlich ist, können Hacker den privaten Schlüssel nicht unter Verwendung des Kettenknotens aus dem erweiterten Ableitungsmechanismus ableiten.
Gehärtete Schlüssel erzeugen im Wesentlichen vollständig neue Schlüssel.
Der ganze Vorteil der Verwendung hierarchischer Schlüssel besteht darin, dass Sie viele öffentliche Schlüssel ohne Zugriff auf die privaten Schlüssel generieren können. Später können Sie die gleiche Methode verwenden, mit der Sie die öffentlichen Schlüssel für die privaten Schlüssel generiert haben, und das Geld ausgeben.
Dies ist beispielsweise nützlich, wenn Sie möchten, dass eine Website Geld erhält, aber nicht verliert, wenn sie gehackt wird. Die Website kann für jeden Kunden einen neuen öffentlichen Schlüssel generieren, ohne jemals private Schlüssel zu berühren, wodurch die Gelder sicherer bleiben.
Gehärtete Schlüssel unterbrechen diese Verbindung. Eine gehärtete Schlüsseloperation kann einen privaten Schlüssel ändern, um einen neuen zu erstellen, aber keinen öffentlichen Schlüssel ändern.
Sie sind nicht wirklich kritisch, da Sie einfach einen neuen Schlüssel generieren und das gleiche Ergebnis erzielen könnten, aber es ist bequemer. Sie können gehärtete Tasten mehr oder weniger ignorieren und einfach weiter das Leben genießen =).
Magnus
Kyle Graham
Thalis K.
skaht
0357bfe1e341d01c69fe5654309956cbea516822fba8a601743a012a7896ee8dc2
oder 2% bx ec-multiply 0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798 CBCE0D719ECF7431D88E6A89FA1483E02E35092AF60C042FA14DF2DCA90357bfe1e341d01c69fe5654309956cbea516822fba8a601743a012a7896ee8dc2
Melk