Skip to content

Darmowy generator par kluczy RSA — ECDSA i Ed25519

Generator kluczy RSA online — klucz prywatny nie opuszcza przeglądarki. RSA 2048/4096, ECDSA i Ed25519, w PEM PKCS#8 lub PKCS#1, z JWK i odciskiem.

Bez śledzenia Działa w przeglądarce Bezpłatne
Pary kluczy powstają wewnątrz przeglądarki dzięki Web Crypto API, a w trakcie generowania nie leci żadne żądanie sieciowe. Odłącz sieć, a ta strona nadal działa.

PKCS#8 (BEGIN PRIVATE KEY) to nowoczesny domyślny wybór i to, czego oczekuje JDK. PKCS#1 (BEGIN RSA PRIVATE KEY) to tradycyjna postać OpenSSL, wciąż wymagana przez część bramek. Przełączenie koduje na nowo ten sam klucz.

Zachowaj go w tajemnicy. Każdy, kto go ma, może się pod Ciebie podszyć.

Odcisk klucza publicznego — SHA-256 z DER struktury SPKI
JWK (JSON Web Key)
Prywatny JWK — tego nigdy nie publikuj
 
Publiczny JWK
 

Wygeneruj taki sam rodzaj pary kluczy w OpenSSL

Sprawdzone pod kątem poprawności RFC 5958/5208 (PKCS#8), RFC 8017 (PKCS#1), RFC 8410 (Ed25519) i kodowania PEM z RFC 7468 oraz zachowania Web Crypto API dla RSA, ECDSA i Ed25519. — Zespół ds. Bezpieczeństwa Go Tools · Aug 10, 2026

Nasz zespół weryfikuje konwersję PKCS#8 na PKCS#1 bajt po bajcie względem wyjścia referencyjnego z modułu crypto w Node, więc klucz wyeksportowany tutaj jest identyczny z tym, który OpenSSL wytworzyłby dla tego samego materiału.

Czym jest generator kluczy RSA?

Generator kluczy RSA wytwarza matematycznie powiązaną parę: klucz prywatny, który zatrzymujesz, i klucz publiczny, który rozdajesz. Wszystko podpisane prywatną połową da się zweryfikować publiczną, a bezpiecznie publikować można wyłącznie tę drugą. Ta asymetria jest tu sednem — pozwala weryfikatorowi sprawdzać Twoje podpisy bez zyskiwania możliwości ich fałszowania, czego współdzielony sekret nigdy nie zaoferuje.

Ten generator działa wewnątrz przeglądarki dzięki Web Crypto API, więc klucz prywatny powstaje w karcie, a strona w trakcie generowania nie wysyła żadnego żądania sieciowego. Poza RSA tworzy też pary ECDSA i Ed25519, które służą temu samemu celowi przy znacznie krótszych kluczach: klucz prywatny Ed25519 ma w PKCS#8 48 bajtów, podczas gdy 2048-bitowy klucz RSA przekracza 1,2 kB.

Tym, co sprawia ludziom kłopot, nie jest matematyka, lecz opakowanie. Ten sam klucz można zapisać jako PKCS#8, PKCS#1, SPKI albo JWK, a biblioteka, która odrzuci jedno, często przyjmie drugie, nie dając jaśniejszego komunikatu niż błąd parsera. Tabela niżej przypisuje każdy kontener do ekosystemów, które go oczekują.

// Verify a downloaded key pair matches, using OpenSSL:
openssl pkey -in rsa-2048-private.pem -pubout | diff - rsa-2048-public.pem
// No output means the public key really belongs to that private key.

Kluczowe funkcje

Generowane w Twojej przeglądarce

Klucze pochodzą z Web Crypto API w Twojej własnej karcie, a strona w trakcie generowania nie wysyła żadnego żądania sieciowego. Wyłącz połączenie, a narzędzie nadal działa, co pokazuje, że do swojej pracy nie potrzebuje serwera.

RSA, ECDSA i Ed25519

RSA 2048, 3072 i 4096; ECDSA na krzywych P-256, P-384 i P-521; oraz Ed25519 — wszystko z jednej strony i z tymi samymi opcjami eksportu.

Wyjście w PKCS#8 i PKCS#1

Przełączaj się między BEGIN PRIVATE KEY a tradycyjnym układem BEGIN RSA PRIVATE KEY bez sięgania po OpenSSL. Przełącznik koduje na nowo klucz, który już jest na ekranie, więc pozostaje on tym samym kluczem.

Eksport do JWK

Obie połowy są dostępne jako klucze JSON Web Key. Publiczny JWK to ten, który trafia do dokumentu JWKS lub do weryfikatora JOSE; prywatny JWK jest wyłącznie dla Twojego modułu podpisującego i nigdy nie może zostać opublikowany.

Odcisk SHA-256

Każda para dostaje odcisk swojego klucza publicznego, więc osobnym kanałem potwierdzisz, że obie strony mają ten sam klucz.

Dopasowane polecenia OpenSSL

Równoważne polecenia, które generują lokalnie taki sam rodzaj klucza, są pokazane pod wynikiem, więc w każdej chwili możesz przejść do wiersza poleceń.

Pobrania o sensownych nazwach

Pliki zapisują się jako rsa-2048-private.pem i rsa-2048-public.pem, a nie pod ogólną nazwą, którą trzeba potem zmieniać.

Bez konta i bez limitu

Nie ma tu żadnego serwera, więc nie ma czego zakładać ani jakiego limitu wyczerpać.

Przykłady krok po kroku

Para Ed25519 pokazana w całości

Algorytm: Ed25519
-----BEGIN PRIVATE KEY-----
MC4CAQAwBQYDK2VwBCIEIA2HJVU1qChbOJN8XksXVhyD0IjYVt0UU6Mwz814rOFf
-----END PRIVATE KEY-----

-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAV5uB7UaPJrtncx3SXNtNzn1ZXjF1ApwvzBZ8nFzT5eU=
-----END PUBLIC KEY-----

Klucz prywatny Ed25519 ma w PKCS#8 48 bajtów, a klucz publiczny 44, więc każdy blok PEM mieści jeden wiersz base64. To para pokazowa do wyrzucenia — wygeneruj własną, zamiast ją kopiować.

Nagłówki PKCS#8 i PKCS#1 różnią się

Algorytm: RSA 2048, przełączona struktura
PKCS#8:  -----BEGIN PRIVATE KEY-----
PKCS#1:  -----BEGIN RSA PRIVATE KEY-----

Ten sam klucz, dwa opakowania. PKCS#8 dokłada wokół struktury RSA identyfikator algorytmu — dlatego obsługuje każdy algorytm, podczas gdy PKCS#1 istnieje wyłącznie dla RSA. Przełączenie koduje na nowo klucz, który już jest na ekranie, więc odcisk się nie zmienia.

Klucz publiczny RSA 2048

Algorytm: RSA 2048
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtuvUHLjyK9zje2aaNIni
eSccN1uleXFRBb1g2TN6bk/fbpPCGDyh71m73oB9Bk8+fKVkSThXyWTtpgblB7pX
iQBtTvSWVZGHprkLgMGkU2Yw8Z43m1WpoRuYyXNFe92S5viIdVuKTj/VEUuEpzHd
ffWMIUw70LaUdTP04iQdkNVeS3M6VHkpTwsPSQfsFSwObtLVNy2Lf+ODwJRqCk2r
C749hgKqBdJqkcIj49R7UP4SMQ/9V3yy8DFMrIcgsjC4tHwlQSCGeXNxTNlapGSa
ke55LUR83FASryVJRbUs678SCZSFkyGcT0qLZ/olu/e7Jj2lB0Qy/SJawkrs9hPE
4QIDAQAB
-----END PUBLIC KEY-----

Prefiks MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A to identyfikator algorytmu rsaEncryption — po nim rozpoznasz klucz RSA w strukturze SPKI na pierwszy rzut oka.

Klucz publiczny jako JWK

Algorytm: Ed25519, panel JWK
{
  "key_ops": [
    "verify"
  ],
  "ext": true,
  "alg": "Ed25519",
  "crv": "Ed25519",
  "x": "V5uB7UaPJrtncx3SXNtNzn1ZXjF1ApwvzBZ8nFzT5eU",
  "kty": "OKP"
}

To dosłowny wynik eksportu, łącznie z polami key_ops i ext, które Web Crypto zawsze dodaje. Wpis w JWKS ich nie potrzebuje — usuń oba, a dodaj kid oraz use, aby weryfikatorzy mogli wybrać właściwy klucz podczas rotacji. Ed25519 trafia do typu klucza OKP; klucze RSA pojawiają się jako kty RSA z polami n oraz e.

Odcisk SHA-256

Algorytm: Ed25519
SHA256(SPKI) = KAXVxapxpG4zLsTVMpPafovT+X1NLWc8fsOXqtrb59o=

Skrót SHA-256 struktury klucza publicznego, na tyle krótki, by odczytać go przez telefon. Uwaga: to nie jest wartość, którą wypisuje ssh-keygen — OpenSSH liczy skrót ze swojego własnego formatu sieciowego, więc dla tego samego klucza obie nigdy się nie zgadzają.

Jak korzystać z generatora kluczy RSA

  1. 1

    Wybierz algorytm

    RSA obsługuje najszerszy zakres starszych systemów. ECDSA daje równoważną siłę przy znacznie krótszych kluczach. Ed25519 to nowoczesny domyślny wybór do nowych zastosowań podpisujących.

  2. 2

    Wskaż długość klucza

    RSA 2048 spełnia aktualne zalecenia; 3072 i 4096 dokładają zapasu kluczom o długim cyklu życia. ECDSA oferuje krzywe P-256, P-384 i P-521. Ed25519 ma jeden stały rozmiar.

  3. 3

    Wybierz strukturę PEM

    PKCS#8 emituje nagłówek BEGIN PRIVATE KEY i działa niemal wszędzie, również w JDK. Na PKCS#1 przełącz się tylko wtedy, gdy coś wprost wymaga BEGIN RSA PRIVATE KEY.

  4. 4

    Skopiuj lub pobierz obie połowy

    Klucz prywatny trafia do menedżera sekretów. Klucz publiczny trafia do tego, kto weryfikuje Twoje podpisy. Prywatnej połowy nie wysyłaj nigdzie.

  5. 5

    Zweryfikuj odcisk

    Porównaj odcisk SHA-256 osobnym kanałem, aby potwierdzić, że druga strona zainstalowała dokładnie ten klucz publiczny, który tu powstał.

Częste błędy w formatach kluczy

Wklejenie klucza publicznego tam, gdzie ma być prywatny

Podpisywanie wymaga prywatnej połowy. Biblioteka, która dostanie BEGIN PUBLIC KEY zamiast klucza prywatnego, zwykle zgłasza mało pomocny błąd parsera, zamiast nazwać prawdziwy problem.

✗ Niepoprawne
-----BEGIN PUBLIC KEY-----
✓ Poprawne
-----BEGIN PRIVATE KEY-----

Zła struktura PEM dla danej biblioteki

Tylko kilka ekosystemów czyta wyłącznie tradycyjny układ RSA — własne wyjście OpenSSL z flagą -traditional, część SDK bramek płatniczych, starsze narzędzia Ruby i Perla. Większość nowoczesnych bibliotek, a JDK w szczególności, oczekuje PKCS#8. Przełącz strukturę PEM, zamiast szukać polecenia konwersji.

✗ Niepoprawne
-----BEGIN RSA PRIVATE KEY-----
✓ Poprawne
-----BEGIN PRIVATE KEY-----

Utrata końcowego znaku nowego wiersza

Pliki PEM kończą się znakiem nowego wiersza po ostatnim ograniczniku. Kopiowanie przez pole formularza, które obcina białe znaki, daje plik odrzucany wprost przez część parserów — a ponieważ brakujący znak jest niewidoczny, w edytorze plik wygląda poprawnie.

✗ Niepoprawne
-----END PRIVATE KEY-----[EOF]
✓ Poprawne
-----END PRIVATE KEY-----↵[EOF]

Znak zgubiony po drodze

PEM psuje znak zgubiony, wstawiony albo podmieniony, a nie szerokość wiersza — większość parserów przyjmuje dowolne łamanie. Kopiowanie przez komunikator albo pole formularza potrafi po cichu zamienić złamanie wiersza w spację, a base64 nie podpowie, który znak poszedł źle; klucz po prostu się nie wczytuje. Używaj przycisku kopiowania zamiast zaznaczania ręką.

✗ Niepoprawne
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtuvUHLjyK9zje2aaNIni eSccN1uleXFRBb1g2TN6bk
✓ Poprawne
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtuvUHLjyK9zje2aaNIni
eSccN1uleXFRBb1g2TN6bk

Użycie sekretu HS256 tam, gdzie skonfigurowano RS256

HS256 bierze jeden współdzielony sekret; RS256 bierze parę kluczy. Podanie losowego ciągu podpisującemu RS256 kończy się błędem już na etapie odczytu. Wygeneruj parę tutaj albo użyj naszego generatora sekretu JWT, jeśli chodziło o HS256.

✗ Niepoprawne
alg: RS256, key: 8f3a9c2e1b7d
✓ Poprawne
alg: RS256, key: -----BEGIN PRIVATE KEY-----

Wklejenie bloku PEM do authorized_keys

Publiczny klucz SSH to jednowierszowy format OpenSSH ssh-ed25519 AAAA…, a nie blok PEM, więc wklejenie klucza publicznego z tej strony do authorized_keys nie zadziała. Dla klucza RSA właściwy wiersz wyprowadzisz lokalnie poleceniem ssh-keygen -y; a do samego dostępu przez SSH i tak lepiej wygenerować klucz na maszynie docelowej.

✗ Niepoprawne
-----BEGIN PUBLIC KEY-----
✓ Poprawne
ssh-keygen -y -f rsa-2048-private.pem > id_rsa.pub

Kto korzysta z tego narzędzia

Podpisywanie JWT algorytmem RS256 lub EdDSA
Asymetryczne algorytmy JWT potrzebują pary kluczy, a nie współdzielonego sekretu. Podpisuj kluczem prywatnym, publikuj klucz publiczny, a weryfikatorzy nigdy nie trzymają niczego, co pozwala wystawiać tokeny. Nasz koder JWT przyjmuje klucze wytworzone na tej stronie.
Podpisywanie webhooków i wydań
Opublikuj klucz publiczny raz, podpisuj każdy payload kluczem prywatnym, a odbiorcy zweryfikują autentyczność bez współdzielonych danych uwierzytelniających, które mogłyby wyciec.
Lokalna deweloperka i testy
Zestawy testów sprawdzające weryfikację podpisu potrzebują jednorazowej pary kluczy. Wygenerowanie jej tutaj idzie szybciej niż przypominanie sobie składni polecenia OpenSSL.
Nauka tego, jak wygląda para kluczy
Przełączanie algorytmów i struktur PEM obok siebie unaocznia różnice w sposób, jakiego lektura specyfikacji nie daje.
Przygotowanie endpointu JWKS
Publiczny JWK wpada prosto do tablicy keys w dokumencie discovery OpenID Connect. Dodaj kid, aby weryfikatorzy mogli go wybrać podczas rotacji, i trzymaj prywatny JWK poza tym plikiem.
Migracja z RSA na coś nowszego
Wygeneruj zamiennik Ed25519 obok oryginału RSA i porównaj rozmiary, zanim zdecydujesz się na zmianę.
Naprawa niezgodności formatów
Gdy biblioteka odrzuca klucz błędem parsera, ponowne wyemitowanie go w drugiej strukturze PEM zwykle załatwia całą sprawę.

Formaty PEM i jak działa generator

Który kontener gdzie pasuje
Jeden klucz, pięć opakowań. Wybranie niewłaściwego to najczęstszy powód odrzucenia klucza, a komunikat o błędzie rzadko mówi coś więcej niż „nie udało się odczytać”.
KontenerNagłówek PEMZawieraGdzie go spotkasz
PKCS#8BEGIN PRIVATE KEYDowolny algorytmWeb Crypto, JDK, Go, .NET — większość nowoczesnych bibliotek
PKCS#1BEGIN RSA PRIVATE KEYTylko RSATradycyjne wyjście OpenSSL, część bramek płatniczych, starsze narzędzia Ruby i Perla
SPKI / X.509BEGIN PUBLIC KEYDowolny algorytm, połowa publicznaKlucz publiczny, którego oczekuje niemal każda biblioteka
PKCS#1 publicznyBEGIN RSA PUBLIC KEYTylko RSA, połowa publicznaStarsze narzędzia RSA
JWKbrak — to JSONDowolny algorytmEndpointy JWKS, discovery OIDC, biblioteki JOSE
Do konwersji plików, które już masz, openssl pkcs8 -topk8 -nocrypt -in pkcs1.pem -out pkcs8.pem prowadzi w jedną stronę, a openssl rsa -traditional -in pkcs8.pem -out pkcs1.pem w drugą.
Losowość pochodzi z systemu operacyjnego
Web Crypto zasila generowanie kluczy ze źródła entropii platformy — getrandom w Linuksie oraz systemowy CSPRNG w Windowsie i macOS. To ta sama klasa źródła, z której czerpie OpenSSL, a nie pseudolosowy generator JavaScriptu.
Generowanie nie zamraża strony
crypto.subtle.generateKey jest asynchroniczne, a w głównych silnikach przeglądarek poszukiwanie liczb pierwszych odbywa się poza głównym wątkiem, więc interfejs pozostaje responsywny w trakcie szukania 4096-bitowego modułu. Strona i tak pokazuje wskaźnik postępu, bo długość tego poszukiwania zależy od szczęścia w losowaniu.
PKCS#8 opakowuje PKCS#1
Struktura PrivateKeyInfo z PKCS#8 to numer wersji, identyfikator algorytmu i OCTET STRING. Dla niezaszyfrowanego klucza rsaEncryption ten OCTET STRING zawiera kompletny RSAPrivateKey z PKCS#1 — i właśnie dlatego strona przechodzi między obiema postaciami, nie wyliczając niczego na nowo.
Klucze publiczne używają SubjectPublicKeyInfo
BEGIN PUBLIC KEY to SubjectPublicKeyInfo z X.509: identyfikator algorytmu plus BIT STRING. To, co siedzi w tych bitach, zależy od algorytmu — dla RSA jest to RSAPublicKey z PKCS#1, dlatego BEGIN RSA PUBLIC KEY jest krótszy; dla ECDSA nieskompresowany punkt krzywej, a dla Ed25519 surowy 32-bajtowy klucz.
Wykładnik publiczny wynosi 65537
Każdy klucz RSA używa tu e = 65537, zapisywanego jako 0x010001. Jest dostatecznie duży, by uniknąć ataków na mały wykładnik, i ma tylko dwa ustawione bity, więc weryfikacja kosztuje 16 podniesień do kwadratu i jedno mnożenie.
Odciski liczone są z DER, nie z PEM
Odcisk SHA-256 powstaje na binarnej strukturze SubjectPublicKeyInfo. Liczenie go z tekstu base64 zmieniałoby wynik przy każdej zmianie łamania wierszy. Lokalny odpowiednik to openssl pkey -in private.pem -pubout -outform DER | openssl dgst -sha256 -binary | openssl base64.

Dobre praktyki zarządzania kluczami

Generuj klucze tam, gdzie będą używane
Klucz prywatny, który przeszedł przez sieć, był wystawiony na każdy węzeł po drodze. Generowanie w przeglądarce trzyma sam klucz poza siecią, choć kod strony wciąż przez nią przychodzi; generowanie na docelowym hoście usuwa nawet krok kopiowania. Dla klucza chroniącego systemy produkcyjne wybieraj hosta.
Wybieraj Ed25519, chyba że coś wymaga RSA
Ed25519 daje mocne bezpieczeństwo w 32-bajtowym kluczu, szybko podpisuje i nie ma parametrów, które można źle dobrać. Po RSA sięgaj wtedy, gdy kontrahent albo stara biblioteka nie zostawia wyboru.
Traktuj 2048 bitów jako dolną granicę
NIST SP 800-131A od 2013 roku nie dopuszcza RSA poniżej 2048 bitów do generowania podpisów, a żaden publiczny urząd certyfikacji nie wystawi certyfikatu dla mniejszego klucza. Dla kluczy, które mają służyć wiele lat, wybieraj 3072 lub 4096.
Nigdy nie zapisuj klucza prywatnego w repozytorium
Klucze prywatne trzymaj w menedżerze sekretów albo w zmiennej środowiskowej wczytywanej w czasie działania. Gdy klucz raz trafi do repozytorium, jedyną bezpieczną reakcją jest jego rotacja.
Rotuj planowo, nie dopiero po incydencie
Publikuj nowe klucze publiczne z identyfikatorem klucza, zanim wycofasz stare, aby weryfikatorzy przez czas nakładania się przyjmowali oba. Rotacja ćwiczona rutynowo to rotacja, która zadziała pod presją.

Najczęstsze pytania

Czy generowanie klucza prywatnego na stronie internetowej jest bezpieczne?
Klucz powstaje w Web Crypto API w Twojej własnej przeglądarce, a ta strona w trakcie generowania nie wysyła żadnego żądania sieciowego — możesz obserwować panel Sieć albo odłączyć się i sprawdzić, że generowanie nadal działa. Warto jednak jasno powiedzieć, co to pokazuje, a czego nie: dowodzi, że strona nie potrzebuje serwera, ale nie jest zabezpieczeniem przed naruszonym skryptem, bo JavaScript jest pobierany z naszego serwera przy każdej wizycie. Ryzyka, które zostają, są ryzykami przeglądarki, a nie sieci — złośliwe rozszerzenie może odczytać stronę i Twój schowek, a każdy, kto ma dostęp do maszyny, może odczytać pobrany plik. Klucz chroniący systemy produkcyjne wygeneruj na hoście, który będzie go używał; polecenia OpenSSL poniżej robią dokładnie to. Ta strona jest właściwym narzędziem do deweloperki, testów, nauki i wszędzie tam, gdzie klucz wygenerowany w przeglądarce jest akceptowalny.
Czym różni się PKCS#8 od PKCS#1?
To dwa kontenery na ten sam klucz RSA. PKCS#1, oznaczony nagłówkiem BEGIN RSA PRIVATE KEY, przechowuje liczby RSA bezpośrednio i istnieje wyłącznie dla RSA. PKCS#8, oznaczony BEGIN PRIVATE KEY, opakowuje te same liczby w identyfikator algorytmu, dzięki czemu jeden format przenosi zarówno RSA, jak i ECDSA oraz Ed25519. Większość nowoczesnych bibliotek oczekuje PKCS#8 — JDK w szczególności czyta bez dodatkowej biblioteki wyłącznie PKCS#8 — podczas gdy sporo bramek płatniczych i starszych narzędzi z czasów OpenSSL nadal wymaga PKCS#1. Przełącznik na tej stronie koduje na nowo klucz, który już jest na ekranie, więc żadna informacja nie zostaje dodana ani zgubiona, a odcisk pozostaje ten sam.
Jak przekonwertować klucz PKCS#1 na PKCS#8 i odwrotnie?
Przełącz strukturę PEM na tej stronie, a ten sam klucz zostanie wyemitowany w drugim kontenerze. Dla pliku, który już masz, konwersję wykona lokalnie OpenSSL: openssl pkcs8 -topk8 -nocrypt -in pkcs1.pem -out pkcs8.pem zamienia plik BEGIN RSA PRIVATE KEY na BEGIN PRIVATE KEY, a openssl rsa -traditional -in pkcs8.pem -out pkcs1.pem prowadzi w drugą stronę. Żaden z kierunków nie dodaje ani nie usuwa materiału klucza; zmienia się wyłącznie opakowanie — dlatego oba pliki opisują identyczny klucz i dają identyczny odcisk.
Jak uzyskać klucz publiczny z prywatnego klucza RSA?
Klucz publiczny da się wyprowadzić z prywatnego, nigdy odwrotnie. Ta strona pokazuje obie połowy naraz, więc nie ma tu czego wyprowadzać. Dla klucza prywatnego, który masz już na dysku, polecenie openssl pkey -in private.pem -pubout -out public.pem zapisze pasujący plik BEGIN PUBLIC KEY. Tak samo sprawdzisz, czy para do siebie należy — wygeneruj publiczną połowę ponownie i porównaj ją z plikiem, który dostałeś.
RSA czy Ed25519 — co wybrać?
Wybierz Ed25519, gdy nic nie wymusza na Tobie decyzji. Osiąga bezpieczeństwo porównywalne z RSA 3072 przy 32-bajtowym kluczu, podpisuje szybciej i nie ma parametrów, które można źle skonfigurować. RSA wybierz wtedy, gdy wymaga go kontrahent, urząd certyfikacji albo stara biblioteka — a to wciąż częste w systemach korporacyjnych i płatniczych. ECDSA plasuje się pomiędzy nimi i jest szeroko wspierane w TLS.
Czy 2048-bitowe RSA jest wciąż wystarczająco mocne?
Tak, dziś do większości zastosowań. NIST wycenia 2048-bitowe RSA na 112 bitów siły kryptograficznej i w SP 800-57 prowadzi je do 2030 roku; 3072 bity sięgają 128 bitów siły i to na nie NIST wskazuje dalej. Czyli: 2048 do wszystkiego, co zrotujesz w ciągu kilku lat, a 3072 lub 4096 do klucza, który ma działać jeszcze w latach trzydziestych albo którego wymaga urząd certyfikacji. Kosztem większego klucza jest wolniejsze podpisywanie i większe podpisy, a nie słabsze bezpieczeństwo.
Czy tymi kluczami mogę podpisywać tokeny JWT?
Tak. Klucze RSA działają z RS256, RS384 i RS512 oraz z wariantami PSS; ECDSA na krzywej P-256 łączy się z ES256; a Ed25519 to algorytm EdDSA. Podpisuj kluczem prywatnym i publikuj klucz publiczny, aby weryfikatorzy sprawdzali podpisy, nie mogąc ich tworzyć. Jedno zastrzeżenie, jeśli używasz panelu JWK zamiast PEM: Web Crypto stempluje JWK dla RSA polem alg o wartości RS256, a restrykcyjne biblioteki odmówią wczytania go do PS256 lub RS512 — usuń pole alg albo użyj PEM. Nasz koder JWT przyjmuje te klucze, a dekoder pokazuje, co zawiera powstały token.
Czy da się tu wygenerować klucz SSH?
Nie bezpośrednio. Własny plik klucza prywatnego OpenSSH to inny kontener i ta strona go nie zapisuje. Klucz RSA stąd nadal da się wykorzystać: ssh-keygen -y -f rsa-2048-private.pem > id_rsa.pub wyprowadza wiersz do authorized_keys z pobranego pliku. Kluczy Ed25519 stąd już nie, bo OpenSSH odrzuca postać PKCS#8. Do dostępu przez SSH lepszą odpowiedzią pozostaje ssh-keygen -t ed25519 na maszynie, która potrzebuje klucza — to w ogóle eliminuje przenoszenie klucza prywatnego. Do podpisywania JWT, podpisywania wydań w CI i weryfikacji webhooków klucz PKCS#8 z tej strony jest dokładnie tym, czego te narzędzia oczekują.
Czy mogę zabezpieczyć klucz prywatny hasłem?
Nie tutaj. Zaszyfrowany PKCS#8 wymaga kroku wyprowadzania klucza, którego Web Crypto API nie udostępnia, więc jego implementacja oznaczałaby pisanie kryptografii własnymi rękami w JavaScripcie. Dodaj passphrase lokalnie: polecenie openssl pkcs8 -topk8 -in private.pem -out encrypted.pem odczyta pobrany plik i o nie poprosi.
Do czego służy odcisk?
To skrót SHA-256 struktury klucza publicznego, na tyle krótki, by porównać go głosem albo w wiadomości na czacie. Gdy wysyłasz komuś klucz publiczny, porównanie odcisków osobnym kanałem potwierdza, że to, co dotarło, jest tym, co wysłano. Odcisk identyfikuje wyłącznie klucz publiczny i nie zdradza niczego o połowie prywatnej. Uwaga: to nie jest liczba, którą wypisuje ssh-keygen -l — OpenSSH liczy skrót ze swojego własnego formatu sieciowego, a nie ze struktury SPKI, więc dla tego samego klucza obie nigdy się nie zgadzają.

Powiązane narzędzia

Zobacz wszystkie narzędzia →