Bitcoin P2PKH-Transaktion - zwei Fragen

Versuchen Sie hier, die Grundlagen des Standard-Transaktionsskripts von Bitcoin zu lernen. Für eine Transaktion, bei der Alice Coins an Bob gesendet hat, der nun versucht, sie einzulösen, haben wir die verketteten scriptSig und scriptPubKey wie unten

<Sig> <PubKey> OP_DUP OP_HASH160 <PubkeyHash> OP_EQUALVERIFY OP_CHECKSIG

PubKeyWenn wir sagen, dass der Empfänger das und Sigin angeben muss scriptSig, was genau ist in Sig? Mein Verständnis ist, dass Bob die gesamte Transaktion mit seinem privaten Schlüssel signiert und dies dann OP_CHECKSIGverifiziert. In diesem Fall sind die Eingaben OP_CHECKSIGdie Transaktionsdaten und der öffentliche Schlüssel. Bitte teilen Sie mir mit, ob dies richtig ist, und wenn nicht, welche Eingaben sind dann genau OP_CHECKSIGerforderlich?

Zweitens, was ist der Sinn des ersten Teils des Skripts, der die Übereinstimmung zwischen scriptSig's PubKeyund scriptPubKey? Könnten wir nicht stattdessen ein einfacheres Skript erhalten, bei dem die Ausgaben einer Transaktion den öffentlichen Schlüssel selbst anstelle des Hashs des öffentlichen Schlüssels angeben? In diesem Fall hätten wir einfach

<Sig> <PubKey> OP_CHECKSIG,

woher Sigkommt der Bob und PubKeyvon Alice.

Antworten (1)

Die Signatur wird mathematisch unter Verwendung des privaten Schlüssels und der Nachricht generiert, ist aber nicht die Nachricht selbst (sie verwendet den Hash der Nachricht während des Signiervorgangs, die Nachricht kann nicht nur aus der Signatur wiederhergestellt werden). Es ist nur ein Wert (insbesondere zwei Zahlen, genannt r und s), der anhand des öffentlichen Schlüssels und der Nachricht überprüft werden kann, um festzustellen, ob es sich um eine gültige Signatur handelt. In diesem Fall handelt es sich bei der Nachricht um die Transaktionsdaten, die die Transaktion auch vor Änderungen schützen, da bei einer Änderung die Signatur ungültig würde. Wenn Sie interessiert sind, können Sie hier mehr über den Elliptic Curve Digital Signature Algorithm (ECDSA) lesen .

Tatsächlich wäre es möglich, nur den öffentlichen Schlüssel ohne die Hash-Schritte zu verwenden, dies wird als Pay to Public Key, P2PK bezeichnet und ist auch ein akzeptabler Ausgabetyp. Bitte beachten Sie jedoch, dass eine Bitcoin-Adresse nicht der öffentliche Schlüssel selbst ist. Um diese Art von Ausgabe zu erstellen, müsste der Absender den öffentlichen Schlüssel kennen, um ihn in die Ausgabe einzufügen. Es ist nicht möglich, den öffentlichen Schlüssel von einer Bitcoin-Adresse zu erhalten, da die Adresse ein Hash dieses öffentlichen Schlüssels ist, um ihn für die allgemeine Verwendung kürzer und einfacher zu machen, und somit eine nicht-injektive Falltürfunktion ist.

Nur zur Verdeutlichung, die Nachricht, von der Sie sprechen, enthält Transaktionsinformationen, ja? Ich hatte dieses kleine Missverständnis, dass die Nachricht Bobs öffentlicher Schlüssel-Hash selbst war (was gefährlich wäre, da jeder ihn replizieren kann, nachdem er ihn einmal signiert hat). Daher ist das <sig> für jede Transaktion anders. Bitte teilen Sie mir mit, ob ich richtig verstanden habe - Vielen Dank!
Ja, in diesem Fall handelt es sich bei der Nachricht um die Transaktionsdaten selbst. Ich werde meine Antwort aktualisieren
Ich denke, MeshCollider hat bereits geantwortet, wollte nur auf Ken Shirriffs Dokument hinweisen. Er gibt einen guten Schritt-für-Schritt-Überblick, wie eine Transaktion aufgebaut und dann signiert wird: righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.html
Ist in P2PK nicht der öffentliche Schlüssel der Adresse selbst? Und in P2PKH die Adresse der Hash des öffentlichen Schlüssels?
@croraf ja das sagt der zweite Absatz der Antwort :)