Schlüsselableitung in HD-Wallets unter Verwendung des erweiterten privaten Schlüssels vs. gehärtete Ableitung

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.

Antworten (3)

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 keykann 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 patheinige path. Ich werde in dieser Antwort aufhören, "erweitert" zu verwenden. Von jetzt an bezeichne ich einen erweiterten privaten Schlüssel als xprvund 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 magicsind 4 Bytes, um das Netzwerk anzugeben, zu dem es gehört: Testnet oder Mainnet ( tbzw. x) und die Art des Schlüssels ( pubbzw. prv). Das depthist ein Byte, das angibt, wie tief ein xpriv oder xpout in einem Pfad ist, beginnend 00mit der Tiefe des masterSchlü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 xprvund xpub, den ich erwähnt habe, der Teil prvoder pubin der Magie ist. Es sollte auch klar sein, dass ein xprvund xpubauf demselben Pfad und in derselben Tiefe sein können. Dies bedeutet, dass für ein solches Paar von xprvund xpub, die[ key ]Ein Teil von hat einen privaten 32-Byte-Schlüssel (mit einem vorangestellten 00Byte) 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 xprvverwendet wird , um ein Kind abzuleiten xprv, es dasselbe hat , parent fingerprintals wenn ein Elternteil xpubverwendet wird , um ein Kind abzuleiten xpub. Eine Eltern-Kind-Beziehung zwischen Schlüsseln bedeutet, dass sie in einem Pfad benachbart sind.

A pathist 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]hii + 2147483648h'1' == 1hh

Ein Beispiel dafür, wie ein Pfad aussieht, ist:

m/0h/1/2h/2/1000000000

Das mbedeutet, dass der Schlüssel an diesem Index ein master xprvoder ist master xpub. Ein kleines mbedeutet, dass dieser erweiterte Schlüssel ein ist master xprv, und ein großes Mein master xpub. Wenn Sie den vorherigen Definitionen folgen, können Sie feststellen, dass mdas der übergeordnete Schlüssel des Schlüssels at 0hist und der Schlüssel at 2hdas 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 xprvs und {A..B}wenn xpubs 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 depthund indexeines Hauptschlüssels sind beide immer null, also 00und 00000000, und sie können maximal FFund FFFFFFFFerreichen. So mund asind Elternteil und Kind, und so sind dund e. Der depthvon bist 02und sein Index ist 00000001, und der depthvon cist , 03wä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 abei index abgeleitet haben 0h, dann vonaWir haben den Schlüssel bbei 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:bbchain codekeycindexbc

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 magicheißt es xprv, das depthwird zwischen dem Elternteil und dem Kind erhöht, das fingerprintat cist das hash160des öffentlichen Schlüssels, den Sie vom privaten Schlüssel bei erhalten würden b, und b's indexbefindet 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 codeund keys jedes der xprvs codiert.

Das Ableiten von chain codeund keyfor cvon berfolgt mit einem Prozess namens CKDpriv, was bedeutet, dass ein untergeordnetes Element xprvvon einem übergeordneten Element abgeleitet wird xprv. In diesem Prozess haben wir das chain codeand keyfrom bund das indexfrom verwendet c. Der wichtige Punkt: Wir haben erst codiert, c nachdem wir seine abgeleitet haben chain codeund keyvon dem, was sein wäre index.

Any xprvkann mit verwendet werden , um ein untergeordnetes Element at any CKDprivabzuleiten . 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üsselxprvindexCKDprivindexCKDprivHMAC-SHA512chain codekeyindexkey*keyhkeytextchain codehkeytextkey[0h,2147483647h]bilden, wenn der Index im nicht gehärteten Bereich liegt. Es wird dann mit dem des Kindes verkettet index.

cDer Index von liegt im gehärteten Bereich, daher CKDprivlä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...C7B1503Fzu den des Kindes ( chier) 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
  • Ich habe die 00vorangestellten 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 codeund key(in privater Schlüsselform) haben, möchten wir tatsächlich codieren c, damit es ein verwendbares ist xprv. Um die fingerprintfrom zu erhalten b, müssen wir den öffentlichen Schlüssel der keyfrom kennen b. Da es sich um einen privaten Schlüssel handelt, müssen wir multiplizieren:

CBCE0D719ECF7431D88E6A89FA1483E02E35092AF60C042B1DF2FF59FA424DCA * G
= 03501E454BF00751F24B1B489AA925215D66AF2234E3891C3B21A52BEDB3CD711C

Nehmen Sie die hash160dieses öffentlichen Schlüssels, und der zurückgegebene Hash ist BEF5A2F9A56A94AAB12459F72AD9CF8CF19C7BBE. Die ersten vier Bytes sind bder Fingerabdruck: BEF5A2F9. Den Rest zu codieren cist einfach. Beginnen Sie mit der Magie , xprvda wir ein Kind abgeleitet xprvhaben, erhöhen Sie die Tiefe von bum eins, dann die fingerprint. Als nächstes wird codiert c. indexWir leiteten den Index ab 2h, also wäre dies 80000002, und dann das neue chain codeund 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 textParameter der HMAC-SHA512Funktion verwendet wird. Anstatt den Elternschlüssel in privater Schlüsselform zu verwenden, verwenden wir die öffentliche Schlüsselform. Um also am Index von keyabzuleiten , finden wir zuerst den öffentlichen Schlüssel von :d2cc

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 00nicht 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 xprvist 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 xpubCKDpubCKDprivHMAC-SHA512tweakd

Um das zu verstehen CKDpub, ist es hilfreich, zuerst etwas über eine weitere BIP32-Funktion mit dem Namen zu wissen Neuter. xprvSein Zweck ist es, eine in eine umzuwandeln xpub. Lassen Sie uns Neuterauf unserer xprv d. Wir nennen das Ergebnis xpub D. Neutermacht zwei Dinge mit einem xprv: 1. Ersetzt das magicvon 0488ADE4bis 0488B21E(ersetzt xprvdurch xpub) 2. Ersetzt den privaten Schlüssel im keyFeld` durch den öffentlichen Punkt des gleichen privaten Schlüssels

für unsere xprv dist 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 dist "neutralisiert", Dhat den öffentlichen Schlüssel verschlüsselt, aber sehen Sie, wie die chain code, depth, fingerprintund indexbestehen bleiben. Der xpub Dbefindet sich an der gleichen Position im Pfad wie der xprv d. Wir werden den chain codeund key(öffentlichen Schlüssel) für verwenden CKDpub, genauso wie CKDprivbei 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 CKDpubwir werden verwenden:

tweak*G + (parent public key) = child public key

Das funktioniert, weil parent public keyes wirklich gerecht (parent private key)*Gist und child public keygerecht ist (child private key)*G. Das heißt, wenn wir die CKDprivTweak-Gleichung nehmen und alle Elemente mit multiplizieren G, erhalten wir genau die CKDpubTweak-Gleichung. CKDpubkann nur untergeordnete xpubSchlü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 CKDprivwir 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-SHA512Runde, die öffentliche Schlüssel verwendet, CKDprivgilt 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 3B9ACA00abzuleiten . Wir beginnen mit hmac-sha512 des Elternteils als und Elternteil (öffentlicher Schlüssel) , verkettet mit dem Index des Kindes:ExpubDCKDpubchain codehkeykeyE

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 dum Ddann 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 CKDpubverwendet 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:

  1. CKDprivxprvum ein untergeordnetes Element bei einem gehärteten Index abzuleiten
  2. CKDprivum ein xprvuntergeordnetes Element bei einem nicht festgeschriebenen Index abzuleiten
  3. CKDpubxpubum ein untergeordnetes Element bei einem nicht gehärteten Index abzuleiten
fabelhafte antwort! danke +1 million
Ich dachte, der erweiterte Schlüssel wäre nur der (Schlüssel + Kettencode)?
Ich glaube, ich habe nach dieser Antwort 5 kcal verbrannt. Spaß beiseite, ich hoffe aufrichtig, dass Sie vorhaben, ein O'Reilly-Buch über Krypto-Wallets zu schreiben.
Die Berechnung des öffentlichen Schlüssels secp256k ist wahrscheinlich deaktiviert: 1 % % echo CBCE0D719ECF7431D88E6A89FA1483E02E35092AF60C042B1DF2FF59FA424DCA | bx ec-to-public 0357bfe1e341d01c69fe5654309956cbea516822fba8a601743a012a7896ee8dc2oder 2% bx ec-multiply 0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798 CBCE0D719ECF7431D88E6A89FA1483E02E35092AF60C042FA14DF2DCA90357bfe1e341d01c69fe5654309956cbea516822fba8a601743a012a7896ee8dc2
Gibt es einen bx-Befehl, um zwischen (tweak * g) und dem öffentlichen Schlüssel zu summieren? ec-add funktioniert nicht

Es 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 =).

Dem stimme ich nicht zu. Die nicht gehärtete Ableitung ist anfällig für Situationen, in denen ein privater Schlüssel geteilt werden kann und der erweiterte Pubkey bekannt sein kann. Die gehärtete Ableitung sollte die Standardeinstellung sein, es sei denn, es gibt einen guten Grund, warum Sie in der Lage sein müssen, öffentliche Schlüssel ohne Zugriff auf den privaten Schlüssel zu generieren.