Valitud-krüpteeritud teksti rünnak (CCA) on krüptoanalüüsi ründemudel, mille korral ründaja saab valida või konstrueerida mõningaid krüptotekste ning esitada neid dekrüpteerimise "oraklile" (süsteemile või teenusele), mis tagastab nende dekrüpteeritud tulemuse või muu informatsiooni, mis sõltub dekrüpteerimisest. Selle teabe põhjal püüab ründaja saada teada saladust (näiteks privaatvõtit) või taastada algse sõnumi. CCA on oluliselt tugevam kui lihtsamad ründemudelid nagu valitud-tavalise-teksti rünnak (CPA) või ainult-krüptoteksti rünnak: CCA eeldab, et ründajal on juurdepääs dekrüpteerimisvõimalusele, isegi kui see juurdepääs on piiratud.
Kuidas CCA toimib
Ründaja lähtub sellest, et süsteem mingil moel vastab dekrüpteerimispäringutele — kas otseselt (näiteks API, mis dekrüpteerib), või kaudselt (veateade, ajaviide, käitumuslik erinevus). Mittetäielik või osaline juurdepääs võib siiski olla piisav: isegi lihtne "padding korrektne/ebaõige" vastus võib aja jooksul võimaldada sõnumi rekonstrueerimist. Rünnak võib olla:
- mitteadaptatiivne (CCA1) — ründaja saab oraklit vaid enne sihtvõtme kasutamist;
- adaptatiivne (CCA2) — ründaja võib valida uusi krüptotekste, saades vahepeal orakli vastuseid (see on tugevam ja realistlikum mudel).
Näited ja ajaloolised rünnakud
Tuntud reaalsed näited illustreerivad CCA ohtlikkust. Näiteks Bleichenbacheri rünnak (1998) sihtis RSA-põhiseid süsteeme, mis kasutasid PKCS#1 v1.5 täitmist: ründaja esitas serverile modifitseeritud krüptotekste ja kasutas serveri vastuseid (kas padding oli korrektne) et rekonstrueerida algsõnumi. Samamoodi on viimaste aastate padding oracle’i rünnakud (nt Vaudenay ja hilisemad variandid) kasutanud süsteemi vigaseid veateateid või õhukeselt erinevat käitumist, et samm-sammult taastada salajast teavet.
Lisaks võib turvarisk tekkida, kui sama mehhanismi kasutatakse nii sõnumite allkirjastamiseks kui dekrüpteerimiseks (nt kui RSA kasutatakse mõlemas otstarbes ilma nõuetekohase vorminduse ja hajutamiseta). Kui allkirjastatav sõnum ei läbinud sobivat hashing'ut ja korrektset vormindust, võib ründaja konstrueerida sõnumeid, mis lubavad allkirjastamis- või dekrüpteerimisoraklil lekitada väärtuslikku infot.
Kaitsemeetmed ja parimad tavad
Süsteemi disainimisel tuleb vältida olukordi, kus ründaja saab toimiva dekrüpteerimisorakli. Olulised kaitseprintsiibid ja tehnilised meetmed:
- Kasutage tõestatult turvalisi skeeme (IND-CCA turvalisus): valige krüptosüsteemid, mis on matemaatiliselt näidatud vastupidavaks valitud krüptotekstide rünnakutele — näiteks RSA-OAEP krüpteerimiseks ja Cramer–Shoup avalike võtmete šemideks.
- Autenditud krüpteerimine / AEAD: eelistage autenditud sümmeetrilise krüpteerimise vorme, mis pakuvad korraga konfidentsiaalsust ja terviklikkust (nt AES-GCM, ChaCha20-Poly1305). Need vähendavad dekrüpteerimisorakli kasulikkust, sest ründajal pole juurdepääsu eraldi dekrüpteeritud baasinfole ilma kehtiva autentimismärgita. (Võrdle autenditud ja sümmeetrilise krüpteerimise lahendusi.)
- Õige täitmiste/algoritmide kasutus: kasutage RSA puhul OAEP täitmist (RSA-OAEP) krüpteerimiseks ja PSS–tühistust allkirjastamiseks; vältige deterministlikke või vananenud täitmisi nagu PKCS#1 v1.5 ilma täiendava kaitseta.
- Väldi dekrüpteerimisorakli eksponeerimist: teenused ei tohiks dekrüpteerimist pakkuda avalikult ega vastata viisil, mis erinevuste kaudu eksponereerib infot. Kui dekrüpteerimine on vajalik, piirake sellele juurdepääsu ja logige/kontrollige päringuid.
- Ühtlustatud ja mitteinformatiivsed veateated: tagastage vigadel (nt vale padding, vale autentimine) võimalikult sarnane, mitteinformatiivne vastus, et ei lekiks kõrvalinformatsiooni, mida ründaja saaks kasutada.
- Ajaliselt konstantne töötlemine: vältige erinevustest tulenevaid aja- või ajaviitelekkeid (constant-time implementatsioonid, kus võimalik).
- Piirangud ja järelkontroll: rakendage päringute piiranguid (rate limiting), tõendamine, ja audit, et takistada laiaulatuslikke või automaatseid oraklipäringuid.
- Ärge allkirjastage või töötlege "tooreid" sõnumeid: enne allkirjastamist kasutage turvalist hashimist ja hormindamist; ärge kasutage sama funktsiooni nii allkirjade kui dekrüpteerimise jaoks ilma eristava täiteta.
Praktilised soovitused
- Uuendage krüptograafilisi raamistikke ja teeke regulaarselt, sest vanad täitmisviisid võivad olla haavatavad.
- Kasutage protokolle, mis juba disainilt arvestavad CCA ohtudega (nt kaasaegsed TLS-i versioonid, mis toetavad AEAD-konstruktsioone).
- Testige süsteemi padding oracle’i ja muude anomaalide suhtes ning viige läbi turvaauditeid, et tuvastada võimalikud oraklid.
- Kui realiseerite avalikke API-sid, veenduge, et need ei muutu tahtmatult dekrüpteerimisorakliteks (nt ümbersuunatud dekrüpteerimise kaudu).
Kokkuvõttes: valitud-krüptoteksti rünnak (CCA) on võimas ründemudel, mis nõuab nii teoreetilist kui praktilist kaitset. Parim praktika on kasutada krüptosüsteeme ja protokolle, mis on tõestatult CCA-kindlad, rakendada autenditud krüpteerimist, õigesti vormistada ja hajutada allkirjastatavaid sõnumeid ning vältida mistahes avalikku dekrüpteerimisoraklit või informatiivseid veateateid.