Naprawdę nie rozumiem tego:
zgodnie z: http://www.madboa.com/geek/openssl/#key-rsa , Możesz wygenerować klucz publiczny z klucza prywatnego.
openssl genrsa -out mykey.pem 1024
openssl rsa -in mykey.pem -pubout > mykey.pub
Początkowo myślałem, że są one generowane razem w parze. Czy klucz prywatny RSA zawiera sumę? lub klucz publiczny?
Odpowiedzi:
wyprodukuje parę kluczy publiczny - prywatny. Para jest przechowywana w wygenerowanym
mykey.pem
pliku.wyodrębni klucz publiczny i wydrukuje go. Oto link do strony, która lepiej to opisuje.
EDYCJA: Sprawdź sekcję przykładów tutaj . Aby wydrukować tylko część publiczną klucza prywatnego:
Aby uzyskać użyteczny klucz publiczny do celów SSH, użyj ssh-keygen :
źródło
e
id
we wspólnej literaturze). Żadne z nich nie jest matematycznie prywatne ani publiczne, są to etykiety, które są arbitralnie przypisywane podczas tworzenia. Można je równie łatwo przypisać do tyłu. Generowanie jednego z drugiego jest równoważnym problemem..pem
Format zawiera całą masę informacji, w tym zarówno wykładników, a więc zarówno kluczy, prawda?openssl genrsa
polecenia. Osobny plik klucza publicznego nie jest tworzony na tym samym etapie. Aby wyodrębnić klucz publiczny z pliku klucza prywatnego do osobnego pliku klucza publicznego, użyjopenssl rsa -in private.pem -pubout -out public.pem
polecenia. Utworzony w ten sposób klucz publiczny jest wyodrębniany z pliku klucza prywatnego, nie obliczany. Zobacz moją odpowiedź poniżej, aby uzyskać więcej informacji.Ludzie szukający klucza publicznego SSH ...
Jeśli chcesz wyodrębnić klucz publiczny do użytku z OpenSSH, musisz uzyskać klucz publiczny nieco inaczej
Ten format klucza publicznego jest zgodny z OpenSSH. Dołącz klucz publiczny do,
remote:~/.ssh/authorized_keys
a będziesz gotowydokumenty z
SSH-KEYGEN(1)
źródło
openssl rsa -in key.pem -pubout -out pubkey.pem
formatu PEM. Poprzednia sugerowana odpowiedź nie została zaakceptowana, ponieważ najwyraźniej wynikiem tego jest klucz publiczny w formacie pem. Tak więc otrzymałem błąd: „Klucz jest nieprawidłowy. Musi zaczynać się od„ ssh-rsa ”lub„ ssh-dss ”. Sprawdź, czy kopiujesz publiczną połowę klucza”.ssh-keygen -y [-f input_keyfile]
Generuje jednak poprawny format, który przyjmuje Github.W większości programów generujących klucze prywatne RSA, w tym klucze opensl, klucz prywatny jest reprezentowany jako obiekt RSAPrivatekey PKCS # 1 lub jego wariant:
Jak widać, ten format ma wiele pól, w tym moduł i wykładnik publiczny, a zatem jest ścisłym nadzorem informacji w kluczu publicznym RSA .
źródło
Moja odpowiedź poniżej jest nieco długa, ale mam nadzieję, że zawiera pewne szczegóły, których brakuje w poprzednich odpowiedziach. Zacznę od kilku powiązanych ze sobą stwierdzeń i na koniec odpowiem na wstępne pytanie.
Aby zaszyfrować coś przy użyciu algorytmu RSA, potrzebujesz modułu i pary wykładników szyfrowania (publicznego) (n, e). To twój klucz publiczny. Aby odszyfrować coś przy użyciu algorytmu RSA, potrzebujesz modułu i pary wykładników (prywatnych) wykładników (n, d). To twój klucz prywatny.
Aby zaszyfrować coś przy użyciu klucza publicznego RSA, traktujesz swój tekst jawny jako liczbę i podnosisz go do potęgi modułu e:
Aby odszyfrować coś za pomocą klucza prywatnego RSA, traktujesz swój tekst zaszyfrowany jako liczbę i podnosisz go do potęgi modułu d:
Aby wygenerować klucz prywatny (d, n) za pomocą openssl, możesz użyć następującego polecenia:
Aby wygenerować klucz publiczny (e, n) z klucza prywatnego za pomocą openssl, możesz użyć następującego polecenia:
Aby przeanalizować zawartość prywatnego.pem prywatnego klucza RSA wygenerowanego przez powyższe polecenie openssl, uruchom następujące polecenie (dane wyjściowe są obcięte tutaj do etykiet):
Czy klucz prywatny nie powinien składać się tylko z pary (n, d)? Dlaczego jest 6 dodatkowych komponentów? Zawiera e (wykładnik publiczny), dzięki czemu publiczny klucz RSA może zostać wygenerowany / wyodrębniony / wyprowadzony z prywatnego.pem prywatnego klucza RSA. Pozostałe 5 elementów ma przyspieszyć proces odszyfrowywania. Okazuje się, że przez wstępne obliczenie i przechowanie tych 5 wartości można przyspieszyć odszyfrowanie RSA czterokrotnie. Odszyfrowanie będzie działać bez tych 5 składników, ale można to zrobić szybciej, jeśli masz je pod ręką. Algorytm przyspieszenia oparty jest na chińskim twierdzeniu o pozostałej liczbie .
Tak, private.pem Klucz prywatny RSA zawiera wszystkie te 8 wartości; żadne z nich nie jest generowane w locie po uruchomieniu poprzedniego polecenia. Spróbuj uruchomić następujące polecenia i porównaj dane wyjściowe:
Ta struktura klucza prywatnego RSA jest zalecana przez PKCS # 1 v1.5 jako alternatywna ( druga ) reprezentacja. Standard PKCS # 1 v2.0 całkowicie wyklucza wykładniki e i d z alternatywnej reprezentacji. PKCS # 1 v2.1 i v2.2 proponują dalsze zmiany w alternatywnej reprezentacji, opcjonalnie włączając więcej komponentów związanych z CRT.
Aby zobaczyć zawartość publicznego.pem publicznego klucza RSA, uruchom następujące polecenie (dane wyjściowe są obcięte do etykiet tutaj):
Żadnych niespodzianek. To tylko (n, e) para, jak obiecano.
Teraz w końcu odpowiadając na początkowe pytanie: Jak pokazano powyżej, prywatny klucz RSA wygenerowany za pomocą openssl zawiera składniki zarówno klucza publicznego, jak i prywatnego i kilka innych. Kiedy generujesz / wyodrębniasz / wyprowadzasz klucz publiczny z klucza prywatnego, openssl kopiuje dwa z tych składników (e, n) do osobnego pliku, który staje się twoim kluczem publicznym.
źródło
e
wynosi zawsze 655370x010001
. Prawdopodobnie jest to wadą przy wyborze wykładnika publicznego i prawdopodobnie dlatego na stronie podręcznika i prawie wszędziegenrsa
jest wyjaśnione jakoto generate the private key
. Publiczny jest dość oczywisty.Klucz publiczny nie jest przechowywany w pliku PEM, jak niektórzy sądzą. Następująca struktura DER znajduje się w pliku klucza prywatnego:
Jest więc wystarczająco dużo danych, aby obliczyć klucz publiczny (moduł i wykładnik publiczny), co właśnie
openssl rsa -in mykey.pem -pubout
robiźródło
tutaj w tym kodzie najpierw tworzymy klucz RSA, który jest prywatny, ale ma również parę swoich kluczy publicznych, więc aby uzyskać rzeczywisty klucz publiczny, po prostu to robimy
mam nadzieję, że dostaniesz więcej informacji, sprawdź to
źródło
Po pierwsze, krótkie podsumowanie generowania kluczy RSA.
Klucz publiczny składa się z modułu i wykładnika publicznego.
Minimalny klucz prywatny składałby się z modułu i wykładnika prywatnego. Nie ma wykonalnej pod względem obliczeniowym pewnej drogi przejścia od znanego modułu i wykładnika prywatnego do odpowiedniego wykładnika publicznego.
Jednak:
Tak więc w najbardziej praktycznych implementacjach RSA można uzyskać klucz publiczny z klucza prywatnego. Byłoby możliwe zbudowanie kryptosystemu opartego na RSA tam, gdzie nie byłoby to możliwe, ale nie jest to zrobione.
źródło
źródło