RSA (Rivest-Shamir-Adleman) je algoritem, ki ga sodobni računalniki uporabljajo za šifriranje in dešifriranje sporočil. Je asimetrični kriptografski algoritem. Asimetrični pomeni, da obstajata dva različna ključa. To se imenuje tudi kriptografija z javnim ključem, saj lahko enega od ključev dobi kdor koli. Drugi ključ mora biti zasebni. Algoritem temelji na dejstvu, da je iskanje faktorjev velikega sestavljenega števila težavno: kadar so faktorji praštevila, se problem imenuje prafaktorizacija. Je tudi generator ključnih parov (javnega in zasebnega ključa).

Osnovni princip in zgodovina

RSA sta leta 1977 razvila Ron Rivest, Adi Shamir in Leonard Adleman. Temelji na eno­stranski naravi ope­racij modularne eksponentacije: izračun c = m^e mod n je enostaven, medtem ko je obratna operacija — pridobivanje m iz c brez poznavanja zasebnega eksponenta — težavna, če je n produkt dveh velikih praštevil. Ključna varnostna predpostavka algoritma je, da je faktorizacija velikega sestavljenega števila n (n = p × q) računsko nepraktična z današnjimi metodami, če sta p in q dovolj veliki.

Ustvarjanje ključev (načeloma)

Osnovni koraki za generiranje para ključev so:

  • Izberemo dve veliki praštevili p in q (običajno vsaj nekaj sto bitov vsako, skupaj za moderno varnost 2048–4096 bitov za n).
  • Izračunamo n = p × q — to je modulus, ki je del javnega in zasebnega ključa.
  • Izračunamo φ(n) = (p−1)(q−1) (Eulerjeva funkcija) ali alternativno Carmichaelovo funkcijo λ(n).
  • Izberemo javni eksponent e, kjer 1 < e < φ(n) in gcd(e, φ(n)) = 1 (pogostečno se uporablja e = 65537 zaradi učinkovite implementacije in varnosti).
  • Izračunamo zasebni eksponent d kot multiplikativni inverz e modulo φ(n), torej d taki, da e·d ≡ 1 (mod φ(n)).
  • Par ključa: javni ključ je (n, e), zasebni ključ je (n, d) — zasebni ključ morate varovati.

Šifriranje in dešifriranje

Če želimo sporočilo m šifrirati z javnim ključem (n, e), izračunamo c = m^e mod n. Dešifriranje s zasebnim ključem (n, d) je m = c^d mod n. V praksi mora biti sporočilo najprej ustrezno kodirano/paddingirano (npr. OAEP) in pretvorjeno v številsko vrednost manjšo od n.

Uporabe

  • Varnost komunikacij v internetu (npr. pri vzpostavitvi TLS povezav) — pogosto RSA uporablja za zaščito izmenjave simetričnih ključev.
  • Digitalni podpisi — preverjanje pristnosti in integritete sporočil ali programske opreme. Podpis se izvede z zasebnim ključem, preverjanje s javnim ključem.
  • Infrastrukture javnih ključev (PKI), certifikati X.509 in sistemi upravljanja ključev.

Varnost, ranljivosti in dobre prakse

RSA je varen, če so izpolnjeni določenih pogoji. Pomembne točke:

  • Velikost ključa: priporočena dolžina je danes vsaj 2048 bitov; za višjo varnost (daljša življenjska doba) se uporablja 3072 ali 4096 bitov.
  • Puffanje in sheme zapolnitve (padding): vedno uporabite varne sheme (npr. OAEP za šifriranje, PSS za podpise). Nezaščiteno izravnanje ali uporaba surovega RSA je ranljiva na napade (npr. chosen-ciphertext).
  • Izogibanje ponovnim izkoristkom malih eksponentov in slabo izbranih parametrov; e = 65537 je danes standardna izbira.
  • Stran-kanalni napadi: zaščititi implementacije pred šumenjem, merjenjem porabe energije, časovnimi razlikami ipd.
  • Varovanje zasebnega ključa: uporaba HSM-jev, šifriranih ključnic, strojne podpore in omejitev dostopa.
  • Kvadratno-skoristni učinki kvantnih računalnikov: Shorov algoritem bi faktorizacijo narediti učinkovito, zato je za prihodnost potrebna selitev na post-kvantne algoritme, vendar danes je RSA še vedno široko v uporabi.

Omejitve in zmogljivost

RSA je veliko počasnejši od simetričnih algoritmov (AES ipd.), zato se v praksi pogosto uporablja le za varno izmenjavo simetričnega ključa, medtem ko dejanske podatkovne tokove šifrira simetrični algoritem. Učinkovitost implementacije je odvisna od velikosti ključa in optimizacij modularne aritmetike (CRT pri dešifriranju z zasebnim ključem, kjer se uporablja razcep po p in q, znatno pohitri operacijo).

Priporočila za uporabo

  • Vedno uporabljajte dobro vzdrževane in preizkušene kriptografske knjižnice (OpenSSL, libsodium, Bouncy Castle ipd.).
  • Uporabljajte varne načine zapolnitve (npr. OAEP, PSS) in primerno dolžino ključa glede na zahtevano stopnjo varnosti.
  • Redno obnavljajte in zavračajte stare ključe ter zaščitite zasebni ključ z ustreznimi postopki upravljanja.
  • Za sisteme, kjer je pričakovana dolga življenjska doba varnosti ali visoko tveganje kvantnih napadov, načrtujte prehod na post-kvantne algoritme.

RSA je temelj sodobne kriptografije z javnim ključem in ostaja široko uporabljen zaradi svoje preprostosti, formalne osnove in podpore v protokolih in standardih. Kljub temu njegova varnost ni samoumevna — pravilna uporaba, ustrezna velikost ključa in varne implementacije so ključni za ohranjanje zaupnosti in integritete komunikacij.