pprime×qprime=n = pq2048 bitseasy forward, hard reversefactoring n breaks RSA

RSA šifriranje

11 min pročitatiKriptografija

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:

  1. Odaberite dva velika nasumična prosta broja p i q (obično 2048 bita svaki).
  2. Računajte n = p × q. Ovo je modul, javno.
  3. Izračunajte Eulerov tocijent: φ(n) = (p-1)(q-1).
  4. Odaberite mali neparni e koprost s φ(n). Obično 65537 (=2^16+1).
  5. 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.
Objašnjenje RSA enkripcije: Algoritam koji je učinio kriptografiju s javnim ključem praktičnom