Upload
dotuong
View
223
Download
0
Embed Size (px)
Citation preview
UNIVERZITET CRNE GORE
Prirodno-matematički fakultet Podgorica
Dušan Radoičić
Napredni standard enkripcije (AES)
Specijalistički rad
Podgorica, 2013.
UNIVERZITET CRNE GORE
Prirodno-matematički fakultet Podgorica
Napredni standard enkripcije (AES)
Specijalistički rad
Kriptografija Dušan Radoičić
Mentor: Doc. dr Vladimir Božović Računarske nauke
Podgorica, jul 2013.
Apstrakt
Napredni standard enkripcije je algoritam za kriptovanje elektronskih podataka
kojeg karakteriše brzina izvršavanja, relativno velika dužina ključa a kao posledica
toga i izuzetna sigurnost. Nakon 13 godina od usvajanja standarda još uvijek nije
izveden uspješan napad na AES algoritam koji ima bolje rezultate od brute-force algo-
ritma. U ovom radu opisan je karakterističan proces nadmetanja za odabir algoritma
i suština rada algoritma u koracima, uz detalje koji će vam nadam se pomoći da ga
bolje razumijete pa čak i implementirate.
3
Abstract
Advanced encryption standard is an algorithm for encrypting electronic data that
is characterized by fast execution, relatively large key length, and as a consequence,
exceptional security. Thirteen years after adoption of the standard, not yet execu-
ted an attack on AES that has outperformed the brute-force algorithm. This paper
describes the characteristical competition process for the algorithm selection and es-
sence of the algorithm in steps, with details that will hopefully help you to better
understand and even implement the algorithm.
4
Sadržaj
1 Uvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 Osnovni pojmovi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Nizovi bajtova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Stanja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 Matematički preduslovi . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1 Sabiranje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Množenje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3 Invertovanje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3 Specifikacija algoritma . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.1 Enkripcija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.1.1 SubBytes() transformacija . . . . . . . . . . . . . . . . . . . . 13
3.1.2 ShiftRows() transformacija . . . . . . . . . . . . . . . . . . . . 14
3.1.3 MixColumn() transformacija . . . . . . . . . . . . . . . . . . . 14
3.1.4 AddRoundKey() sloj . . . . . . . . . . . . . . . . . . . . . . . 16
3.1.5 Izvođenje etapnih ključeva . . . . . . . . . . . . . . . . . . . . 16
3.2 Dekripcija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2.1 InvMixColumn() transformacija . . . . . . . . . . . . . . . . . 18
3.2.2 InvShiftRows() transformacija . . . . . . . . . . . . . . . . . . 19
3.2.3 InvSubBytes() transformacija . . . . . . . . . . . . . . . . . . 20
5
4 Bezbjednost AES-a . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.1 Režim rada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.1.1 ECB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.1.2 CBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5 Zaključak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Bibliografija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
6
Glava 1
Uvod
Napredni standard enkripcije (AES) je kriptografski algoritam koji se koristi za za-
štitu elektronskih podataka. Po svojoj strukturi, AES je simetrična blok šifra kojom
možemo kriptovati i dekriptovati informacije. Kriptovanje se sastoji od konverzije
osnovne poruke u nečitljivu kriptovanu poruku uz pomoć ključa. Dekriptovanje je
obrnuta operacija u kojoj iz nečitljive-kriptovane poruke uz pomoć istog ključa dobi-
jamo osnovnu poruku.
Američki nacionalni institut za standardizaciju i tehnologiju (NIST) je 2-og janu-
ara 1997. godine objavio da očekuje predloge za novi napredni standard enkripcije
(Advanced Encryption Standard), standard koji će zamijeniti u tom trenutku već
dotrajali DES. Tokom rada na formiranju novog standarda, 1999. godine donešena
je odluka da se od tog trenutka DES koristi samo za postojeće sisteme, a da njegovo
mjesto zauzme 3DES (Triple DES). Iako se 3DES odupire brute-force napadima sa
tadašnjom tehnologijom, ipak postoji nekoliko problema sa njim. Prije svega nije pre-
više zahvalan za softversku implementaciju – 3 puta je sporiji od DES-a koji je sam
po sebi već bio spor. Takođe, mala veličina bloka od 64 bita je nedostatak ukoliko se
želi napraviti heš funkcija od kriptovanog bloka. Zbog mogućnosti napretka na polju
kvantnih računara u narednim decenijama, poželjna je dužina ključa od 256 bita. Svi
ovi nedostaci su doveli NIST do zaključka da je potpuno nov blok algoritam potreban
1
kao zamjena za DES.
Za razliku od načina na koji je 70-ih godina nastao DES, a koji je i danas tajna,
nadmetanje za AES algotitam je bio potpuno javan i otvoren proces, pod nadzorom
NIST-a[7] . Na njihovu adresu kroz 9 mjeseci pristiglo je 15 različitih predloga. U tri
etape ocjenjivanja, NIST i međunarodna naučna zajednica su razmatrali prednosti i
mane predloženih algoritama, i smanjivali broj potencijalnih kandidata. 2001. godine
od 5 finalista - MARS (IBM korporacija), RC6 (RSA laboratorije), Serpent (Ross
Anderson, Eli Biham i Lars Knudsen), Twofish (Bruce Schneier, John Kelsey, Doug
Whiting, David Wagner, Chris Hall i Niels Ferguson, Stefan Lucks, Tadayoshi Kohno
i Mike Stay) i Rijndael (Joan Daemen i Vincent Rijmen), NIST odabira Rijndael i
proglašava ga za standard (FIPS PUB 197).
Prilikom objave poziva za ponude za AES, sledeći zahtjevi su postavljeni:
1) Blok šifra sa dužinom bloka od 128 bita;
2) Tri dužine ključa od 128, 192 i 256 bita;
3) Sigurnost na nivou ostalih predloženih algoritama;
4) Efikasnost u softveru i hardveru.
Od AES-a se očekivalo (i još se očekuje) bude dominantan simetrični kriptografski
algoritam za komercijalne svrhe dugi niz godina. Takođe je vrijedno pomena da je
2003. godine američka nacionalna agencija za bezbjednost (NSA) objavila da dozvo-
ljava da se koristeći AES kriptuju povjerljivi dokumenti do nivoa secret za sve dužine
ključa i do nivoa top secret za dužine ključa od 192 ili 256 bita. Do tog datuma su
samo tajni algoritmi korišćeni za enkripciju povjerljivih dokumenata.
Otprilike svakih 5 godina, zajedno sa ostalim kriptografskim standardima, NIST
radi reviziju AES-a.
Da bi neka implementacija AES algoritma bila u skladu sa standardom, mora proći
proces validacije (AESAVS)[1]. Testove za tu validaciju obezbjeđuje CST laboratorija
2
akreditovana od strane NVLAP-a. Postoje 3 tipa testova, i osmišljeni su da obuhvate
bilo koji implementirani režim rada algoritma.
1.1 Osnovni pojmovi
Ulaz i izlaz iz AES algoritma se sastoje od sekvenci (blokova) sa po 128 bita. Broj bita
se naziva dužina sekvence ili bloka. Ključ za AES algoritam je sekvenca od 128, 192
ili 256 bita. Svi drugi ulazi, izlazi ili ključevi u AES algoritam nisu dozvoljeni. Bite
unutar takve sekvence ćemo numerisati od 0 do n-1, gdje je n dužina sekvence, odno-
sno biće indeksirani indeksom i, koji će biti u opsegu 0≤i<128, 0≤i<192 ili 0≤i<256
zavisno od dužine bloka i dužine ključa. Osnovna jedinica za procesiranje u AES
algoritmu je bajt. Poželjno je označavati bajt vrijednosti koristeći heksadecimalnu
notaciju tako da obje grupe od 4 bita budu označene kao:
Biti Karakter
0000 0
0001 1
0010 2
0011 3
Biti Karakter
0100 4
0101 5
0110 6
0111 7
Biti Karakter
1000 8
1001 9
1010 a
1011 b
Biti Karakter
1100 c
1101 d
1110 e
1111 f
Ulaz, izlaz i ključ - bit sekvence su procesirane kao nizovi bajtova formirani dijeljenjem
ovih sekvenci u grupe od po 8 bita. Za ulaz, izlaz i ključ označeni sa a, bajte u
rezultujućem nizu ćemo referencirati sa an ili sa a[n], gdje će n biti jedan iz sledećih
opsega:
Dužina ključa =128 bita ⇒ 0 ≤n<16,
Dužina ključa =192 bita ⇒ 0 ≤n<24,
Dužina ključa =256 bita ⇒ 0 ≤n<32,
Dužina bloka =128 bita ⇒ 0 ≤n<16.
3
1.2 Nizovi bajtova
Niz bajtova će biti prezentovan u sledećoj formi:
a0a1a2...a15
Biti i redosled bita unutar bajtova će biti izvedeni iz 128 bitne ulazne sekvence ulaz :
ulaz0ulaz1ulaz2...ulaz127,
kao
a0 = ulaz0ulaz1ulaz2...ulaz7,
a1 = ulaz8ulaz9ulaz10...ulaz15,
...
a15 = ulaz120ulaz121ulaz122...ulaz127.
Šablon se može produžiti na dužu sekvencu (tj. za 192 i 256 bitne ključeve), tako da,
generalno:
an = ulaz8nulaz8n+1ulaz8n+2...ulaz8n+7.
1.3 Stanja
Operacije unutar algoritma su izvedene nad dvodimenzionalnim nizovima - ma-
tricama bajtova koje zovemo stanja. Stanje se sastoji od 4 reda sa po Nb bajtova (Nb
je dužina bloka podijeljena sa 32). U stanju označenom sa s, svaki bajt je indeksiran
sa 2 vrijednosti tj. sa brojem vrste r u opsegu 0≤ r<4, i brojem kolone c u opsegu
0≤ c<Nb. Ovo omogućava pristupanje individualnom bajtu u stanju sa sr,c ili sa
s [r,c]. Za ovaj standard (128 bitni blok i ključ), je Nb=4 tj 0≤ c<4.
Na početku enkripcije odnosno dekripcije, ulaz-niz bajtova in0in1in2...in15 se ko-
pira u matricu stanja na način opisan na slici 1.1.
Operacije kod enkripcije/dekripcije se potom primjenjuju na matricu stanja, nakon
čega se finalne vrijednosti kopiraju u izlazni niz – niz bajtova out0out1out2...out15.
4
Dakle, na početku enkripcije/dekripcije, ulazni niz in, se kopira u stanje po sledećoj
šemi:
sr,c = inr+4c, za 0 ≤ r<4 i 0 ≤ c<Nb,
a na kraju enkripcije/dekripcije, stanje se kopira u izlazni niz out kao:
outr+4c = sr,c, za 0 ≤ r<4 i 0 ≤ c<Nb.
ulazin0 in4 in8 in12
in1 in5 in9 in13
in2 in6 in10 in14
in3 in7 in11 in15
=⇒
stanjes0,0 s0,1 s0,2 s0,3s1,0 s1,1 s1,2 s1,3s2,0 s1,2 s2,2 s2,3s3,0 s1,3 s3,2 s3,3
=⇒
izlazout0 out4 out8 out12out1 out5 out9 out13out2 out6 out10 out14out3 out7 out11 out15
Slika 1.1: Tok ulaz-stanje-izlaz
Četiri bajta u svakoj koloni matrice stanja formiraju 32 bitnu riječ, gdje broj vrste r
označava indeks za 4 bajta unutar svake riječi. Stanje dakle može biti interpretirano
kao jednodimenzionalni niz 32 bitnih riječi (kolona) w0..w3, gdje broj kolone c ozna-
čava indeks u ovom nizu. Dakle, na primjeru sa slike 1.1 stanje se može posmatrati
kao niz od 4 riječi, odnosno:
wi = s0,is1,is2,is3,i , 0 ≤ i ≤ 3 .
5
Glava 2
Matematički preduslovi
U AES algoritmu bajtovi se predstavljaju kao konkatenacija njihovih individualnih
bit vrijednosti između vitičastih zagrada u sledećem redosledu:
{b7b6b5b4b3b2b1b0}
Ovi bajtovi se mogu interpretirati kao elemenati konačnih polja koristeći polinomi-
jalnu reprezentaciju:
b7x7 + b6x
6 + b5x5 + b4x
4 + b3x3 + b2x
2 + b1x + b = Σ7i=0bix
i.
Na primjer, {01100011} identifikuje specifičan element polja x6 + x5 + x + 1.
Teorema 1. Polje reda m postoji samo ako je m stepen prostog broja tj m = pn gdje
je n prirodan broj, a p prost broj koji nazivamo karakteristikom konačnog polja.
Naijintuitivniji primjeri konačnih polja su prosta polja ili polja sa prostim brojem
elemenata [6]. Konačna polja drugačije nazivamo i Galoisova polja, i označavamo sa
GF (Galois field). Broj elemenata polja nazivamo red ili kardinalnost polja. Konačno
polje sa prostim brojem elemenata p označavamo GF(p), dok polja kardinalnosti
stepena prostog broja označavamo sa GF(pn). AES koristi konkretno polje GF(28).
Aritmetika u ovim poljima je modularna, po modulu p (karakteristika polja). Dakle
sabiranje i množenje se razlikuju od onih koje koristimo u radu sa brojevima.
6
2.1 Sabiranje
Sabiranje dva elementa u konačnom polju se postiže sabiranjem koeficijenata odgo-
varajućih stepena u polinomima dva elementa. Sabiranje se izvodi koristeći XOR
operaciju (ekskluzivno ili) ⊕, tako da je 1⊕1=0, 1⊕0=1 i 0⊕0=0. Uslovno, odu-
zimanje je isto kao sabiranje. Sabiranje elemenata konačnog polja se može opisati
kao moduo 2 sabiranje odgovarajućih bita u bajtu. Za 2 bajta {a7a6a5a4a3a2a1a0} i
{b7b6b5b4b3b2b1b0}, suma je {c7c6c5c4c3c2c1c0}, gdje je ci = ai ⊕ bi.
Na primjer, sledeći izrazi su ekvivalentni:
(x6 + x4 + x2 + x + 1) + (x7 + x + 1) = x7 + x6 + x4 + x2,
{01010111} ⊕ {10000011} = {11010100},
{57} ⊕ {83} = {d4}.
2.2 Množenje
Množenje u GF (28) je glavna operacija za MixColumn transformaciju u AES-u. U
prvom koraku, dva elementa (predstavljena njihovim polinomima) konačnog polja
GF (2m) se množe koristeći standardno pravilo množenja polinoma:
A(x) ·B(x) = (am−1xm−1 + · · ·+ a0) · (bm−1x
m−1 + · · ·+ b0),
C′(x) = c
′2m−2x
2m−2 + · · ·+ c′0,
Gdje je
c′0 = a0b0 (mod 2),
...
c′2m−2 = am−1bm−1 (mod 2).
Primijetimo da su svi koeficijenti ai, bi i ci elementi polja GF(2), i da je aritmetika
nad koeficijentima sprovedena u GF(2) polju. Generalno proizvod polinom C(x) će
imati stepen veći od m-1 i to se mora svesti.
7
Osnovna ideja je pristup sličan množenju u prostim poljima (polje sa prostim brojem
elemenata) tj. u GF(p) mi množimo dva cijela broja, podijelimo rezultat sa p, i uz-
memo u obzir samo ostatak. U proširenim poljima (polje sa brojem elemenata stepena
prostog broja, većeg od 1), proizvod množenja se dijeli sa određenim polinomom, i
mi uzimamo u obzir samo ostatak nakon dijeljenja sa tim polinomom. Za to trebamo
nesvodljivi polinom (u tom polju) - za operaciju svođenja po modulu. A nesvodljivi
polinom je onaj koji je kao i prost broj djeljiv samo sa sobom i jedinicom.[2]
Dakle, možemo napraviti definiciju množenja u proširenom polju:
Neka su A(x), B(x)∈ GF(2m) i neka je P (x) = Σmi=0pix
i, pi ∈ GF(2) nesvodljivi poli-
nom. Množenje dva elementa A(x) i B(x) se izvodi kao:
C(x) ≡ A(x)B(x) (mod P (x)).
Tada svako polje GF (2m) zahtijeva nesvodljivi polinom P(x) stepena m, sa koefici-
jentima iz GF(2). Primijetimo da nisu svi polinomi nesvodljivi. Na primjer, polinom
x4 + x3 + x + 1 je svodljiv jer:
x4 + x3 + x + 1 = (x2 + x + 1)(x2 + 1),
i stoga se ne može koristiti za konstruisanje proširenog polja GF (24). Za AES se
koristi nesvodljivi polinom u GF (28):
P (x) = x8 + x4 + x3 + x + 1.
Primjer množenja u GF (28):
A(x) = x6 + x4 + x2 + x + 1, B(x) = x7 + x + 1, P (x) = x8 + x4 + x3 + x + 1
C(x) = A(x) ·B(x) = x13 + x11 + x9 + x8 + x6 + x5 + x4 + x3 + 1
x8 = 1 ∗ P (x) + (x4 + x3 + x + 1)
x8 ≡ x4 + x3 + x + 1 (mod P (x))
x9 ≡ x5 + x4 + x2 + x (mod P (x))
x10 ≡ x6 + x5 + x3 + x2 (mod P (x))
x11 ≡ x7 + x6 + x4 + x3 (mod P (x))
8
x12 ≡ x8 + x7 + x5 + x4 (mod P (x))
x13 ≡ x9 + x8 + x6 + x5 (mod P (x))
...
x13 + x11 + x9 + x8 + x6 + x5 + x4 + x3 + 1 (mod P (x)) =
x7 + x6 + 1.
2.3 Invertovanje
Invertovanje u GF (28) je osnovna operacija za Byte Substitution transformaciju, koja
sadrži S-Box.
0 1 2 3 4 5 6 7 8 9 A B C D E F0 00 01 8D F6 CB 52 7B D1 E8 4F 29 C0 B0 E1 E5 C71 74 B4 AA 4B 99 2B 60 5F 58 3F FD CC FF 40 EE B22 3A 6E 5A F1 55 4D A8 C9 C1 0A 98 15 30 44 A2 C23 2C 45 92 6C F3 39 66 42 F2 35 20 6F 77 BB 59 194 1D FE 37 67 2D 31 F5 69 A7 64 AB 13 54 25 E9 095 ED 5C 05 CA 4C 24 87 BF 18 3E 22 F0 51 EC 61 176 16 5E AF D3 49 A6 36 43 F4 47 91 DF 33 93 21 3B7 79 B7 97 85 10 B5 BA 3C B6 70 D0 06 A1 FA 81 828 83 7E 7F 80 96 73 BE 56 9B 9E 95 D9 F7 02 B9 A49 DE 6A 32 6D D8 8A 84 72 2A 14 9F 88 F9 DC 89 9AA FB 7C 2E C3 8F B8 65 48 26 C8 12 4A CE E7 D2 62B 0C E0 1F EF 11 75 78 71 A5 8E 76 3D BD BC 86 57C 0B 28 2F A3 DA D4 E4 0F A9 27 53 04 1B FC AC E6D 7A 07 AE 63 C5 DB E2 EA 94 8B C4 D5 9D F8 90 6BE B1 0D D6 EB C6 0E CF AD 08 4E D7 E3 5D 50 1E B3F 5B 23 38 34 68 46 03 8C DD 9C 7D A0 CD 1A 41 1C
Slika 2.1: Inverzne vrijednosti elemenata u GF (28)
Za dato konačno polje GF (28) i odgovarajući nesvodljivi polinom P(x), inverzni ele-
menat A−1 nenultog elementa A ∈ GF (28) se definiše kao:
A−1(x) · A(x) = 1 (mod P (x)).
9
Za mala polja (u praksi se često misli na polja sa 216 ili manje elemenata) često se
koristi lookup tabela sa unaprijed izračunatim inverznim vrijednostima svih eleme-
nata. Tabela na slici 2.1 pokazuje inverzne vrijednosti za elemente iz polja GF (28)
koje se koristi u AES-u. Ova tabela sadrži sve inverze u GF (28) po modulu P(x),
P (x) = x8 + x4 + x3 + x + 1 u heksadecimalnoj notaciji. Specijalan slučaj je ulaz
za element polja 0, za koje inverz ne postoji. Međutim, za AES S-Box, neophodna
je tabela za zamjenu koja definiše sve moguće ulazne vrijednosti. Dakle, dizajneri su
definisali S-Box tako da je ulaz 0 mapiran u izlaz 0.
Primjer iz tabele:
x7 + x6 + x = (11000010)2 = (C2)hex = (xy)
za taj element, tabela vraća:
(2F )hex = (00101111)2 = x5 + x3 + x2 + x + 1
Ovo se može provjeriti množenjem:
(x7 + x6 + x) · (x5 + x3 + x2 + x + 1) ≡ 1modP (x)
Vrijednosti u tabeli su dobijene tj. mogu se ručno računati pomoći proširenog Eukli-
dovog algoritma.
10
Glava 3
Specifikacija algoritma
Za AES algoritam, dužina ulaznog i izlaznog bloka, i stanja je 128. Ovo je pred-
stavljeno sa Nb = 4, što je zapravo broj 32 bitnih riječi u stanju. Dužina ključa k je
128, 192 ili 256. Dužina ključa je predstavljena sa Nk = 4, 6, 8 tj broj 32 bitnih riječi
u ključu.[5]
Broj etapa (rundi) koje se vrte tokom izvršenja algoritma zavisi od dužine ključa.
Taj broj je predstavljen sa Nr, gdje je Nr=10 za Nk=4, Nr=12 za Nk=6 i Nr=14 za
Nk=8.
I za kriptovanje i dekriptovanje, AES algoritam koristi kružni blok - strukturu
koja se sastoji od 4 različite bajt-orjentisane operacije:
1) Zamjena bajtova koristeći S-BOX-ove,
2) Pomijeranje vrsta u nizu Stanja za različite offset-e,
3) Miješanje podataka svake kolone u stanju,
4) Dodavanje etapnog ključa u stanje.
11
3.1 Enkripcija
Na početku enkripcije, ulaz se kopira u stanje koristeći ranije navedeni princip.
Nakon inicijalnog dodavanja etapnog ključa, matrica stanja se transformiše implemen-
tirajući etapne funkcije 10, 12 ili 14 puta, sa finalnom etapom koja se malo razlikuje
od prethodnih n-1. Finalno stanje se kopira na izlaz po ranije opisanoj proceduri.
Etapna funkcija je parametrizovana koristeći raspodjelu ključa koja se sastoji od jed-
nodimenzinalnog niza 4-ro bajtnih riječi izvedenih koristeći rutinu za proširenje ključa
koju ćemo kasnije pojasniti detaljnije.
Kao što je prikazano slici 3.1, svih Nr etapa su identične sa izuzetkom poslednje koja
ne uključuje MixColumn() transformaciju.
Kriptuj(byte in[4*Nb], byte out[4*Nb], word W[Nb ∗ (Nr + 1)])begin
byte stanje[4,Nb]stanje=inAddRoundKey(stanje, W[0,Nb − 1])for etapa=1 step 1 to Nr-1
SubBytes(stanje)ShiftRows(stanje)MixColumn(stanje)AddRoundKey(stanje, W[etapa*Nb, (etapa+1)Nb − 1])
end forSubBytes(stanje)ShiftRows(stanje)AddRoundKey(stanje, W[Nr ∗Nb, (Nr + 1)*Nb − 1])out=stanje
end
Slika 3.1: Pseudo kod za enkripciju.
12
3.1.1 SubBytes() transformacija
SubBytes() transfomracija je nelinearna zamjena bajtova koja funkcioniše neza-
visno za svaki bajt stanja koristeći tabelu izmjene ili S-Box. S-Box je invertibilna, i
konstruisana na sledeći način:
1) Za svaki element iz GF (28) uzećemo multiplikativni inverz iz tabele 2.1.
2) Primijenićemo sledeću (afinu) transformaciju:
b′0
b′1
b′2
b′3
b′4
b′5
b′6
b′7
=
1 0 0 0 1 1 1 11 1 0 0 0 1 1 11 1 1 0 0 0 1 11 1 1 1 0 0 0 11 1 1 1 1 0 0 00 1 1 1 1 1 0 00 0 1 1 1 1 1 00 0 0 1 1 1 1 1
b0b1b2b3b4b5b6b7
+
11000110
mod2.
Odnosno:
b′i = bi ⊕ b(i+4)mod8 ⊕ b(i+5)mod8 ⊕ b(i+6)mod8 ⊕ b(i+7)mod8 ⊕ ci, za 0≤ i<8,
gdje je bi i -ti bit bajta, a ci i -ti bit bajta c sa vrijednošću {63} ili {01100011}.
0 1 2 3 4 5 6 7 8 9 A B C D E F0 63 7C 77 7B F2 6B 6F C5 30 01 67 2B FE D7 AB 761 CA 82 C9 7D FA 59 47 F0 AD D4 A2 AF 9C A4 72 C02 B7 FD 93 26 36 3F F7 CC 34 A5 E5 F1 71 D8 31 153 04 C7 23 C3 18 96 05 9A 07 12 80 E2 EB 27 B2 754 09 83 2C 1A 1B 6E 5A A0 52 3B D6 B3 29 E3 2F 845 53 D1 00 ED 20 FC B1 5B 6A CB BE 39 4A 4C 58 CF6 D0 EF AA FB 43 4D 33 85 45 F9 02 7F 50 3C 9F A87 51 A3 40 8F 92 9D 38 F5 BC B6 DA 21 10 FF F3 D28 CD 0C 13 EC 5F 97 44 17 C4 A7 7E 3D 64 5D 19 739 60 81 4F DC 22 2A 90 88 46 EE B8 14 DE 5E 0B DBA E0 32 3A 0A 49 06 24 5C C2 D3 AC 62 91 95 E4 79B E7 C8 37 6D 8D D5 4E A9 6C 56 F4 EA 65 7A AE 08C BA 78 25 2E 1C A6 B4 C6 E8 DD 74 1F 4B BD 8B 8AD 70 3E B5 66 48 03 F6 0E 61 35 57 B9 86 C1 1D 9EE E1 F8 98 11 69 D9 8E 94 9B 1E 87 E9 CE 55 28 DFF 8C A1 89 0D BF E6 42 68 41 99 2D 0F B0 54 BB 16
Slika 3.2: S-Box
13
S-Box koji koristi SubBytes() transfomracija je prikazan na slici 3.2 u hexadeci-
malnoj formi. Na primjer s1,1={53} mijenjamo sa S-Box[5,3] gdje je 5 broj vrste, 3
broj kolone, i rezultat je: {ED}.
3.1.2 ShiftRows() transformacija
U ShiftRows() transformaciji bajtovi u poslednje 3 vrste stanja se ciklično pomje-
raju za različit broj bajtova (offset). Prva vrsta r=0 se ne pomjera.
Sledeća jednačina opisuje ShiftRows() transformaciju:
s′r,c = sr,(c+shift(r,Nb)) (mod Nb), za 0<r<4 i 0 ≤ c<Nb.
gdje vrijednost pomjeranja shift(r,Nb) zavisi od broja vrste r kao:
shift(1, 4) = 1, shift(2, 4) = 2 i shift(3, 4) = 3.
Ovo ima efekat pomjeranja bajtova na ’nižu’ poziciju u vrsti, dok se ’najniži’ provlači
do ’najveće’ pozicije u vrsti.
Ss0,0 s0,1 s0,2 s0,3s1,0 s1,1 s1,2 s1,3s2,0 s2,1 s2,2 s2,3s3,0 s3,1 s3,2 s3,3
=⇒ ShiftRows() =⇒
S’s0,0 s0,1 s0,2 s0,3s1,1 s1,2 s1,3 s1,0s2,2 s2,3 s2,0 s2,1s3,3 s3,0 s3,1 s3,2
Slika 3.3: ShiftRows() transformacija.
3.1.3 MixColumn() transformacija
MixColumn() korak je linearna transformacija koja miješa svaku kolonu u stanju.
Kako svaki ulazni bajt utiče na 4 izlazna bajta, MixColumn() korak je glavni difuzioni
element u AES-u. Kombinacija ShiftRows() iMixColumn() slojeva čini da nakon samo
3 etape svaki bajt matrice stanja zavisi od svih 16 bajtova teksta[3]. Dalje ćemo 16
ulaznih bajtova označavati sa B, a 16 izlaznih sa C:
14
MixColumn(B)=C
gdje je B stanje nakon ShiftRows() koraka.
Sada, svaka kolona od 4 bajta se smatra vektorom i množi fiksnom 4x4 matricom.
Matrica ima konstantne vrijednosti.
Evo kako se računaju prva 4 izlazna bajta:C0
C1
C2
C3
=
02 03 01 01
01 02 03 01
01 01 02 03
03 01 01 02
B0
B5
B10
B15
Druga kolona izlaznih bajtova (C4, C5, C6, C7) se računa množenjem 4 ulazna bajta
(B4, B7, B14, B3) sa istom matricom konstanti i tako dalje. Svaki bajt stanja Ci i Bi
je 8 bitna vrijednost koja predstavlja element GF (28). Za konstante u matrici kori-
šćena je hexadecimalna notacija: ’01’ misleći na polinom u GF (28) sa koeficijentima
{00000001} tj. element 1 tog polja; ’02’ misleći na polinom u GF (28) sa koeficijen-
tima {00000010} tj. polinom x; i ’03’ misleći na polinom u GF (28) sa koeficijentima
{00000011} tj. polinom x+1.
Sabiranja u vektor-matrica množenju su sabiranja u GF (28) tj jednostavno XOR-
ovanje odgovarajućih bita. Za množenje konstanti moramo razumjeti množenje sa
konstantama 01, 02 i 03. One su prilično efikasne, i odabrane tako da softverska
implementacija bude jednostavnija.
Množenje sa 01 je identitetsko množenje i ne zahtijeva nikakvu operaciju. Množenje
sa 02 i 03 se može odraditi koristeći look-up tabelu ranije pomenutu. Kao alternativa
tome, množenje sa 02 se može posmatrati kao množenje sa x, sto je zapravo lijevo
shift-ovanje za jedan, i modularno svođenje polinomom P (x) = x8 + x4 + x3 + x + 1.
Slično, množenje sa 03 – predstavlja x+1 polinom, može biti implementirano kao li-
jevo shift-ovanje za jedan bit i dodavanje originalne vrijednosti praćeno modularnim
15
svođenjem sa polinomom P(x).
Primjer. Neka je ulaz u MixColumn() sloj B=(25,25,25,. . . 25). U ovom specijalnom
slučaju samo 2 množenja unutar GF (28) se moraju odraditi. To su 02·25 i 03·25, koja
se mogu izračunati u polinomijalnoj reprezentaciji kao:
02 · 25 = x · (x5 + x2 + 1) = x6 + x3 + x,
03 · 25 = (x + 1) · (x5 + x2 + 1)
= (x6 + x3 + x) + (x5 + x2 + x)
= x6 + x5 + x3 + x2 + x + 1.
Kako obje međuvrijednosti imaju stepen manji od 8, nije potrebno modularno svo-
đenje sa P(x). Izlazni bajtovi od C se dobijaju iz sledećeg sabiranja:
01 · 25 = x5 + x2 + 1
01 · 25 = x5 + x2 + 1
02 · 25 = x6 + x3 + x + 1
03 · 25 = x6 + x5 + x3 + x2 + x + 1
Ci = x5 + x2 + 1,
gdje je i=0,. . . ,15. Ovo vodi ka izlaznom stanju C=(25,25,. . . ,25).
3.1.4 AddRoundKey() sloj
Dva ulaza u ovaj sloj su stanje, i etapni ključ koji se takođe sastoji od 16 bajtova.
Ova dva ulaza se XOR-uju. XOR je ekvivalent sabiranju u Galois-ovom polju. Etapni
ključevi su izvedeni iz glavnog ključa po principu koji opisujem ispod.
3.1.5 Izvođenje etapnih ključeva
Ovaj sloj uzima originalni ulazni ključ (128, 192 ili 256 bita) i izvodi etapne
ključeve za AES. Sa slike 3.1 vidimo da se XOR-ovanje etapnog ključa koristi na ulazu
i izlazu iz AES-a. Ovaj proces se ponekad naziva izbjeljivanje ključa. Broj etapnih
16
ključeva je jednak broju etapa + 1, zbog izbjeljivanja u prvom sloju dodavanja ključa.
Dalje, za dužinu ključa 128, broj rundi-etapa je Nr=10, i tu nam treba 11 etapnih
ključeva, svaki od po 128 bita. Za AES sa dužinom ključa 192, potrebno je 13 a za
256 potrebno je 15 etapnih ključeva. AES etapni ključevi su rekurzivno izračunati tj.
da bi dobili etapni ključ ki moramo znati ki−1. . .
Ovo izvodenje ključeva je riječ-orjentisano, gdje je riječ=32 bita. Podključevi su
smješteni u niz W koji se sastoji od riječi. Postoje 3 varijante izvođenja za 3 različite
dužine ulaznog ključa ali je svaki metod sličan.
IzvođenjeKljučeva(byte ključ[4*Nk], word W[Nb ∗ (Nr + 1)], Nk)begin
word tempi=0while (i<Nk)
W[i]=word(ključ[4*i], ključ[4*i+1], ključ[4*i+2], ključ[4*i+3])i=i+1
end whilei=Nk
while (i<Nb ∗ (Nr + 1))temp=W[i-1]if (i mod Nk=0)
temp=SBOX(ShiftLeft(temp)) XOR RC[i/Nk]elseif ((Nk >6) and (i mod Nk=4))
temp=SBOX(temp)end ifW[i]=W[i-Nk] XOR tempi=i+1
end whileend
Slika 3.4: Pseudo kod za izvođenje etapnih ključeva.
Procedura je opisana na slici 3.4. U proceduri se koristi ShiftLeft opreacija, koja
pomjera svaki od 4 bajta iz argumenta za jedno mjesto ulijevo, tako da npr. ulazni
redosled w0w1w2w3 mijenja sa w1w2w3w0, gdje su wi bajtovi ulazne riječiWi. Osim nje
koristi se i niz etapnih koeficijenata RC, koji se i dobija kao xi−1 gdje je 0<i<11. Dakle
17
prvi element niza RC je {00000001}, drugi je {00000010} i tako redom. Poslednja
2 tj. x9 i x8 se dobijaju svođenjem sa polinomom P(x). Takođe se koristi i funkcija
SBOX, koja ulazna 4 bajta iz argumenta provlači kroz S-Box po proceduri opisanoj
ranije u SubBytes() sekciji, i vraća 4 bajta dobijena iz S-Box tabele.
Nakon završene procedure, u nizu W, zavisno od dužine ključa, nalazi se 44, 52 ili
60 riječi. Počevši od 0 do dužine niza W - 1, uzimamo po 4 riječi u svakoj iteraciji
dodavanja etapnog ključa. Dakle svi etapni ključevi, nezavisno od dužine originalnog
ključa imaju po 128 bita.
3.2 Dekripcija
Kako je AES zasnovan na Feistel-ovoj mreži, svi nivoi moraju da se invertuju.
Međutim, ispostavlja se da su inverzne operacije po nivioma veoma slične operacijama
za enkripciju. Redosled ključeva je obrnut odnosno treba nam obrnuta raspodjela
ključa. Na slici 3.5 dat je pseudo kod za dekripciju.
Operacija XOR je sama sebi inverzna, dok se AddRoundKey() samo dodaje obr-
nutim redosledom, odnosno, nakon što se izvedu ključevi i napuni niz W, dodavanje
etapnih ključeva počinjemo od kraja niza. Ostale operacije opisujem ispod.
3.2.1 InvMixColumn() transformacija
Nakon dodavanja etapnog ključa, na stanje C se primjenjuje InvMixColumn()
transformacija, s tim što se sada koristi inverzna matrica iz originalne MixColumn()
transformacije. Tako da sada imamo B=InvMixColumn(C) kao:
18
Dekriptuj(byte in[4*Nb], byte out[4*Nb], word W[Nb ∗ (Nr + 1)])begin
byte stanje[4,Nb]stanje=inAddRoundKey(stanje, W[Nr ∗Nb, (Nr + 1) ∗Nb − 1])for etapa=Nr-1 step -1 downto 1
InvSubBytes(stanje)InvShiftRows(stanje)AddRoundKey(stanje, W[etapa*Nb, (etapa+1)Nb − 1])InvMixColumn(stanje)
end forInvShiftRows(stanje)InvSubBytes(stanje)AddRoundKey(stanje, W[0,Nb − 1])out=stanje
end
Slika 3.5: Pseudo kod za dekripciju.
B0
B1
B2
B3
=
0E 0B 0D 09
09 0E 0B 0D
0D 09 0E 0B
0B 0D 09 0E
C0
C1
C2
C3
Isti postupak se nastavlja i za ostale kolone. Sabiranje i množenje su odrađeni u
GF (28).
3.2.2 InvShiftRows() transformacija
U ovom koraku radimo suprotnu operaciju u odnosu na originalnu ShiftRows()
transformaciju. Donje 3 vrste matrice stanja pomjeramo desno za po jedno, dva
odnosno tri mjesta:
19
Ss0,0 s0,1 s0,2 s0,3s1,0 s1,1 s1,2 s1,3s2,0 s2,1 s2,2 s2,3s3,0 s3,1 s3,2 s3,3
=⇒ InvShiftRows() =⇒
S’s0,0 s0,1 s0,2 s0,3s1,3 s1,0 s1,1 s1,2s2,2 s2,3 s2,0 s2,1s3,1 s3,2 s3,3 s3,0
Slika 3.6: InvShiftRows() transformacija.
3.2.3 InvSubBytes() transformacija
Kod inverzne SubBytes() transformacije koristimo inverzni S-Box. Inverzni S-Box
konstruisemo ovako:
1) Na svaki element iz GF (28) primijenjujemo sledeću inverznu afinu transforma-
ciju:
b′0
b′1
b′2
b′3
b′4
b′5
b′6
b′7
=
0 1 0 1 0 0 1 0
0 0 1 0 1 0 0 1
1 0 0 1 0 1 0 0
0 1 0 0 1 0 1 0
0 0 1 0 0 1 0 1
1 0 0 1 0 0 1 0
0 1 0 0 1 0 0 1
1 0 1 0 0 1 0 0
b0
b1
b2
b3
b4
b5
b6
b7
+
0
0
0
0
0
1
0
1
mod2.
2) Za dobijeni element iz GF (28) računamo multiplikativni inverz. Suštinski ra-
dimo inverz inverznog elementa iz GF (28), jer je B′i zapravo dobijen invertovanjem
nekog elementa.
Za ovaj postupak se takođe može napraviti lookup tabela, a može se i ručno
računati. Finalni-inverzni S-Box je prikazan na slici 3.7.
20
0 1 2 3 4 5 6 7 8 9 A B C D E F0 52 09 6A D5 30 36 A5 38 BF 40 A3 9E 81 F3 D7 FB1 7C E3 39 82 9B 2F FF 87 34 8E 43 44 C4 DE E9 CB2 54 7B 94 32 A6 C2 23 3D EE 4C 95 0B 42 FA C3 4E3 08 2E A1 66 28 D9 24 B2 76 5B A2 49 6D 8B D1 254 72 F8 F6 64 86 68 98 16 D4 A4 5C CC 5D 65 B6 925 6C 70 48 50 FD ED B9 DA 5E 15 46 57 A7 8D 9D 846 90 D8 AB 00 8C BC D3 0A F7 E4 58 05 B8 B3 45 067 D0 2C 1E 8F CA 3F 0F 02 C1 AF BD 03 01 13 8A 6B8 3A 91 11 41 4F 67 DC EA 97 F2 CF CE F0 B4 E6 739 96 AC 74 22 E7 AD 35 85 E2 F9 37 E8 1C 75 DF 6EA 47 F1 1A 71 1D 29 C5 89 6F B7 62 0E AA 18 BE 1BB FC 56 3E 4B C6 D2 79 20 9A DB C0 FE 78 CD 5A F4C 1F DD A8 33 88 07 C7 31 B1 12 10 59 27 80 EC 5FD 60 51 7F A9 19 B5 4A 0D 2D E5 7A 9F 93 C9 9C EFE A0 E0 3B 4D AE 2A F5 B0 C8 EB BB 3C 83 53 99 61F 17 2B 04 7E BA 77 D6 26 E1 69 14 63 55 21 0C 7D
Slika 3.7: Inverzni S-Box
21
Glava 4
Bezbjednost AES-a
U deceniji nakon objavljivanja standarda, nekoliko pokušaja napada na AES je
zabilježeno. Svi ti pokušaji su bili bezopasni, i ni u jednom trenutku bez obzira na
dužinu ključa, nije dovedena u pitanje sigurnost algoritma, ukoliko je implementiran
sa standardom definisanim brojem etapa-rundi. Dobar dio tih pokušaja je upravo
bio usmjeren na određene implementacije sa po 2, 3 ili čak 4 etape manje nego što je
standardom propisano. Takođe je zabilježen manji broj pokušaja da koji su bazirani
na side-chanel principu, koji ima više varijanti, a suštinski podrazumijeva postojanje
informacija o fizičkom načinu implementacije algoritma, okruženju, samom sistemu
na kome se izvršava i mnoge druge slične informacije. U tim varijantama rezultati su
bili vrlo malo bolji od brute-force metode.[9]
2011. godine je objavljen metod napada na varijantu algoritma sa 128 bitnim ključem,
koji je skoro 4 puta brži od brute-force metode. To znači da je moguće sa 2126.1
poređenja probiti 128 bitnu varijantu (brute-force metodi je potrebno 2128). Taj
metod napada koristi takozvanu key-related tehniku. Key-related tehnika je bilo
koji oblik kriptoanalize u kojoj napadač može da nadgleda rad algoritma sa nekoliko
različitih ključeva, čije originalne vrijednosti nisu poznate, ali među njima postoje
neke matematičke relacije, tipa da im je određeni broj bajtova na istim pozicijama
isti, i slično. Rezultati primjene ove metode na varijante sa 192 bitnim ili 256 bitnim
22
ključem su naravno još slabiji i, kao i kod 128 bitne varijante, nisu previše značajni
za bezbjednost algoritma.
4.1 Režim rada
Režim rada ili mod, je još jedno generalno svojstvo simetričnih blok šifri. Obzirom
da se kriptovanje vrši po blokovima, postoji dakle mogućnost, i to ne malo vjerovatna,
da se isti blok kriptuje istim ključem. Takva operacija za rezultat ima isti kriptovani
blok, što moze biti upotrijebljeno u cilju dobijanja bloka osnovne poruke, koristeći
neku od gore pomenutih tehnika napada na AES. Iz tog razloga se došlo do ideje da
se naprave dodatni režimi rada, koji bi omogućili da rezultat akcije kriptovanja istog
bloka istim ključem na dva razlicita mjesta, bude različit. Postoji više modova, neki
od njih su: ECB (Electronic Code Book mode), CBC (Cipher Block Chaining mode),
PCBC (Propagating Cipher Block Chaining mode), CFB (Cipher feedback) i tako
dalje [4]. Ja ću samo prva dva malo detaljnije pojasniti, jer daju dovoljnu sliku o
tome zašto su izmišljeni i kako rade.
4.1.1 ECB
ECB je najjednostavniji režim. AES, kao i ostale blok šifre, je u osnovi osmišljen
da radi u ovom modu. Dakle svaki blok se zasebno kriptuje istim - osnovnim ključem.
Ovo, kako gore rekoh, vodi do toga da će, ukoliko se isti blok pojavi više puta unutar
osnovne poruke, rezultat kriptovanja biti isti. Iz tog razloga se ECB mod koristi
ukoliko je osnovna poruka kratka, npr. veličine jednog bloka. Naravno i za veće
poruke ECB će raditi dobar posao pod uslovom da se ne dešava da dodje isti blok kao
ulaz u algoritam više od jednom. Primjer koji najbolje poredi rezultat rada u ovom
i CBC modu je na slici 3.8. Tu je korišćen blok algoritam za kriptovanje fotografije.
23
Obzirom da na fotografiji ima malo boja i malo nijansi tih boja, rezultat kriptovanja
istih piksela će biti isti, tako će rezultat biti relativno loš u smislu da se kriptovanjem
nije uspjela sakriti suština na fotografiji.
Slika 4.1: Režim rada
4.1.2 CBC
Ovo je najrasprostranjeniji mod. Izmišljen je od strane IBM-a 1976. godine. On
radi XOR-ovanje svakog bloka osnovne poruke sa prethodnim kriptovanim blokom.
Ovako će svaki kriptovani blok zavisiti od svih kriptovanih prije njega. Obzirom da
prvi blok nema svog kriptovanog prethodnika, uvodi se inicijalni vektor IV - random
128 bitna sekvenca, koja mora biti fiksna samo za jedno izvršavanje algoritma. Na-
ravno isti IV mora biti korišćen kod dekripcije. Jedan od nedostataka ovog moda je
da je enkripcija sekvencijalna, u smislu da se mora znati ishod kriptovanja jednog
bloka da bi se kriptovao sledeći i iz tog razloga se ne može kriptovanje paralelizovati.
24
Glava 5
Zaključak
Iako je tehnologija u poslednjoj deceniji puno napredovala, sa tendencijom rasta
ulaganja sredstava u poboljšanje performansi računarskih sistema, računajući na re-
lativno veliku dužinu ključa i često kratku vremensku validnost informacija koje se
kriptuju, od AES-a se očekuje da još dugo bude standard u kriptografiji. Otpornost
na brute-force metodu korektno implementirane 128 bitne varijante AES-a, protiv bu-
džeta od 1000000$, je osigurana na minimum 50 godina[8]. Oktobra 2000-te godine
Bruce Schneier, programer Twofish algoritma koji je bio konkurencija Rijndael -u u
izboru za AES, iako je u početku mislio da će uspješan akademski napad na Rijd-
nael biti osmišljen jednog dana, na kraju je ipak rekao: "Ne vjerujem da će iko ikad
uspjeti da otkrije napad kojim će uspješno čitati Rijndael -ov saobraćaj". S obzirom
na vrijeme u kome živimo, kada različiti subjekti pokušavaju da vrše kontrolu internet
saobraćaja, postojanje naprednih, jakih standarda enkripcije je veoma važno u cilju
očuvanja privatnosti komunikacije.
25
Bibliografija
[1] http://csrc.nist.gov/groups/STM/cavp/documents/aes/AESAVS.pdf.
[2] http://www.moserware.com/2009/09/stick-figure-guide-to-advanced.
html.
[3] Mrs. Namita Tiwari Amish Kumar. "EFFECTIVE IMPLEMENTATION AND
AVALANCHE EFFECT OF AES", 2012. Department of CSE MANIT-Bhopal.
[4] Morris Dworkin. "Recommendation for Block Cipher Modes of Operation", 2001.
NIST Special Publication 800-38A.
[5] United States National Institute of Standards and Technology (NIST). Announ-
cing the ADVANCED ENCRYPTION STANDARD (AES). http://csrc.nist.
gov/publications/fips/fips197/fips-197.pdf, Novembar 26, 2001. Federal
Information Processing Standards Publication 197.
[6] Christof Paar and Jan Pelzl. "Understanding Cryptography, A Textbook for
Students and Practitioners", 2009. Springer.
[7] Vincent Rijmen and Joan Daemen. "The Design of Rijndael, AES the Advanced
Encryption Standard", Springer.
[8] Svante Seleborg. "About AES". http://www.axantum.com/axcrypt/etc/
About-AES.pdf, 2007. Axantum Software AB.
26
[9] Wisam Elmasry Shaaban Sahmoud and Shadi Abudalfa. "Enhancement the Secu-
rity of AES Against Modern Attacks by Using Variable Key Block Cipher", March
18, 2011. Department of Computer Engineering, Islamic University of Gaza.
27