Holen Sie sich x- und y-Komponenten des öffentlichen Schlüssels ec mit openssl

12

Ich generiere ein Schlüsselpaar für ECC aus der Kurve 'secp128r1' mit openssl

Schritte, denen ich gefolgt bin:

  • Zuerst habe ich mit dem Befehl einen privaten Schlüssel generiert

    openssl ecparam -genkey -name secp128r1 -noout -out private.pem

  • dann habe ich den entsprechenden öffentlichen Schlüssel mit dem Befehl angezeigt

    openssl ec -in private.pem -text -noout

    welches eine Ausgabe zeigte als:

    EC-Schlüssel lesen

    Private-Key: (128 Bit)
    priv:
    00: 9f: bf: 2b: bd: 06: 86: 3a: a1: bc: 7c: 3e: 90: 57: 40:
    f4: bc
    pub:
    04: 04: ce : 24: 34: d4: cb: f2: 58: 94: 2f: 8a: 5f: 06: d7:
    3f: ed: 5a: 50: ef: fb: cc: b7: 49: 62: 16: 62: 9e : aa: d5:
    30: a8: a5

    ASN1 OID: secp128r1

Ich möchte explizit x- und y-Komponenten aus dem hier generierten öffentlichen Schlüssel. Kann jemand die richtige Vorgehensweise vorschlagen?
Der obige öffentliche Schlüssel ist 264 Bit lang und kann daher nicht wie
Thanks verwendet (/ aufgeteilt) werden

Dhruv Agarwal
quelle
5
Betrüger von security.stackexchange.com/questions/60926/… ; per tools.ietf.org/html/rfc5480#section-2.2 bedeutet das erste Oktett (04) unkomprimiert, gefolgt von X, Y koordiniert jeweils genau die auf Oktette gerundete Feldgröße, hier 16 Oktette.
dave_thompson_085
2
@ Dave_Thompson - Ich denke, Sie sollten eine Antwort geben. Es war eine gute Frage und gute Information (und auf der richtigen Seite !!!), und Sie sollten den Vorteil einer guten Antwort erhalten.
JWW

Antworten:

1

Erstens ist secp128r1 veraltet. Verwenden Sie Kurven, die eine bessere Sicherheit für den heutigen Standard bieten. Siehe Safecurves von Daniel J. Bernstein und Tanja Lange.

Eine elliptische Kurve definiert ein Feld der Größe über q und jedes Element -point- zwei Koordinaten hat X und Y . Die elliptische Kurve Secp128r1 hat 2 128 -2 97 -1 Größe ℓ, dh die Anzahl der Punkte etwas unter 2 ^ 128. Dies bedeutet, dass wir eine 128-Bit-Darstellung benötigen.

Der öffentliche Schlüssel, der auch ein Punkt auf der Kurve ist, hat zwei Koordinaten. Daher müssen zwei 128-Bit-Koordinaten gespeichert werden.

Betrachten wir die Gleichung der elliptischen Kurve Y 2 = X 3 + aX + b wobei

 a = FFFFFFFD FFFFFFFF FFFFFFFF FFFFFF
 b = E87579C1 1079F43D D824993C 2CEE5E

Wenn wir X aus der Gleichung kennen, können wir Y finden . Da wir auf einem Feld arbeiten, kann das Y höchstens zwei Quadratwurzeln haben. Y 2 hat y oder -y als Quadratwurzel. Dieses Wissen kann verwendet werden, um die Darstellung eines Punktes zu komprimieren, und wird als Punktkomprimierung bezeichnet . Nur x- Koordinate und ein Bit, um y oder -y auszuwählen . Schauen Sie sich nun den Basispunkt an (siehe Certicom-Empfehlung ).

 base point = 03 161FF752 8B899B2D 0C28607C A52C5B86
            = 04 161FF752 8B899B2D 0C28607C A52C5B86 CF5AC839 5BAFEB13 C02DA292 DDED7A83 

Das erste Oktett bestimmt die Struktur

  • 04 bedeutet, dass keine Komprimierung erfolgt
  • 03bedeutet, dass eine Komprimierung vorliegt und y als positiv ausgewählt wird
  • 02bedeutet, dass eine Komprimierung vorliegt und y als negativ ausgewählt wird

Wenden Sie sich nun den OP-Parametern zu.

pub:
04:
04:ce:24:34:d4:cb:f2:58:94:2f:8a:5f:06:d7:3f:ed: -->X
5a:50:ef:fb:cc:b7:49:62:16:62:9e:aa:d5:30:a8:a5  -->Y

Das erste Oktett 04bedeutet, dass keine Komprimierung erfolgt. Die erste Zeile ist die X- Koordinate und die zweite Zeile ist die Y- Koordinate Ihres öffentlichen Schlüssels.

Was ist mit dem privaten Schlüssel n ? Es ist nur eine skalare Ganzzahl zwischen 0 <= n <= ℓ

priv: 00: 9f: bf: 2b: bd: 06: 86: 3a: a1: bc: 7c: 3e: 90: 57: 40: f4: bc

Daher ist die obige Nummer - nicht Punkt - Ihr privater Schlüssel.

Sie können auch einige Web-Tools verwenden, um diese Informationen zu extrahieren.

Hinweis: Bitte legen Sie Ihren privaten Schlüssel nicht offen.

Kelalaka
quelle