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
źródło
Odpowiedzi:
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
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 )
Pierwszy bajt określa strukturę
04
oznacza, że nie ma kompresji03
oznacza kompresję i wybierz y jako dodatnią02
oznacza kompresję i wybierz y jako ujemnąTeraz zmień parametry OP;
pierwszy oktet
04
oznacza 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 <= ℓ
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.
źródło