Advanced Encryption System AES Advanced Encryption System
1997-ben az NIST (National Institute of standards) pályázatot írt ki az AES-re Határidő: 1998. június 15. 15 pályázat érkezett Az első kört 5 javaslat élte túl: MARS, RC6, Rijndael, Serpent, Twofish 2000. október 2.: A 128 bites Rijndael lesz az AES.
Az AES a kiírás szerint egy nyilvánosan közzétett díjmentes világszerte terjesztett a következő évszázadban a kormányzati dokumentumok védelmére alkalmas titkosító algoritmus kell legyen
Minimális kritériumok: Szimmetrikus kriptorendszert valósítson meg Blokkódoló legyen Kezelje a 128-128, 128-192 és a 128-256 bites blokkhossz-kulcshossz kombinációt
További elvárások: Legyen legalább olyan biztonságos mint a TDES Legyen sokkal gyorsabb mint a TDES A tervezőnek le kell mondania a szerzői jogokról
Matematikai előismeretek A Rijndael erősen kihasználja a test tulajdonságait A test elemeit 7-ed fokú {0,1} együtthatós polinomokként ábrázoljuk, az összeadás a polinomok összeadásának felel meg, míg a szorzás a polinomok szorzásának modulo egy irreducibilis polinom. A kiválasztott polinom az
Összeadás:
Szorzás
Inverz számítása Mivel Ezért azaz
feletti polinomok Négy byte tekinthető mint feletti harmadfokú polinom. Az és polinomok szorzata ahol
Sajnos ez már nem ábrázolható 4 byte-on ezért az eredményt vesszük modulo Így a szorzásunk eredménye a alakban adható meg, ahol mivel
Ez írható mátrixos alakban Mivel az polinom reducibilis felett, ezért egy rögzített polinommal való szorzás modulo nem feltétlenül invertálható művelet, de a Rijndael-ben olyan polinomot választottak, melynek van inverze.
Szorzás x-szel A polinom alakú lesz, amit modulo véve adódik, azaz
A Rijndael leírása Tervezők: Joan Daemen Vincent Rijmen A tervezés során figyelembe vett fő szempontok: Ellenállás az ismert támadásokkal szemben Gyorsaság és tömör kódolhatóság a platformok minél szélesebb körén Egyszerű kivitel
A Rijndael blokkhossza: 128, 192, 256 bit A Rijndael kulcshossza: 128, 192, 256 bit Mindegyik blokkhossz mindegyik kulcshosszal használható A Rijdael nem Feistel struktúrájú blokktitkosító, mivel azokban az egyes menetek során a bitek legnagyobbrészt csak összekeverednek, de nem változnak meg a bitek.
A Rijndael menet-transzformációja ezzel szemben három invertálható rétegből áll lineáris keverő réteg (ez teríti szét az információt a blokk teljes hosszában) nem-lineáris réteg (egy S-boksz, azaz a lineáristól minél távolabb álló transzformáció) kulcshozzáadó réteg (a menetkulcsot egyszerű XOR-ozása az aktuális állapothoz)
Részletes leírás Az állapot (state) a titkosítás köztes eredménye Legyen Nb a blokkhossz 32-ed része Legyen Nk a kulcshossz 32-ed része Ekkor az állapotot ábrázolhatjuk egy 4 sorból és Nb oszlopból álló táblázatként, ahol a táblázat minden eleme egy byte
Az állapot Nb=6 esetén és a kulcs Nk=4 esetén
A kezdeti állapot feltöltése a nyílt szöveggel Az inputot 8 bites byte-ok alkotják, melyek 0-tól (4*Nb-1)-ig vannak sorszámozva Ha ebben a számozásban a byte sorszáma n akkor a táblázatbeli kétdimenziós (i,j) indexe:
A menetek száma a blokk- és kulcshossz függvényében
A menet-transzformáció Az utolsó menet kicsit különbözik a többitől
A ByteSub transzformáció A ByteSub transzformáció egy S-box, ami az állapot egy-egy byte-ján külön-külön hat. Ez egy invertálható transzformáció, mely két részből áll: Először vesszük az inverzet -ban Aztán alkalmazzuk az alábbi affin transzformációt:
Az S-box kimenete minden byte esetén előre kiszámítható, és táblázatba foglalható A ByteSub inverze is egy ByteSub és ugyanannyi időbe telik elvégezni. A ByteSub és a ShiftRow sorrendje felcserélhető
A ShiftRow transzformáció A ShiftRow transzformáció az állapot sorait ciklikusan eltolja. Az i-edik sort Ci-vel eltoljuk, ahol Ci függ a blokkhossztól. Ci = 0.
Az alábbi ábra mutatja a ShiftRow hatását az állapot sorain A ShiftRow inverze az (Nb- Ci)-vel való ciklikus bal-eltolás.
A MixColumn transzformáció A MixColumn során az állapot oszlopait feletti polinomoknak tekintjük és modulo a polinommal szorozzuk, azaz a művelet alakba írható.
Az alábbi ábra mutatja a MixColumn hatását az állapot sorain A MixColumn inverze polinomszorzás, egy d(x) polinommal, melyre Ez a d(x) az alábbi polinom:
Az AddRoundKey transzformáció Ebben a részben adjuk hozzá a menetkulcsot az állapothoz
Menetkulcs-generálás A szükséges menetkulcsok bitjeinek száma 32*Nb*(Nr+1) Először a titkosító kulcsból egy kiterjesztett kulcsot generálunk, amely Nb*(Nr+1) darab 4 byte-os szóból áll. Jel: W[i] az i-edik szó. Ebből választjuk ki a menetkulcsokat, úgy, hogy az első menetkulcs a kiterjesztett kulcs első Nb darab 4 byte-os szava, a második menetkulcs a második Nb darab, stb.
Kulcskiterjesztés A kulcskiterjesztés során a az 32*Nk bit hosszúságú titkosítókulcsból egy 32*Nb*(Nr+1) hosszúságú kiterjesztett kulcsot hozunk létre A kiterjesztett kulcs első Nk szava a titkosítókulcs bitjeit tartalmazza A többit az alábbi módon, rekurzívan definiáljuk
Nk ≤ 6 esetén: SubByte() a szó minden byte-jára az S-Boxot alkalmazza A RotByte() a négy szón egy szóval való ciklikus baleltolást hajt végre Rcon(i/Nk) egy menetkonstans, amely Nk-tól függetlenül van definiálva:
Nk > 6 esetén:
Menetkulcskiválasztás Az i-edik menetkucs a kiterjesztett kulcs W[Nb*i] és W[Nb*(i+1)] közötti része lesz Például Nb=6 és Nk=4 esetén:
A titkosító algoritmus Először alkalmazunk egy kulcshozzáadást Majd jön Nr-1 menet Végül egy utolsó menet (amelyik kicsit különbözik a többitől)
A Rijndael inverze Ha az összes transzformáció inverzét elvégezzük fordított sorrendben, akkor visszakapjuk az eredeti szöveget. Az inverztranszformáció a Rijndael-lel azonos struktúrájúra hozható, de ezzel nem foglalkozunk.