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.
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.
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
- TLS 1.3 -kättely ja 0-RTT-istunnon jatkaminen
- Todennettu salaus: AES-GCM ja ChaCha20-Poly1305
- Avaimenjohdantafunktiot: PBKDF2, bcrypt ja Argon2
- Kvanttien jälkeinen kryptografia: CRYSTALS-Kyber ja Dilithium