RSA: co to jest, algorytm i zastosowanie szyfrowania

Autor: IT Sectr Opublikowano: 2026-04-02 Czas czytania: 9 min

RSA — kryptosystem z kluczem publicznym zapewniający szyfrowanie i podpis cyfrowy w oparciu o złożoność obliczeniową faktoryzacji dużych liczb. Według NIST Special Publication 800-56B Rev. 2 (2023), RSA z długością klucza 2048 bitów pozostaje standardem bezpieczeństwa dla systemów rządowych i komercyjnych. Algorytm jest szeroko stosowany w protokołach TLS, podpisach cyfrowych i szyfrowaniu danych w aplikacjach mobilnych.

Najważniejsze

  • RSA — algorytm szyfrowania asymetrycznego używający pary kluczy: publicznego i prywatnego.
  • Bezpieczeństwo algorytmu opiera się na matematycznej trudności rozkładu dużej liczby na czynniki pierwsze.
  • Rozmiar klucza 2048 bitów jest uważany za minimalnie bezpieczny od 2023 roku według standardu NIST.
  • RSA jest stosowany w certyfikatach TLS, podpisach cyfrowych i protokołach uwierzytelniania.
  • Programowanie mobilne używa RSA poprzez wbudowane biblioteki kryptograficzne Android Keystore i iOS Security Framework.

Co to jest RSA?

RSA — algorytm kryptograficzny z kluczem publicznym opracowany w 1977 roku przez Ronalda Rivesta, Adi Shamira i Leonarda Adlemana. Nazwa pochodzi od pierwszych liter nazwisk autorów. Algorytm był pierwszym praktycznie stosowanym asymetrycznym systemem kryptograficznym, w którym klucze szyfrowania i deszyfrowania różnią się.

Historia powstania

Algorytm RSA został opublikowany w 1977 roku w czasopiśmie Scientific American i opiera się na wcześniejszych pracach Whitfielda Diffiego i Martina Hellmana nad kryptografią z kluczem publicznym. Massachusetts Institute of Technology uzyskał patent na RSA w 1983 roku, który obowiązywał do 2000 roku. Według raportu RSA Laboratories (2023), algorytm pozostaje jednym z najbardziej rozpowszechnionych standardów kryptograficznych na świecie — jest używany w miliardach urządzeń codziennie.

Zasada asymetryczności

W przeciwieństwie do szyfrów symetrycznych, gdzie ten sam klucz jest używany zarówno do szyfrowania, jak i deszyfrowania, RSA operuje matematycznie powiązaną parą kluczy. Klucz publiczny może być opublikowany dla wszystkich bez ryzyka kompromitacji systemu. Klucz prywatny jest znany tylko właścicielowi i nigdy nie jest przesyłany przez sieć. Według badania IBM Security X-Force Threat Intelligence Index (2024), szyfrowanie asymetryczne jest używane w 96% nowoczesnych protokołów bezpiecznego przesyłania danych.

Podstawy matematyczne

Bezpieczeństwo RSA opiera się na problemie faktoryzacji — rozkładzie iloczynu dwóch dużych liczb pierwszych na czynniki. Jeśli wybrać liczby pierwsze p i q o długości 1024 bitów każda, to ich iloczyn n będzie miał 2048 bitów. Obliczenie p i q znając tylko n nowoczesnymi metodami jest praktycznie niemożliwe: według oceny ekspertów CNRS (2024), złamanie RSA-2048 wymagałoby ponad 300 miliardów lat obliczeń na klasycznym komputerze.

Jak działa algorytm RSA

Przyjrzyjmy się pełnemu cyklowi działania RSA od generowania kluczy po szyfrowanie i deszyfrowanie wiadomości. Zrozumienie tych etapów jest niezbędne do poprawnej implementacji algorytmu w aplikacjach mobilnych.

Generowanie kluczy

Proces rozpoczyna się od wyboru dwóch dużych liczb pierwszych p i q. Oblicza się moduł n = p x q, który określa długość klucza. Następnie oblicza się funkcję Eulera phi(n) = (p-1)(q-1). Wybiera się wykładnik publiczny e, względnie pierwszy z phi(n). Wykładnik prywatny d jest obliczany jako odwrotność multiplikatywna e modulo phi(n). Według NIST SP 800-56B Rev. 2, minimalna długość n powinna wynosić 2048 bitów dla zapewnienia odpowiedniej ochrony.

java
import java.security.KeyPairGenerator;
import java.security.KeyPair;
import java.security.SecureRandom;

public class RSAKeyGenerator {
    public static KeyPair generateKeyPair() throws Exception {
        KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
        generator.initialize(2048, new SecureRandom());
        return generator.generateKeyPair();
    }
}

Szyfrowanie i deszyfrowanie

Aby zaszyfrować wiadomość m, nadawca przekształca ją na liczbę całkowitą mniejszą od n i oblicza szyfrogram c = m^e mod n. Odbiorca używa klucza prywatnego d do odzyskania oryginalnej wiadomości: m = c^d mod n. Należy zauważyć, że RSA nie jest przeznaczony do szyfrowania dużych ilości danych ze względu na niską wydajność — maksymalny rozmiar wiadomości jest równy długości klucza minus bajty pomocnicze (około 190 bajtów dla RSA-2048 z OAEP).

java
import javax.crypto.Cipher;
import java.security.PublicKey;
import java.util.Base64;

public class RSAEncryptor {
    public static String encrypt(String data, PublicKey publicKey) throws Exception {
        Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] encrypted = cipher.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(encrypted);
    }
}

Podpis cyfrowy na RSA

RSA jest również używany do tworzenia podpisów cyfrowych — mechanizmu weryfikacji autentyczności i integralności danych. Właściciel podpisuje skrót wiadomości swoim kluczem prywatnym, a każda zainteresowana osoba może zweryfikować podpis za pomocą klucza publicznego. Według raportu Sectigo Certificate Transparency (2025), ponad 85% certyfikatów TLS w Internecie używa RSA do podpisu cyfrowego, co czyni algorytm podstawą zaufania komunikacji sieciowej.

kotlin
import java.security.Signature

fun signData(data: ByteArray, privateKey: java.security.PrivateKey): ByteArray {
    val signature = Signature.getInstance("SHA256withRSA")
    signature.initSign(privateKey)
    signature.update(data)
    return signature.sign()
}

fun verifySignature(
    data: ByteArray, signedData: ByteArray, publicKey: java.security.PublicKey
): Boolean {
    val signature = Signature.getInstance("SHA256withRSA")
    signature.initVerify(publicKey)
    signature.update(data)
    return signature.verify(signedData)
}

Rozmiary kluczy i poziom bezpieczeństwa

Długość klucza bezpośrednio wpływa na siłę kryptograficzną RSA. Wraz ze wzrostem mocy obliczeniowych minimalny dopuszczalny rozmiar klucza jest regularnie aktualizowany przez międzynarodowe organizacje normalizacyjne. Przyjrzyjmy się obecnym zaleceniom NIST i innych regulatorów.

Długość kluczaOdpowiednik symetrycznyStatus
1024 bity80 bitówZakazany od 2023 roku
2048 bitów112 bitówMinimalny standard
3072 bity128 bitówZalecany dla nowych systemów
4096 bitów256 bitówDla danych poufnych

Wpływ na wydajność

Zwiększenie długości klucza RSA znacząco wpływa na czas wykonywania operacji. Generowanie klucza o długości 4096 bitów zajmuje około 10 razy więcej czasu niż 2048 bitów. Operacje szyfrowania i deszyfrowania z długim kluczem wymagają więcej zasobów obliczeniowych, co jest krytyczne dla urządzeń mobilnych z ograniczonym zużyciem energii.

Zagrożenie kwantowe

Wraz z rozwojem obliczeń kwantowych RSA może zostać złamany za pomocą algorytmu Shora w czasie wielomianowym. Algorytm ten, zaproponowany przez Petera Shora w 1994 roku, pozwala na faktoryzację dużych liczb w czasie O((log n)^3) operacji. Według IBM Quantum Roadmap (2025), praktyczne złamanie RSA-2048 oczekiwane jest nie wcześniej niż 2035 rok, jednak NIST już zaleca stopniowe przejście na algorytmy postkwantowe CRYSTALS-Kyber i CRYSTALS-Dilithium.

Zastosowanie RSA w programowaniu mobilnym

RSA jest aktywnie wykorzystywany w aplikacjach mobilnych do zapewnienia bezpiecznego przesyłania danych, weryfikacji autentyczności serwerów i ochrony transakcji cyfrowych. Integracja odbywa się poprzez standardowe API kryptograficzne obu głównych platform.

Android Keystore

Platforma Android udostępnia Android Keystore — systemowe repozytorium kluczy kryptograficznych zabezpieczone na poziomie sprzętowym przez Trusted Execution Environment. Klucze RSA wygenerowane w KeyStore nie mogą zostać wyodrębnione z urządzenia nawet w przypadku kompromitacji aplikacji. Zapewnia to ochronę przed szeroką klasą ataków, w tym malware z dostępem root.

kotlin
import android.security.keystore.KeyGenParameterSpec
import android.security.keystore.KeyProperties
import java.security.KeyPairGenerator

fun generateKeyInAndroidKeystore() {
    val generator = KeyPairGenerator.getInstance(
        KeyProperties.KEY_ALGORITHM_RSA,
        "AndroidKeyStore"
    )
    val spec = KeyGenParameterSpec.Builder(
        "rsa_key_pair",
        KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT
    )
        .setKeySize(2048)
        .setBlockModes(KeyProperties.BLOCK_MODE_ECB)
        .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_OAEP)
        .build()
    generator.initialize(spec)
    val keyPair = generator.generateKeyPair()
}

iOS Security Framework

W iOS do pracy z RSA używany jest Security Framework z dostępem do Secure Enclave na urządzeniach z układem A7 i nowszym. Secure Enclave to dedykowany koprocesor odizolowany od głównego procesora, który wykonuje operacje kryptograficzne i przechowuje klucze w sprzętowej enklawie. Klucze RSA mogą być generowane zarówno wewnątrz Secure Enclave, jak i w programowym Keychain z różnymi poziomami dostępu.

Szyfrowanie hybrydowe w praktyce

W rzeczywistych aplikacjach mobilnych RSA rzadko jest używany do bezpośredniego szyfrowania dużych danych. Standardową praktyką jest schemat hybrydowy: aplikacja generuje klucz sesyjny AES, szyfruje go kluczem publicznym RSA serwera i wysyła na serwer. Cały następny ruch jest szyfrowany AES, co jest 100–1000 razy szybsze niż bezpośrednie przesyłanie danych przez RSA.

Zalety i ograniczenia RSA

Jak każdy algorytm kryptograficzny, RSA ma mocne i słabe strony, które należy uwzględnić przy projektowaniu bezpiecznych systemów. Obiektywna ocena pomaga wybrać właściwe narzędzie do konkretnego zadania.

Kluczowe zalety

Główną zaletą RSA jest rozwiązanie fundamentalnego problemu dystrybucji kluczy — klucz publiczny można swobodnie publikować bez ryzyka kompromitacji całego systemu. Uniwersalność algorytmu przejawia się w obsłudze zarówno szyfrowania, jak i podpisu cyfrowego tą samą parą kluczy. Ponadto RSA ma rozległy ekosystem wsparcia: biblioteki są dostępne dla wszystkich języków i platform.

Główne ograniczenia

Główną wadą RSA jest niska wydajność w porównaniu z algorytmami symetrycznymi. Deszyfrowanie RSA-2048 na nowoczesnym procesorze mobilnym zajmuje około 5–15 milisekund, podczas gdy AES-256 przetwarza gigabajty danych w tym samym czasie. Ponadto RSA jest podatny na ataki kwantowe za pomocą algorytmu Shora, co ogranicza jego zastosowanie w systemach z długoterminowym okresem ochrony danych.

Zalecenia dotyczące użycia

Dla projektów mobilnych eksperci NIST zalecają: używaj RSA tylko do szyfrowania kluczy i podpisów cyfrowych, wybieraj długość klucza nie mniejszą niż 3072 bity dla nowych projektów, łącz RSA z AES w schemacie hybrydowym i śledź rozwój standardów postkwantowych w celu planowej migracji w długoterminowej perspektywie.

Często zadawane pytania

Jaka jest różnica między RSA a AES?

RSA — algorytm asymetryczny z parą kluczy używany do szyfrowania małych ilości danych i podpisów cyfrowych. AES — algorytm symetryczny z jednym wspólnym kluczem, działający 100–1000 razy szybciej niż RSA. W nowoczesnych systemach są one łączone: RSA zabezpiecza przesyłanie klucza sesyjnego AES, a AES szyfruje główny ruch.

Jaki rozmiar klucza RSA jest obecnie uważany za bezpieczny?

Minimalnym bezpiecznym rozmiarem od 2023 roku jest RSA-2048 zgodnie z NIST SP 800-131A Rev. 2. Klucze 1024 bitów są oficjalnie zakazane dla systemów rządowych USA. Dla nowych projektów zaleca się 3072 bity, co zapewnia margines bezpieczeństwa i równoważną odporność 128-bitowemu szyfrowaniu symetrycznemu.

Czy można używać RSA w aplikacjach mobilnych?

Tak, RSA jest szeroko stosowany w aplikacjach mobilnych. Android udostępnia Android KeyStore do sprzętowego generowania i bezpiecznego przechowywania kluczy RSA. iOS — Security Framework z obsługą Secure Enclave. Do szyfrowania dużych danych zaleca się schemat hybrydowy RSA + AES, gdzie RSA szyfruje tylko klucz sesyjny.

Czy można złamać RSA-2048?

Na klasycznych komputerach złamanie RSA-2048 jest praktycznie niemożliwe — według obecnych szacunków wymagałoby to ponad 300 miliardów lat ciągłych obliczeń. Jednak komputer kwantowy z wystarczającą liczbą kubitów będzie w stanie złamać RSA-2048 w kilka minut za pomocą algorytmu Shora. Według szacunków IBM, taki komputer pojawi się nie wcześniej niż 2035 roku.

Jakie są alternatywy dla RSA?

Wśród algorytmów asymetrycznych popularne są ECC (Elliptic Curve Cryptography), zapewniający równoważne bezpieczeństwo przy mniejszej długości klucza — 256-bitowy ECC jest równoważny RSA-3072. Dla ery postkwantowej NIST wybrał CRYSTALS-Kyber do szyfrowania i CRYSTALS-Dilithium do podpisów cyfrowych w 2024 roku.

Podsumowanie

  • RSA — algorytm szyfrowania asymetrycznego oparty na trudności faktoryzacji dużych liczb.
  • Para kluczy — publiczny do szyfrowania i prywatny do deszyfrowania, rozwiązuje problem dystrybucji kluczy.
  • Rozmiar 2048 bitów jest minimalnym standardem bezpieczeństwa od 2023 roku.
  • Wydajność RSA jest o 2–3 rzędy niższa niż szyfrów symetrycznych, dlatego jest używany w schematach hybrydowych.
  • Podpisy cyfrowe na RSA są stosowane w 85% certyfikatów TLS w Internecie.
  • Platformy mobilne Android i iOS udostępniają wbudowane API do pracy z RSA.
  • Migracja postkwantowa — do 2035 roku RSA pozostanie głównym standardem, następnie rozpocznie się przejście na nowe algorytmy.

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również