Útok na vybraný šifrový text (CCA) je model útoku na kryptoanalýzu, pri ktorom kryptoanalytik získava informácie aspoň čiastočne výberom šifrového textu a získaním jeho dešifrovania pod neznámym kľúčom. Takýto útok predpokladá, že útočník má prístup k tzv. dešifračnému orákulu — mechanizmu alebo službe, ktorá na základe predloženého šifrového textu vráti odpoveď (plný alebo čiastočný) obsahujúcu informáciu o dešifrovaní.
Rozlíšenie: CCA1 (non-adaptive) vs. CCA2 (adaptive)
CCA1 (časťou označovaný aj ako „non-adaptive chosen-ciphertext attack“, niekedy „lunchtime attack“) povoľuje útočníkovi prístup k dešifračnému orákulu len predtým, než dostane výzvu (challenge) — teda môže si zadať dotazy, potom dostane challenge šifrový text a už ďalej orákulu pristupovať nesmie.
CCA2 (adaptive chosen-ciphertext attack) je silnejší model: útočník môže požiadať o dešifrovanie ľubovoľných šifrových textov aj po obdržaní challenge, s jedinou výnimkou — nesmie požiadať o dešifrovanie práve challenge šifrového textu. Security definície sú často formulované ako IND-CCA (indistinguishability under chosen-ciphertext attack).
Prečo je to nebezpečné
- Aj keď útočník nezíska priamy prístup ku kľúču, opakovanými dotazmi na orákulum môže vyextrahovať informácie z chýb, časovania alebo doby odpovede a postupne získať celý plaintext alebo kľúč.
- Kryptosystém, ktorý je bezpečný len proti pasívnemu odpočúvaniu (CPA — chosen-plaintext attack), nemusí odolať aktívnemu CCA útoku.
- Niekedy rovnaké matematické operácie slúžia na viac účelov (napr. RSA bez správneho doplnku pre podpisy a šifrovanie), čo môže viesť k zneužitiu dešifrovania na podpisovanie alebo naopak.
Konkrétne príklady útokov
- Bleichenbacherov útok na RSA s PKCS#1 v1.5 paddingom — útočník vykonáva veľké množstvo dotazov na server, pričom z chýb (napr. odlišná chybová správa pre neplatné odsadenie) dokáže postupne rekonštruovať plaintext.
- Padding-oracle útoky (napr. Vaudenay) proti CBC režimom — ak systém pri neplatnom paddingu vracia odlišnú odpoveď, útočník môže dekódovať bloky šifrového textu postupným skúšaním upravených šifrových textov.
- Rôzne praktické zraniteľnosti v protokoloch (napr. staršie implementácie TLS, chyby pri spracovaní chýb) v minulosti umožnili CCA štýlu útoky ako Lucky Thirteen či ďalšie varianty.
Formálne riešenia a bezpečné konštrukcie
Lepším prístupom je používať kryptosystémy, ktoré sú proukázateľne bezpečné pri útoku na vybraný šifrový text. Medzi známe konštrukcie patria:
- RSA-OAEP — hybridné odstupňovanie paddingu pre RSA (pri splnení určitých predpokladov dokáže zabezpečiť IND-CCA bezpečnosť).
- Cramer–Shoup — verejne známy PKE schéma s formálnym dôkazom odporu voči CCA.
- Overené symetrické šifrovanie — režimy poskytujúce autentifikáciu a dôvernosť zároveň (AEAD), napr. v praxi AES‑GCM alebo ChaCha20‑Poly1305.
- KEM‑DEM (Key Encapsulation Mechanism + Data Encapsulation Mechanism) kombinácie, ktoré poskytujú lepšie formálne vlastnosti v hybridných schémach.
Praktické protiopatrenia pre implementátorov
- Používajte autentifikované šifrovanie (AEAD) namiesto len samostatného šifrovania a samostatného MACu. Preferované sú štandardné režimy ako AES‑GCM alebo ChaCha20‑Poly1305.
- Encrypt‑then‑MAC je bezpečnejšia konštrukcia než MAC‑then‑encrypt alebo encrypt‑and‑MAC, ak nie je použitý AEAD.
- Jednotné a diskrétne chybové hlásenia — nikdy nevracajte rozlišujúce chybové správy pri neúspešnom dešifrovaní (napr. „padding error“ vs. „MAC error“). Odpovede by mali byť časovo a obsahovo čo najviac nerozlíšiteľné.
- Odolnosť voči časovým odozvám — overovania by mali byť implementované konštantným časom, aby sa nedezvelovali informácie meraním času spracovania.
- Obmedzenie rýchlosti a spätné blokovanie — rate‑limiting dotazov na dešifrovanie a monitorovanie neobvyklého správania môže zabrániť hromadným oracle dotazom.
- Nepoužívať „surové“ RSA (priame dešifrovanie bez OAEP) na šifrovanie alebo podpisovanie; na podpisy používať bezpečné schémy ako RSA‑PSS a pred podpisom hashnúť správu.
- Pravidelné aktualizácie knižníc a protokolov — používať overené kryptografické knižnice, ktoré implementujú moderné režimy a opravujú známe zraniteľnosti.
Odporúčania pre návrh protokolov
Pri návrhu protokolov sa odporúča myslieť formálne: definovať hrozby (či útočník má dešifračný orákul, kedy a s akými právami), voliť konštrukcie s dôkazmi bezpečnosti proti IND‑CCA a preferovať overené stavebné bloky (AEAD, KEM‑DEM, proven CCA‑secure PKE). Ak existuje možnosť, vyhnite sa používaniu rovnakého matematického nástroja súčasne na dešifrovanie aj na podpisovanie bez dodatočných bezpečnostných vrstiev (napr. hashovania, paddingu).
Zhrnutie
Útoky na vybraný šifrový text (CCA) sú silný a realistický model útoku, preto by implementácie a protokoly mali predpokladať prítomnosť aktívneho útočníka s možnosťou klásť dešifračné dotazy. Použitím CCA‑bezpečných schém (napr. RSA‑OAEP, Cramer‑Shoup) alebo moderných AEAD režimov a dôslednou implementačnou hygienou (konštantné chyby, constant‑time, rate‑limiting) výrazne znížite riziko úspešného útoku.