RSA šifriranje
RSA je bio prvi praktični algoritam s javnim ključem — onaj koji je omogućio dvoje ljudi da razmjenjuju tajnu bez da se ikada osobno sretnu. Četrdeset osam godina kasnije još uvijek osigurava znatan dio TLS rukovanja, potpisuje svaku PGP poruku i podupire mnoge sheme potpisivanja koda. Polako se zamjenjuju eliptičnim krivuljama, ali ne nestaju.
Cjeloviti članak nalazi se u nastavku na engleskom jeziku.
RSA je kriptosustav s javnim ključem koji su 1977. predstavili Ron Rivest, Adi Shamir i Leonard Adleman na MIT-u. Patent je istekao 2000. godine, nakon čega se proširio na gotovo sve kriptografske knjižnice. RSA omogućuje dvije komplementarne operacije: šifriranje s javnim ključem tako da samo privatni ključ može dešifrirati i potpisivanje s privatnim ključem tako da svatko s javnim ključem može potvrditi.
Matematika, ukratko
RSA-ina sigurnost počiva na poteškoći rastavljanja velikih brojeva. Generiranje ključa:
- Odaberite dva velika nasumična prosta broja p i q (obično 2048 bita svaki).
- Računajte n = p × q. Ovo je modul, javno.
- Izračunajte Eulerov tocijent: φ(n) = (p-1)(q-1).
- Odaberite mali neparni e koprost s φ(n). Obično 65537 (=2^16+1).
- Izračunaj d = e^(-1) mod φ(n). Ovo je privatni ključ.
Javni ključ je par (n, e); privatni ključ je d.
Za šifriranje poruke m: šifrirani tekst c = m^e mod n. Za dešifriranje: m = c^d mod n. Svatko s javnim ključem može šifrirati; samo netko s privatnim ključem može dešifrirati. Da potpišete, obrnuto: s = m^d mod n, potvrdite s m = s^e mod n.
Zašto ovo radi
Trik: računanje d zahtijeva poznavanje φ(n), što zahtijeva faktoring n u p × q. Faktoriziranje 2048-bitnog poluprime-a zahtijeva više računanja nego čovječanstvo. Provjera n = p × q kada već znate p i q je trivijalna. Asimetrija — jednostavno množenje, teško rastavljanje na faktore — cijeli je temelj RSA.
Veličine ključeva
- RSA-1024 — koji su načelno prekršili protivnici s dobrim resursima; NIST ga je zabranio za nove implementacije od 2014.
- RSA-2048 — trenutna osnovna vrijednost. Smatra se sigurnim za srednji rok protiv klasičnih protivnika.
- RSA-3072 — preporučuje se za nove implementacije prema NIST-ovoj vremenskoj liniji prijelaza 2030.
- RSA-4096 — uobičajeno za potpisivanje koda gdje ključ ima horizont od 10 do 20 godina. Sporiji, ali konzervativno siguran.
RSA u praksi
RSA gotovo nikad ne šifrira izravno velike poruke. Sporo je — šifriranje kilobajta zahtijeva tisuće modularnih stepenovanja. Umjesto toga, RSA se koristi u hibridnoj enkripciji: generirajte nasumični AES ključ, šifrirajte podatke s AES-om, šifrirajte samo AES ključ s RSA. Strana za dešifriranje RSA-dekriptira ključ, zatim AES-dešifrira podatke. Svako TLS RSA rukovanje funkcionira na ovaj način; svaka e-pošta šifrirana PGP-om radi na ovaj način.
Dopuna je važna
Plain ("udžbenik") RSA — šifriranje m izravno bez dopune — katastrofalno je nesigurno. Mnogi napadi iskorištavaju fleksibilnost, odsutnost nasumičnosti i rubne slučajeve poput malih m. Pravi RSA koristi sheme ispune:
- PKCS#1 v1.5 padding — originalna ispuna; ranjiv na Bleichenbacherov napad ako implementacije procure je li padding valjan. Još uvijek široko rasprostranjen.
- OAEP (Optimal Asymmetric Encryption Padding) — moderno punjenje; otporan na napade odabranim šifriranim tekstom. Koristite ovo za novu RSA enkripciju.
- PSS (Probabilistic Signature Scheme) — moderno punjenje potpisa; superiorniji od PKCS#1 v1.5 za potpisivanje.
Shema dopunjavanja dio je implementiranog protokola, nije izborna. Pogreške u implementaciji paddinga najčešći su izvor RSA ranjivosti u stvarnim sustavima.
RSA sporo povlačenje
RSA se zamjenjuje iz dva razloga:
- Veličina ključa. RSA-3072 ključevi su veći od ekvivalentnih ključeva eliptične krivulje za 10×. TLS rukovanje i troškovi pohrane zbrajaju se na skali.
- Kvantna otpornost. Dovoljno veliko kvantno računalo faktoriziralo bi RSA putem Shorovog algoritma u polinomijalnom vremenu. ECC je također ranjiv, ali kvantno otporne alternative lakše je implementirati.
TLS 1.3 zastario je razmjenu ključeva RSA u korist ECDHE. Moderno potpisivanje certifikata prelazi na ECDSA. RSA postoji za kompatibilnost instalirane baze (PGP, JWT, pametne kartice, potpisivanje koda) i ostat će godinama.
Postkvantno pitanje
Čak i ako su kvantna računala sposobna razbiti RSA desetljećima daleko, šifrirani podaci s dugoročnom vrijednošću danas se prikupljaju pod pretpostavkom da se kasnije mogu dešifrirati. Vladine depeše, medicinska dokumentacija, intelektualno vlasništvo — "žetva sada, dešifriranje kasnije" trenutni je model prijetnje. NIST-ovi postkvantni standardi (CRYSTALS-Kyber za enkapsulaciju ključeva, CRYSTALS-Dilithium za potpise) primjenjuju se uz RSA u hibridnim konfiguracijama. Implementacije Pure-RSA za dugoročno povjerljive podatke sve se više smatraju neprikladnima.
Često postavljana pitanja
- Je li RSA još uvijek sigurna 2026.?
- Protiv klasičnih protivnika, RSA-2048 i veći ostaju sigurni. Šifra nema poznati praktični proboj. Protiv budućih kvantnih protivnika, RSA se može razbiti u polinomijalnom vremenu nakon što postoji dovoljno velik kvantni hardver - vjerojatno 5-20 godina kasnije. Dugoročno povjerljivi podaci već bi trebali prijeći na hibridne postkvantne sheme.
- Zašto je RSA tako spor u usporedbi s AES-om?
- RSA je algoritam javnog ključa (asimetrični) temeljen na ogromnom modularnom stepenovanju; AES je simetrični algoritam koji radi na 128-bitnim blokovima s hardverskim ubrzanjem. AES je otprilike 1000× brži po bajtu. Zato gotovo svi pravi sustavi koriste RSA samo za razmjenu ključa sesije, a zatim šifriraju skupne podatke pomoću AES-a.
- Koja je razlika između RSA enkripcije i RSA potpisa?
- Oni koriste istu matematiku u suprotnim smjerovima. Šifriranje: šifriranje s javnim ključem, dešifriranje s privatnim. Potpis: "šifriranje" privatnim ključem (zvano potpisivanje), "dekriptiranje" javnim ključem (zvano provjera). Kriptografske primitive razlikuju se u detaljima (padding) i nikada ne biste trebali koristiti isti ključ za oba — zasebni ključevi za potpisivanje i šifriranje su standardni.
- Zašto se 65537 koristi kao RSA javni eksponent?
- To je Fermatov prost broj (2^16 + 1), dovoljno malen da učini enkripciju/provjeru brzom (samo 17 množenja), s rijetkom binarnom reprezentacijom koja omogućuje učinkovito računanje. Veće ili manje vrijednosti rade, ali su sporije ili imaju suptilne rizike ranjivosti. 65537 je prema konvenciji postao univerzalan.
- Mogu li sigurno generirati vlastiti RSA ključ?
- Koristite dobro testiranu biblioteku (OpenSSL, libsodium, GnuPG) i CSPRNG. Nikada nemojte provoditi vlastiti test primalnosti ili implementirati RSA od nule - načini neuspjeha su suptilni i katastrofalni. Generiranje ključa putem <code>ssh-keygen -t rsa -b 3072</code> ili ekvivalenta je u redu; pisanje matematike nije.