derselbe R-Wert wird für zwei verschiedene Adressen verwendet? z1- und z2-Wert und privaten Schlüssel finden

txid1

txid2

Eingabeskript 1

304502206bcc247f1259262b4035bfa84f0397a69f69baa01659daaf94fe1164b650c86a022100a044b38e8264a1c928ddd28b4657aa7109d1ea30e911208c7ce57abcb1451fe601 
0428f3c7982219bf067d9723a54bef8e0ae7d970b4285a148685ce98819bd59c993da6945a85ba67249e96534f3cb93af144301e3ef03f848ebf17fedd55addd14

r = 6bcc247f1259262b4035bfa84f0397a69f69baa01659daaf94fe1164b650c86a

s1 = a044b38e8264a1c928ddd28b4657aa7109d1ea30e911208c7ce57abcb1451fe6

Eingabeskript 2

304402206bcc247f1259262b4035bfa84f0397a69f69baa01659daaf94fe1164b650c86a022075e41da2596619e837af69cdf80933e519abd736210677970a6ac23a3709ee2e01
04c69b120facc137ad7ecf7407b97f3e1bcecec27ed6617ad1e3bb4f5a265c2230dab461d8de9d194b9aae05cf3fc361e31b0cd172985720a9963a1fd9cb4dab13

s2 = 75e41da2596619e837af69cdf80933e519abd736210677970a6ac23a3709ee2e

Rohübertragung 1

010000000169590a9c08ea4d2f4d1b5e3acb216b9cee78e8378a7a5b223aff7e85f70eab77000000008b48304502206bcc247f1259262b4035bfa84f0397a69f69baa01659daaf94fe1164b650c86a022100a044b38e8264a1c928ddd28b4657aa7109d1ea30e911208c7ce57abcb1451fe601410428f3c7982219bf067d9723a54bef8e0ae7d970b4285a148685ce98819bd59c993da6945a85ba67249e96534f3cb93af144301e3ef03f848ebf17fedd55addd14ffffffff0224aece00000000001976a914b4d245551501f7f443ea507494ef00b8ed739f6888ac9def0b0f000000001976a91460a1a3a20ac1023a8b6ce202190fbf75ec73a1bf88ac00000000

Berechnung von z1

Ersetzen Sie die Eingabe durch das entsprechende Ausgabeskript

010000000169590a9c08ea4d2f4d1b5e3acb216b9cee78e8378a7a5b223aff7e85f70eab77000000001976a91460a1a3a20ac1023a8b6ce202190fbf75ec73a1bf88acffffffff0224aece00000000001976a914b4d245551501f7f443ea507494ef00b8ed739f6888ac9def0b0f000000001976a91460a1a3a20ac1023a8b6ce202190fbf75ec73a1bf88ac0000000001000000

dann mach sha256(sha256(modifizierte Transaktion))

z1 = 9ffb92bc05a398e3177b12fcdac5308d316b6bd6cc00365177711dc4e3f10e64

Rohübertragung 2

0100000001cc41959d96ce6147b93fe00a8fca25ce99ec1a09dc175d27113db36f6e398d1c010000008a47304402206bcc247f1259262b4035bfa84f0397a69f69baa01659daaf94fe1164b650c86a022075e41da2596619e837af69cdf80933e519abd736210677970a6ac23a3709ee2e014104c69b120facc137ad7ecf7407b97f3e1bcecec27ed6617ad1e3bb4f5a265c2230dab461d8de9d194b9aae05cf3fc361e31b0cd172985720a9963a1fd9cb4dab13ffffffff02f4351000000000001976a91485ba872014004c8e4de29d94b4d7ad415297955f88acc0d06100000000001976a9149e26556775e88e000179ebe278a259cba1d7b43d88ac00000000

Berechnung von z2

Ersetzen Sie die Eingabe durch das entsprechende Ausgabeskript

0100000001cc41959d96ce6147b93fe00a8fca25ce99ec1a09dc175d27113db36f6e398d1c010000001976a9149e26556775e88e000179ebe278a259cba1d7b43d88acffffffff02f4351000000000001976a91485ba872014004c8e4de29d94b4d7ad415297955f88acc0d06100000000001976a9149e26556775e88e000179ebe278a259cba1d7b43d88ac0000000001000000

dann mach sha256(sha256(modifizierte Transaktion))

z2 = 539bcbcddc3fff95aa262d01b8a909504958b371b813cb71a457efebb41c398e

priv-Schlüsselberechnung, es wurde nicht die richtige Adresse angegeben und priv etwas falsch

Posting der r , s1 , s2 , z1 , z2 unten

http://2coin.org/tx.asmx?op=GetPrivateKeyFromIdenticalRs

es gab 18MRDftXYkGqzo9hvcdnUs7yaPXrD1DXsq Adresse

Aber

trans 1 Adresse = 19owWJcPbTEe1mVYer1ymnbduJDza9jpRH

trans 2 Adresse = 1FRDgmxVrUUNiiB7GN3NNcJDEEXtFB22rm

Was ist los mit dir

Die gesamte Codierung/Decodierung/Mathematik, die Sie oben zeigen, sieht für mich korrekt aus, ebenso wie die von Ihnen berechneten Z-Werte. Deine letzte Frage verstehe ich allerdings nicht. Versuchen Sie, einen privaten Schlüssel nur aus den obigen Informationen abzuleiten (was trotz der wiederverwendeten k-Werte nicht möglich ist, da sich die privaten Schlüssel unterscheiden)?

Antworten (3)

Die Berechnung des privaten Schlüssels aus einer Signatur (r und s) erfordert, dass Sie die Nachricht kennen (um den „z“-Wert zu berechnen) und den „k“-Wert (der vom Unterzeichner verwendet wird, um den r-Wert über eine Falltürfunktion abzuleiten ) . .

Die Berechnung des "k"-Werts (oben benötigt) erfordert zwei Signaturen (Sie benötigen zwei s-Werte), die zwei verschiedene Nachrichten (Sie benötigen zwei z-Werte) mit demselben privaten Schlüssel und demselben r-Wert (daher demselben k)-Wert signieren.

In Ihrer Frage verweisen Sie auf zwei Transaktionen, die mit unterschiedlichen privaten Schlüsseln signiert sind (von denen Sie wissen, dass sich ihre öffentlichen Schlüssel unterscheiden), und haben daher nicht genügend Informationen, um den k-Wert korrekt zu berechnen.

In der anderen ähnlichen Frage, die Sie kürzlich gestellt haben , wurden die beiden Transaktionen mit demselben privaten Schlüssel signiert (und sie haben dasselbe r & k), sodass es in diesem Fall möglich ist, den privaten Schlüssel zu berechnen. (Der von Ihnen verlinkte Dienst scheint es korrekt zu berechnen, zeigt jedoch nicht die unkomprimierte Adresse an.)

k=5930f1a23e39c1a223ea2fb086cbcabbdf0d09e70ba0aed342ff0f5318a542f0 priv1=5JbfQE5fTXHZxWZ8qBDRR1z6S9hAvdzPEGEWGQgn1LJRTuNtaqG priv2=5JEzySX3zHQyH4ccLNMjNzmZNJ9MoHXBfW8g4MRaPBJ3u6dH1V2
Ja, aber Sie "betrügen" :). Sie verwenden zusätzliche defekte Signaturen aus der Blockchain, ich beantworte nur die spezifische gestellte Frage. (Auch Ihr k ist falsch, k = a6cf0e5dc1c63e5ddc15d04f79343542dba1d2ffa3a7f1687cd34f39b790fe51.)

Beantwortung Ihrer Frage: "Was ist los"?

Für jede Transaktion können Sie eine Gleichung aufschreiben:

x*r + m = s*k

wobei x der private Schlüssel ist, r und s die Signatur. m der Nachrichten-Hash, k das Signaturgeheimnis. Alle Berechnungen sind Modul der Gruppenordnung.

Sie sehen sich zwei Transaktionen mit dem gleichen 'r' an. Sie könnten Gleichungen für diese beiden wie folgt schreiben:

x1*R + M1 = S1*k
x2*R + M2 = S2*k

Hier verwende ich GROSSBUCHSTABEN, um die bekannten Werte anzugeben, und Kleinbuchstaben, um die Unbekannten anzugeben.

Das Problem ist, dass Sie am Ende zwei Gleichungen mit drei Unbekannten haben. Dies kann an dieser Stelle nicht gelöst werden.

Es gibt jedoch eine Lösung für diesen speziellen Fall:

Diagramm der R- und pub.x-Werte

Hier habe ich ein Diagramm erstellt, in dem jeder Knoten die ersten 8 Ziffern des r-Werts und der x-Koordinate des Pubkeys enthält.

Der rote Knoten zeigt den r-Wert an, an dem Sie interessiert sind. Quadratische Kästchen zeigen einen öffentlichen Schlüssel an, runde/ovale Knoten sind die r-Werte. Die Pfeile zeigen eine Signatur an, die diesen Pubkey verwendet.

Sie können sehen, dass die grünen Pfeile im Diagramm eine Schleife bilden.

Diese bilden die folgenden vier Transaktionen:

t1: r1, pub1
t2: r1, pub2
t3: r2, pub2
t4: r2, pub1

daraus können Sie vier Gleichungen in vier Unbekannten ableiten, die Sie lösen können:

x1*R1+M1=S1*k1
x2*R1+M2=S2*k1
x2*R2+M3=S3*k2
x1*R2+M4=S4*k2

Von dort aus können Sie dann allen Ketten folgen und alle anderen Schlüssel finden.

Beachten Sie, dass dies nur ein kleiner Teil dieses Netzwerks ist, insgesamt gibt es 1814 verwandte Transaktionen.

Eine Randnotiz, dass der 2coin.org-Link nicht mehr funktioniert, aber Sie können die gleichen Berechnungen auf dieser Seite (von mir) durchführen: https://rawcdn.githack.com/nlitsme/bitcoinexplainer/aa50e86e8c72c04a7986f5f7c43bc2f98df94107/ecdsacrack.html

Ich habe wie folgt gefunden:

p = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
r = 0x6bcc247f1259262b4035bfa84f0397a69f69baa01659daaf94fe1164b650c86a
s1 = 0xa044b38e8264a1c928ddd28b4657aa7109d1ea30e911208c7ce57abcb1451fe6
s2 = 0x75e41da2596619e837af69cdf80933e519abd736210677970a6ac23a3709ee2e
z1 = 0x9ffb92bc05a398e3177b12fcdac5308d316b6bd6cc00365177711dc4e3f10e64 z2
= 0x539bcbcddc3fff95aa262d01b8a909504958b371b813cb71a457efebb41c398e

K = GF(p)

K((z1 s2 - z2 s1)/(r*(s1-s2)))

Ergebnis dez.: 8921113496817264148701652880922087877926656286340189747525982520215619494205

Ergebnis hex: 13b92bda88a3f2dbac6032865bf56eed68eea22d4461c77404ad79c49697e13d

Es wäre hilfreich, wenn Sie ein paar Sätze hinzufügen würden, um zu erklären, was Sie anders gemacht haben als der Fragesteller.