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.
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 formula_1. 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 formula_2 või formula_3.
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.
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.
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.
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.