Pasirinkto šifro teksto ataka (CCA) – tai kriptoanalizės atakos modelis, kai užpuolikas turi prieigą prie „iššifravimo orakulo“: jis gali pateikti vieną ar daugiau šifrogramų (dažnai net pasirinktų) ir gauti jų iššifruotas versijas, nors nežino tikrojo rakto. Tikslas gali būti atskleisti slaptą raktą, iššifruoti konkrečią šifrogramą arba generuoti galiojančias šifrogramas be rakto.

Kas tai reiškia praktikoje

Skirtumas tarp pasirinkto šifro teksto atakos ir silpnesnio modelio, pvz., pasirinkto žinučių teksto atakos (CPA), yra prieigos tipas: CPA leidžia užpuolikui pasirinkti žinutes ir gauti jų šifrogramas; CCA suteikia papildomą galią — prieigą prie iššifravimo paslaugos. Tai reiškia, kad net gerai atrodančios schemos, kurios atlaiko CPA, gali būti pažeidžiamos CCA.

Tipai

  • Neadaptuojama CCA (CCA1, „lunchtime“) – užpuolikas gali kreiptis į iššifravimo orakulą tik iki tam tikro momento (pvz., iki „pietų pertraukos“), po kurios gauna iššifruoti tikslinę šifrogramą.
  • Adaptuojama CCA (CCA2, pilna CCA) – užpuolikas gali adaptuojamai siųsti šifrogramas orakului ir gauti atsakymus net po to, kai gauna tikslinę šifrogramą, tik negali tiesiogiai užklausti orakulo apie pačią tiksline šifrogramą. CCA2 yra stipriausias praktinis saugumo reikalavimas.

Pavyzdžiai ir žinomos problemos

Istoriškai kelios gerai žinomos atakos naudojo iššifravimo orakulo elgesį:

  • Bleichenbacherio ataka prieš RSA su PKCS#1 v1.5 padingavimu – serverio klaidų pranešimai veikė kaip orakulas ir leido atakuotojui palaipsniui atstatyti pranešimą.
  • CBC padengimo orakulo atakos (pvz., Vaudenay) – netgi vien tik skirtingų klaidų pranešimų grąža ar skirtingas laikas gali atskleisti informaciją apie tarpinį iššifravimo etapą.
  • Atvejo, kai ta pati kriptosistema yra naudojama ir pranešimų pasirašymui, ir iššifravimui. Jei pasirašymo procese nėra taikomas tinkamas hashavimas ar aiškus atskyrimas, gali atsirasti galimybė „perversti“ pasirašymą į iššifravimą arba atvirkščiai.

Kaip apsaugoti sistemą nuo CCA

Geriausia strategija – naudoti kriptografinius schemų konstrukcijas, kurios yra įtikinamai saugios nuo pasirinkto šifro teksto atakos (IND-CCA saugumas). Praktiniai apsaugos būdai:

  • Naudoti IND-CCA saugias viešo rakto schemas: pvz., RSA-OAEP ar Cramer-Shoup vietoje tiesioginio RSA su silpnu padingavimu.
  • Autentifikuotas šifravimas (AE/AEAD): vietoj „šifruoti tik“ naudoti autentifikuoto simetrinio šifravimo formas kaip AES-GCM ar ChaCha20-Poly1305, arba konstruoti „encrypt-then-MAC“ schemą.
  • KEM/DEM ir hibridiniai sprendimai: naudojant raktų apkeitimo mechanizmus (KEM), kurie yra IND-CCA saugūs, kartu su simetriniu DEM komponentu.
  • Atskirti funkcijas: nenaudoti to paties algoritmo ar rakto pasirašymui ir iššifravimui; visada hash‘inti pranešimus prieš pasirašymą (pvz., pagal RSASSA-PSS ar kitus saugius standarto metodus).
  • Tvirtas padingavimas ir validacija: naudoti modernius padingavimo standartus (pvz., OAEP vietoje PKCS#1 v1.5) ir atidžiai validuoti įvestis.
  • Limituoti orakulo prieigą ir sutapatinti klaidas: negrąžinti skirtingų klaidų tekstų ar laiko skirtumų, riboti bandymų skaičių, taikyti atgalinį laiko apribojimą ir užkirsti kelią interaktyvioms užklausoms iš nepasitikimų šaltinių.

Praktinės rekomendacijos įgyvendintojams

  • Naudokite patikimas, aukšto lygio bibliotekas (pvz., libsodium, modernias TLS bibliotekas) ir aukšto lygio kriptografinius primityvus, kurie jau įgyvendina AEAD ar IND-CCA saugius algoritmus.
  • Venkite rašyti savo kriptografijos implementacijų nuo nulio — daug klaidų susijusių su CCA kyla iš neteisingos padingavimo ar klaidų apdorojimo logikos.
  • Užtikrinkite, kad klaidų pranešimai būtų vienodi ir negrąžintų detalių, kurios galėtų veikti kaip orakulo informacija.
  • Įdiekite ribojimus (rate limiting), užklausų autentiškumo patikrą ir stebėseną, kad būtų pastebėti ir blokuojami įtartini bandymai gauti daug iššifravimų.
  • Saugokite raktus ir atskirkite juos pagal naudojimo paskirtį (pvz., atskiri raktai dekriptavimui ir pasirašymui).

Apibendrinant: prieš pradedant naudoti ar įgyvendinti kriptosistemą, įvertinkite, ar ji atlaikytų pasirinktų šifrogramų atakas (ypač adaptuojamas CCA2 atakas). Jei įtariate galimą iššifravimo orakulo prieigą arba jei saugumas turi didelę reikšmę, rinkitės IND-CCA saugias schemas arba autentifikuoto šifravimo sprendimus ir taikykite papildomas praktines apsaugas.