Przegląd algorytmów podpisywania JWT
Poznaj algorytmy podpisywania JSON Web Token (JWT), obejmujące dwie najpopularniejsze metody szyfrowania asymetrycznego: RSA i EC. Dowiedz się o zaletach i wadach każdego z algorytmów oraz o tym, jak Logto wykorzystuje je do zabezpieczania Twoich tokenów JWT.
Czym jest JWT?
JSON Web Token (JWT) to kompaktowy, bezpieczny dla adresów URL sposób na reprezentowanie roszczeń. Struktura obejmuje nagłówek, ładunek i podpis.
Obecnie JWT zostały szeroko przyjęte i odgrywają kluczową rolę w OAuth 2.0 i OIDC. Ale jak serwer autoryzacyjny weryfikuje i ufa JWT wysłanemu przez klienta? Jak token jest wydawany i podpisywany przez wydawcę? W tym wpisie na blogu porozmawiamy o szyfrowaniu asymetrycznym i przyjrzymy się zaletom i wadom różnych algorytmów podpisywania, które Logto wykorzystuje w swoich tokenach JWT.
Struktura JWT
Logto podpisuje wszystkie tokeny JWT, w tym zarówno tokens ID, jak i tokens dostępu. Podpisany JWT jest również znany jako JWS (Podpis JSON Web). Struktura podpisanego JWT składa się z trzech części: nagłówka, ładunku i podpisu, oddzielonych kropkami (.
).
Nagłówek JOSE (Podpisywanie i szyfrowanie obiektów JSON)
Nagłówek zazwyczaj składa się z następujących części:
- typ: Typ tokena, którym jest JWT.
- alg: Algorytm podpisywania stosowany, taki jak RS256 lub ES384.
- kid: Wskazówka określająca, który klucz został użyty do zabezpieczenia JWT.
Payload (Ładunek)
Ładunek zawiera roszczenia, które są stwierdzeniami dotyczącymi jednostki (typowo użytkownika) oraz dodatkowe dane. Na przykład token ID może zawierać następujące roszczenia:
Podpis
Podpis jest używany do weryfikacji, że nadawca JWT nie jest oszustem i że wiadomość nie została zmieniona. Gdy używasz podpisanego JWT, musisz zweryfikować podpis tokenu, aby zapewnić integralność tokenu. Sprawdź ten przewodnik na temat jak weryfikować tokeny JWT, aby chronić swoje API.
Czym jest szyfrowanie asymetryczne?
Szyfrowanie asymetryczne, znane również jako kryptografia klucza publicznego, to podstawowa koncepcja w bezpieczeństwie komputerowym i kryptografii, która polega na używaniu unikalnej pary powiązanych kluczy: klucza publicznego i klucza prywatnego.
Definicje kluczy publicznych i prywatnych
- Klucz publiczny: Klucz publiczny, jak sama nazwa wskazuje, jest przeznaczony do otwartego udostępniania. W kontekście JWT i podobnych systemów klucz publiczny jest używany do weryfikacji podpisu, a nie do szyfrowania. Gdy dane są podpisane kluczem prywatnym, a odbiorca posiada odpowiadający mu klucz publiczny, mogą oni zweryfikować, że dane zostały faktycznie podpisane przez posiadacza klucza prywatnego i że nie zostały zmienione podczas transmisji.
- Klucz prywatny: W przeciwieństwie do tego, klucz prywatny to ściśle strzeżona tajemnica, która powinna być znana wyłącznie jego prawowitemu właścicielowi. W kontekście JWT klucz prywatny jest używany do tworzenia podpisów cyfrowych, które mogą zostać zweryfikowane przez każdego, kto ma dostęp do odpowiadającego mu klucza publicznego.
To unikalne zestawienie kluczy stanowi podstawę bezpiecznej transmisji danych i mechanizmów uwierzytelniania użytkowników w cyfrowym świecie. Sprawdź ten wpis na blogu po więcej szczegółów.
Popularne algorytmy kluczy podpisywania JWT: RSA vs EC
Algorytmy RSA (Rivest-Shamir-Adelman) i EC (Krzywe eliptyczne) to dwa najczęściej używane „funkcje matematyczne” w szyfrowaniu asymetrycznym.
Jako deweloperzy, często stajemy przed wyborem pomiędzy tymi algorytmami podczas pracy z frameworkiem uwierzytelniania i jego JWT. Ale który z nich byś wybrał? Przyjrzyjmy się zaletom i wadom każdego z nich.
Algorytm podpisywania RSA (np. RSASHA256)
- Zalety:
- Szerokie wsparcie: RSA jest szeroko wspierane na różnych platformach i w bibliotekach, zapewniając zgodność w szerokim zakresie środowisk.
- Długa historia: RSA ma długą historię niezawodnego bezpieczeństwa, a jego algorytm są dobrze rozumiane przez społeczność kryptograficzną.
- Wady:
- Rozmiary kluczy: Klucze RSA są dłuższe, aby osiągnąć ten sam poziom bezpieczeństwa co EC, co skutkuje większymi rozmiarami tokenów i zwiększonym obciążeniem obliczeniowym.
- Wydajność: Operacje RSA są zwykle wolniejsze niż EC, co może być wadą w aplikacjach o dużym natężeniu ruchu.
Algorytm podpisywania EC (np. ECDSASHA384)
- Zalety:
- Wydajność: EC zapewnia lepszą wydajność w porównaniu do RSA, co czyni go idealnym rozwiązaniem dla aplikacji z ograniczonymi zasobami lub dużym obciążeniem.
- Krótkie rozmiary kluczy: Klucze EC są znacznie krótsze niż ich odpowiedniki RSA, przy zachowaniu równoważnych poziomów bezpieczeństwa. Prowadzi to do zmniejszenia wymagań dotyczących przechowywania i sieci oraz przyspieszenia operacji kryptograficznych.
- Bezpieczeństwo: EC jest wysoko ceniony za swoją solidną bezpieczeństwo, wzmocnione skomplikowaną matematyką krzywych eliptycznych, co czyni go odpornym na ataki brutalne.
- Wady:
- Ograniczone wsparcie: Niektóre starsze systemy i biblioteki mogą nie mieć kompleksowego wsparcia dla EC, co może powodować problemy z kompatybilnością. Np. Cloudflare Zero Trust nie obsługuje podpisanych tokenów EC.
- Złożoność: Implementacja EC może być bardziej skomplikowana ze względu na zawiłości matematyczne.
Wybór Logto dla algorytmów podpisywania JWT
Logto zawsze dążył do najwyższych standardów bezpieczeństwa i elastyczności i ma tendencję do korzystania z najnowocześniejszych i wydajnych rozwiązań jako jądra swojego produktu. EC oferuje zwycięską kombinację solidnego bezpieczeństwa i wydajności obliczeń, co czyni go idealnym rozwiązaniem dla nowoczesnych potrzeb uwierzytelniania i autoryzacji. Dlatego EC był naszym domyślnym algorytmem klucza podpisu od wczesnego etapu naszej produktów.
Jednak przyznaliśmy również, że tokeny podpisane EC nie są kompatybilne z niektórymi systemami i frameworkami zewnętrznymi, szczególnie tymi starszymi. W związku z tym wprowadziliśmy również funkcję zmiany algorytmu klucza podpisywania JWT poprzez rotację kluczy prywatnych.
Więc jeśli napotykasz na problem z brakiem możliwości połączenia z zewnętrzną platformą z powodu nieobsługiwanego algorytmu podpisywania JWT, teraz nadszedł czas na rotację i wybór algorytmu RSA dla nowego klucza prywatnego.
Ta funkcja pomaga również w łagodzeniu ryzyka związanego z długoterminową ekspozycją klucza lub jego kompromitacją. Regularna rotacja kluczy prywatnych powinna być podstawową praktyką w strategii bezpieczeństwa każdej organizacji i jest wysoce zalecana przez Logto.
Podsumowanie: Najczęściej używane algorytmy podpisywania JWT: RSA i EC
Podpisywanie tokenów JWT zapewnia integralność i autentyczność przesyłanych danych. Wybór algorytmu podpisywania może mieć znaczący wpływ na bezpieczeństwo, wydajność i kompatybilność Twojej aplikacji.
Oba algorytmy, RSA i EC, są niezbędne i popularne w kryptografii. Zrozumienie zalet i wad oraz zasad matematycznych stojących za tymi algorytmami pomaga podejmować lepsze decyzje dla Twojej aplikacji, aby współpracować z frameworkiem uwierzytelniania i autoryzacji.
Logto będzie kontynuować eksplorację i oferowanie Ci bardziej bezpiecznego i solidnego doświadczenia użytkownika.