Napad z izbranim šifrirnim besedilom (CCA) je model napada za kriptoanalizo, pri katerem napadalec izbere eno ali več šifrirnih besedil in pridobi njihovo dešifriranje z neznanim ključem. V najenostavnejši obliki napadalec pošilja izbrana šifrirna besedila v sistem in opazuje odzive oziroma prejme odprto besedilo; na podlagi teh informacij lahko izvede nadaljnje korake za razkritje skrivnega ključa ali za pridobitev drugih skrivnosti.
Vrste CCA in zakaj so nevarni
Napadi z izbranim šifrirnim besedilom se razlikujejo glede na to, ali napadalec lahko izvede poizvedbe pred ali tudi po tem, ko prejme izziv (tj. šifrirno besedilo, ki ga želi napasti). Pomembni pojmi so:
- NE-adaptiven CCA (CCA1) — napadalec lahko poizveduje o dešifriranjih le pred tem, ko dobi izziv.
- Adaptiven CCA (CCA2) — napadalec lahko poizveduje tudi po prejemu izziva, le da običajno ne sme zahtevati dešifriranja samega izziva. CCA2 je močnejši in realnejši model napada.
Kriptosistemi, ki so varni v smislu indistinguishability under chosen-ciphertext attack (IND-CCA), so zasnovani tako, da tudi ob dostopu do dešifrirnega oracle-a napadalec ne more izvedeti koristnih informacij o izzivnem šifrirnem besedilu.
Primeri ranljivosti in znani napadi
Tudi majhen dostop do funkcije dešifriranja lahko povzroči zelo subtilne in praktično izkoriščene ranljivosti. Med znanimi primeri so:
- Padding oracle napadi — če sistem ob vračanju napake razkrije, ali je bila oblika polnila (padding) pravilna, lahko napadalec postopoma rekonstruira odprto besedilo. Tak napad je bil praktično uporabljen proti nekaterim implementacijam šifriranja in protokolov (npr. ranljivosti v starejših implementacijah TLS).
- Bleichenbacherjev napad — klasičen primer izrabe odzivov pri dešifriranju RSA PKCS#1 v1.5, kjer napadalec z vrsto poizvedb postopoma dobi informacije, ki omogočijo dešifriranje.
- Uporaba istega mehanizma za podpisovanje in dešifriranje — nekateri sistemi, na primer RSA, so bili uporabljeni tako za podpisovanje kot za dešifriranje. Če se za podpisovanje sporočila ne uporablja ustrezno hashanje ali varna shema za podpise, to lahko omogoči napade (npr. tvorjenje veljavnih podpisov ali prevzem sporočil).
Kako se zaščititi — splošna priporočila
Zaščita pred napadi z izbranim šifrirnim besedilom zahteva kombinacijo pravilne kriptografske sheme, varne implementacije in skrbnega načrtovanja protokola. Glavne smernice:
- Uporabljajte kriptosisteme, ki so dokazano varni proti CCA (npr. RSA-OAEP za RSA-šifriranje, Cramer–Shoup in sodobne sheme z dokazano IND-CCA varnostjo).
- Za simetrično šifriranje uporabljajte overjeno simetrično šifriranje oziroma AEAD-sheme (naprimer AES-GCM, ChaCha20‑Poly1305) ali vzorce encrypt-then-MAC, ki zagotavljajo protivmešljivost in avtentičnost podatkov.
- Za podpise uporabite varne sheme in vedno hashrajte sporočila pred podpisovanjem; moderne sheme za podpise (npr. RSA-PSS) nudijo boljše varnostne lastnosti kot starejši načini.
- Ne razkrivajte podrobnih informacij o napakah. Standardizirajte in omejite sporočila o napakah, da ne nastane «padding oracle» ali druge izpostavitve informacij.
- Izogibajte se izpostavljanju dešifrirnega oracle-a (npr. ne dovoljujte, da zunanje entitete neposredno pošiljajo poljubne šifrirne bloke k dešifriranju).
- Uporabljajte preverjene kriptografske knjižnice in protokole z revizijami ter sledite priporočilom strokovnjakov; ne izmišljajte lastnih kriptosistemov.
- Implementirajte konstantni čas za kriptografske operacije, da zmanjšate tveganje časovnih stranskih kanalov.
- Ločite namene ključev (npr. ločeni ključi za podpisovanje in dešifriranje) in uporabljajte varne protokole za upravljanje s ključi.
- Redno posodabljajte programsko opremo in odpravljajte znane ranljivosti v protokolih (npr. prehod na TLS z AEAD algoritemi).
Praktična navodila za razvijalce in skrbnike
- Izberite algoritme in sheme, ki so v standardih priporočene in imajo dokazano odpornost na CCA.
- Pri oblikovanju protokolov zagotovite, da napadalec ne more dostopati do funkcije dešifriranja za poljubna šifrirna besedila, še posebej ne po tem, ko je prejel izziv.
- Pri sprejemu vhodnih podatkov izvajajte strogo preverjanje veljavnosti (format, dolžina, integriteta) pred kakršnokoli obdelavo ali povratnim sporočilom.
- Če sistem potrebuje tako šifriranje kot podpisovanje, uporabite ločene in pravilno konfigurirane sheme (npr. RSA-OAEP za šifriranje, RSA-PSS za podpise) in vedno hashrajte sporočila pred podpisom.
- Razmislite o uporabi protokolov, ki vključujejo zaščito pred CCA v sami zasnovi (npr. moderne izvedbe TLS, šifriranje datotek z AEAD, varne elektronske komunikacije z end‑to‑end šifriranjem).
Z upoštevanjem zgornjih smernic in z uporabo modernih, dokazano varnih kriptografskih shem lahko znatno zmanjšate tveganje napadov z izbranim šifrirnim besedilom. Varnost je večplastna — poleg matematične varnosti sheme je enako pomembna varna implementacija, pravilno ravnanje z napakami in skrbna administracija ključev.