# Advanced Encryption Standard

Kriptografian, Advanced Encryption Standard (AES), Rijndael ere esaten zaiona, blokekako zifraketa eskema bat da, Estatu Batuetako gobernuak zifraketa estandartzat hartzen duena. Mundu osoan erabiltzea eta sakonki aztertua izatea espero da, bere aurrekariarekin (Data Encryption Standard, DES) gertatu bezala. AES Estandar eta Teknologia Institutu Nazionalak (NIST) iragarri zuen Estatu Batuetako FIPS PUB 197 bezala 2001eko azaroaren 26an, bost urteko estandarizazio prozesu baten ondoren. 2002-ko maiatzaren 26an estandar eraginkor batean bilakatu zen. 2006 geroztik, AES kriptografia simetrikoan erabilitako algoritmorik ezagunenetakoa da.
Oinarrizko zifratzailea Joan Daemen eta Vincent Rijmen belgikarrek garatu zuten, biak Katholieke Universiteit Leuven-eko ikasleak, eta AES-en hautespen prozesura bidalia izan zen Rijndael izenarekin.

## Garapena

Rijndael Daemen eta Rijmen-en aurreko diseinu baten (Square) hobekuntza bat izan zen. Square bera ere Shark-en garapen bat izan zen.
Bere aurrekaria zen DES ez bezala, Rijndael ordezkatze-permutazio sare bat da, ez Feistel-en sare bat. AES bizkorra da bai software bai hardware eremuetan, inplementatzeko erraza da eta memoria gutxi kontsumitzen du. Zifratze estandar berri bezala, gaur egun eskala handian erabiltzen ari da.

## Zifraketaren deskripzioa

* SubBytes pausoan state-aren byte bakoitza 8 biteko bilaketa-taulan dagokion sarrera batekin ordezkatzen da, S; b$_{ij}$ = S(a$_{ij}$).
* ShiftRows pausoan state-aren ilaren byteak ziklikoki ezkerrerantz mugitzen dira. Lerro bakoitzean byte bakoitza desplazatutako toki kopurua desberdina da.
* MixColumns pausoan state-aren zutabeetako bakoitza polinomio konstante (c(x)) batez biderkatzen da.
* AddRoundKey pausoan state-aren byte bakoitza azpigakoaren byte batekin konbinatzen da XOR (⊕) eragiketa erabiliz.
Era zorrotz batean esanda, AES ez da Rijndael hain zuzen ere (nahiz eta praktikan bereizketarik ez den egiten), Rijndael-ek bloke-tamaina multzo handiagoa baimentzen duelako eta gako-luzera handiagoak. AES-ek ordea bloke tamaina finkoa dauka (128 bit) eta gakoen tamaina 128, 192 edo 256 bitekoa izan daiteke, Rijndael-en aldiz 32ren multiploa den edozein gako ezarri daiteke, 128 biteko minimo batekin eta 256 biteko maximoarekin.
Gakoa Rijndael-en gako eskema erabiliz hedatzen da.
AES algoritmoaren kalkuluen gehiengo bat eremu finitu determinatu batean burutzen dira.
4x4 byteko matrize batean egiten dira algoritmoaren eragiketak, matrize honek state izena ere hartzen du (bloke tamaina handiagoa duten Rijndael-en bertsio batzuek state-n zutabe gehiago ere erabiltzen dituzte, matrize handiagoa behar dute).
Zifraketa burutzean, algoritmoaren erronda bakoitzak (azkenak ez ezik) lau pauso jarraitzen ditu:
* SubBytes — pauso honetan lineala ez den ordezkapen bat egiten da, zeinean byte bakoitza beste batengatik ordezkatzen den, bilatze-taula baten arabera.
* ShiftRows — pauso honetan state matrizearen lerroetako bakoitza ziklikoki errotatzen da, aldi kopuru determinatu batean.
* MixColumns — state matrizearen zutabeetan jarduten duen eragiketa da, zutabe bakoitzaren lau byteak konbinatzen ditu transformazio lineal bat erabilita.
* AddRoundKey — state matrizearen byte bakoitza round gakoarekin konbinatzen da. Round gako bakoitza zifratze-gakotik eratortzen da, gakoaren iterazio bat erabiliz.
Algoritmoaren azkeneko errondak MixColumns fasea ordezkatzen du AddRoundKey-ren beste instantzia bat sartuz.

### SubBytes - Byten ordezkapenaren pausoa

SubBytes etapan, matrizearen byte bakoitza eguneratzen da Rijndael-en S-Kutxa (8 bit) erabiliz. Eragiketa honek zifraketan linealtasunik ez egotea ahalbidetzen du. Erabilitako S-Kutxa GF(2$^8$)ren (gorputz finitua) inguruko alderantzizkatze funtziotik eratortzen da, linealtasun ezeko propietateak izateagatik ezaguna dena. Propietate algebraiko sinpleetan oinarritutako erasoak saihesteko, S-Kutxak alderantzizkako funtzioa eta eraldaketa itzulgarri bat konbinatzen ditu. S-Kutxa puntu egonkorrak ekiditeko ere hautatzen da (ondorioz derangement bat ere bada) eta baita ere edozein aurkako puntu egonkor ekiditeko.

### ShiftRows - Lerro desplazaketaren pausoa

ShiftRows pausoak state-aren ilaretan jarduten du, ziklikoki lekualdatzen ditu ilara bakoitzeko byteak offset determinatu batekin. Lehenengo ilara posizio berean geratzen da. Bigarren lerroko byte bakoitza posizio bat mugitzen da ezkerrerantz. Antzeko era batean, hirugarren eta laugarren ilarak errotatzen dira bigarrenaren eta hirugarrenaren offset-ekin, hurrenez hurren. Era honetan, ShiftRows-ek itzultzen duen state-aren zutabe bakoitza hasierako state-aren bytekin dago eraikita (bloke tamaina handiagoko Rijndael-en aldakerek offset desberdinak dituzte).

### MixColumns - Zutabeen nahasketa

MixColumns pausoan state-aren zutabe bakoitzaren lau byteak eraldaketa lineal itzulezina erabiliz konbinatzen dira. MixColumns funtzioak lau byte hartzen ditu sarrera moduan eta beste lau byte itzultzen ditu, sarrerako byte bakoitzak irteeran eragina duelarik. ShiftRows-ekin batera, MixColumns-ek difusioa ekartzen du zifraketan. Zutabe bakoitza GF(2$^8$) polinomio bat bezala tratatzen da eta gero $x^{4}+1$ modulua $c(x)$ polinomio finkoarekin biderkatzen da.

### AddRoundKey - Azpigakoen kalkulua

AddRoundKey pausoan azpigakoa state-arekin konbinatzen da. Erronda bakoitzean gako nagusitik azpigako bat eratortzen da, gakoaren iterazioak erabiliz. Azpigako bakoitza state-aren tamaina berekoa da. Azpigakoa state-aren byte bakoitza azpigako beran dagokion bytearekin konbinatuz gehitzen da, XOR funtzioa erabiliz konbinaketa hau burutzeko.

## Zifraketaren optimizatzea

Hitz luzera bezala 32 bit edo gehiago erabiltzen duten sistemetan algoritmoaren exekuzioa azkartzea badago, SubBytes, ShiftRows eta MixColumn eraldaketak tauletan bihurtuz. 32 biteko 256 sarrera dituzten lau taula baditugu, zeinen tamaina osoa 4 kilobytekoa den, Kb bat hartzen du taula bakoitzak memorian. Modu honetan, algoritmoaren erronda bakoitzean 16 bilaketa egiten dira taula batean eta 32 biteko 16 XOR eragiketa AddRoundKey pausoan. Baldin eta taularen 4 kilobyteak handiegiak badira plataforma zehatz batentzat, bilaketa eragiketa 32 biteko 256 sarrerako taula bakarra erabiliz egin daiteke, errotazio zirkularren bidez.

## Segurtasuna

Oraindaino AES-en aurkako eraso arrakastatsu bakarrak geroago deskribatzen diren kanal laguntzaileen bidez lortu dira. Estatu Batuetako Segurtasun Agentzia Nazionalak AES-en parte hartzeko amaierako hautespen guztiak aztertu zituen, Rijndael bera barne eta guztiek segurtasun nahikoa eskaintzen zutela esan zuen, Estatu Batuetako Gobernuaren sailkatu gabeko informazioaren gain erabiltzeko. 2003ko ekainean, Estatu Batuetako Gobernuak AES bere informazio sailkatuaren gainean erabilia izan daitekeela esan zuen.
Horrela, erabiltzaile arruntak historian lehen aldiz NSA-k informazio oso sekretua (TOP SECRET) zifratzeko aprobatutako zifratzaile bat eskuratu dezake. Publikoak diren produktu askok 128 biteko gakoak erabiltzen dituzte defektuz, beharbada NSA-k gako hauen sendotasunean ez du sinesten edota segurtasun marjin bat izatea nahiago dute (etorkizunean hamarkada askotan zehar seguruak izaten jarraitu behar duten dokumentuei begira).
Blokekako zifratzaile baten aurkako erasorik ohikoena erronda kopuru txikiago bat erabiliz egindako erasoetan datza. AES-ek 10 erronda erabiltzen ditu 128 biteko gakoekin, 12 192 biteko gakoekin eta 14 256 biteko gakoekin. 2006 arte, ezagutzen diren erasorik hoberenak 128 biteko gakoen kontra 7 erronda erabiliz egiten dira, 8 erronda 192 biteko gakoen kontra eta 9 256 biteko gakoen aurka.
Aditu batzuek AES-en segurtasunari buruz kezkak dituzte. Zifratzaileak burutzen dituen erronda kopuruaren eta ezagutzen diren eraso hoberenen arteko erronda kopuruaren desberdintasuna txikiegia dela adierazten dute. Erasoak hobetzeko modu bat aurkitu baliteke, hortan datza arriskua. Kasu hau emango balitz, zifratzailea apurtuko litzateke. Kriptografian, zifratzaile bat apurtzeak esan nahi du existitzen dela indar gorriko erasoa baino azkarragoa den eraso bat honen kontra. Hortaz, 2$^{120}$ eragiketa “bakarrik” behar dituen eraso batek AES apurtuko luke, nahiz eta oraingoz eraso bideraezina izan (gaur egungo teknologiaren mugak direla eta). Oraingoz, kezka hauek alde batera utzi daitezke. Orain arteko indar gorriko erasorik ezagunena 64 biteko RC5 gako baten aurka egindakoa izan da, distributed.net-ek burutua.
Beste arduretako bat AES-en egitura matematikoa da. Bloke zifratzaileen gehiengoak ez-bezala, AES-ek deskripzio matematiko ordenatua dauka. Honek ez du oraingoz erasorik ekarri, baina ikertzaile batzuen aburuz, egitura hau ustiatua izan liteke etorkizunean.
2002an XSL bezala ezagututako eraso teorikoa iragarria izan zen Nicolas Courtois eta Josef Pieprzyk-engandik, AES algoritmoan ahultasun nabariak aurkituz. Hainbat adituk arazoak topatu dituzte proposatutako erasoaren azpian dauden eragiketa matematikoetan, egileen erroreak iradokituz. Eraso mota hau praktikan AES-en aurka egin daitekeen edo ez airean dago oraindik. Oraingoz nahiko zaila dirudi erasoa algoritmoaren aurka burutzea eremu teorikotik kanpo.

## Kanal laguntzaile bidezko erasoak

Kanal laguntzaile bidezko erasoek ez dute zifratzailea azpitik erasotzen, baizik eta nahi gabe datuak galtzen dituzten sistemetan dauden zifratzailearen inplementazioak.
2005eko apirilean D.J. Bernstein-ek cache bidezko eraso tenporizatu bat proposatu zuen, zeinak zerbitzari bat apurtzen zuen AES zifraketa OpenSSL-rekin erabiltzen zuen heinean. Zerbitzari hau denborei buruzko informazio ahalik eta gehien emateko diseinatua izan zen eta erasoak testu soileko 200 milioi fitxategi inguru behar izan zituen. Erasoa benetako inplementazioetan praktikoa ez zela izango esaten zen, Bruce Schneier-ek "eraso tenporizatu polit" bezala definitu zuen ikerkuntza.
2005eko urrian Adi Shamir eta beste bi ikertzailek cache bidezko eraso tenporizatuak erabiliz egindako proben artikulu bat aurkeztu zuten. Erasoetako batek AES-en gako oso bat lortu zuen 800 idazketa soilik egin ondoren, 65 milisegundotan. Eraso honek AES zifraketa egiten duen sistema berean erasotzaileak exekuzio baimenak izan ditzan beharrezkoa du.

## Erreferentziak

* ↑ http://cr.yp.to/papers.html#cachetiming
* ↑ http://www.wisdom.weizmann.ac.il/~tromer/papers/cache.pdf

## Ikus,gainera

* DES
* 3DES

## Inplementazioak

* JavaScript lengoaian tarteko balioak eskaintzen dituen AES kalkulagailua
* BSD lizentziadun AES-en implementazioa, Brian Gladman-ek eskainia
* Pablo Barreto-ren domeinu publikoko AES inplementazioa, C lengoaian idatzitakoa
* D.J. Bernstein-en domeinu publikoko AES inplementazioa
* GPL lizentziadun Rijndael algoritmoaren kode-iturburua, C lengoaian
* GPL Nettle liburutegia, zeinak AES-en inplementazio bat barneratzen duen
* Evolsystem: AES - Rijndael algoritmoaren adibidea
* Rijndael Inspector: flash erabiltzen duen programa, AES-128 erabiliz zifratu eta deszifratzeko

## Kanpo estekak

* Literature survey on AES
* Recordings of the pronunciation of "Rijndael" (85 KB wav file)
* The archive of the old official AES website
* FIPS PUB 197: the official AES Standard (PDF file)
* John Savard's description of the AES algorithm
* E.Zabala-k egindako animazioa, zeinak Rijndael algoritmoaren funtzionamendua azaltzen duen
* Datuak: Q190746
* Multimedia: Advanced Encryption Standard / Q190746