Lesen Sie einfach dies: https://bitcoin.stackexchange.com/a/1715/
Was ist der Prozess, um komprimierte Pub-Schlüssel über ECDSA zu generieren?
Es gibt keinen speziellen Algorithmus zum Generieren komprimierter Pubkeys aus privaten Schlüsseln. Tatsächlich werden alle internen Berechnungen, die Punkte betreffen, unter Verwendung sowohl der x
als y
auch der Koordinaten der beteiligten Punkte durchgeführt. Es gibt keine andere Möglichkeit, Punkte zu bearbeiten, als die (x,y)
Koordinaten zu verwenden. Eine komprimierte Darstellung des Punktes ist bei der Datenübertragung und -speicherung nützlich, da nur 33 Bytes im Gegensatz zu 65 Bytes benötigt werden, um den Punkt zu übermitteln. Es ist sehr einfach, compressed -> uncompressed
bei Bedarf punktbezogene Operationen auszuführen, und noch einfacher, die uncompressed -> compressed
Darstellung zu verlassen. Um Ihre Frage zu beantworten, würden Sie den öffentlichen Schlüssel generieren, wie Sie es normalerweise mit einem unkomprimierten Pubkey tun würden, und wenn Sie fertig sind, suchen Sie nach Gleichmäßigkeit oder Ungeradheit vony
kordinieren. Wenn es gerade ist, codieren Sie nur die x
Koordinate mit einem Präfix 0x02
-Byte, und wenn es ungerade ist, ist das Präfix 0x03
. Um von compressed -> uncompressed
(eigentlich nur die ursprüngliche y
Koordinate zu finden) zurückzukehren, würden Sie einfach die Gleichung der Kurve lösen:
y^2 = x^3 + a*x + b
Speziell für secp256k1 ist die in Bitcoin verwendete Kurve a
null, was diese Berechnung vereinfacht, und es gibt eine Abkürzung: aufgrund einer Eigenschaft des Parameters der Kurve p
, wo wir in der Lage sind, die Koordinate von einer Koordinate einfach durch Berechnung p ≡ 3 mod 4
abzuleiten :y
x
q = (p+1) * invmod(4) mod p
y = powmod(y^2,q) mod p
Und da haben wir die ursprüngliche y
Koordinate zurück.
y
Koordinaten sie beim Dekomprimieren des Punkts wählen sollte.mit ein bisschen hilfe von arubi kam ich dazu, dieses bild zu zeichnen. Der blaue Teil ist die ECDSA-Logik. WIF-Schlüssel und Privatschlüssel werden über base58check-en-/decoding verknüpft. Je nachdem, wie Sie den Privkey bereitstellen (komprimiert oder unkomprimiert), entscheidet die Software, wie der Pubkey und die Bitcoin-Adresse erstellt werden. Offensichtlich unterscheidet sich die Bitcoin-Adresse für komprimierte/unkomprimierte Schlüssel. Bei unkomprimierten Schlüsseln haben Sie den 512-Bit-Pub-Schlüssel mit den x/y-Komponenten, während der komprimierte Pub-Schlüssel nur als x-Komponente dargestellt werden kann. Die Software fügt das Präfix 04 für unkomprimiert oder 02 (wenn y gerade ist) oder 03 (wenn y ungerade ist) hinzu und verwendet es als Eingabe für sha256/ripemd160, um den Pubkey-Hash zu erstellen. Beim letzten Schritt gibt es wieder eine base58check-Kodierung, bei der eine Prüfsumme beteiligt ist.
Beispiel (Testnetz):
privkey Hex: 18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725
privkey WIF: 91msh178DnLBqFhbuYqazuUwWpKBkRQvgj8bggdWMp81nVp9PfM
privkey WIF-c: cNR4jZU2sR5goytD4wXT4aeKcbqGSekbxLxY69v8aryxTU1SMnJZ
pubkey hex unkomprimiert (04 + x + y):
04 50863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B2352 2CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6
pubkey hex komprimiert (02 + x, y=gerade):
02 50863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B2352
entsprechende Bitcoin-Adressen:
(pubkey uncompressed): mfcSEPR8EkJrpX91YkTJ9iscdAzppJrG9j
(pubkey compressed): n3svudhm7bt6j3nTT9uu1A57Cs9pKK3iXW
x
und y
seine Länge beträgt 1 + 64 Bytes (wie ein unkomprimierter Pubkey), aber das Präfix-Byte könnte entweder 0x07
oder sein 0x06
.y
im Schlüssel codierten Koordinate hin. Ich glaube nicht, dass im Mainnet jemals ein Hybridschlüssel verwendet wurde, aber es ist dennoch ein gültiger Pubkey und kann in einem Skript erscheinen. Es gibt keine WIF-Codierung eines hybriden privaten Schlüssels, aber jeder könnte ein p2pkh-Skript mit einem solchen Schlüssel signieren und einlösen, und wir würden es nicht wissen, bis es zur Ausgabe weitergeleitet wird. Wenn Sie ihn in Ihr Diagramm integrieren, wäre der Pubkey eine Eingabe für den dritten Schritt.
pebwindkraft