Teorija kodiranja in kriptografija 23/24 AES Arjana Žitnik Univerza v Ljubljani, Fakulteta za matematiko in fiziko Ljubljana, 8. 3. 24
AES - zgodovina Septembra 997 je NIST objavil natečaj za izbor nove simetrične bločne šifre AES. Specifikacije: bločna dolžina 28 dolžina ključev 28, 92, 256 prosta uporaba Prispelo je 5 ustreznih predlogov iz 2 držav. Kriterij izbire: varnost učinkovitost (časovna in prostorska) značilnosti algoritma in implementacije (fleksibilnost, preprostost,...)
avgust 999: izbranih je 5 finalistov MARS RC6 Rijndael Serpent Twofish oktober 2: končni izbor je Rijndael (Rijmen, Daemen, Belgija) maj 22: AES sprejet kot US Federal Information Processing Standard (FIPS 97). junij 23: ameriška vlada odobrila AES za zaščito zaupnih podatkov.
Opis kriptosistema AES abeceda Σ = {, }, zlog = 8 znakov (bitov), beseda = 4 zlogi = 32 bitov. AES je SPN omrežje + dodatna linearna transformacija. Parametri: bločna dolžina: 28 bitov = 6 zlogov = 4 besede, dolžina ključa N k (v besedah) je lahko 4, 6 ali 8, število krogov N r je enaka N k + 6, tj., 2 ali 4. razpored podključev: tabela besed velikosti 4N r + 4, rk = rk, rk,..., rk 4Nr +3, kjer je rk i beseda. Opomba: AES podpira tudi bločne dolžine 6 ali 8 besed; omejili se bomo na opis s 4 besedami.
SPN-omrežje
Podatkovne strukture AES besedilo shranimo v tabelo zlogov velikosti 4 4: b = b, b,... b 3,3 = b, b, b,2 b,3 b, b, b,2 b,3 b 2, b 2, b 2,2 b 2,3 b 3, b 3, b 3,2 b 3,3. Tudi kriptogram c = c, c,... c 3,3 shranimo v tabelo zlogov velikosti 4 4.
Stanje je delni rezultat v posameznih krogih: s = s, s,... s 3,3 = s, s, s,2 s,3 s, s, s,2 s,3 s 2, s 2, s 2,2 s 2,3 s 3, s 3, s 3,2 s 3,3.
Kodiranje pri AES Podatki: byte b[..3,..3] besedilo word k[..4n r + 3] razpored podključev Rezultat: byte c[..3,..3] kriptogram Lokalne spremenljivke: byte s[..3,..3] stanje int r števec krogov Pomožne funkcije: AddRoundKey, SubBytes, ShiftRows, MixColumns
Postopek: s = b s = AddRoundKey(s, rk[..3]) (primešamo podključ) za r =, 2,... N r ponovi SubBytes(s) (substitucija) ShiftRows(s) (permutacija) MixColumns(s) (linearna transformacija) AddRoundKey(s, rk[4r..4r + 3]) (primešamo podključ) (Zadnji krog) SubBytes(s) ShiftRows(s) AddRoundKey(s, rk[4n r..4n r + 3]) c = s
Pomožne funkcije AddRoundKey(byte s[..3,..3], word rk[..3]) za j =,, 2, 3 ponovi s j = s j rk[j] vrni s Pri tem je s j stolpec stanja s: s j = s,j s,j s,j s,j.
ShiftRow Transformacija ShiftRow j-to vrstico s ciklično premakne za j mest v levo: s, s, s,2 s,3 s, s,2 s,3 s, s 2,2 s 2,3 s 2, s 2, s 3,3 s 3, s 3, s 3,2. Skupaj s transformacijo MixColumn poskrbi za razpršitev podatkov.
Operacije v obsegu GF(2 8 ) Funkcije SubBytes in MixColumns ter postopek za generiranje razporeda podključev uporabljajo operacije v končnem obsegu GF(2 8 ): Obseg generiramo z nerazcepnim polinomom f (x) = x 8 + x 4 + x 3 + x + Njegove elemente identificiramo z zlogi: polinomu b 7 x 7 + b 6 x 6 + b 5 x 5 + b 4 x 4 + b 3 x 3 + b 2 x 2 + b x + b priredimo zlog b 7 b 6 b 5 b 4 b 3 b 2 b b, kjer b i {, }; vsak zlog lahko zapišemo kot par šestnajstiških števk. Zdaj lahko zloge seštevamo, odštevamo, množimo in delimo (kot elemente GF(2 8 )).
SubBytes Na vsakem od elementov matrike s se neodvisno izvede naslednji operaciji: izračun inverza s i,j v GF(2 8 ) (element se preslika sam vase), 2 izračun afine transformacije nad Z 2, podane z izrazom kjer je A = s i,j = A s i,j c (v Z 2 ) in c =.
Zgled - SubBytes s i,j = 53 (6) s i,j = CA (6) = A c = = Novi s i,j = = ED (6).
SubBytes kot tabela
MixColumns Za vsak stolpec s j, j =,, 2, 3 ponovi s j = Množenje poteka v GF(2 8 ). 2 3 2 3 2 3 3 2 s j = = 2 = = x 3 = = x +
Razpored podključev: KeyExpansion Podatek: word K [..N k ] ključ Rezultat: word rk [..4N r + 3] razpored podključev Pomožne funkcije: SubWord: na vsakem zlogu uporabi SubBytes: (z, z, z 2, z 3 ) (Az + c, Az + c, Az 2 + c, Az 3 + c). RotWord: ciklični zamik zaporedja zlogov za v levo: (z, z, z 2, z 3 ) (z, z 2, z 3, z ). Rcon: M ( 2 n,,, ) (4 zlogi, računanje v GF(2 8 )).
Razpored podključev: postopek Postopek: za i =, 2,... N k ponovi rk[i] = K [i] (v prvi del prepišemo ključ) za i = N k, N k +,... 4N r + ponovi tmp = rk[i ] če i mod N k = potem tmp =SubWord(RotWord(tmp)) Rcon[i/N k ] sicer če N k > 6 in i mod N k = 4 potem tmp =SubWord(tmp) rk[i] = rk[i N k ] tmp
Analiza varnosti Pri konstrukciji novega simetričnega bločnega kriptosistema je potrebno upoštevati: kriptogram mora biti čim bolj naključen vsak znak kriptograma mora biti odvisen od vseh znakov sporočil (razpršitev - diffusion) zveza med kriptogramom in ključem mora biti čim bolj zapletena (zmeda - confusion) algoritem mora biti varen pred vsemi znanimi napadi znano matematično ozadje omogoča boljšo analizo
Nekaj znanih napadov na simetrične šifre izčrpen pregled vseh ključev (dovolj velik prostor ključev!), linearna kriptoanaliza, diferenčna kriptoanaliza, algebraični napadi (reševanje sistemov enačb)... Napadi na implementacijo: napadi s stranskim kanalom (merjenje časa, porabo energije,...) povzročanje napak pri računanju (prekinitev napajanja, laserski žarki...) Več o varnosti kasneje!