RSA (Rivest–Shamir–Adleman) - tai algoritmas, naudojamas šiuolaikiniuose kompiuteriuose pranešimams šifruoti ir iššifruoti. Tai asimetrinis kriptografinis algoritmas. Asimetrinis reiškia, kad yra du skirtingi raktai. Tai dar vadinama viešojo rakto kriptografija, nes vienas iš raktų gali būti duotas bet kam. Kitas raktas turi būti laikomas privačiu. Algoritmas pagrįstas tuo, kad rasti didelio sudėtinio skaičiaus veiksnius yra sunku: kai veiksniai yra pirminiai skaičiai, problema vadinama pirminiu faktorizavimu. Jis taip pat yra raktų porų (viešojo ir privataus rakto) generatorius.
Kaip RSA veikia — pagrindinė idėja
RSA naudoja dviejų skirtingų, bet susietų skaičių porą: viešąjį raktą (pvz., n ir e) ir privatųjį raktą (pvz., d). Viešasis raktas skirtas šifruoti (arba tikrinti parašą), privatusis — dešifruoti (arba kurti parašą). Matematinė pagrindas — modulinė aritmetika: pranešimas m paverčiamas šifrograma c pagal formulę c = m^e mod n, o dešifravimas atliekamas m = c^d mod n.
Raktų generavimas — žingsniai
- 1) Pasirinkite du didelius atsitiktinius pirminius skaičius p ir q.
- 2) Apskaičiuokite n = p × q. n yra modulio reikšmė ir sudaro dalį viešojo rakto.
- 3) Apskaičiuokite φ(n) = (p − 1)(q − 1) (tai Eulerio funkcija; kai kurie implementacijos naudoja alternatyvias reikšmes).
- 4) Pasirinkite viešojo rakto eksponentą e, kurio 1 < e < φ(n) ir kuris būtų susijęs tarpusavyje pirminiu su φ(n) (dažnai naudojamas e = 65537 dėl našumo ir saugumo pusiausvyros).
- 5) Apskaičiuokite privatųjį eksponentą d — tai e modulinė inversija modulo φ(n), t. y. d tokiu atveju, kad d·e ≡ 1 (mod φ(n)).
- 6) Viešasis raktas paprastai sudarytas iš (n, e); privatusis — d (dažnai kartu saugomi p ir q bei papildomi parametrai optimizavimui).
Šifravimas ir dešifravimas (paprasta forma)
Tekstinės (teoriškai) formulės:
- Šifravimas: c = m^e mod n
- Dešifravimas: m = c^d mod n
Tačiau praktikoje niekada neturėtumėte naudoti „paprastos“ (textbook) RSA be papildomų priemonių — ji yra pažeidžiama daugeliu atakų tipų. Todėl naudojamos pačia praktikoje patikrintos pakavimo (padding) schemos.
Skaitmeninis parašas
RSA taip pat naudojamas skaitmeniniams parašams kurti: parašas s = H(m)^d mod n (paprastai pirmiausia pritaikomas kriptografinis hash ir specialus pakavimas). Verifikavimas vyksta skaičiuojant s^e mod n ir lyginant su H(m). Modernios praktikos reikalauja naudoti saugius parašų schemų standartus (pvz., PSS).
Praktinės priemonės: pakavimas ir standartai
- Padding (pakavimas) — būtinas. Be pakavimo, RSA yra pažeidžiamas pasirinkto tekstinio atakų, lemiantis informacijos nutekėjimą. Populiarios schemos: PKCS#1 v1.5 (senesnė, vis dar naudojama) ir OAEP (saugesnė, rekomenduojama šifravimui).
- Parašams — rekomenduojama naudoti RSASSA-PSS (PSS), o ne paprastą „m^d“ be kriptografinio hash ir pakavimo.
Saugumas ir grėsmės
- Pagrindinis saugumo šaltinis: RSA saugumas priklauso nuo to, kad būtų sudėtinga atlikti pirminį faktorizavimą didelio sudėtinio skaičiaus n = p·q.
- Key size: šiuo metu praktikoje rekomenduojama naudoti bent 2048 bitų ilgio modulį n; 3072 bitai — geresnė perspektyvinė apsauga, 4096 bitų — saugesnė, bet lėtesnė.
- Kvantinės grėsmės: Shor algoritmo egzistavimas reiškia, kad kvantiniai kompiuteriai su pakankamai daug qubitų gali išspręsti faktorizavimo problemą žymiai greičiau, todėl ilgalaikei apsaugai reikėtų svarstyti kvantiniu atsparesnes alternatyvas (pvz., post‑quantum algoritmus).
- Praktinės atakos: laiko analizė, šoninės kanalų atakos (power analysis), pakavimo oracle atakos (pvz., Bleichenbacher tipo), netinkamas rakto generavimas (silpni arba susiję pirminiai skaičiai) — visos šios problemos gali kompromituoti RSA.
Našumas ir optimizavimas
- RSA yra lėtesnis už simetrinę kriptografiją, todėl dažnai naudojamas tik simetrinių raktų šifravimui arba raktų pasirašymui/užtikrinimui (hybrid encryption): AES šifruoja didelius duomenis, o RSA šifruoja tik AES raktą.
- Dešifravimo/parašo operacijos gali būti pagreitintos naudojant CRT (Chinese Remainder Theorem) tipo optimizacijas, tačiau tai reikalauja papildomų apsaugos priemonių nuo šoninių atakų.
- Našumui įtaką turi viešojo eksponento e: mažesnis e (pvz., 3 ar 65537) gali pagreitinti šifravimą/arba patikrinimą, bet turi būti naudojamas atsargiai (kai kurios mažo e konfigūracijos gali sukelti saugumo problemų).
Praktinės rekomendacijos
- Naudokite atnaujintus kriptografinius standartus (PKCS#1 OAEP šifravimui, PSS parašams).
- Pasirinkite tik stiprius, atsitiktinius pirminius skaičius ir pakankamą rakto ilgį (minimalus 2048 bitų).
- Saugokite privatųjį raktą: naudokite aparatinę saugyklą (HSM) arba saugius raktų saugojimo sprendimus; įgyvendinkite blokuojančias priemones (pvz., PIN, multifaktorinę autentifikaciją).
- Apsaugokite įgyvendinimą nuo šoninių kanalų atakų — naudokite blinding, konstantinio laiko operacijas ir kt.
- Apsvarstykite alternatyvas (pvz., elliptic-curve algoritmus) jei reikia mažesnių raktų ir geresnio našumo; ilgalaikei apsaugai sekite post‑quantum tyrimus.
Taikymas
RSA plačiai naudojamas TLS/HTTPS sertifikatuose, el. parašuose, kodų pasirašyme, el. pašto apsaugoje ir kituose protokoluose. Dažniausiai jis veikia kartu su simetrinėmis šifravimo schemomis (hybrid encryption), kur RSA apsaugo tik simetrinį raktą.
Apibendrinant: RSA yra svarbus ir plačiai paplitęs viešojo rakto kriptografijos metodas, kurio saugumas remiasi pirminių skaičių faktorizavimo sudėtingumu. Tiesa, saugiam naudojimui reikalingos geros praktikos — tinkamas rakto ilgis, patikimi pirminių skaičių generatoriai, saugus pakavimas ir apsauga nuo praktinių atakų.