Securitatea CCA pare întotdeauna extremă pentru oamenii care tocmai învață despre asta. Premisa pare ridicolă, de ce i-am da atâta putere atacatorului? De ce l-am lăsa pe atacator să decripteze aproape tot ce dorește și să învețe întregul rezultat al decriptării?
În lumea reală, când am acționa vreodată ca un oracol de decriptare pentru un atacator?
Îmi place să motivez securitatea CCA în două moduri diferite:
(1) Dacă notez un mesaj secret într-un plic și nu ajungi niciodată să atingi acel plic, nu poți spune ce se află în plicul meu.
Dacă aș fi fost de acord să deschid vreuna alte plic în lume -- te-ar ajuta asta să-ți dai seama ce se află în interiorul acestui plic special?
Desigur că nu.
De ce decriptarea a ceea ce se află în textul cifrat #1 vă va spune despre ceea ce este în textul cifrat #2?
Nu aș vrea să cumpăr o cutie de plicuri cu acea proprietate și nu aș vrea să folosesc o schemă de criptare cu acea proprietate.
(2)
Probabil ați avut rezerve similare cu privire la securitatea CPA: în lumea reală, când lăsăm vreodată un atacator alege complet ce lucruri criptăm?
Aceasta este o întrebare validă, dar să presupunem că avem o definiție de securitate care nu permite atacatorului să influențeze alegerea textului simplu deloc.
Apoi, de fiecare dată când criptăm în lumea reală, trebuie să fim absolut siguri că textul simplu a avut influență zero de la orice atacator -- doar așa putem fi siguri că această definiție ipotetică de securitate s-ar aplica situației noastre.
Deoarece acest lucru nu este realist, definiția noastră de securitate trebuie să permită unui atacator să aibă cel puțin niste influență asupra textelor clare care sunt criptate.
Dar pur și simplu nu este util definiție pentru a permite atacatorului să aibă o influență parțială definită ciudat asupra alegerii textelor clare.
Nivelul de influență în lumea reală depinde în mare măsură de aplicația specifică și nu dorim un milion de definiții de securitate diferite pentru un milion de scenarii de aplicație diferite.
Cel mai simplu lucru de făcut este ceea ce face definiția de securitate CPA: la fel de bine am putea urmări să ne protejăm împotriva atacatorilor care alege complet ce texte clare sunt criptate!
Chiar dacă un astfel de control contradictoriu deplin asupra textelor clare nu reflectă a singur scenariu realist, este suficient de general pentru a se aplica bine tuturor scenariilor în care atacatorul are niste influență asupra alegerii textelor clare.
O situație similară este valabilă în ceea ce privește decriptarea.
Vă puteți imagina un server web care acceptă texte cifrate din lumea exterioară, decriptează acele texte cifrate și apoi face ceva bazat pe rezultatul decriptării (adică, dacă rezultatul decriptării este acesta, atunci faceți asta; altfel, faceți asta)?
Dacă acest lucru sună natural, atunci definiția dvs. de securitate trebuie să ofere atacatorului capacitatea de a învăța ceva despre rezultatul decriptării, pe texte cifrate create în mod adversar. (Definiția CPA nu surprinde această situație.)
Deci, câte informații ar trebui să obțină atacatorul?
În lumea reală, răspunsul la această întrebare depinde în mare măsură de aplicația particulară.
Dacă vrem o definiție de securitate cu scop general, care se aplică multor scenarii realiste, atunci acea definiție de securitate ar trebui pur și simplu să ofere cât mai multă putere atacatorului.
În acest caz, ar trebui să lase atacatorul să decripteze liber tot ceea ce dorește și să învețe întregul rezultat al decriptării (cu excepția unor moduri care, evident, trivializează jocul de securitate).
Securitatea CCA nu este menită să reflecte un singur scenariu din lumea reală, în care expunem atacatorului un oracol de decriptare completă.
Mai degrabă, este menit să fie suficient de general pentru orice scenariu în care atacatorul învață ceva despre rezultatul decriptării textelor cifrate generate adversar.