Cloud & IT Cert Prep · Oppitunti

Todennettu salaus: AES-GCM ja ChaCha20-Poly1305

Ymmärrä, miten AEAD-salaukset tarjoavat luottamuksellisuuden ja eheyden samanaikaisesti sekä miksi nonce-arvojen väärinkäyttö AES-GCM:ssä johtaa katastrofaaliseen avaimen palauttamiseen.

Oppitunti 2/413 vaihetta

Todennettu salaus: AES-GCM ja ChaCha20-Poly1305 on ilmainen Cloud & IT Cert Prep-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Cloud & IT Cert Prep-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Cloud & IT Cert Prep-kurssilla on yhteensä 4 oppituntia.

Mitä todennettu salaus on

Todennettu salaus (Authenticated Encryption, AE) ratkaisee perustavanlaatuisen ongelman: perinteinen salaus tarjoaa vain luottamuksellisuuden — se pitää tiedot salassa — mutta ei tarkista, onko salatekstiä muutettu. Hyökkääjä voisi kääntää salatekstin bittejä, jolloin vastaanottaja purkaisi merkityksetöntä dataa tietämättä, että sitä on muutettu. Associated Data -tietoja käyttävä todennettu salaus (Authenticated Encryption with Associated Data, AEAD) lisää samanaikaisesti eheyden ja aitouden takuun tuottamalla sekä salatun salatekstin että todennustunnisteen, joka havaitsee kaikki muutokset.

AES-GCM: laskurimuoto ja GMAC

AES-GCM (Galois/Counter Mode) yhdistää kaksi komponenttia: salaukseen käytettävän AES-CTR:n (Counter Mode) ja eheyden varmistamiseen käytettävän GMAC:n (Galois Message Authentication Code). AES-CTR muodostaa avainvirran salaamalla laskuriarvon ja XOR-operaation avulla selväkielisen tekstin kanssa — tämä mahdollistaa salauksen rinnakkaistamisen toisin kuin CBC-tilassa. GMAC laskee todennustunnisteen salatekstistä ja kaikista associated data -tiedoista. Tuloksena syntyvä tunniste (128 bittiä) kulkee salatekstin mukana; yhdenkin bitin muutos mitätöi tunnisteen.

# AES-256-GCM encryption with openssl
openssl enc -aes-256-gcm -in plaintext.txt -out encrypted.bin \
  -K $(openssl rand -hex 32) \
  -iv $(openssl rand -hex 12)

Nonce-arvo: kriittinen ja haavoittuva

AES-GCM edellyttää nonce-arvoa (number used once), jonka pituus on tyypillisesti 96 bittiä (12 tavua). Nonce-arvon on oltava yksilöllinen jokaisessa samalla avaimella suoritettavassa salaustoiminnossa — sen ei tarvitse olla salainen, mutta se ei saa koskaan toistua. Nonce-arvon uudelleenkäyttö AES-GCM:ssä on katastrofaalista: jos kaksi viestiä salataan samalla avaimella ja nonce-arvolla, hyökkääjä voi käyttää XOR-operaatiota salateksteihin poistaakseen keystreamin ja mahdollisesti palauttaa molemmat selväkieliset viestit. Tätä haavoittuvuutta kutsutaan joskus ”nonce-arvon väärinkäytöksi”, ja se on johtanut tosielämän avainten palautushyökkäyksiin.

Nonce-arvon väärinkäyttöön perustuva hyökkäys selitettynä

Kun AES-GCM:n nonce-arvoja käytetään uudelleen, hyökkääjä voi laskea C1 XOR C2 = P1 XOR P2 (molempien selväkielisten viestien XOR-tuloksen), koska molemmissa käytettiin samaa keystreamia. Lisäksi nonce-arvon uudelleenkäyttö mahdollistaa autentikointiavaimen H palauttamisen. Tällöin hyökkääjä voi väärentää kelvollisia autentikointitunnisteita mielivaltaisille viesteille, mikä murtaa sekä luottamuksellisuuden että eheyden täysin. Esimerkiksi Sony PS3 joutui juuri tällaisen hyökkäyksen kohteeksi. Hyökkäyksiltä voidaan suojautua satunnaistetuilla nonce-arvoilla (jotka luodaan CSPRNG:llä) tai deterministisellä laskurilla, joka ei koskaan nollaudu.

ChaCha20-Poly1305: vaihtoehto stream-salaukselle

ChaCha20-Poly1305 on toinen TLS 1.3:ssa pakollinen AEAD-salausalgoritmi. ChaCha20 on Daniel Bernsteinin suunnittelema stream-salausalgoritmi, joka tuottaa keystreamin add-rotate-XOR (ARX) -operaatioilla — se ei käytä hakutauluja, toimii täysin vakioajassa ja on erittäin nopea suorittimilla, joissa ei ole AES-laitteistokiihdytystä. Poly1305 on kertakäyttöinen MAC (message authentication code), joka laskee autentikointitunnisteen salatekstin perusteella. Yhdessä ne tarjoavat AES-GCM:ää vastaavan tietoturvan, mutta ovat huomattavasti nopeampia mobiili- ja IoT-laitteissa.

Miksi ChaCha20-Poly1305 sopii mobiililaitteisiin?

Nykyisissä x86- ja ARM64-työasema- ja palvelinsuorittimissa on AES-NI-laitteistokäskyjä, jotka tekevät AES-GCM:stä erittäin nopean. Monissa mobiili- ja IoT-suorittimissa ei kuitenkaan ole AES-NI:tä, minkä vuoksi ohjelmistopohjainen AES-GCM on suhteellisen hidas. ChaCha20-Poly1305 suunniteltiin nopeaksi ohjelmistototeutuksissa yksinkertaisten aritmeettisten operaatioiden ansiosta, joten mobiililaitteet saavuttavat vastaavan suorituskyvyn ilman laitteistokiihdytystä. Google lisäsi ChaCha20-Poly1305:n TLS:ään vaihtoehdoksi nimenomaan Android-laitteita varten, ja nykyään se on TLS 1.3:n ensisijainen salaussarja.

Liitännäisdata: otsakkeiden suojaaminen

AEAD-lyhenteen ”AD” tarkoittaa liitännäisdataa (Associated Data) — selväkielisiä metatietoja, jotka autentikoidaan mutta joita ei salata. Näin voidaan autentikoida tiedot, joiden on pysyttävä luettavina (kuten pakettien otsakkeet tai tietueen tyyppikentät), ja samalla suojata ne manipuloinnilta. TLS 1.3:ssa tietueen otsakkeen tavut sisällytetään AEAD-laskentaan liitännäisdatoina. Jos hyökkääjä muuttaa otsaketta (esimerkiksi tietueen pituutta), autentikointitunnisteen tarkistus epäonnistuu ja yhteys katkaistaan.

AEAD verrattuna Encrypt-Then-MAC-menetelmään

Ennen kuin AEAD:stä tuli standardi, kryptografit suosittelivat Encrypt-then-MAC-menetelmää (EtM): selväkielinen viesti salataan ja sen jälkeen salatekstistä lasketaan MAC. Menetelmä on turvallinen, mutta se edellyttää kahta erillistä operaatiota ja kahta erillistä avainta. AEAD-menetelmät, kuten AES-GCM, yhdistävät molemmat operaatiot yhdellä avaimella, mikä vähentää toteutuksen monimutkaisuutta ja poistaa kokonaisen luokan padding oracle -hyökkäyksiä, jotka vaivasivat MAC-then-Encrypt-menetelmää (MtE) — vanhemmissa TLS-versioissa käytettyä järjestystä (CBC + HMAC). AEAD:tä käyttävä TLS 1.3 välttää nämä ongelmat kokonaan.

AES-128-GCM verrattuna AES-256-GCM:ään

Sekä AES-128-GCM että AES-256-GCM ovat NIST:n hyväksymiä ja niitä pidetään turvallisina klassisia tietokoneita vastaan. AES-128 tarjoaa 128-bittisen tietoturvan ja on hieman nopeampi, kun taas AES-256 tarjoaa 256-bittisen tietoturvan ja suuremman turvamarginaalin tulevaa kryptanalyysiä ja kvanttiuhkia vastaan. Useimmissa sovelluksissa AES-128-GCM riittää nykyään, mutta viranomaisten turvaluokitellut järjestelmät (NSA Suite B) edellyttävät AES-256:ta. TLS 1.3 tarjoaa molemmat vaihtoehdot, ja palvelimet voivat priorisoida ne tietoturvakäytäntönsä perusteella.

Autentikointitunnisteen tarkistusprosessi

Kun AEAD-salatekstiä puretaan, vastaanottajan on tarkistettava autentikointitunniste ennen salauksen purkamista. Prosessi on seuraava: odotettu tunniste lasketaan uudelleen vastaanotetun salatekstin, avaimen ja nonce-arvon perusteella; sitä verrataan vastaanotettuun tunnisteeseen vakioajassa toimivalla vertailufunktiolla; ja vain tunnisteiden täsmätessä jatketaan salauksen purkamiseen. Vakioajassa toimiva vertailu on kriittinen — jos vertailu päättyy ensimmäiseen poikkeavaan tavuun, hyökkääjä voi tehdä ajoitukseen perustuvan sivukanavahyökkäyksen ja väärentää kelvolliset tunnisteet tavu kerrallaan. Mikä tahansa AEAD-kirjasto, joka käyttää aikaisessa vaiheessa lopettavaa vertailua, on haavoittuva.

AEAD:n tosielämän sovellukset

AEAD-algoritmit ovat yleisiä nykyaikaisessa tietoturvassa: TLS 1.3 käyttää AES-GCM:ää ja ChaCha20-Poly1305:tä kaikkien tietueiden salaukseen; WireGuard VPN käyttää yksinomaan ChaCha20-Poly1305:tä; Signal Protocol käyttää sitä viestien salaukseen; QUIC-protokolla (HTTP/3:n perusta) käyttää AES-GCM:ää. Kun näette esimerkiksi salaussarjan TLS_AES_256_GCM_SHA384, SHA384 viittaa avainten johtamiseen käytettävään HKDF-hajautusfunktioon, ei eheysmekanismiin — eheydestä huolehtii GCM-tunniste.

Pikatesti

Testatkaa tämän oppitunnin CompTIA Security+ (SY0-701) -aiheiden ymmärtämistänne.

Oppitunnin yhteenveto

Tässä oppitunnissa opitte, että AEAD-algoritmit tarjoavat luottamuksellisuuden ja eheyden samanaikaisesti autentikointitunnisteen avulla, joka havaitsee kaikki salatekstin muutokset; AES-GCM:n nonce-arvon uudelleenkäyttö on katastrofaalista — se mahdollistaa keystreamin palauttamisen ja autentikointiavaimen väärentämisen — joten nonce-arvojen on oltava yksilöllisiä jokaisessa salauksessa; ja ChaCha20-Poly1305 on suorituskyvyltään tehokas vaihtoehto AES-GCM:lle laitteissa, joissa ei ole AES-laitteistokiihdytystä. Seuraavaksi tutustumme avainten johtamiseen käytettäviin funktioihin salasanojen suojaamiseksi.

Aloita maksutta

Opi Cloud & IT Cert Prep tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
150
Oppitunnit
600

Usein kysytyt kysymykset

Onko oppitunti ”Todennettu salaus: AES-GCM ja ChaCha20-Poly1305” ilmainen?

Kyllä – oppitunnin ”Todennettu salaus: AES-GCM ja ChaCha20-Poly1305” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Cloud & IT Cert Prep-kurssin, päivitä CoddyKit PROhon. Cloud & IT Cert Prep-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Todennettu salaus: AES-GCM ja ChaCha20-Poly1305”?

Ymmärrä, miten AEAD-salaukset tarjoavat luottamuksellisuuden ja eheyden samanaikaisesti sekä miksi nonce-arvojen väärinkäyttö AES-GCM:ssä johtaa katastrofaaliseen avaimen palauttamiseen. Harjoittelet Cloud & IT Cert Prep-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Cloud & IT Cert Prep-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Cloud & IT Cert Prep-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Todennettu salaus: AES-GCM ja ChaCha20-Poly1305”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Cloud & IT Cert Prep-oppitunnilla?

Kyllä. Jokainen Cloud & IT Cert Prep-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. TLS 1.3 -kättely ja 0-RTT-istunnon jatkaminen
  2. Todennettu salaus: AES-GCM ja ChaCha20-Poly1305
  3. Avaimenjohdantafunktiot: PBKDF2, bcrypt ja Argon2
  4. Kvanttien jälkeinen kryptografia: CRYSTALS-Kyber ja Dilithium
← Takaisin: Cloud & IT Cert Prep