pobierz xiy składników WE klucza publicznego za pomocą openssl

12

Generuję KeyPair dla ECC z krzywej „secp128r1” przy użyciu openssl

Kroki, które wykonałem:

  • najpierw wygenerowałem klucz prywatny za pomocą polecenia

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

  • następnie przejrzałem odpowiedni klucz publiczny za pomocą polecenia

    openssl ec -in private.pem -text -noout

    co pokazało wynik jako:

    przeczytaj klucz WE

    Klucz prywatny: (128 bitów)
    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

Chcę jawnie wygenerować tutaj elementy xiy z klucza publicznego. Czy ktoś może zasugerować prawidłowy sposób wykonania tej czynności?
Powyższy klucz publiczny ma długość 264 bitów, dlatego nie można go zabrać (/ podzielić), tak jak
dzięki

Dhruv Agarwal
źródło
5
Dupe security.stackexchange.com/questions/60926/... ; na tools.ietf.org/html/rfc5480#section-2.2 pierwszy oktet (04) oznacza nieskompresowany, a następnie X, Y koordynuje każdy dokładnie rozmiar pola zaokrąglony do oktetów, tutaj 16 oktetów.
dave_thompson_085
2
@dave_Thompson - Myślę, że powinieneś udzielić odpowiedzi. To było dobre pytanie i dobra informacja (i na właściwej stronie !!!), i powinieneś otrzymać dobrą odpowiedź.
jww

Odpowiedzi:

1

Po pierwsze, secp128r1 jest nieaktualny. Używaj krzywych, które dają większe bezpieczeństwo dla dzisiejszego standardu. Zobacz sejfy Daniela J. Bernsteina i Tanji Lange.

Eliptycznej krzywej określona przez pole formatu q i każdy element -point- ma dwie współrzędne X i Y . Elliptic Curve Secp128r1 ma 2 128 -2 97 -1 rozmiar ℓ, tj. Liczbę punktów nieco poniżej 2 ^ 128. Oznacza to, że potrzebujemy 128-bitowej reprezentacji.

Klucz publiczny, który jest także punktem na krzywej, ma dwie współrzędne, dlatego musimy zapisać dwie 128-bitowe.

Jeśli spojrzymy na równanie krzywej eliptycznej Y 2 = X 3 + aX + b gdzie

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

jeśli wiemy X z równania możemy znaleźć Y . Ponieważ pracujemy na polu, Y może mieć co najwyżej dwa pierwiastki kwadratowe. Y 2 będzie miało y lub -y jako pierwiastek kwadratowy. Wiedzę tę można wykorzystać do kompresji reprezentacji punktu i nazywa się to kompresją punktu . Wystarczy współrzędna x i jeden bit, aby wybrać y lub -y . Teraz spójrz na punkt bazowy (patrz zalecenie Certicom )

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

Pierwszy bajt określa strukturę

  • 04 oznacza, że ​​nie ma kompresji
  • 03oznacza kompresję i wybierz y jako dodatnią
  • 02oznacza kompresję i wybierz y jako ujemną

Teraz zmień parametry OP;

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

pierwszy oktet 04oznacza brak kompresji. Pierwsza linia to współrzędna X, a druga linia to współrzędna Y twojego klucza publicznego.

Co z kluczem prywatnym n ? Jest to po prostu skalar -integer- między 0 <= n <= ℓ

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

Dlatego powyższa liczba - nie punkt - jest twoim kluczem prywatnym.

Możesz także użyć niektórych narzędzi internetowych, aby wyodrębnić te informacje.

Uwaga: nie ujawniaj swojego klucza prywatnego.

Kelalaka
źródło