• bezpieczeństwo
  • szyfrowanie
  • jwt
  • asymetryczne
  • ec
  • rsa
  • klucz publiczny
  • klucz prywatny
  • token
  • podpis

Wprowadzenie do algorytmów podpisujących EC i RSA w JWT

Poznaj podstawy szyfrowania asymetrycznego i zrozum zalety i wady dwóch popularnych algorytmów kluczy podpisujących JWT - EC i RSA.

Charles
Charles
Developer

Tło

W cyfrowym świecie dążenie do zwiększenia bezpieczeństwa przesyłania danych pozostaje niezmienne i stale się rozwija. Obecnie JSON Web Tokens (JWT) są szeroko stosowane i odgrywają kluczową rolę w OAuth 2.0 i OIDC. Ale jak serwer autoryzacji weryfikuje i ufa tokenowi JWT wysłanemu przez klienta? W jaki sposób token jest wydawany i podpisywany przez wystawcę? W tym wpisie na blogu omówimy szyfrowanie asymetryczne i zagłębimy się w zalety i wady różnych algorytmów podpisujących, które Logto wykorzystuje w swoich tokenach JWT.

Zrozumienie szyfrowania asymetrycznego

Szyfrowanie asymetryczne, znane również jako kryptografia klucza publicznego, podstawowe pojęcie w bezpieczeństwie komputerowym i kryptografii, polega na użyciu unikalnej pary powiązanych kluczy: klucza publicznego i klucza prywatnego. Role tych kluczy mogą początkowo wydawać się nieintuicyjne, ale są one kluczowe dla bezpieczeństwa danych.

  • 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 szyfrowania. Kiedy dane są podpisane kluczem prywatnym i odbiorca posiada odpowiedni klucz publiczny, może zweryfikować, że dane rzeczywiście zostały podpisane przez posiadacza klucza prywatnego i nie zostały naruszone podczas transmisji. Jednak w tradycyjnym użyciu szyfrowania asymetrycznego, takim jak HTTPS, klucz publiczny jest używany do szyfrowania, a zaszyfrowane dane mogą zostać odszyfrowane tylko przez docelowy serwer posiadający sparowany klucz prywatny.
  • Klucz prywatny: W przeciwieństwie do tego, klucz prywatny jest ściśle strzeżoną tajemnicą, która powinna być znana tylko jego prawowitemu właścicielowi. W kontekście JWT klucz prywatny służy do tworzenia podpisów cyfrowych, które mogą być weryfikowane przez każdego, kto ma dostęp do odpowiedniego klucza publicznego. Dodatkowo, w kontekście bardziej tradycyjnego szyfrowania asymetrycznego, klucz prywatny rzeczywiście służy do odszyfrowywania, umożliwiając dostęp do danych, które zostały bezpiecznie zaszyfrowane przy użyciu klucza publicznego.

Ta unikalna konfiguracja kluczy, w której klucz publiczny weryfikuje lub szyfruje dane, a klucz prywatny je podpisuje lub odszyfrowuje, stanowi podstawę bezpiecznego przesyłania danych i mechanizmów uwierzytelniania użytkownika w cyfrowym świecie. Zobacz ten wpis na blogu po więcej szczegółów.

Algorytmy szyfrowania asymetrycznego: RSA vs EC

Algorytmy RSA (Rivest-Shamir-Adelman) i EC (Elliptic Curve) są dwiema najczęściej używanymi „funkcjami matematycznymi” w szyfrowaniu asymetrycznym. Jako deweloperzy często mamy do wyboru jeden z tych algorytmów, gdy mamy do czynienia z frameworkiem uwierzytelniania i jego JWT. Ale który z nich byłby Twoim wyborem? Zanurzmy się w zaletach i wadach każdego z nich.

Algorytm podpisujący RSA

  • Zalety:
    1. Szerokie wsparcie: RSA jest szeroko wspierany na różnych platformach i bibliotekach, zapewniając zgodność w wielu środowiskach.
    2. Długoterminowe doświadczenie: RSA ma długą historię niezawodnego bezpieczeństwa, a jego algorytmy są dobrze rozumiane przez społeczność kryptograficzną.
  • Wady:
    1. 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 większym obciążeniem obliczeniowym.
    2. Wydajność: Operacje RSA są zwykle wolniejsze niż EC, co może być wadą w aplikacjach o dużym ruchu.

Algorytm podpisujący EC

  • Zalety:
    1. Wydajność: EC oferuje lepszą wydajność w porównaniu do RSA, co czyni go idealnym wyborem dla aplikacji o ograniczonych zasobach lub dużym natężeniu ruchu.
    2. Kompaktowe rozmiary kluczy: Klucze EC są znacznie krótsze niż ich odpowiedniki RSA, zapewniając jednocześnie równoważne poziomy bezpieczeństwa. Prowadzi to do zmniejszenia wymagań dotyczących przechowywania i sieci oraz przyspieszenia operacji kryptograficznych.
    3. Bezpieczeństwo: EC jest wysoko ceniony za swoje solidne bezpieczeństwo, wzmocnione skomplikowaną matematyką stojącą za krzywymi eliptycznymi, co czyni go odpornym na ataki brute-force.
  • Wady:
    1. Ograniczone wsparcie: Niektóre starsze systemy i biblioteki mogą nie mieć pełnego wsparcia EC, co potencjalnie powoduje problemy z kompatybilnością. Np. Cloudflare Zero Trust nie obsługuje tokenów podpisanych EC.
    2. Złożoność: Implementacja EC może być bardziej skomplikowana ze względu na zawiłości matematyczne zaangażowane.

Wybór algorytmów podpisujących JWT przez Logto

Logto zawsze był zaangażowany w najwyższe standardy bezpieczeństwa i elastyczności oraz dąży do stosowania najnowocześniejszych i najwydajniejszych rozwiązań w swojej podstawie. EC oferuje wygrywające połączenie solidnego bezpieczeństwa i wydajności obliczeniowej, czyniąc go idealnym dopasowaniem do współczesnych potrzeb uwierzytelniania i autoryzacji. Dlatego EC jest domyślnym algorytmem klucza podpisującego od wczesnego etapu naszego produktu.

Jednak otrzymaliśmy również liczne opinie od naszych użytkowników, że tokeny podpisane EC są niekompatybilne z niektórymi systemami i frameworkami zewnętrznymi, zwłaszcza tymi, które są starsze. Dlatego pracujemy nad zapewnieniem wsparcia dla algorytmu RSA, zapewniając, że Logto pozostaje elastyczne i wszechstronne dla wszystkich Twoich wymagań uwierzytelniających.

W nadchodzącym wydaniu Logto Cloud wprowadzi funkcję „Rotacja klucza prywatnego”, która pozwala na utworzenie nowego klucza prywatnego OIDC i klucza cookie w Twoim dzierżawcy. (Klucz prywatny jest używany do podpisywania tokenów JWT, a klucz cookie do podpisywania cookie.)

Zrzut ekranu interfejsu konsoli do obracania kluczy OIDC

Ta funkcja pomaga zmniejszyć ryzyko związane z długoterminowym narażeniem klucza lub kompromitacją. Regularna rotacja kluczy prywatnych powinna być podstawową praktyką w strategii bezpieczeństwa każdej organizacji i jest wysoce zalecana przez Logto.

Ponadto, podczas obracania klucza podpisującego JWT, zapewnimy również opcję wyboru algorytmu klucza podpisującego między EC a RSA. Więc jeśli napotykasz problem z brakiem możliwości połączenia się z platformą zewnętrzną z powodu nieobsługiwanego algorytmu podpisującego JWT, teraz jest czas na obrót i wybór algorytmu RSA dla nowego klucza prywatnego.

Ponieważ to ustawienie znajduje się na stronie ustawień najemcy, interfejs użytkownika nie będzie dostępny dla użytkowników OSS. Ale nie martw się, wciąż możesz to osiągnąć, aktualizując do najnowszego wydania i wykonując następujące polecenia CLI w katalogu głównym Logto.

W skrócie

Szyfrowanie asymetryczne pomaga zabezpieczyć Twoje tokeny JWT w systemie uwierzytelniania. Oba algorytmy, EC i RSA, są niezbędne i popularne w kryptografii. Zrozumienie zalet, wad i zasad matematycznych stojących za tymi algorytmami pomaga podejmować lepsze decyzje, aby Twoja aplikacja działała w ramach systemu uwierzytelniania i autoryzacji.

Logto będzie nadal eksplorować i oferować bardziej bezpieczne i solidne doświadczenia użytkownika.