Der Versuch, den Fingerabdruck der Eltern in HD-Geldbörsen zu verstehen

Ich versuche, einen Barebones-HD-Wallet-Generator in C# zu implementieren. Ich beginne mit einem mnemonischen und Ableitungspfad m/0'und möchte BIP141 p2wpkh-in-p2sh-Adressen generieren. Offensichtlich ist der Fingerabdruck für den Master-Knoten 0x00000000, aber wenn ich die Tiefe 1 ( ) erreiche 0', muss ich den Fingerabdruck des übergeordneten Schlüssels berechnen. Meine Frage ist, ist die Formel RipeMD160(parentPrivKey)oder RipeMD160(SHA256(parentPrivKey))? Ich habe mir die Implementierung von Ian Coleman in Javascript angesehen ( https://iancoleman.io/bip39/ ) und er scheint letzteres zu tun. Auf dieser Seite unter "Eltern-Fingerabdruck" heißt es jedoch , es sei ersteres.

Antworten (3)

Es ist ripemd160(sha256(parentpriv))auch als hash160(parentpriv) Quelle bekannt . Hier gibt es auch eine Python-Implementierung

Falsch. Es ist ripemd160(sha256(compressed parent pub))[0:4]. Ihr Link sagt es auch deutlich: Hash160 (RIPEMD160 nach SHA256) des serialisierten öffentlichen ECDSA-Schlüssels

Kommentare können wegen Reputation nicht verwendet werden, aber sowohl die Frage als auch die Antwort besagen, dass der Fingerabdruck auf einem privaten Schlüssel basiert. Es sollte der Hash160 des PUBLIC-Schlüssels sein. denn selbst wenn Sie einen privaten Schlüssel ableiten, sollten Sie den öffentlichen Schlüssel der Eltern zum Generieren des Fingerabdrucks verwenden. Dies ist wichtig, damit sowohl ein abgeleiteter öffentlicher als auch ein abgeleiteter privater Schlüssel denselben Fingerabdruck haben, damit Sie sie miteinander in Beziehung setzen können.

Eine Reihe von HD-Wallet-Fingerabdruck-Testvektoren für die Kurven secp256k1, nist256p1 und ed25519 finden Sie unten auf https://github.com/satoshilabs/slips/blob/master/slip-0010.md#test-vector-1- für-ed25519 . Beachten Sie, dass alle Fingerabdrücke der obersten Ebene 00000000 sind.

Für https://github.com/satoshilabs/slips/blob/master/slip-0010.md#test-vector-1-for-secp256k1 Chain m/0H wird der Fingerabdruck aus dem öffentlichen Schlüssel des übergeordneten Elements wie folgt berechnet:

% echo 0339a36013301597daef41fbe593a02cc513d0b55527ec2df1050e2e8ff49c85c2 | bx sha256 | bx reifemd160 | Schnitt -c 1-8

3442193e

% echo 0339a36013301597daef41fbe593a02cc513d0b55527ec2df1050e2e8ff49c85c2 | bx bitcoin160 | Schnitt -c 1-8

3442193e