Wie würde man das HashofThingtoSign aus dieser alten Transaktion erwerben?

Wie würde man vorgehen, um das HashofThingToSign zu erwerben, das in der Gleichung „Signaturgenerierung“ für diese Beispieltransaktion verwendet wird, so dass es leicht auch auf jede andere gegebene bereits bestehende Transaktion angewendet werden könnte?

Beispieltransaktion: 82d62d5f4e69ae8338c39b7ae2e1d33db59bdf62c869ded7344adc936bab8653

Gefunden unter: https://blockchain.info/tx/82d62d5f4e69ae8338c39b7ae2e1d33db59bdf62c869ded7344adc936bab8653

Dies wird aus der Rohtransaktion gemacht:

0100000001b1bbfd7a3103e733b5f28fb1eef07ba683b787bcf4033a16d8791a15152a006c000000006b483045022100d52330113ccd033ccb1aaa3b759e9696c216e802922e5f1902cd5ada69c612e5022057880205319dccb05eebbe34323a852ee82653f09f81253ddccd08a810e9d42d012103e5b9f0bb669b289efb8d2826487a24ef5f3985624c8bc3a3e34f6bd54e080b27feffffff027c8d3700000000001976a91443bd19b0436db26d24c789bebaee9a3b1b73cdd388acc1bbe114000000001976a914aefaa9d79e3c62c3f0cc909a3aee327e6cd0100a88acb2480700

Das Eingabeskript lautet:

3045022100d52330113ccd033ccb1aaa3b759e9696c216e802922e5f1902cd5ada69c612e5022057880205319dccb05eebbe34323a852ee82653f09f81253ddccd08a810e9d42d01 03e5b9f0bb669b289efb8d2826487a24ef5f3985624c8bc3a3e34f6bd54e080b27

Die Ausgabeskripte sind:

OP_DUP OP_HASH160 43bd19b0436db26d24c789bebaee9a3b1b73cdd3 OP_EQUALVERIFY OP_CHECKSIG

OP_DUP OP_HASH160 aefaa9d79e3c62c3f0cc909a3aee327e6cd0100a OP_EQUALVERIFY OP_CHECKSIG

Die Transaktion, die dieser Brieftasche die Münzen gegeben hat, die wir in dieser Transaktion ausgeben, ist 6c002a15151a79d8163a03f4bc87b783a67bf0eeb18ff2b533e703317afdbbb1

Gefunden unter https://blockchain.info/tx/82d62d5f4e69ae8338c39b7ae2e1d33db59bdf62c869ded7344adc936bab8653

Diese vorherige Transaktion besteht aus der Rohtransaktion:

0100000001e9cb57de3eac7ce6c703f8525c8c7cf87b064a18d7c830bc08901f776ef81e28010000006a4730440220090e1e73bfc2f37073f80f680893013fa40833e7a9dc7ed1667f728be72a75d302200d1b20fc0f3424f2a1e95f6f9c75a09260d2c889ff179e6dc1ec23423fd329bb012102bbe30b55f53ce14af3f0e58a854941de58d91ad21da1169c6103327f4cd17ff9feffffff028af81915000000001976a9146ffdc2e9e69434a7832208db5a6148c67563e8ae88ac18176c00000000001976a91454abba8c9ffd25c9cf7c232bc3f3998a9c1fe4f388aca1470700

Das Eingabeskript für diese vorherige Transaktion lautet:

30440220090e1e73bfc2f37073f80f680893013fa40833e7a9dc7ed1667f728be72a75d302200d1b20fc0f3424f2a1e95f6f9c75a09260d2c889ff179e6dc1ec23423fd329bb01 02bbe30b55f53ce14af3f0e58a854941de58d91ad21da1169c6103327f4cd17ff9

Das Ausgabeskript für diese vorherige Transaktion lautet:

OP_DUP OP_HASH160 6ffdc2e9e69434a7832208db5a6148c67563e8ae OP_EQUALVERIFY OP_CHECKSIG

OP_DUP OP_HASH160 54abba8c9ffd25c9cf7c232bc3f3998a9c1fe4f3 OP_EQUALVERIFY OP_CHECKSIG

Wie und was wäre der einfachste Weg, um den HashofThingtoSign in dieser Transaktion anhand der bereitgestellten Daten zu ermitteln? (oder brauchen wir mehr Daten?)

Der letzte Schritt ist offensichtlich ein sha-256-Hashing von etwas. Was wäre der vollständige Text dieses Etwas für diese Transaktion, das einfach in etwas wie http://www.movable-type.co.uk/scripts/sha256.html eingefügt werden könnte , um das HashofThingToSign für diese Transaktion zu erstellen?

Was soll der tatsächliche Hash dieser Transaktion als Ergebnis des erklärten Prozesses sein (damit man seine Arbeit überprüfen kann)?

Können wir ohne den privaten Schlüssel überhaupt feststellen, was das hashofthingtosign bei dieser Transaktion war?

Ist das bei der Signaturgenerierung verwendete "hashofthingtosign" einfach die ganze Rohtransaktion "0100000001b1bbfd...7e6cd0100a88acb2480700" zweimal mit SHA-256 gehasht, also gleich der Transaktions-ID? ( 1ecc3ee8e17966d90250cfe86a4b8e7b17a310bc18813a07b3c3e00b9c8b‌​21b8für diese Transaktion)?

Es wurde vorgeschlagen, dass diese Frage ein Duplikat der Frage ist und/oder eine doppelte Antwort von Wie funktioniert der ECDSA-Verifizierungsalgorithmus während der Transaktion?. Ich lese es in dem Versuch, vollständig zu erkennen, ob dies der Fall ist. Die Schwierigkeit, daraus einen Sinn zu machen, bestätigt, dass es KEINE Antwort ist, die ich als gültig akzeptieren würde (da selbst die ursprüngliche Person, die diese Frage gestellt hat, kommentierte, sie sei sich nicht sicher, ob die Antwort klar genug sei, um sie zu verstehen). Ich kann bestätigen, dass es einige der Informationen enthält. Zumindest kann ich bisher bestätigen, dass die Details verschiedener Schritte (woher Daten stammen) zu fehlen scheinen und Terminologien verwendet werden, deren Bedeutung ich nicht vollständig bestätigen kann, da sie mit der Antwort korrelieren, die ich so erhalten habe weit (es können zu fortgeschrittene oder beiläufige Begriffe sein, die von jemandem mit einem sehr fortgeschrittenen Verständnis davon verwendet werden). Ich versuche, die Informationen aus dieser Frage, "Wie löse ich eine einfache TX ein?", und die Antwort, die ich habe, zu kombinieren. wurden bisher gegeben. Diese neue Antwort könnte die fehlenden Teile des Puzzles enthalten, aber sie ist nicht die endgültige Antwort. Wenn ich es verstehen und eine Antwort liefern kann, werde ich das sicherlich liefern, aber ich bezweifle, dass ich erfolgreich sein werde, da ich immer noch denke, dass es zu viele fehlende Teile gibt.

Antworten (1)

Die Schritte zum Generieren der Nachricht zum Signieren sind in der akzeptierten Antwort hier angegeben: Wie löse ich einen Basis-Tx ein? - insbesondere Schritt 1 bis 14.

Der Transaktions-Hash (txid) ist nicht dasselbe wie die zu signierende Nachricht, weil der Hash von der signierten Transaktion genommen wird, einschließlich des scriptSig (das sich offensichtlich nicht selbst signieren kann), also müssen wir einige kleine Änderungen an der vornehmen Transaktion, um es in das Format zum Signieren zu bringen

Lassen Sie uns die Rohtransaktion abrufen, die Sie in Ihrer Frage angegeben haben, und sie aufschlüsseln:

0100000001b1bbfd7a3103e733b5f28fb1eef07ba683b787bcf4033a16d8791a15152a006c000000006b483045022100d52330113ccd033ccb1aaa3b759e9696c216e802922e5f1902cd5ada69c612e5022057880205319dccb05eebbe34323a852ee82653f09f81253ddccd08a810e9d42d012103e5b9f0bb669b289efb8d2826487a24ef5f3985624c8bc3a3e34f6bd54e080b27feffffff027c8d3700000000001976a91443bd19b0436db26d24c789bebaee9a3b1b73cdd388acc1bbe114000000001976a914aefaa9d79e3c62c3f0cc909a3aee327e6cd0100a88acb2480700

Sie können rohe Transaktionsdaten von Blockchain mit dem Schlüsselwort rawtx erhalten und „format=hex“ hinzufügen: https://blockchain.info/rawtx/82d62d5f4e69ae8338c39b7ae2e1d33db59bdf62c869ded7344adc936bab8653?format=hex

Beachten Sie, dass die folgende Aufschlüsselung eine Beschreibung der Daten in dieser Rohtransaktion ist, die einzigen erforderlichen Änderungen sind fett gedruckt . Die Schritte 1 und 2 sind gleich, wir haben die 01000000Version und die 01Anzahl der Eingänge. Schritt 3 verwendet:

b1bbfd7a3103e733b5f28fb1eef07ba683b787bcf4033a16d8791a15152a006c

Welches ist der Hash 6c002a15151a79d8163a03f4bc87b783a67bf0eeb18ff2b533e703317afdbbb1(beachten Sie, dass die Bytes in umgekehrter Reihenfolge sind) der vorherigen Transaktion, deren Ausgabe Sie ausgeben ( https://blockchain.info/tx-index/269874933/0 ).

Dann haben wir den Ausgabeindex 0 von dieser Transaktion, dh 00000000für Schritt 4. Dies kann gesehen werden, indem wir uns die vorherige Transaktion ansehen, die wir ausgeben, und den Index der Ausgabe sehen, die wir ausgeben.

Für die Schritte 5 und 6 enthält die obige Transaktion nun die scriptSig, beginnend mit 6bum anzuzeigen, dass die scriptSig 107 Bytes lang ist, und dann die 107-Byte-Sig selbst, 483...27. Pieter Wuilles Antwort hier: Was sind die Teile eines Bitcoin-Transaktions-"Eingabe"-Skripts? ist sehr gut geeignet, um zu erklären, was die Teile des Eingabeskripts sind. Aber zum Signieren verwendet Bitcoin den scriptPubKey aus der ausgegebenen Ausgabe, also müssen wir diese scriptSig ersetzen (die scriptSig-Daten aus der Transaktion löschen und stattdessen einfügen) 19, um 25 Bytes und dann die zu bezeichnen76a9146ffdc2e9e69434a7832208db5a6148c67563e8ae88acscriptPubKey selbst aus der vorherigen Ausgabe, sehr ähnlich den in Schritt 5 und 6 verwendeten Bytes, da beide P2PKH-Ausgaben sind. Auch dieses scriptPubKey kann gefunden werden, indem man sich die vorherige Transaktion ansieht, die wir ausgeben.

In Schritt 7 verwendet diese Transaktion die Bytes feffffff, die die Hexadezimalzahl 0xfffffffe sind. Diese Sequenznummer wird gemäß BIP 125 verwendet , was bedeutet, dass sich die Transaktion nicht dafür entscheidet, ersetzbar zu sein, aber dennoch Sperrzeit verwendet.

Dann müssen wir 02sagen, dass es in dieser Transaktion 2 Ausgaben gibt:

  1. Die erste Ausgabe 7c8d370000000000, dh 0x378d7c = 3640700 Satoshis, hat ein 19Byte-Skript, das ist76a91443bd19b0436db26d24c789bebaee9a3b1b73cdd388ac

  2. Die zweite Ausgabe c1bbe11400000000, dh 0x14e1bbc1 = 350337985 satoshis, hat auch ein 19Byte-Skript, das ist76a914aefaa9d79e3c62c3f0cc909a3aee327e6cd0100a88ac

Schließlich haben wir die Sperrzeit von b2480700, dh 0x748b2 = Blocknummer 477362.

Zum Signieren müssen wir dann für SIGHASH_ALL an das Ende anhängen 01000000

Das gibt

0100000001b1bbfd7a3103e733b5f28fb1eef07ba683b787bcf4033a16d8791a15152a006c000000001976a9146ffdc2e9e69434a7832208db5a6148c67563e8ae88acfeffffff027c8d3700000000001976a91443bd19b0436db26d24c789bebaee9a3b1b73cdd388acc1bbe114000000001976a914aefaa9d79e3c62c3f0cc909a3aee327e6cd0100a88acb248070001000000

Was, wenn es zweimal gehasht wird, ist 6823ba9770a496269a8f5368beec5ccb7b22ecd626265140be38aba1c8a25388(beachten Sie, dass ich noch nicht überprüft habe, ob dies korrekt ist, aber es sollte sein)

Kommentare sind nicht für längere Diskussionen gedacht; Diese Konversation wurde in den Chat verschoben .