AES-salaus / -purku — GCM, CBC, CTR ja ECB selaimessa
AES-salaus / -purku
Salaa tai pura AES-128-, AES-192- tai AES-256-avaimella (FIPS 197) GCM- (todennettu salaus), CBC-, CTR- tai ECB-tilassa. Avaimet ovat raakaa heksadesimaali- tai Base64-tavuja tai johdettu salasanasta PBKDF2-HMAC-SHA256:lla. GCM tukee AAD:tä ja näyttää todennustagin erikseen; CBC/CTR/ECB-tulokset ovat yhteensopivia enc-komennon kanssa. Tiivisteitä varten katso Tiivistegeneraattori, avainpohjaisia MAC-koodeja varten HMAC-generaattori ja vanhoja salaimia varten tämän sarjan Vanhat salaimet -sivu.
Toimii kokonaan paikallisesti — avaimet ja selkoteksti eivät koskaan poistu välilehdeltä. Tiedostot enintään 200 MB.
Kaikki tähän kirjoitettu pysyy tässä välilehdessä — mutta se ei tarkoita "turvallista tuotantosalaisuuksille". Selaimen muisti, laajennukset ja olan yli katsojat näkevät liitetyn. Käytä tätä sivua oppimiseen, tarkistamiseen ja yhteentoimivuuteen, ei elävien asiakastietojen käsittelyyn.
Suunta:Tila:Tulos:
GCM = AES-GCM 12 tavun noncella ja 128 bitin todennustagilla (AEAD: luottamuksellisuus ja eheys). Oletus, kun turvallisuus on tavoite.
Avain(raakatavut: 16, 24 tai 32 tavua = AES-128/192/256; liittämäsi pituus ratkaisee)
Heksa sietää välilyöntejä, kaksoispisteitä ja 0x-etuliitteitä.
Suola (heksa, 8–16 tavua):
Iteraatiot:Avaimen koko:
Suola kulkee salatekstin mukana - purkajan tarvitsee saman salasanan, suolan, iteraatiomäärän ja avaimen koon. OWASP suosittelee vähintään 600 000 PBKDF2-HMAC-SHA256-iteraatiota.
IV / nonce(GCM: 12 tavua; CBC/CTR: 16 tavua — heksa)
Älä koskaan käytä nonce-arvoa uudelleen samalla avaimella GCM:ssä tai CTR:ssä.
AAD(lisätty todennettu data — todennettu mutta ei salattu, valinnainen)
Tagin pituus:
Todennustagi(heksa, kuten tämä sivu tulostaa salauksessa — vaaditaan purkuun)
Plaintext text (the data to encrypt, UTF-8 encoded)
Valitse tiedosto tai vedä ja pudota se tähän
Tiedosto luetaan paikallisesti 8 MB:n osissa; mitään ei lähetetä. Enintään 200 MB.
Tulosrivit tallentavat tarkan avaimen lukutavan, IV:n, AAD-koon ja tagin, joten kopioidun tuloksen voi aina toistaa toisella koneella.
Mikä tila kannattaa valita? GCM on oletusvastaus: se salaa ja todentaa — tagirivi tekee väärentämisestä havaittavan (kokeile purkua käännetyllä tagitavulla, sivu hylkää sen). CBC piilottaa lohkokuviot mutta ei tarjoa eheyttä; yhdistä se HMACiin (katso HMAC-generaattori), jos sitä on pakko käyttää. CTR tekee AES:stä virtasalaimen — ei täytettä, mutta saman nonce-arvon uudelleenkäyttö samalla avaimella on katastrofaalista sekä CTR:ssä että GCM:ssä. ECB on täällä vain yhteensopivuutta ja opetusta varten: identtiset selkotekstilohkot salautuvat identtisiksi salatekstilohkoiksi (kuuluisa ECB-pingviini).
OpenSSL-yhteentoimivuus — tämän sivun CBC- ja CTR-tulokset (PKCS#7-täyte, raaka avain) kulkevat komentorivin openssl enc kautta: openssl enc -aes-256-cbc -K <64-heksa-avain> -iv <32-heksa-iv> -in msg.txt -out msg.enc openssl enc -d -aes-256-cbc -K <avain> -iv <iv> -in msg.enc -out msg.txt
Sama toimii komennoilla -aes-128-cbc, -aes-192-cbc ja -aes-256-ctr (16 tavun IV = alkulaskurilohko). openssl encei tue GCM:ää — käytä tätä sivua tai OpenSSL 3.3+:n openssl aesgcm -komentoa todennettuun salaukseen.
Tarvitsetko kiinalaisen kansallisen salaimen?
SM4 (GB/T 32907-2016) — kiinalaisessa kaupallisessa kryptografiassa määrätty lohkosalain, jolla on sama 128 bitin lohko ja avaimen koko kuin AES:llä, mutta oma avainaikataulu ja S-laatikko — toimii omalla sivullaan ECB- ja CBC-tilassa: SM4-salaus / -purku. Muu SM-sarja on siellä myös: SM3 (tiiviste), SM2 (julkinen avain) ja SM9 (identiteettipohjainen kryptografia).
Itsetesti Ajaa sivun moottorit riippumattomia ankkureita vastaan: tunnetut vastausvektorit kaikille neljälle tilalle (riippumattoman natiivitoteutuksen tuottamat), GCM-tagivektorit AAD:n kanssa ja ilman, WebCrypto-moottorin ristitarkistus puhdasta JS-AES-moottoria vastaan, GCM-kierros sekä negatiiviset testit (väärennetty tagi ja väärä avain epäonnistuvat). Mitään ei lähetetä minnekään.
AES-salaus selitettynä alusta alkaen
Yhdessä lauseessa: AES on maailmanlaajuinen standardoitu lohkosalain — se sekoittaa 16 tavun lohkot 128, 192 tai 256 bitin avaimella — ja tila, jossa sitä ajetaan (GCM, CBC, CTR, ECB), määrää, miten lohkot ketjutetaan, mihin IV:tä tarvitaan ja havaitaanko väärennys; valitse GCM, ellei ole syytä toisin.
Mitä AES itse on (FIPS 197)
Lohkosalain. AES (Rijndael-suunnittelu, NIST standardoi vuonna 2001 nimellä FIPS 197) salaa täsmälleen 16 tavua kerrallaan. Avaimen pituus — 16, 24 tai 32 tavua — valitsee AES-128:n, -192:n tai -256:n ja sisäisten kierrosten määrän (10, 12, 14). Jokainen kierros sekoittaa lohkon avaimesta johdettuihin kierrosavaimiin korvaustaulukoiden, rivisiirtojen ja sarakesekoitusten avulla. Mikään käytännön hyökkäys ei riko itse salainta: todelliset ongelmat ovat lähes aina tilaan, IV:hen tai avainhallintaan liittyviä virheitä, mistä tämän sivun loppuosa kertoo.
Miksi ylipäänsä tila? Koska viestit ovat harvoin 16 tavua. Tila liittää lohkosalaukset yhteen: ECB salaa lohkot toisistaan riippumatta; CBC XOR:aa jokaisen lohkon edellisen salatekstin kanssa; CTR salaa laskurin ja XOR:aa sen datan kanssa kuten virtasalain; GCM rakentuu CTR:n päälle ja lisää todennustagin. AES pysyy samana — tila muuttaa kaiken siitä, mitä takuita saadaan.
Avaimet ja salasanat. AES-avain on 16, 24 tai 32 satunnaista tavua. Ihmisen salasana ei ole sellainen: tämän sivun Salasana-vaihtoehto johtaa oikean avaimen PBKDF2-HMAC-SHA256:lla (oletuksena 600 000 iteraatiota, OWASP 2023 -perustaso — katso KDF:n yksityiskohdat HMAC-generaattorista). Älä koskaan käytä salasanamerkkijonoa suoraan AES-avaimena: sen entropia on murto-osa pituudesta.
Neljä tilaa vertailussa
Tila
IV / nonce
Eheys
Huomautukset
GCM
12 tavua, uniikki jokaiselle viestille
Kyllä — 96-128 bitin tagi
AEAD: suositeltu oletus kaikkialla (TLS 1.3, SSH, tiedostomuodot). Hyväksyy myös AAD:n.
CBC
16 tavua, ennustamaton
Ei
PKCS#7-täyte; klassinen, mutta tarvitsee rinnalle MAC:n. Täytteen oraakkelivirheet ovat klassinen CBC-sudenkuoppa.
CTR
16 tavun alkulaskuri
Ei
Ei täytettä, virtamainen, satunnainen pääsy; nonce-uudelleenkäyttö saman avaimen alla paljastaa selkotekstin XOR:n selkotekstin kanssa.
ECB
ei mitään
Ei
Samat lohkot → sama salateksti. ECB-pingviinin esittely. Vain yhteensopivuuteen.
IV-säännöt yhdessä kappaleessa. IV ei ole salainen — lähetä se salatekstin rinnalla — mutta sen yksilöllisyyden säännöt eroavat: CBC vaatii ennustamattoman IV:n; GCM ja CTR vaativat vain, että samaa nonce-arvoa ei koskaan käytetä uudelleen samalla avaimella (GCM:n nonce-uudelleenkäyttö on pahempi: se paljastaa todennusavaimen). Tämän sivun Satunnainen IV -painike käyttää selaimen turvallista satunnaislukugeneraattoria; Kaikki nollia -painike on olemassa testivektorien toistamiseen, ei oikeisiin viesteihin.
Täyte. CBC ja ECB tarvitsevat kokonaisia lohkoja, joten PKCS#7-täyte lisää 1-16 tavua, joista jokainen on yhtä suuri kuin täytepituus. Siksi CBC-salatekstit kasvavat jopa 16 tavua, ja väärällä avaimella purku epäonnistuu yleensä täytevirheeseen. CTR ja GCM toimivat virtamaisesti eikä täytettä tarvita — salatekstin pituus on täsmälleen selkotekstin pituus (kokeile CTR-tilan Esimerkkiä: 43 tavua sisään, 43 tavua ulos).
CFB ja OFB (kaksi jäljellä olevaa klassista tilaa) eivät ole toteutettuina tällä sivulla: ne toimivat virtamaisesti kuten CTR, mutta niillä ei ole etua siihen nähden, ja ne säilyvät lähinnä vanhoissa protokollissa.
Mitä GCM lisää (AEAD, tagit, AAD)
Todennettu salaus. GCM = CTR-salaus + GHASH-todennin, joka kattaa salatekstin, IV:n ja AAD:n. Tulostagi on sormenjälki kaikesta: yhden bitin muutos salatekstissä, IV:ssä tai AAD:ssä, ja tagi ei täsmää, joten vastaanottaja voi todistaa, että viesti on ehjä ja avaimenhaltijalta. CBC+HMAC saavuttaa saman vain, jos se kootaan oikein (salaa ja sitten MAC) — GCM tekee sen oikein rakenteestaan.
AAD. Lisätty todennettu data kulkee selkeänä, mutta tagi kattaa sen: protokollan otsikot, tiedostonimet, algoritmitunnisteet. Vastaanottajan on annettava täsmälleen samat AAD-tavut, muuten tagin tarkistus epäonnistuu — juuri se on tarkoitus.
Tagin pituus. Oletuksena 128 bitin tagi on suositus; lyhyemmät tagit (96-120 bittiä) vaihtavat väärennyskestävyyden kokoon. Alle 96 bitin GCM:n turvallisuustodistukset heikkenevät nopeasti, minkä vuoksi tämä sivu pysähtyy siihen.
Nonce-katastrofi. 12 tavun GCM-nonce-arvon uudelleenkäyttö saman avaimen alla vuotaa kahden viestin selkotekstien XOR:n ja todennusalilavan — minkä jälkeen väärennykset ovat mahdollisia kaikille tulevillekin viesteille kyseisellä avaimella. Järjestelmät, jotka eivät voi taata yksilöllisyyttä, käyttävät nonce-väärinkäyttöä kestäviä versioita (AES-GCM-SIV, RFC 8452).
Ankkuriarvot — toista ne tällä sivulla
Ensimmäinen rivi on tunnettu yksilohkoinen esimerkki FIPS 197 -standardista; muut tuotettiin itsenäisellä natiivitoteutuksella (OpenSSL Node.js:n kautta) ja tarkistettiin uudelleen tämän sivun moottoreilla. Liitä avain, IV ja syöte sivulle toistaakseen jokaisen rivin.
Tapaus
Syötteet
Odotettu tulos
AES-128 yksi lohko (FIPS 197 -tyyppinen)
key 000102..0f, plaintext 00112233..ff
69c4e0d86a7b0430d8cdb78070b4c55a
AES-128-GCM
key 000102..0f, IV 606162..6b, plaintext 0011..ef ×2
ct 275f095bedfda377063fee326128892188377b410698ed03a022b9971bb4bdbe, tag 87ea7770714048977de2fd8dac645ecf
AES-256-GCM, sama mutta AAD deadbeef
key 000102..1f
ct eacab966ff15e518f48f5390be502fbc2756ccee0dcfff36a282c50bf5593ae7, tag aead900e895c88252d0388d7aefce5c8
AES-256-CBC
key 000102..1f, IV 101112..1f, plaintext 0011..ef ×2
ECB:n käyttö, koska se ei tarvitse IV:tä. Helppous on ansa: lohkokuviot vuotavat suoraan salatekstiin (salaa bittikartta, ja kuva näkyy yhä). ECB sopii vain yksittäisille lohkoille tai täsmälleen 16 tavun satunnaisille avaimille — käytännössä ei koskaan tietoisesti.
Nonce-/IV-arvon uudelleenkäyttö. GCM:ssä tai CTR:ssä saman avaimen alla tämä on ainoa virhe, joka rikkoo kaiken kerralla. Laskuriin perustuvat järjestelmät (tämän sivun Satunnainen IV -painike) on olemassa, jotta tämä on mahdotonta.
IV:n pitäminen salaisuutena. Se ei ole salainen. Tallenna tai lähetä se salatekstin rinnalla. Sen piilottamisesta ei ole hyötyä, ja se houkuttelee uudelleenkäyttöön.
Salasanan käyttö avaimena."hunter2hunter2hunter2hunter2" on 32 tavua mutta ei 256 bitin entropiaa — se on sanakirjasana täytettynä. Johda avain PBKDF2:lla (sisäänrakennettu tälle sivulle) tai luo satunnainen avain.
Oletus, että CBC havaitsee väärennyksen. Kun käännät yhden bitin CBC-salatekstissä, purku "onnistuu" hiljaa vääristyneellä selkotekstillä. Vain GCM:n tagi (tai eksplisiittinen HMAC) tekee väärennyksestä näkyvän.
GCM-salatekstien vertailu yhtäsuuruudelle. Satunnaisilla nonce-arvoilla sama selkoteksti salautuu joka kerta eri tavalla — se on ominaisuus. Deterministinen salaus on eri, erikoistunut työkalu.
UKK
Onko AES-128 yhä turvallinen vai tarvitaanko 256? Molemmat ovat turvallisia realistisia hyökkääjiä vastaan; tunnetut hyökkäykset vähentävät marginaalia vain murto-osan verran. AES-256 on tärkeä pitkäaikaisille salaisuuksille ja kvanttivarmuuden kannalta (Groverin algoritmi puolittaa avaimen vahvuuden, jolloin AES-256 vastaa noin 128 bitin tasoa).
Miksi openssl enc ei tee GCM:ää? Komento enc on AEAD-tilojen esiaste, eikä siinä ole tapaa kuljettaa tagia; OpenSSL 3.3 lisäsi siksi erillisen komennon aesgcm. Tämän sivun GCM-tulos pitää tagin omalla rivillään, jotta molemmat voi siirtää erikseen.
Mikä on avainkääre (AES-KW)? Erikoistunut tila, jolla salataan muita avaimia kiinteän kokoisissa 64 bitin palasissa omalla eheystarkistuksellaan. Sitä ei tarjota tässä, koska sen syöte ja tulos ovat avainmuotoisia, eivät viestimuotoisia — väärinkäyttö on tavallista.
Miksi CTR-salateksti on yhtä pitkä kuin selkoteksti, mutta CBC:n pidempi? CTR ja GCM toimivat virtamaisesti (ei täytettä); CBC ja ECB täydentävät PKCS#7-täytteellä kokonaiseen 16 tavun lohkoon. Pituusero on suunniteltu, ei virhe.
Voiko muualla salatun purkaa? Kyllä, jos tunnet tarkan tilan, avaimen ja IV:n (GCM:ssä myös tagin). Tämän sivun tulosrivit tallentavat kaikki nämä tarkasti, jotta parametrit voi siirtää työkalujen välillä — yllä oleva OpenSSL-laatikko näyttää vastaavat komentorivit.