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.
Heksa sietää välilyöntejä, kaksoispisteitä ja 0x-etuliitteitä.
Älä koskaan käytä nonce-arvoa uudelleen samalla avaimella GCM:ssä tai CTR:ssä.
Tagin pituus:
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 enc ei 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
TilaIV / nonceEheysHuomautukset
GCM12 tavua, uniikki jokaiselle viestilleKyllä — 96-128 bitin tagiAEAD: suositeltu oletus kaikkialla (TLS 1.3, SSH, tiedostomuodot). Hyväksyy myös AAD:n.
CBC16 tavua, ennustamatonEiPKCS#7-täyte; klassinen, mutta tarvitsee rinnalle MAC:n. Täytteen oraakkelivirheet ovat klassinen CBC-sudenkuoppa.
CTR16 tavun alkulaskuriEiEi täytettä, virtamainen, satunnainen pääsy; nonce-uudelleenkäyttö saman avaimen alla paljastaa selkotekstin XOR:n selkotekstin kanssa.
ECBei mitäänEiSamat 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.

TapausSyötteetOdotettu tulos
AES-128 yksi lohko (FIPS 197 -tyyppinen)key 000102..0f, plaintext 00112233..ff69c4e0d86a7b0430d8cdb78070b4c55a
AES-128-GCMkey 000102..0f, IV 606162..6b, plaintext 0011..ef ×2ct 275f095bedfda377063fee326128892188377b410698ed03a022b9971bb4bdbe, tag 87ea7770714048977de2fd8dac645ecf
AES-256-GCM, sama mutta AAD deadbeefkey 000102..1fct eacab966ff15e518f48f5390be502fbc2756ccee0dcfff36a282c50bf5593ae7, tag aead900e895c88252d0388d7aefce5c8
AES-256-CBCkey 000102..1f, IV 101112..1f, plaintext 0011..ef ×20e2392dd6f690b44a5a1b4fdff3b7f83cb9ab59d9900119cc5f83e062d95fb643b1a94b514ea2f3b95f84c900b5c98a8
AES-256-CTR (sama syöte kuin CBC yllä)43-byte plaintext → 43-byte ciphertexte9d2cdb9f661359178ed366dfa3a4671f8e20efd723f090eb7d1d524d480fd3c
Yleisiä virheitä
  • 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.