CCA-hyökkäys (engl. chosen-ciphertext attack) on salausanalyysin hyökkäysmalli, jossa hyökkääjä voi valita yhden tai useampia salaustekstin (ciphertext) ja saada salauksenpurkupalautteen (decryption) tuntemattomalla avaimella. Näistä palautteista saatua tietoa käytetään järjestelmän heikkouksien paljastamiseen tai salausavaininformaatioon pääsemiseen.
Kun salausjärjestelmä on altis valitulle salakirjoitustekstille kohdistuvalle hyökkäykselle, toteuttajien on oltava erityisen varovaisia välttääkseen tilanteita, joissa hyökkääjä voisi saada käyttöönsä salauksen purkamista tai muuta erottuvaa palautetta. Tämä voi olla hankalaa, sillä jopa osittaiset purkupalautteet tai eroavat virheilmoitukset voivat riittää hienovaraisiin hyökkäyksiin (esim. padding oracle ‑tyyppiset hyökkäykset). Lisäksi jotkin salausjärjestelmät, kuten RSA, käyttävät samoja mekanismeja allekirjoituksiin ja salauksen purkamiseen, mikä voi johtaa vaarallisiin yhteisvaikutuksiin, jos esimerkiksi allekirjoitettavaan viestiin ei ole käytetty asianmukaista suojelua tai hakkerointia. Parempi lähestymistapa on käyttää kryptojärjestelmiä, jotka ovat todistettavasti turvallisia valittuun salakirjoitustekstiin kohdistuvissa hyökkäyksissä, kuten muun muassa RSA‑OAEP, Cramer–Shoup ja monet todennetun symmetrisen salauksen muodot.
Miten CCA toimii käytännössä
Perusidea on, että hyökkääjä voi esittää järjestelmälle valittuja salaustekstejä ja saada järjestelmältä niiden purkamiseksi tarkoitettuja vastauksia tai virheilmoituksia. Hyökkääjä käyttää näitä vastauksia kertyvän tiedon muodostamiseen ja lopulta pyrkii purkamaan suojatun viestin tai paljastamaan yksityisen avaimen. Mallissa erotellaan usein:
- valittujen salaustekstien antaminen ennen varsinaisen haavoittuvan viestin vastaanottoa (CCA1), ja
- valittujen salaustekstien antaminen myös sen jälkeen, kun hyökkääjä on nähnyt haavoittuvan salakirjoituksen (CCA2, vahvempi malli).
Tyypillisiä CCA‑hyökkäyksiä
- Padding oracle -hyökkäykset: hyökkääjä lähettää muunneltuja salaustekstejä ja analysoi järjestelmän palauttamat virheilmoitukset tai aikavasteet selvittääkseen oikean täytemuodon.
- Bleichenbacherin hyökkäys: tunnettu käytännön hyökkäys RSA‑järjestelmiä vastaan, jotka käyttävät heikkoa täyttöä (padding).
- Signattu vs. salattu -vuorovaikutus: tilanteet, joissa sama avain tai matriisi käytetään sekä allekirjoituksiin että salaukseen, voivat mahdollistaa allekirjoitusoperaatioiden hyväksikäytön salauksen purkamiseen.
Suojautuminen ja suunnitteluohjeet
Hyväksyttävä suojaus vaatii sekä oikean kryptografisen konstruktion että huolellisen käytännön toteutuksen. Keskeisiä toimenpiteitä:
- Käytä algoritmeja ja protokollia, jotka ovat todistettavasti turvallisia IND‑CCA‑mallissa (esim. RSA‑OAEP, Cramer–Shoup, modernit KEM/DEM‑rakenteet).
- Käytä autentikoitua salausta (AEAD, esim. AES‑GCM, ChaCha20‑Poly1305) tai erillistä MAC:ia ennen purkua (Encrypt‑then‑MAC), jotta purkupalautteita ei anneta ilman autentikointia.
- Vältä samaa avainta eri käyttötarkoituksiin (ei samaa avainta sekä allekirjoituksiin että salaukseen).
- Rajoita ja yhtenäistä virheilmoituksia ja aikavasteita — älä paljasta erikseen täyttö- tai purkuvirheiden syitä.
- Toteuta täyttö (padding) ja sen tarkastus turvallisesti ja vakioaikaisesti, jotta sivukanavahaitat (timing) eivät vuodata tietoa.
- Käytä protokollien tarkastusta ja todistettavaa turvallisuutta suunnittelussa (provable security), ja pidä kirjastoissa ja toteutuksissa viimeisimmät turvallisuuspäivitykset.
- Pidä palvelimen purku‑rajapinnat eristettyinä ja rajoitettuina; älä tarjoa yleistä "decryption oraclea" julkisesti.
Käytännön suositukset
- Valitse todistetusti CCA‑kestäviä ratkaisuja aina kun viestit tai avaimet ovat arvoa: käytä RSA‑OAEP:ia tai hybridiarkkitehtuuria, jossa KEM hoitaa avaintenvaihdon ja DEM varmistaa viestien eheydentarkistuksen.
- Hyödynnä valmiita, hyväksi tunnettuja kirjastoja, jotka tarjoavat AEAD‑rajapinnan, sen sijaan että rakentaisit oman täyttö‑ tai autentikointimekanismin.
- Arvioi järjestelmän uhkakuva: selvitä, onko hyökkääjän mahdollista lähettää ja saada purkupalautteita ja ota tarpeelliset suojaukset käyttöön.
Yhteenveto
Valittuun salakirjoitustekstiin kohdistuvat hyökkäykset ovat vakava uhka, koska ne voivat hyödyntää jopa pienestä palautetiedosta syntyvää informaatiota. Paras suoja on käyttää rakenteita ja protokollia, jotka ovat suunniteltu kestämään CCA‑tyyppisiä hyökkäyksiä, sekä huolehtia toteutuksen yksityiskohdista (virheilmoitukset, täytöt, avainten eriyttäminen, autentikointi). Näin minimoidaan riski, että hyökkääjä voi purkaa viestejä tai saada haltuunsa salausavaimia.