Die kürzeste ECDSA-Signatur

Ich möchte eine ECDSA-Signatur erstellen, {r,s}die rsehr niedrig ist (z. B. 1) und im DER-Format in einem Byte codiert werden kann.

Wie berechnet man den kWert? Scheint mir, dass es von nichts abhängt. Was ist der Wert dessen, kwas produziert r=1?

Hinweis: Ich mache mir keine Sorgen um die Sicherheit meines privaten Schlüssels, während ich diese Signatur veröffentliche.

Antworten (2)

Was ist der Wert dessen, kwas produziert r=1?

Das kann man nicht wissen. Wenn Sie rbeliebige Werte ableiten könnten, wäre ECDSA grundlegend kaputt. Das Beste, was Sie tun können, ist zu schleifen k, bis Sie eine erhalten r, die zufällig eine kurze Codierung hat.

Wegen der Übung:

k: 55573144136627188774517374788342221967869962622835886499477787746883063622036
r: 771676860789419846973923839003663416737624455477806040640071960112246091

Diese Nonce ist etwas kleiner als die meisten, wenn sie verschlüsselt ist, aber wenn Sie versuchen, sie in einer Signatur zu verwenden, haben Sie natürlich Ihren privaten Schlüssel offengelegt . Wenn Sie dies heimlich generieren, können Sie den kWert nur einmal verwenden und das Ergebnis kann bestenfalls ein paar Bytes Unterschied in der codierten Transaktion sein.

Es scheint sich kaum zu lohnen, um ehrlich zu sein.

Das Finden r=1ist im selben Kontext wie die meisten kryptografischen Annahmen in Bezug auf Suchräume "unmöglich". Es könnte möglich sein, diesen Wert zu finden, wenn Sie jedes Stück Materie im nahen Universum in einen Computer verwandeln würden, aber der Aufwand dafür ist so unangemessen groß, dass es für niemanden praktikabel ist, es zu versuchen. Es ist auch möglich, eine Brieftasche zu erstellen, die eine einzelne kso oft wie möglich wiederverwendet (und das Signieren von Transaktionen nicht trivial beschleunigen würde), aber dies ist viel zu gefährlich, um es jemals zu verwenden, und wird daher in einem ernsthaften Gespräch nie vorgeschlagen.
Nichts ist "ernst". Alles ist nur ein „Spiel“.
Ernst genug, dass es nicht angemessen ist, es als Antwort zu beschreiben. Es wäre außerdem ein Datenschutzleck, da jede Signatur die Brieftasche, die sie signiert hat, eindeutig und unwiderlegbar identifizieren würde. Ich bezweifle, dass die Signiergeschwindigkeit jemals in einer Brieftasche berücksichtigt wurde, eine einzige CPU würde ausreichen, um jede Transaktion in der gesamten Bitcoin-Netzwerkhistorie in ein paar Stunden neu zu signieren (sogar schneller als sie zu verifizieren).
Ich habe das Recht, mit meinem privaten Schlüssel/meinen Geldern/meinem Geld zu tun, was ich will. Im Moment möchte ich einen bestimmten kWert verwenden, um meine Transaktionen zu signieren
@PieterWuille Oh danke, das habe ich komplett übersehen.
FYI: blockchain.info/tx/… rlen=0x15
@PieterWuille Es gibt Punkte auf secp256k1 mit x = 1,2,3,4,6, ... aber nicht x = 0,5,7, .... Die andere Antwort gibt ein On-Chain-Beispiel für x = 1 . Obwohl es bei x=7 keinen Punkt gibt, gibt es seltsamerweise einen bei r=7 (da r = x mod n und x=n+7 Punkte hat).

die kürzesten ecdsa secp256k1 ausgänge die ich je gesehen habe

x value = 3b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63

0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0 --> 0x3b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63, 0x3f3979bf72ae8202983dc989aec7f2ff2ed91bdd69ce02fc0700ca100e59ddf3
0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1 --> 0x3b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63, 0xc0c686408d517dfd67c2367651380d00d126e4229631fd03f8ff35eef1a61e3c

in Ihrer ecdsa-Funktion, wenn Sie verwenden

p = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141

dann können Sie die obigen Ergebnisse mit ableiten

((p-1)/2) = 0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0

oder

((p+1)/2) = 0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1

Wenn es etwas Kleineres gibt, würde ich mich freuen, es zu sehen.

Bearbeiten

Aufgrund von Kommentaren wurde ich auf einen Testnet-Tx verwiesen, der darauf hindeutet, dass Sie möglicherweise R = 1 erhalten können. danke an amaclin.

testnet tx c6c232a36395fa338da458b86ff1327395a9afc28c5d2daa4273e410089fd433

dieser tx scheint zu validieren, es gibt auch andere, c42bea01f1387072772759f32ad860a680e0eea5664732bf2057a66780e7a25d 23202c2534be0567d4b339142f8a9a53545123eb61f61717eb61f61717f3dedbef0.effc5f3dedbef0.effc5f3dedbef0.effc5f3dedbef0

vielleicht sogar mehr, bitte fügen Sie Kommentare hinzu, wenn ja.

wenn ich die Signatur des öffentlichen Schlüssels validiere

026d2204a9535443657a88a0724fbd49a0e78d305f50a82f2cc9dd9bea10a6c5cd

entnommen aus dem testnet tx

c6c232a36395fa338da458b86ff1327395a9afc28c5d2daa4273e410089fd433

es gibt diesen Punkt, wo x = 1 ist

(0x01, 0xbde70df51939b94c9c24979fa7dd04ebd9b3572da7802290438af2a681895441)

Obwohl ich nicht verifizieren kann, dass dieser Punkt tatsächlich auf der sep256k1-Kurve liegt, scheint er sich so zu verhalten, also ist dies ein sehr interessanter Punkt.

wenn ich diesen Punkt mehrmals mit 0x5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72 multipliziere ( Lambdawert von hier )

es erzeugt diesen Zyklus von Punkten (3 Punkte mit demselben Y)

(0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee, 0xbde70df51939b94c9c24979fa7dd04ebd9b3572da7802290438af2a681895441)

(0x851695d49a83f8ef919bb86153cbcb16630fb68aed0a766a3ec693d68e6afa40, 0xbde70df51939b94c9c24979fa7dd04ebd9b3572da7802290438af2a681895441)

(0x01, 0xbde70df51939b94c9c24979fa7dd04ebd9b3572da7802290438af2a681895441)

Wenn ich dasselbe mit der Umkehrung des Punktes mache, bekomme ich diese (Umkehrungen von oben)

(0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee, 0x4218f20ae6c646b363db68605822fb14264ca8d2587fdd6fbc750d587e76a7ee)

(0x851695d49a83f8ef919bb86153cbcb16630fb68aed0a766a3ec693d68e6afa40, 0x4218f20ae6c646b363db68605822fb14264ca8d2587fdd6fbc750d587e76a7ee)

(0x1, 0x4218f20ae6c646b363db68605822fb14264ca8d2587fdd6fbc750d587e76a7ee)

Der X-Wert

0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee 

In einigen dieser Ergebnisse ist auch der Beta-Wert von hier enthalten

testnet.smartbit.com.au/tx/… - die Signatur in dieser Transaktion ist 30060201010201 (R=1, S=1) und ist gültig :)
Ich konnte den Rawtx für diesen TX nirgendwo finden. Ich vermute, dass der tx nicht wirklich überprüft, und der Generator, der r = 1 generiert hat, war höchstwahrscheinlich nicht ecdsa secp256k1. aber ich denke, Sie können den p-Wert und andere Variablen in der ecdsa-Funktion ändern, um eine 1 auszugeben. Dieser tx wurde wahrscheinlich mit einer benutzerdefinierten ecdsa-Funktion erstellt oder einfach direkt darin fest codiert.