RSA, co to jest i jak bezpiecznie go używać?

Konstanty Jankowski • 12 października 2026
Grafika przedstawia ikonę osoby przy komputerze i napis ZUS RSA. To skrót od Zakładu Ubezpieczeń Społecznych, który zajmuje się sprawami ubezpieczeń społecznych.

Spis treści

Gdy przeglądarka nawiązuje bezpieczne połączenie albo podpisujesz dokument elektronicznie, w tle może działać RSA. To algorytm kryptografii asymetrycznej, który wykorzystuje parę kluczy i pozwala zarówno chronić dane, jak i potwierdzać tożsamość nadawcy. Wyjaśniam, RSA, co to właściwie znaczy w praktyce, jak działa ten mechanizm, gdzie się go stosuje oraz jak bezpiecznie używać go w Pythonie.

Najważniejsze fakty o RSA w jednym miejscu

  • Dwa klucze pozwalają rozdzielić szyfrowanie od odszyfrowywania.
  • Klucz publiczny można udostępniać, ale klucz prywatny musi pozostać tajny.
  • RSA służy także do podpisów cyfrowych, a nie tylko do szyfrowania.
  • W nowych wdrożeniach stosuje się zwykle RSA 2048 bitów lub więcej.
  • RSA nie jest dobrym wyborem do szyfrowania dużych plików.

Klucz prywatny i publiczny w RSA. Klucz prywatny to dwie duże liczby pierwsze. Klucz publiczny to ich iloczyn, trudny do odwrócenia.

RSA, co to właściwie znaczy w cyberbezpieczeństwie

RSA to asymetryczny algorytm kryptograficzny nazwany od nazwisk jego twórców: Rona Rivesta, Adiego Shamira i Leonarda Adlemana. Jego najważniejszą cechą jest użycie dwóch powiązanych ze sobą kluczy. NIST opisuje RSA jako algorytm stosowany między innymi do ustanawiania kluczy oraz tworzenia i sprawdzania podpisów cyfrowych.

Klucz publiczny można przekazać innym osobom lub opublikować w certyfikacie. Klucz prywatny przechowuje wyłącznie właściciel. Wiadomość zaszyfrowana kluczem publicznym może zostać odszyfrowana tylko przy użyciu odpowiadającego mu klucza prywatnego.

To właśnie odróżnia RSA od szyfrowania symetrycznego, takiego jak AES. W AES ten sam sekret służy do szyfrowania i odszyfrowywania, więc obie strony muszą wcześniej bezpiecznie wymienić klucz. RSA rozwiązuje problem jego przekazania, choć robi to kosztem większego obciążenia obliczeniowego.

Algorytm ma również drugie zastosowanie. Nadawca może utworzyć podpis przy użyciu klucza prywatnego, a odbiorca sprawdzić go kluczem publicznym. Taki podpis potwierdza integralność danych i autentyczność nadawcy, ale sam w sobie nie ukrywa treści wiadomości.

Jak RSA wykorzystuje dwa klucze i liczby pierwsze

Bez matematyki RSA może wyglądać jak czarna skrzynka, ale jego podstawowa idea jest dość elegancka. Bezpieczeństwo opiera się na tym, że łatwo pomnożyć dwie bardzo duże liczby pierwsze, natomiast niezwykle trudno rozłożyć ich iloczyn z powrotem na czynniki.

Podczas generowania pary kluczy program wykonuje kilka operacji:

  1. Losuje dwie duże liczby pierwsze oznaczane zwykle jako p i q.
  2. Oblicza moduł n = p × q. To część klucza publicznego.
  3. Wyznacza funkcję Eulera dla tych liczb.
  4. Wybiera wykładnik publiczny e, najczęściej 65537.
  5. Oblicza wykładnik prywatny d, który jest matematyczną odwrotnością e w odpowiednim układzie modulo.

Klucz publiczny składa się przede wszystkim z pary (n, e), natomiast klucz prywatny zawiera wartość d oraz dodatkowe dane potrzebne do szybkich obliczeń. Osoba postronna może znać n i e, ale odzyskanie klucza prywatnego wymagałoby efektywnego rozłożenia ogromnej liczby n na p i q.

Mały przykład, który pokazuje mechanizm

Dla celów edukacyjnych można przyjąć p = 5 i q = 11. Otrzymujemy wtedy n = 55, a po wybraniu e = 3 wykładnik prywatny wynosi d = 27. Jeśli wiadomość oznaczymy liczbą 7, szyfrowanie daje wynik 7³ mod 55 = 13, a odszyfrowanie liczby 13 przy użyciu d przywraca wartość 7.

Tak małe liczby są oczywiście całkowicie niebezpieczne. Ten przykład pokazuje tylko zasadę działania, a nie sposób tworzenia prawdziwego klucza. W realnym systemie liczby mają tysiące bitów, a wiadomość przed operacją RSA przechodzi przez bezpieczny schemat wypełniania, czyli padding.

Sam wzór nie wystarcza

Jednym z częstszych błędów początkujących jest traktowanie RSA jako prostego działania potęgowania. Surowe RSA, czyli użycie samego wzoru bez odpowiedniego paddingu, nie powinno być stosowane w aplikacji. Do szyfrowania wykorzystuje się na przykład OAEP, a do podpisów cyfrowych PSS. Zasady tych schematów opisuje standard PKCS #1 w dokumencie RFC 8017.

Gdzie spotykam RSA w praktycznych systemach

RSA nie jest technologią używaną wyłącznie w laboratoriach kryptografii. Przez lata stał się jednym z fundamentów infrastruktury klucza publicznego, czyli systemu certyfikatów, urzędów certyfikacji i podpisów elektronicznych.

Certyfikaty i bezpieczne połączenia

Certyfikat strony internetowej może zawierać publiczny klucz RSA. Przeglądarka sprawdza podpis certyfikatu, ocenia, czy został wystawiony przez zaufany urząd, a potem wykorzystuje zawarte w nim informacje podczas ustanawiania bezpiecznego połączenia.

Współczesne protokoły nie szyfrują całej sesji RSA, bo byłoby to zbyt wolne. RSA może potwierdzać tożsamość serwera, natomiast do szyfrowania dalszej komunikacji używany jest zwykle szybki szyfr symetryczny. W TLS 1.3 nie stosuje się klasycznej wymiany klucza RSA, ale certyfikaty z podpisem RSA nadal mogą być używane.

Podpis elektroniczny

Przy podpisywaniu dokumentu system najpierw oblicza skrót kryptograficzny, na przykład SHA-256. Następnie podpisuje ten skrót kluczem prywatnym. Odbiorca używa klucza publicznego, aby sprawdzić, czy dokument nie został zmieniony i czy podpis pasuje do konkretnego nadawcy.

Trzeba przy tym pamiętać, że podpis cyfrowy nie jest szyfrowaniem. Podpis mówi, kto zatwierdził dane i czy pozostały nienaruszone. Jeśli treść ma pozostać tajna, potrzebny jest dodatkowo mechanizm szyfrowania.

Przeczytaj również: NGINX - Jak działa i dlaczego jest kluczowy dla Twojego backendu?

Poczta elektroniczna i wymiana kluczy

W systemach takich jak PGP lub S/MIME RSA może chronić klucz sesyjny, którym zaszyfrowano właściwą wiadomość. To rozwiązanie hybrydowe łączy wygodę kryptografii asymetrycznej z szybkością szyfrowania symetrycznego.

W praktyce RSA najlepiej sprawdza się przy małych danych, kluczach i podpisach. Nie warto używać go bezpośrednio do zaszyfrowania całego filmu, archiwum czy kopii bazy danych.

RSA, AES i ECC rozwiązują różne problemy

Porównywanie RSA z AES bez wyjaśnienia różnicy między kryptografią symetryczną i asymetryczną prowadzi do nieporozumień. Ja traktuję te technologie jako elementy jednego systemu, a nie konkurencyjne zamienniki.

Technologia Rodzaj klucza Typowe zastosowanie Najważniejsza cecha
RSA Publiczny i prywatny Podpisy, certyfikaty, ochrona kluczy sesyjnych Łatwiejsza wymiana klucza, ale większy koszt obliczeń
AES Jeden wspólny klucz Szyfrowanie plików, dysków i połączeń Bardzo szybkie działanie przy dużych danych
ECC Publiczny i prywatny Podpisy i uzgadnianie kluczy Krótsze klucze przy podobnym poziomie bezpieczeństwa

Przykładowo klucz RSA 2048 bitów zapewnia około 112 bitów bezpieczeństwa według wytycznych NIST. To poziom uznawany za akceptowalny dla wielu zastosowań, ale przy długim okresie ochrony można rozważyć RSA 3072. Samo zwiększenie rozmiaru klucza nie naprawi jednak błędnego użycia algorytmu.

W systemie hybrydowym RSA szyfruje niewielki klucz AES, a AES szyfruje całą wiadomość. Taki model jest zwykle rozsądniejszy niż próba użycia RSA do każdego fragmentu danych.

Jak bezpiecznie użyć RSA w Pythonie

W Pythonie nie implementowałbym RSA samodzielnie. Biblioteki kryptograficzne rozwiązują problemy, których łatwo nie zauważyć, takie jak dobór losowości, padding, format kluczy i bezpieczne obchodzenie się z błędami. Popularnym wyborem jest pakiet cryptography.

Poniższy przykład tworzy klucz RSA 2048 bitów i szyfruje krótką wiadomość przy użyciu OAEP:

from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import hashes

private_key = rsa.generate_private_key(
    public_exponent=65537,
    key_size=2048
)

public_key = private_key.public_key()

message = b"Tajna wiadomosc"

ciphertext = public_key.encrypt(
    message,
    padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None
    )
)

plaintext = private_key.decrypt(
    ciphertext,
    padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None
    )
)

Ten fragment jest dobrym ćwiczeniem, ale aplikacja produkcyjna musi jeszcze bezpiecznie zapisać klucz prywatny, kontrolować dostęp i obsługiwać rotację kluczy. Nie umieszczałbym prywatnego klucza w repozytorium ani bezpośrednio w kodzie programu.

Do podpisu cyfrowego używa się innej operacji niż do szyfrowania. W praktyce należy podpisać dane odpowiednim schematem, najczęściej RSA-PSS, a po stronie odbiorcy zweryfikować podpis przy użyciu klucza publicznego. Klucz publiczny nie jest sekretem, ale musi być wiarygodnie przypisany do osoby lub usługi.

Co najczęściej psuje bezpieczeństwo RSA

Największe ryzyko rzadko wynika z samej matematyki. Częściej problemem jest zła konfiguracja albo niewłaściwe zarządzanie kluczem. Nawet poprawny algorytm nie ochroni danych, jeśli klucz prywatny wycieknie z serwera.

  • Za krótki klucz - RSA 1024 bitów należy traktować jako rozwiązanie historyczne, nie jako wybór do nowych systemów.
  • Brak paddingu - surowe RSA jest podatne na praktyczne ataki i nie powinno być używane.
  • Losowanie niskiej jakości - przewidywalne liczby pierwsze mogą umożliwić odzyskanie klucza.
  • Współdzielenie klucza prywatnego - gdy wiele usług korzysta z tego samego sekretu, rośnie skala skutków wycieku.
  • Mylenie podpisu z szyfrowaniem - podpis potwierdza autentyczność, ale nie zapewnia poufności.
  • Brak weryfikacji klucza publicznego - atakujący może podstawić własny klucz podczas wymiany.

Rozmiar klucza powinien wynikać z polityki bezpieczeństwa i przewidywanego czasu ochrony danych. 2048 bitów to rozsądne minimum dla wielu obecnych wdrożeń, 3072 bity dają większy margines, a 4096 bitów zwiększa koszt operacji i nie zawsze przynosi proporcjonalną korzyść.

RSA nie jest też odporne na przyszłe komputery kwantowe wykorzystujące algorytm Shora. Nie oznacza to, że należy dziś porzucić każdą istniejącą instalację, ale przy projektowaniu systemu na wiele lat trzeba brać pod uwagę migrację do algorytmów postkwantowych.

Najważniejsza decyzja przy wdrażaniu RSA

RSA najlepiej rozumieć jako narzędzie do rozwiązania konkretnego problemu zaufania. Klucz publiczny pozwala bezpiecznie rozpocząć kontakt, a prywatny potwierdza tożsamość właściciela. Do szyfrowania dużych ilości danych lepiej użyć AES, a RSA pozostawić do podpisów i ochrony małych sekretów.

Jeżeli wdrażam RSA w aplikacji, wybieram sprawdzoną bibliotekę, klucz co najmniej 2048-bitowy, OAEP dla szyfrowania i PSS dla podpisów. Najwięcej bezpieczeństwa daje nie sam algorytm, lecz cały proces obejmujący generowanie, przechowywanie, używanie i wymianę kluczy.

Artykuł ma charakter wyłącznie informacyjny i edukacyjny. Materiał został opracowany przy wsparciu nowoczesnych narzędzi analitycznych i językowych (AI). Przed podjęciem decyzji skonsultuj się z ekspertem.

FAQ - Najczęstsze pytania

Szyfrowanie kluczem publicznym ma ukryć treść i pozwala ją odszyfrować kluczem prywatnym. Podpis cyfrowy tworzy się kluczem prywatnym, a kluczem publicznym sprawdza integralność danych i autentyczność nadawcy. Sam podpis nie zapewnia poufności wiadomości.

RSA wymaga większych zasobów obliczeniowych niż szyfry symetryczne, takie jak AES, i najlepiej sprawdza się przy małych danych, kluczach oraz podpisach. W systemie hybrydowym RSA chroni niewielki klucz sesyjny, a AES szyfruje całą wiadomość lub plik.

RSA 2048 bitów jest rozsądnym minimum dla wielu obecnych wdrożeń i zapewnia około 112 bitów bezpieczeństwa. RSA 3072 bitów daje większy margines ochrony, natomiast 4096 bitów zwiększa koszt operacji i nie zawsze zapewnia proporcjonalną korzyść. RSA 1024 bitów należy traktować jako rozwiązanie historyczne.

Warto korzystać ze sprawdzonej biblioteki cryptography i nie implementować algorytmu samodzielnie. Do szyfrowania należy używać schematu OAEP, a do podpisów RSA-PSS. Klucza prywatnego nie należy umieszczać w repozytorium ani bezpośrednio w kodzie, lecz trzeba kontrolować jego dostęp i rotację.

Oceń artykuł

Ocena: 5.00 Liczba głosów: 1

Tagi

podpisy cyfrowe
oaep
szyfrowanie hybrydowe
python
rsa
Autor Konstanty Jankowski
Konstanty Jankowski
Nazywam się Konstanty Jankowski i od sześciu lat zajmuję się programowaniem, szczególnie w języku Python oraz nowoczesnymi technologiami. Moje zainteresowanie tymi tematami zrodziło się podczas studiów, kiedy odkryłem, jak wiele możliwości stwarza programowanie w codziennym życiu. Lubię dzielić się swoją wiedzą i pomagać innym zrozumieć złożoność zagadnień związanych z technologią. W moich tekstach skupiam się na praktycznych aspektach programowania, analizując aktualne trendy oraz uproszczając trudne koncepcje, aby były dostępne dla każdego. Dokładam wszelkich starań, aby dostarczać rzetelne, zrozumiałe i aktualne informacje. Staram się porównywać różne źródła i organizować wiedzę w sposób jasny, co pozwala mi na skuteczne przekazywanie informacji. Wierzę, że dobra edukacja w obszarze programowania i technologii może otworzyć drzwi do wielu fascynujących możliwości.

Udostępnij artykuł

Napisz komentarz