Täiustatud krüpteerimisstandard

**Täiustatud krüpteerimisstandard** (lühend **AES**; inglise keeles *Advanced Encryption Standard*) on 2001. aastal Ameerika Ühendriikide Riikliku Standardite ja Tehnoloogia Instituudi (National Institute of Standards and Tehnology ehk NIST) defineeritud krüpteerimisstandard, mis kasutab ühte võtit nii krüpteerimiseks kui ka dekrüpteerimiseks. Standardis kasutatakse algoritmi Rijndael.

Rijndaeli autorid on belglastest arvutitehnikud Vincent Rijmen ja Joan Daemen.

Täiustatud krüpteerimisstandardi puhul töötleb Rijndaeli algoritm 128-bitiseid andmeplokke 128-, 192- või 256-bitise võtmega. Teisi Rijndaeli algoritmi ploki-või võtmesuuruseid AES ei luba. Andmeplokkide ja võtmete bitid on jaotatud baitideks. Seega koosneb 128-bitine andmeplokk või võti 16-st, 192-bitine võti 24-st ja 256-bitine võti 32-st baidist. Kui krüpteeritavad andmed on suuremad kui üks 16-baidine andmeplokk, siis ülejäänud andmed mahutatakse järgmistesse 16-baidistesse plokkidesse. Võib ka juhtuda, et krüpteeritav info on väiksem kui 128 bitti. Sellisel juhul täidetakse tühjad kohad nullidega.

## AESi valimine

1997. aasta 2. jaanuaril kuulutas NIST välja AES konkursi täiustatud krüpteerimisalgoritmi leidmiseks. NISTi eesmärgiks oli kirjeldada salastamata krüpteerimisalgoritm, mis oleks võimeline kaitsma riikliku tähtsusega andmeid. Tööde esitamise tähtajaks oli konkursile laekunud 15 nõuetele vastavat algoritmi. Võitja valimisel arvestati krüpteerimisalgoritmi turvalisust, maksumust ja loogika olemust. Pärast mitut testimis- ja valimisvooru valiti kõige sobivamaks algoritmiks kahe belglasest arvutitehniku välja töötatud Rijndael.

### Konkursi ajakava
* **2. jaanuaril 1997** kuulutas NIST välja AES konkursi täiustatud krüpteerimisalgoritmi leidmiseks.
* **15. aprillil 1997 **toimus arutelu, mille käigus vaadati üle AESi nõuded, kriteeriumid ning kandidaatide vastuvõtutingimused.
* **12. septembril 1997** väljastati NISTi poolt kutse algoritmide esitamiseks.
* **15. juuni 1998** kuulutati välja 15 kriteeriumitele vastavat algoritmi.
* **22–23. märtsil 1999** vaadati üle kandidaatidele tehtud analüüside tulemused.
* **9. augustil 1999 **kuulutati välja 5 finalisti.
* **13–14. aprillil 2000** kaitsesid viis finalisti oma algoritme.
* **2. oktoobril 2000** teatati konkursi võitja.
* **26. novembril 2001** avaldati FIPS-197.

### Konkursi hindamiskriteeriumid
* Turvalisus (kõige tähtsam hindamiskriteerium):
** algoritmi turvalisus võrrelduna teiste kandideerivate algoritmidega;
** kui suurel määral on algoritmi väljundandmetes eristamatu sisendisse saadetud juhuslik permutatsioon;
** algoritmi matemaatiline usaldatavus;
** valimisprotsessi käigus avalikkuse poolt välja toodud tegurid.
* Maksumus:
** nõuded litsentsile (algoritm peab olema kõigile kättesaadav);
** arvutuslik efektiivsus;
** nõudmised mälule.
* Algoritm ja selle rakendamise karakteristika:
** paindlikkus;
** ühilduvus riist- ja tarkvaraga;
** lihtsus.

### Kandidaatide tabel

## AESi turvalisus

Täiustatud krüpteerimisalgoritm töötab kas 128-, 192- või 256-bitise võtmega. 128-bitise võtme puhul on erinevate võimalike võtmekombinatsioonide arv 2^{128}. Selline võtmepikkus tähendab, et jõumeetodil 128-bitise võtme leidmiseks kuluv aeg, kasutades kahendarvudel töötavat superarvutit, on võrreldav kogu teadaoleva universumi eksisteerimise ajaga. Kui kasutada võtmeid pikkusega 192 või 256 bitti on ka kõikvõimalike võtmekombinatsioonide arv vastavalt 2^{192} või 2^{256}.

## AESi kasutusvaldkonnad

Täiustatud krüpteerimisstandardit võib kasutada tarkvaras, püsivaras, riistvaras ja nende erinevates kombinatsioonides. Tavainimene, kes teadlikult krüptograafiaga ei tegele, puutub AESiga kokku nii WPA2 ruuteri, kuid ka erinevate programmide nagu 7-zip ja WinZip, kasutamisel.

## AES algoritmi kirjeldus

Krüpteerimiseks ja dekrüpteerimiseks kopeeritakse sisendandmed olekumassiivi. Edasi rakendatakse olekumassiivile korduvalt nelja erinevat andmemuundamise tehnikat: baidi asendamine, rea nihutamine, veergude segamine, vooruvõtme lisamine. Krüpteerimise ja dekrüpteerimise puhul kasutatakse samu tehnikaid, kuid vastupidistes järjestustes. Andmemuundamise tehnikate rakendamise täpne tsüklite arv sõltub krüpteerimisvõtme pikkusest. 128-bitise võtme puhul läbitakse tsüklit 10, 192-bitise võtme puhul 12 ja 256-bitise võtme puhul 14 korda. Igaks järgnevaks tsükliks muudab Rijandaeli algoritm eelnevas tsüklis kasutatud vooruvõtit. Seda kutsutakse ka võtme laiendamiseks.

### AESi etappide järjestus 128-bitise võtmega krüpteerimisel ja dekrüpteerimisel

16-baidise võtme puhul läbitakse neljast andmemuundamise tehnikast koosnevat tsüklit 9 korda. Enne esimest tsüklit XORitakse esialgne andmeplokk algoritmi poolt muutmata võtmega. Kümnendal korral jäetakse välja veergude segamise samm, kuna vastasel juhul ei oleks võimalik algseid andmeid dekrüpteerimisel kätte saada. Dekrüpteerimisel läbitakse tsükleid tagurpidises järjestuses. Seega on 16-baidise võtme puhul läbitavate tsüklite arv nii krüpteerimisel kui dekrüpteerimisel 10.

#### Järjestus krüpteerimisel:

#### Järjestus dekrüpteerimisel:

### AESi etappide järjestus 192-bitise võtmega krüpteerimisel ja dekrüpteerimisel

24-baidise võtme kasutamine erineb 16-baidise võtmega krüpteerimisest ja dekrüpteerimisest tsüklite arvu poolest. Tsükleid läbitakse 12 korda nii krüpteerimisel kui dekrüpteerimisel.

#### Järjestus krüpteerimisel:

#### Järjestus dekrüpteerimisel:

### AESi etappide järjestus 256-bitise võtmega krüpteerimisel ja dekrüpteerimisel

32-baidise võtme kasutamine erineb 16-baidise ja 24-baidise võtmega krüpteerimisest ja dekrüpteerimisest tsüklite arvu poolest. 256-bitise võtmega krüpteerimisel ja dekrüpteerimisel on läbitavaid tsükleid 14.

#### Järjestus krüpteerimisel:

#### Järjestus dekrüpteerimisel:

### Võtme laiendamine

Krüpteerimistsükli esimesel läbimisel kasutatakse muutmata krüpteerimisvõtit. Igas järgnevas tsüklis kasutatakse esialgsest võtmest saadud muudetud võtmeversiooni ehk vooruvõtit. Vooruvõtmeid võib nimetada ka esialgse võtme laiendusteks. Uue vooruvõtme saamiseks tuleb eelmise tsükli võtit muuta, kasutades asendus- ja rotatsioonimeetodeid ning ringkonstanti.

### Baidi asendamine

Lähteandmete arusaadavuse vähendamiseks asendatakse olekumaatriksi baidid asendusmaatriksist (S-*box*) võetud baitidega. S-*box* on AESi puhul 16x16 tabel, mis sisaldab asendusbaite kõigile kahekohalistele kuueteistkümnendsüsteemi arvudele. Ühekohalist kuueteistkümnendsüsteemi arvu on võimalik edastada nelja biti ehk poole baidiga. Andmete esitus kuueteistkümnendsüsteemis muudab kirjapildi lühemaks ning teeb info inimsilmale loetavamaks.

### Rea nihutamine

Rea nihutamise etapis nihutatakse neljarealise olekumaatriksi viimast kolme rida. Rea elementide edasiliigutamiste arv sõltub selle rea paiknemiskohast maatriksis. Maatriksist välja lükatud arv paigutatakse nihkest tekkinud tühjale kohale. Teist rida liigutatakse ühe, kolmandat kahe ja neljandat kolme koha võrra. Esimest rida ei liigutata. Krüpteerimise käigus toimub nihe vasakule.

### Veergude segamine

Veergude segamine on AESi puhul matemaatiliselt kõige keerulisem protsess. Lihtsustamiseks kasutatakse selles etapis kahte otsingutabelit, mille abil on võimalik kiiremini leida vajaminevate korrutiste tulemusi.

### Vooruvõtme lisamine

Vooruvõti lisatakse olekumaatriksile lihtsa *bitwise* XOR tehtega. Tehet teostatakse veergudena. Iga olekumaatriksi veerg XORitakse vastava võtmemaatriksi veeruga.

## Viited