Wiederherstellen des öffentlichen ECDSA-Schlüssels aus der Signatur

Wie kann man den öffentlichen ECDSA-Schlüssel aus der Signatur wiederherstellen?

Ich weiß, dass alles, was benötigt wird, ein Hash der unsignierten Nachricht und Signatur ist.

Aber vielleicht gibt es eine detaillierte Methode zur Berechnung des öffentlichen ECDSA-Schlüssels?

Möchten Sie eine Nachricht signieren oder Pubkey aus einem bereits signierten TX extrahieren?
Ich interessiere mich für die Extraktion des öffentlichen Schlüssels aus bereits signierten TX
@HughMarstonHefner Fragen Sie nach Transaktionen oder suchen Sie nach einer allgemeinen Möglichkeit, einen öffentlichen ECDSA-Schlüssel aus einer bestimmten Signatur und Nachricht abzuleiten?
@sr-gi habe ich sehr deutlich darauf hingewiesen
@sr-gi Actually, it is not possible to uniquely recover the public key from an ECDSA signaturevon diesem Link
Lesen Sie etwas weiter: „Mit der Signatur und der signierten Nachricht und der Kenntnis der Kurve ist es jedoch möglich, zwei öffentliche Schlüssel zu generieren, von denen einer der öffentliche Schlüssel ist, der dem verwendeten privaten Schlüssel entspricht.“

Antworten (1)

Wenn Sie sich einen signierten (P2PKH) TX ansehen, sieht die Signatur so aus:

483045022100A428348FF55B2B59BC55DDACB1A00F4ECDABE282707BA5185D39FE9CDF05D7F0022074232DAE76965B6311CEA2D9E5708A0F137F4EA2B0E36D0818450C67C9BA259D0121025F95E8A33556E9D7311FA748E9434B333A4ECFB590C773480A196DEAB0DEDEE1

Dies kann weiter in zwei Teile unterteilt werden:

Signatur: 483045022100A428348FF55B2B59BC55DDACB1A00F4ECDABE282707BA5185D39FE9CDF05D7F0022074232DAE76965B6311CEA2D9E5708A0F137F4EA2B0E36D0818450C67D0BA2

Pubkey: 21025F95E8A33556E9D7311FA748E9434B333A4ECFB590C773480A196DEAB0DEDEE1

und sieht weiter im Detail so aus (mit Adresse für Pubkey am Ende):

  ##################################################################
    48: OP_DATA_0x48:     push hex 48 (decimal 72) bytes as data
    30: OP_SEQUENCE_0x30: type tag indicating SEQUENCE, begin sigscript
    45: OP_LENGTH_0x45:   length of R + S
    02: OP_INT_0x02:      type tag indicating INTEGER
    21: OP_LENGTH_0x21:   this is SIG R
        00A428348FF55B2B:59BC55DDACB1A00F
        4ECDABE282707BA5:185D39FE9CDF05D7
        F0
    02: OP_INT_0x02:      type tag indicating INTEGER
    20: OP_LENGTH_0x20:   this is SIG S
        74232DAE76965B63:11CEA2D9E5708A0F
        137F4EA2B0E36D08:18450C67C9BA259D
    01: OP_SIGHASHALL:    this terminates the ECDSA signature (ASN1-DER structure)
    #########################################################
    21: OP_DATA_0x21:     type tag indicating LENGTH
    02: OP_INT_0x02:      type tag indicating INTEGER
        5F95E8A33556E9D7:311FA748E9434B33
        3A4ECFB590C77348:0A196DEAB0DEDEE1

    * This terminates the Public Key (X9.63 COMPRESSED form)
    * corresponding bitcoin address is:
   1HTNtayFkoBV28wqDygMbW33qSnRjxAuNR
Sagen Sie bitte, wo ist der Hash, der für die Signaturüberprüfung mit dem entsprechenden öffentlichen Schlüssel benötigt wird?
hmmm, ich glaube, ich verstehe es nicht.... der Hash wird vor dem Signieren erstellt oder kann rekonstruiert werden, wie hier beschrieben bitcoin.stackexchange.com/questions/60051/… - achow erklärte es mit einem anderen Link. Der Hash ist also nicht im TX selbst enthalten.
Hm ich bekomme keine Antwort. Die Frage betrifft die Schlüsselwiederherstellung, während die Antwort Signaturen ohne Schlüsselwiederherstellung betrifft.
vielleicht brauche ich dann etwas Hilfe ... die erste Zeile in der Frage lautet: "Wie kann man den öffentlichen ECDSA-Schlüssel aus der Signatur wiederherstellen?", Ich dachte, ich würde zeigen, wie man aus der Signatur zum Pubkey kommt ... Da ist es ist im (komprimierten) X9.63-Format. Sucht op nach einem anderen Format wie dem p-, r-, s- und z-Format?
spät, aber trotzdem: Basierend auf dem Kommentar von @Jus12 habe ich einige andere Posts auf ECDSA überprüft und diesen Link gefunden, auf den auch in einigen anderen Threads verwiesen wird: bitcointalk.org/index.php?topic=6430.0 - es zeigt das Pubkey ist in der Signatur selbst enthalten, aber aufgrund von mehr CPU-Zyklen nicht in Bitcoin implementiert - und es würde wahrscheinlich eine Hardfork erfordern.