2 · Web view2.1. Nastanak DES-a (Data Encryption Standard) Američki “National Bureau of...

29
2. Moderni simetrični blokovni kriptosistemi 2.1. Nastanak DES-a (Data Encryption Standard) Američki “National Bureau of Standards” (NBS) inicirao je 1972. godine program za zaštitu računarskih i komunikacionih podataka. Jedan je od ciljeva bio razvijanje jednog standardnog kriptosistema. NBS je 1973. godine raspisao i javni konkurs za takav kriptosistem. Taj kriptosistem je trebalo da zadovolji sljedeće uslove: visoki stepen sigurnosti potpuna specifikacija i lako razumjevanje algoritma sigurnost leži u ključu, a ne u tajnosti algoritma dostupnost svim korisnicima prilagodljivost upotrebi u različitim primjenama ekonomičnost implementacije u elektronskim uređajima efikasnost mogućnost provjere mogućnost izvoza (zbog američkih zakona) Na tom konkursu niti jedan predlog nije zadovoljavao sve ove zahtjeve. Međutim, na ponovljeni konkurs iduće godine pristigao je predlog algoritma koji je razvio IBM-ov tim kriptografa. Algoritam je zasnovan na tzv. Fiestel-ovoj šifri. Gotovo svi simetrični blokovni algoritmi koji su danas u upotrebi koriste ideju koju je uveo Horst Fiestel 1973. godine. Ova šifra bazira se na šifrovanju u više rundi (broj rundi veći je od 3 i najčešće je paran), a za šifrovanje u svakoj rundi koristi se podključ koji se generiše na osnovu glavnog ključa. Predloženi algoritam je nakon nekih izmjena, u kojima je učestvovala i National Security Agency (NSA), prihvaćen kao standard 1976. godine i dobio je ime Data Encryption Standard (DES). 23

Transcript of 2 · Web view2.1. Nastanak DES-a (Data Encryption Standard) Američki “National Bureau of...

2. Moderni simetrični blokovni kriptosistemi

2.1. Nastanak DES-a (Data Encryption Standard)

Američki “National Bureau of Standards” (NBS) inicirao je 1972. godine program za zaštitu računarskih i komunikacionih podataka. Jedan je od ciljeva bio razvijanje jednog standardnog kriptosistema. NBS je 1973. godine raspisao i javni konkurs za takav kriptosistem. Taj kriptosistem je trebalo da zadovolji sljedeće uslove:

visoki stepen sigurnosti potpuna specifikacija i lako razumjevanje algoritma sigurnost leži u ključu, a ne u tajnosti algoritma dostupnost svim korisnicima prilagodljivost upotrebi u različitim primjenama ekonomičnost implementacije u elektronskim uređajima efikasnost mogućnost provjere mogućnost izvoza (zbog američkih zakona)

Na tom konkursu niti jedan predlog nije zadovoljavao sve ove zahtjeve. Međutim, na ponovljeni konkurs iduće godine pristigao je predlog algoritma koji je razvio IBM-ov tim kriptografa. Algoritam je zasnovan na tzv. Fiestel-ovoj šifri. Gotovo svi simetrični blokovni algoritmi koji su danas u upotrebi koriste ideju koju je uveo Horst Fiestel 1973. godine. Ova šifra bazira se na šifrovanju u više rundi (broj rundi veći je od 3 i najčešće je paran), a za šifrovanje u svakoj rundi koristi se podključ koji se generiše na osnovu glavnog ključa.

Predloženi algoritam je nakon nekih izmjena, u kojima je učestvovala i National Security Agency (NSA), prihvaćen kao standard 1976. godine i dobio je ime Data Encryption Standard (DES).

2.2. Opis algoritma DES-a

DES šifruje blokove otvorenog teksta dužine 64 bita, koristeći ključ K dužine 56 bitova (ovo je efektivni broj bitova ključa, a on se zapravo definiše takođe sa 64 bita, pri čemu svaki osmi bit služi za provjeru pariteta). Tako se dobijaju blokovi šifrata koji ponovo imaju 64 bita. Algoritam se sastoji od 3 etape (slika 2.1.1.):

1. Za dati blok otvorenog teksta x, permutovanjem pomoću fiksne inicijalne permutacije IP dobije se x0. Funkijom IP prvi bit od x zamjenjuje se 58-mim bitom, drugi bit sa 50-tim bitom i tako redom dok se ne dođe do posljednjeg koji se zamjenjuje sa 7-mim bitom (vidi DES tablice). Zapišimo x0 = IP(x) u obliku x0 = L0R0, gdje L0 sadrži prva (lijeva) 32 bita, a R0 zadnja (desna) 32 bita od x0.

23

Slika 2.1.1. Postupak prilikom šifrovanja za DES.

24

2. Određena funkcija se 16 puta iterira. Računamo Li Ri, 1 i 16, po sljedećem pravilu:

Li = Ri -1 Ri = Li -1 f (Ri -1, Ki),

gdje označava operaciju "ekskluzivno ili" (XOR). Funkciju f ćemo opisati kasnije, a K1, K2, ... , K16 su nizovi bitova dužine 48, koji se dobijaju kao permutacije nekih bitova iz ključa K.

3. Primijenimo inverznu permutaciju IP-1 (vidi DES tablice) na R16L16 i tako dobijamo šifrat y. Dakle, y = IP-1(R16L16). Uočimo inverzni poredak od L16 i R16.

Funkcija f za prvi argument ima niz bitova Ri-1 dužine 32, a za drugi argument ima niz bitova Ki dužine 48. Kao rezultat se dobija niz bitova dužine 32. Funkcija se može matematički zapisati kao: f(Ri-1,Ki) = P( S( E(Ri-1)Ki ) ),a računa u sljedeća 4 koraka:

1. Prvi argument Ri-1 se "proširi" do niza dužine 48 u skladu s fiksnom funkcijom proširenja E (vidi DES tablice). Niz E(Ri-1) se sastoji od 32 bita iz Ri-1, permutovanih na određeni način, s tim da se 16 bitova pojavi dvaput.

2. Izračunamo E(Ri-1) Ki i rezultat zapišemo kao spoj od osam 6-bitnih nizova

B = B1B2B3B4B5B6B7B8.

3. Sljedeći korak koristi 8 tzv. S- kutija (supstitucijskih kutija) S1, ... , S8 (vidi S-kutije). Svaki Si je fiksna 4 × 16 matrica čiji su elementi cijeli brojevi između 0 i 15. Za dati niz bitova dužine 6, recimo Bj = b1b2b3b4b5b6, računamo Sj(Bj) na sljedeći način. Dva bita b1b6 određuju binarni zapis reda r od Sj (r = 0,1,2,3), a četiri bita b2b3b4b5 određuju binarni zapis kolone c od Sj (c = 0,1,2,...,15). Sada je Sj (Bj) po definiciji jednako Sj(r,c), zapisano kao binarni broj dužine 4. Na ovaj način izračunamo Cj = Sj (Bj), j = 1,2,...,8.

4. Niz bitova C = C1C2C3C4C5C6C7C8 dužine 32 se permutuje pomoću fiksne završne permutacije P . Tako se dobije P(C), što je po definiciji upravo f(Ri-1, Ki).

25

R i - 1

E ( R i )

K i

f ( R i - 1 ,K i )

3 2

4 8

4 8

4 8

6

4

3 2

3 2

Slika 2.1.2. Postupak računanja funkcije f.

Na kraju ćemo opisati računanje tablice ključeva K1, K2, ... , K16 iz ključa K. Ključ K se sastoji od 64 bita, od kojih 56 predstavlja ključ, a preostalih 8 bitova služe za testiranje pariteta. Bitovi na pozicijama 8, 16, ... , 64 su definisani tako da svaki bajt (8 bitova) sadrži neparan broj jedinica. Ovi bitovi se ignorišu kod računanja tablice ključeva.

1. Za dati 64-bitni ključ K, ignorišući paritetne bitove, permutujemo preostala 56 bita pomoću fiksne permutacije PC1 (vidi DES tablice). Zapišimo PC1(K) = C0D0, gdje C0

sadrži prvih 28, a D0 zadnjih 28 bitova od PC1(K). 2. Za i = 1, 2, ... , 16 računamo:

Ci = LSi (Ci -1), Di = LSi (Di -1), Ki = PC2(Ci Di).

26

LSi predstavlja ciklični pomjeraj ulijevo za 1 ili 2 pozicije, u zavisnosti od i. Ako je i = 1, 2, 9 ili 16, onda je pomjeraj za jednu poziciju, a u protivnom za dvije pozicije. PC2 je još jedna fiksna permutacija.

Ovim je u potpunosti opisan postupak šifrovanja. Dešifrovanje koristi isti algoritam kao šifrovanje. Krenemo od šifrata y, ali koristimo tablicu ključeva u obrnutom redosljedu: K16, K15, ... , K1. Kao rezultat dobijamo otvoreni tekst x.

DES tablice

IP IP-1 E58 50 42 34 26 18 10 2 40 8 48 16 56 24 64 32 32 1 2 3 4 560 52 44 36 28 20 12 4 39 7 47 15 55 23 63 31 4 5 6 7 8 962 54 46 38 30 22 14 6 38 6 46 14 54 22 62 30 8 9 10 11 12 1364 56 48 40 32 24 16 8 37 5 45 13 53 21 61 29 12 13 14 15 16 1757 49 41 33 25 17 9 1 36 4 44 12 52 20 60 28 16 17 18 19 20 2159 51 43 35 27 19 11 3 35 3 43 11 51 19 59 27 20 21 22 23 24 2561 53 45 37 29 21 13 5 34 2 42 10 50 18 58 26 24 25 26 27 28 2963 55 47 39 31 23 15 7 33 1 41 9 49 17 57 25 28 29 30 31 32 1

P PC1 PC216 7 20 21 57 49 41 33 25 17 9 14 17 11 24 1 529 12 28 17 1 58 50 42 34 26 18 3 28 15 6 21 101 15 23 26 10 2 59 51 43 35 27 23 19 12 4 26 85 18 31 10 19 11 3 60 52 44 36 16 7 27 20 13 22 8 24 14 63 55 47 39 31 23 15 41 52 31 37 47 5532 27 3 9 7 62 54 46 38 30 22 30 40 51 45 33 4819 13 30 6 14 6 61 53 45 37 29 44 49 39 56 34 5322 11 4 25 21 13 5 28 20 12 4 46 42 50 36 29 32

S – kutije

27

28

2.3. Svojstva DES-a

Iako je sam opis DES-a dosta dug, on se može vrlo efikasno implementirati, i hardverski i softverski. Spomenimo da je do 1991. godine u NBS-u registrovano 45 hardverskih implementacija DES-a. Godine 1992. proizveden je čip sa 50000 tranzistora koji može šifrovati 109 bita (tj. 16 miliona blokova) po sekundi (čip je koštao 300 dolara).

Napomenimo da su sve operacije u DES-u linearne, s izuzetkom S-kutija. Već smo na primjeru Hill-ove šifre spomenuli da je kod linearnih kriptosistema kriptoanaliza napadom "poznati otvoreni tekst" vrlo jednostavna. Stoga su S-kutije izuzetno značajne za sigurnost DES-a.

Svojstva S-kutija i matrica za permutaciju izabrana su tako da povećaju tzv. difuziju kriptosistema tj. da na svaki bit šifrata utiče što više bitova otvorenog teksta. Na taj način se otežava kriptoanaliza.

Da bi se kriptoanaliza dodatno otežala, poželjno svojstvo kod svakog kriptosistema je da mala promjena bilo otvorenog teksta bilo ključa dovodi do značajne promjene u šifratu. Posebno, promjena jednog bita otvorenog teksta ili jednog bita ključa trebalo bi da utiče na mnogo bitova šifrata. Ako je promjena mala, to može značajno smanjiti broj otvorenih tekstova ili ključeva koje treba ispitati. Kriptosistem DES ima pomenuto svojstvo koje se ponekad naziva i "lavinski efekat". Ilustrovaćemo to pomoću dva primjera.

Primjer 2.3.1: Otvoreni tekstovi (zapisani heksadecimalno): 0000000000000000   i   1000000000000000

šifrovani su pomoću ključa (takođe zapisanog heksadecimalno sa uključenim paritetnim bitovima):

029749C438313864.Broj bitova u kojima se razlikuju odgovarajući šifrati nakon svake runde DES-a

prikazan je u sljedećoj tablici: ---------------------------------------------------------------------- runda 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16----------------------------------------------------------------------broj bitova koji 1 6 21 35 39 34 32 31 29 42 44 32 30 30 26 29 34 se razlikuju----------------------------------------------------------------------

Primjer 2.3.2: Otvoreni tekst (zapisan heksadecimalno): 68852E7A1376EBA4šifrovan je pomoću ključeva: E5F7DF313B0862DC   i   64F7DF313B0862DCkoji se razlikuju samo u jednom bitu (i jednom paritetnom bitu: prvih 7 bitova su im 1110010 i 0110010). Broj različitih bitova u šifratima, po rundama, prikazan je u sljedećoj tablici: ---------------------------------------------------------------------- runda 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16----------------------------------------------------------------------broj bitova koji 0 2 14 28 32 30 32 35 34 40 38 31 33 28 26 34 35 se razlikuju----------------------------------------------------------------------

Postavlja se pitanje zašto u DES-u imamo upravo 16 rundi. Primjeri 2.3.1 i 2.3.2 sugerišu da već kod 3. runde lavinski efekat dolazi do izražaja. Može se pokazati da nakon 5. runde svaki bit šifrata zavisi od svakog bita otvorenog teksta i od svakog bita ključa, a nakon 8. runde šifrat je praktično slučajna funkcija bitova otvorenog teksta i ključa. Razlog da ipak

29

imamo 16 rundi je u zahtjevu da poznati kriptoanalitički napadi (tzv. diferencijalna i linearna kriptoanaliza) ne budu efikasniji od napada "grubom silom".

Originalna IBM-ova ponuda NBS-u je imala 112-bitni ključ. Međutim, u verziji koja je prihvaćena kao standard dužina ključa je (vjerojatno pod uticajem NSA) smanjena na 56 bitova. Mnogi kriptografi su bili protiv tako kratkog ključa, jer su smatrali da ne pruža dovoljnu sigurnost protiv napada "grubom silom". Uz 56-bitni ključ imamo 256 7.2 . 1016

mogućih ključeva, pa se na prvi pogled napad "grubom silom" čini sasvim nepraktičnim. Međutim, već 1977. godine Diffie i Hellman su utvrdili da tadašnja tehnologija omogućava konstrukciju uređaja koji bi otkrivao ključ za jedan dan, a troškove su procijenili na 20 miliona dolara. Na osnovu toga su zaključili da je takvo nešto dostupno samo organizacijama kao što je NSA, ali da će oko 1990. godine DES postati sasvim nesiguran. Godine 1993. Weiner je procijenio da se za 100000 dolara može konstruirati uređaj koji bi otkrio ključ za 35 sati, a za 10 miliona dolara onaj koji bi otkrio ključ za 20 minuta. Ipak sve su to bili hipotetički dizajni, a konačno razbijanje DES-a se dogodilo tek 1998. godine. Tada je Electronic Frontier Foundation (EFF) napravila "DES Cracker" koji je koštao 250000 dolara, a razbija poruke šifrovane DES-om za 56 sati. Njegova izrada trajala je godinu dana. Sagrađen je od 1536 čipova koji mogu testirati 88 milijardi ključeva po sekundi. Tek nakon izrade DES Crackera moglo se definitivno utvrditi da DES nije siguran kriptosistem.

Jedna od važnijih primjena DES-a bila je u bankarskim transakcijama. Tako se, između ostalog, DES koristio za šifrovanje PIN-ova (personal identification numbers) i transakcija preko bankomata. DES je takođe do nedavno bio u širokoj upotrebi u civilnim satelitskim komunikacijama.

2.4. Načini rada blokovnih kriptosistema

Najznačajniji načini tj. modovi rada blokovnih kriptosistema biće opisani na primjeru DES-a. Do sada smo opisali kako radi DES na jednom bloku od 64 bita. U realnim situacijama, u kojima su poruke znatno duže, poznata su 4 načina rada (modes of operation) DES-a. Ti modovi pokrivaju sve moguće primjene DES-a, a takođe su primjenjivi na bilo koju simetričnu blokovnu šifru.

Najjednostavniji mod je ECB (Electronic Codebook) u kojem se svaki blok otvorenog teksta šifruje pomoću istog ključa. Dakle, poruka se u slučaju DES-a razbije na blokove od po 64 bita (zadnji blok se dopuni ako je potrebno), pa se šifruje jedan po jedan blok koristeći uvijek isti ključ (slika ispod).

ECB mod je idealan za kratke poruke, pa se često koristi za razmjenu ključeva za šifrovanje. Kod dugih poruka sigurnost ECB moda se smanjuje, s obzirom da identični blokovi u otvorenom tekstu daju identične šifrate.

30

ECB mod

Da bi povećali sigurnost, želimo postići da identičnim blokovima u otvorenom tekstu odgovaraju različiti šifrati. Relativno jednostavan način da se to postigne je korištenje CBC (Cipher Block Chaining) moda. Na trenutni blok otvorenog teksta se primijeni operacija XOR sa šifratom prethodnog bloka, a tek potom se šifruje pomoću ključa K. Dakle, yi = eK(yi -1 xi) za i1. Na startu uzimamo da je y0 = IV, gdje je IV tzv. inicijni vektor, koji mora biti poznat i primaocu i pošiljaocu. To se može postići npr. tako da ga se pošalje ECB modom. Za dešifrovanje koristimo relaciju xi = yi -1 dK(yi). Postupak šifrovanja je prikazan na sljedećoj slici:

U prethodna dva moda DES funkcioniše kao blokovna šifra. Međutim, od DES-a se može napraviti i protočna (stream) šifra. Prvi način je pomoću CFB (Cipher Feedback) moda. Kod protočnih šifri nema potrebe za proširivanjem poruke da bi se dobio cijeli broj blokova. To znači da će šifrat biti iste dužine kao otvoreni tekst. Obrađuje se odjednom j bitova (1 j 64). Najčešće je j = 1 ili j = 8. Ako je j = 8, to znači da se šifruje slovo po slovo (jednom slovu odgovara 8 bitiva po ASCII standardu).

Prilikom šifrovanja prvo se šifruje 64 bitni inicijalni vektor IV (vidi sliku ispod). Na prvih j lijevih bitova izlaznog podatka primijenimo XOR sa x1 i tako dobijemo y1. Ulazni podatak za sljedeći korak šifrovanja se dobije tako što se prethodni ulazni podatak pomakne za j mjesta ulijevo, a na desni kraj se stavi y1. Postupak se nastavlja sve dok se sve jedinice otvorenog teksta ne šifruju.

31

CBC mod

Kod dešifrovanja se koristi ista šema, samo što se na odgovarajući šifrat primijeni XOR s izlaznim podatkom funkcije šifrovanja eK da bi se dobio otvoreni tekst. Uočimo da se ponovo koristi funkcija eK, a ne dK.

OFB (Output Feedback) mod je vrlo sličan CFB modu. Jedina razlika je što se ulazni podatak za funkciju eK u idućem koraku šalje odmah nakon primjene eK u prethodnom koraku (prije primjene XOR-a). Jedna od prednosti OFB moda je da se greške u transmisiji ne propagiraju. Npr. greška u y1 utiče samo na x1. Ovaj mod se često koristi za šifrovanje poruka sa satelita. Međutim, ovo svojstvo može biti i nedostatak. Stoga se modovi CBC i CFB koriste za ustanovljavanje vjerodostojnosti poruke.

32

CFB mod

OFB mod

2.6. Još neki moderni blokovni kriptosistemi

U naredna dva poglavlja spomenućemo neke kriptosisteme koji se koriste kao zamjena za DES, kao i kriptosisteme koji bi trebalo i službeno da zamijene DES. U ovom poglavlju obradićemo: Trostruki DES (Triple DES, 3DES), IDEA, CAST-128 i RC5, dok ćemo u narednom poglavlju reći nešto o finalistima na konkursu za izbor nasljednika DES-a.

Prije nego što kažemo nešto o Trostrukom DES-u, odgovorimo na pitanje zašto se ne koristi "Dvostruki DES". Kod Dvostrukog DES-a bi svaki blok šifrovali dva puta, s dva različita ključa K i L:

y = eL(eK(x)), x = dK(dL(y)).

Međutim, pokazalo se da je za razbijanje Dvostrukog DES-a neophodan broj operacija reda 256, što je neznatno više nego za obični DES. Stoga, jedna od najpopularnijih zamjena za DES je Trostruki DES:

y = eM(dL(eK(x))), x = dK(eL(dM(y))).

Za Trostruki DES minimalni broj operacija kod napada je reda 2112 5 . 1033. Možemo reći da je sigurnost kod trostrukog šifrovanja danas više nego zadovoljavajuća.

IDEA (International Data Encryption Algorithm) je kriptosistem koji su razvili švajcarski kriptografi Xuejia Lai i James Massey. Prvu verziju zvanu PES (Proposed Encryption Standard) su objavili 1990. Međutim, taj kriptosistem nije bio otporan na tzv. diferencijalnu kriptoanalizu (pri 128-bitnom ključu za razbijanje šifre trebalo je 264 operacija), pa su nakon Biham-Shamirovog otkrića, autori 1992. godine prepravili algoritam i nazvali ga IDEA. IDEA koristi 128-bitni ključ za šifrovanje 64-bitnih blokova otvorenog teksta. Koristi tri operacije na 16-bitnim podblokovima:

XOR     (oznaka ), sabiranje po modulu 216     (oznaka   ), množenje po modulu 216 + 1     (oznaka  ).

IDEA ima 8 rundi i završnu transformaciju. U njima se koristi 52 16-bitnih međuključeva generisanih pomoću polaznog 128-bitnog ključa (slika 2.6.1.).

33

Slika 2.6.1. Algoritam računanja u IDEA-i.

CAST-128 su dizajnirali kanadski kriptografi Carlisle Adams i Stafford Taraves 1997. godine. CAST šifruje 64-bitne blokove otovorenog teksta koristeći ključ čija dužina može varirati od 40 do 128 bitova. CAST je, isto kao i DES, primjer Fiestel-ove šifre sa 16 rundi. Dvije su razlike u odnosu na klasičnu Fiestel-ovu šifru:

1. postoje dva međuključa u svakoj rundi: 32-bitni Kmi i 5-bitni Kri; 2. funkcija f zavisi od runde.

Osnovne operacije u CAST-u su: XOR, sabiranje i oduzimanje po modulu 232, lijeva ciklična rotacija (šiftovanje) od a za b bitova     (oznaka   a <<< b).

Skica jedne CAST-128 runde:

34

U zavisnosti od broja runde i , funkcije f1, f2 f3 i f4 predstavljaju sljedeće operacije:

runda f1i f2i f3i f4i----------------------------------------------------------------------- 1, 4, 7, 10, 13, 16 + XOR - + ----------------------------------------------------------------------- 2, 5, 8, 11, 14 XOR - + XOR----------------------------------------------------------------------- 3, 6, 9, 12, 15 - + XOR ------------------------------------------------------------------------

RC5 algoritam je izumio Ron Rivest 1994. godine. Zapravo to je cijela familija algoritama određena s tri parametra:       w - dužina riječi u bitovima = 16, 32, 64      r - broj rundi = 0, 1, ... , 255      b - broj bajtova u ključu = 0, 1, ... , 255Obično se koristi verzija sa w = 32, r = 12, b = 12. Osnovne operacije u RC5 su:

XOR, sabiranje i oduzimanje po modulu 2w, lijeva i desna ciklična rotacija     (a <<< b, a >>> b).

Blowfish je blokovni kriptosistem baziran na Fiestel-ovoj šifri. Funkcija f je značajno pojednostavljena u odnosu na DES. Na taj način je postignuta ista sigurnost kao kod DES-a, ali su brzina i efikasnost softvera znatno poboljšani. Runde u Blowfish-u imaju dosta sličnosti sa onim u CAST-u.

SAFER (Secure And Fast Encryption Routine) šifruje blokove dužine 64 bita pomoću ključa dužine 64 ili 128 bitova. Sastoji se od r (6, 8 ili 10) rundi nakon kojih slijedi završna transformacija. U rundama se koriste S-kutije, operacije XOR i sabiranje po modulu 28, kao i specijalno konstruisane f funkcije (u tri nivoa) pomoću kojih se postiže brza difuzija. Kod

35

SAFER-a se, za razliku od npr. DES-a, blok otvorenog teksta ne dijeli na djelove koji kasnije utiču jedni na druge, već se direktno mijenja prolazeći kroz S-kutije.

2.7. Advanced Encryption Standard

National Institute of Standards and Technology (NIST) raspisao je, 1997. godine, konkurs za kriptosistem koji bi trebalo, kao opšte prihvaćeni standard, da zamijeni DES. Dogovoreno je da pobjednik dobije ime Advanced Encryption Standard (AES). NIST je postavio sljedeće zahtjeve koje je morao da zadovolji predloženi kriptosistem:

1. da je simetričan 2. da je blokovni 3. da radi sa 128-bitnim blokovima i ključevima s tri dužine: 128, 192 i 256 bitova.

Nekoliko je razloga zbog kojih NIST nije odabrao 3DES kao AES: 3DES koristi 48 rundi da bi postigao sigurnost za koju je vjerovatno dovoljno 32

runde. Softverske implementacije 3DES-a su prespore za neke primjene, posebno za digitalne

video podatke. 64-bitni blokovi nijesu najefikasniji u nekim primjenama.

U svakom slučaju, značaj 3DES-a svakako je veliki, jer je, do izbora novog standarda, predstavljao zadovoljavajuće privremeno rješenje nakon razbijanja DES-a.

Konkurs je zaključen 15.6.1998. godine. Od 21 pristigle prijave, 15 ih je zadovoljilo NIST-ove kriterijume. U avgustu 1999. NIST je objavio 5 finalista: MARS, RC6, RIJNDAEL, SERPENT i TWOFISH. Daćemo nekoliko napomena o ovim finalistima.

MARS (IBM), RC6 (RSA Security Inc.) i TWOFISH (Counterpane Systems) spadaju u Fiestel-ove šifre. Podsjetimo se da je Fiestel-ova šifra blokovna šifra u kojoj se, u i-toj rundi, koriste formule Li = Ri -1, Ri = Li -1 f (Ri -1, Ki) (dakle, isto kao kod DES-a). MARS spada u nebalansirane Fiestel-ove šifre, jer se blokovi ne dijele na 2 već na 4 dijela. MARS ima 32 runde, RC6 ima 20 rundi, dok TWOFISH ima 16 rundi. Specifičnost kriptosistema RC6 (koji je dosta sličan RC5) su korišćenje funkcije f(x) = x(2x+1) koja daje difuziju, a rotacija zavisi od podataka, čime se povećava otpornost na diferencijalnu i linearnu kriptoanalizu. Specifičnost TWOFISH-a je da se S-kutije dinamički mijenjaju u zavisnosti od ključa, što komplikuje diferencijalnu i linearnu kriptoanalizu.

SERPENT su konstruisali kriptografi iz Engleske, Izraela i Danske. Spada u supstitucijsko-permutacijske šifre. Ima 32 runde i, što je za njega specifično, u svakoj rundi paralelno koristi 32 identične S-kutije.

RIJNDAEL su razvili belgijski kriptografi. Razlikuje se od ostalih finalista po tome što se u konstrukciji S-kutija koriste operacije u konačnom polju GF(28).

Konačno, 02.08.2000. objavljeno je da je RIJNDAEL (čitaj: rejn dol) izabran za AES. RIJNDAEL su razvili belgijski kriptografi Joan Daemen i Vincent Rijmen s Katoličkog univerziteta u Leuven-u, po kojima je i dobio ime.

Prije nego što objasnimo osnove AES algoritma, reći ćemo nešto o matematičkim operacijama koje se koriste u AES kriptosistemu. Kako smo već napomenuli, jedna od specifičnosti RIJNDAEL-a je korištenje konačnog polja GF(28). Konačno polje (naziva se još i Galois Field - otuda skraćenica GF) GF(28) je skup koji sadrži 28=256 različitih brojeva (0, 1, 2, ... 255) koji predstavljaju po jedan bajt (8 bitova). Preciznije, elementi od GF(28) su polinomi oblika:

36

a7x7 + a6x6 + ... + a1x + a0, ai {0, 1},gdje su ai (i = 0,1,2,...,7) vrijednosti pojedinih bitova u bajtu (a7a6a5a4a3a2a1a0). Npr. polinomu x6 + x4 + x2 + x + 1 odgovara bajt 01010111 ili 57 u heksadecimalnom zapisu, odnosno 87 u decimalnom zapisu.

Primjer 2.7.1.: Koji polinom, heksadecimalni i decimalni broj odgovara bajtu: 10100011? Rješenje: Bajt možemo zapisati kao: 1 · x7 + 0 · x6 + 1 · x5 + 0 · x4 + 0 · x3 + 0 · x2 + 1 · x1 + 1 · x0 = x7 + x5 + x + 1.Podsjetimo se sada veze između binarnih (b), decimalnih (d) i heksadecimalnih (h) brojeva:

0000b = 0d = 0h

0001b = 1d = 1h

0010b = 2d = 2h

0011b = 3d = 3h

0100b = 4d = 4h

0101b = 5d = 5h

0110b = 6d = 6h

0111b = 7d = 7h

1000b = 8d = 8h

1001b = 9d = 9h

1010b = 10d = Ah

1011b = 11d = Bh

1100b = 12d = Ch

1101b = 13d = Dh

1110b = 14d = Eh

1111b = 15d = Fh,

na osnovu koje lako zaključujemo da je heksadecimalna vrijednost A3:

Decimalnu vrijednost određujemo na osnovu binarnog zapisa kao:1 · 27 + 0 · 26 + 1 · 25 + 0 · 24 + 0 · 23 + 0 · 22 + 1 · 21 + 1 · 20 = 27 + 25 + 21 + 20

= 128 + 32 + 2 + 1 = 163d

ili na osnovu heksadecimalnog zapisa kao:A3h = A · 24 + 3 · 20 = 10 · 16 + 3 · 1 = 160 + 3 = 163d

Izvršimo provjeru koristeći Matlab i komande bin2dec i hex2dec:>> bin2dec (’10100011’)ans =163>> hex2dec (’A3’)ans =163

U AES-u se prilikom sabiranja dva polinoma (dva bajta) koristi operacija eksluzivno ILI (XOR, ) između bitova iste težine tj. sabiraju se koeficijenti uz iste stepene od x po modulu 2 (npr. x3+x3 = (11) . x3 = (1+1 mod 2) . x3 = 0 . x3 = 0). Podsjetimo se operacije XOR:

37

Primjer 2.7.2. Sabrati polinome: x6+x4+x2+x+1 i x7+x5+x+1.Rješenje: Na osnovu standardnog sabiranja:

zaključujemo da je rješenje: x7+x6+x5+x4+x2.Prikažimo kako bi se ovakvo sabiranje vršilo u binarnom obliku:

Dobili smo isti rezultat: 244d = F4h = 11110100b = x7 + x6 + x5 + x4 + x2

Za provjeru iskoristimo Matlab-ovu funkciju bitxor:>> bitxor (87, 163)ans =244

Množenje polinoma (bajtova) vrši se po modulu fiksni ireducibilni polinom g(x) = x8 + x4 + x3 + x + 1. Naime, nakon što se polinomi na standardan način pomnože, traži se ostatak dijeljenja sa polinomom g(x) (odgovara broju 283). Na taj način se postiže da rezultat prilikom množenja dva bajta mora biti iz polja GF(28) tj. takođe je bajt (dužine 8 bita). Pritom, ako se dobiju negativni koeficijenti uz x oni se pretvaraju u pozitivne (uopšte ako je koeficijent ispred x paran zamjenjuje se sa 0, a ako je neparan sa 1).

Primjer 2.7.3.: Pomnožiti polinome x6+x4+x2+x+1 i x7+x5+x+1 u polju GF(28)Rješenje: Prvo ćemo pomnožiti polinome na standardan način:

38

Svođenjem dobijamo rezultat:

U binarnom obliku množenje se postiže na sljedeći način:

Pošto je stepen na x veći od 7 moramo izvršiti redukovanje polinoma nalaženjem ostatka pri dijeljenju sa polinomom g(x):

Dobijamo konačan rezultat:

U binarnom obliku ostatak se dobija tako što se vrši operacija bit po bit XOR između binarnih podataka koji odgovaraju rezultatu i polinomu g(x) (tj. 283d) počev od bitova najveće težine. Nakon toga se, ako je novonastali rezultat dužine veće od 8, postupak ponavlja između

39

novonastalog rezultata i 283d. Postupak se ponavlja sve dok se ne dobije rezultat dužine maksimum 8 bitova:

U RIJNDAEL-u se takođe koristi i operacija sabiranja i množenja polinoma stepena

manjeg od 4 čiji su koeficijenti iz GF(28) tj. bajtovi. Svaki takav polinom možemo reprezentovati kao 4-bajtni vektor. Sabiranje takvih polinoma se svodi na sabiranje koeficijenata uz iste stepene x-a (kao što smo već definisali). Tako, dvije 32 bitne riječi tj. 4-bajtna vektora [a0, a1, a2, a3] i [b0, b1, b2, b3], gdje su ai i bi (i = 0, 1, ..., 3) bajtovi, pišemo u obliku polinoma:

a(x) = a3. x3 + a2

. x2 + a1

. x + a0 i b(x) = b3. x3 + b2

. x2 + b1

. x + b0 .

Zbir ova dva polinoma je:

Da bi kod množenja dobili kao rezultat polinom stepena manjeg od 4, moramo proizvod redukovati po modulu neki polinom četvrtog stepena. U RIJNDAEL-u je za to izabran polinom x4 + 1. Oznaka za ovakvo množenje je . Nađimo proizvod dvije 32-bitne riječi tj. proizvod polinoma a(x)b(x). Prvo ćemo naći polinom c(x) koji je rezultat običnog proizvoda c(x) = a(x). b(x) ova dva polinoma:

gdje su:

Sada, da bi dobili kao rezultat 4-bajtnu tj. 32-bitnu riječ, nalazimo ostatak pri dijeljenju sa polinomom x4+1. Pritom se koristi osobina da je:

Na taj način, množenjem a(x)b(x), kao rezultat dobijamo polinom d(x):

gdje su:

40

Množenje polinoma a(x)b(x) može se matrično zapisati ovako:

Primjer 2.7.4: Izračunati: (03 x3 + 01 x2 + 01 x + 02) (0B x3 + 0D x2 + 09 x + 0E).

Rješenje: Označimo rezultat kao: d(x) = d3x3 + d2x2 + d1x+ d0. Imamo da je:

d3 = 03 0E + 01 09 + 01 0D + 02 0B. Računamo:

03 0E = (x + 1) (x3 + x2 + x) = x4 + x = 12, 01 09 = 09,       01 0D = 0D,

02 0B = x (x3 + x + 1) = x4 + x2 + x = 16. d3 = 12 + 09 + 0D + 16 = (x4 + x) + (x3 + 1) + (x3 + x2 + 1) + (x4 + x2 + x) = 00.

Na isti način se izračuna d2 = 00, d1 = 00, d0 = 01. Stoga je d(x) = 01, tj. polinom b(x) je inverzni polinom za a(x) u odnosu na operaciju .

RIJNDAEL šifruje blokove dužine 128 bitova = 16 bajtova. Svaki takav blok se prestavlja pomoću 4 × 4 matrice bajtova tj. elemenata iz GF(28). Tu matricu ćemo zvati aes-blok ili matrica stanja (“state array”, “state matrix”). Na primjer, za blok otvorenog teksta (plaintext vector) od šesnaest bajtova b0, b1,..., b15 imamo:

Ključ takođe ima 128 bitova (postoje i varijante sa 192 i 256 bitova). Algoritam RIJNDAEL-a sadrži 10 rundi (uz 128-bitni ključ). Svaka runda se sastoji od 4 operacije:         ByteSub        ShiftRow

41

        MixColumn        AddRoundKey

Prije prve runde vrši se inicijalno dodavanje ključa (AddRoundKey), a u posljednjoj rundi se izostavlja transformacija MixColumn.

ByteSub (supstitucija bajtova) je jedini nelinearni dio algoritma. Svaki bajt b7b6b5b4b3b2b1b0=(xy)hex iz aes-bloka zamjenjuje se odgovarajućim iz S-kutije (prikazana u heksadecimalnom formatu):

Prvi dio bajta (x) određuje vrstu, a drugi (y) kolonu, u presjeku kojih se nalazi zamjenski broj (bajt). Tako, na primjer, bajt 53h zamjenjuje se bajtom edh. Ovakva inverzibilna S-kutija (prilikom dešifrovanja koristi se inverzna S-kutija) dobijena je pomoću sljedeće dvije transformacije:

42

1. svaki element aes-bloka (matrice) se zamijeni svojim multiplikativnim inverzom iz GF(28) (s tim da element 00 ostaje nepromijenjen),

2. primjeni se tzv. fiksna afina transformacija

b'i = bi b(i+4) mod 8 b(i+5) mod 8 b(i+6) mod 8 b(i+7) mod 8 ci,

gdje je indeks i = 0,1,...,7, bi – i-ti bit proizvoljog bajta iz aes bloka, ci – i-ti bit bajta c = 63h (01100011b). U matričnoj formi afina transformacija izgleda ovako:

ShiftRow - ciklično pomjera elemente i-tog reda aes-bloka za i mjesta ulijevo (i = 0,1,2,3). Ako označimo aes-blok sa S prije, a sa S’ poslije šiftovanja imamo:

MixColumn - Kolone matrice stanja se shvate kao polinomi iz GF(28). Sada se ti polinomi pomnože s polinomom a(x) = 03 x3 + 01 x2 + 01 x + 02 (u skladu s ranije definisanim operacijama nad polinomima, rezultat se računa po modulu x4 + 1). Ako je s(x) proizvoljna kolona ulaznog aes-bloka, onda odgovarajuća kolona izlaznog bloka s’(x) dobija kao: s’(x)= a(x) s(x) , tj:

gdje indeks c (c=0,1,2,3) označava o kojoj se koloni aes-bloka radi.

AddRoundKey predstavlja operaciju XOR aes-bloka sa međuključem koji odgovara trenutnoj rundi. S-kutije (operacija ByteSub) su dizajnirane tako da kriptosistem bude što

43

otporniji na diferencijalnu i linearnu kriptoanalizu, dok su ShiftRow i MixColumn zaslužni za difuziju.

Opisaćemo ukratko postupak proširenja ključa. Prošireni ključ se sastoji od 44 riječi (jedna riječ sadrži 4 bajta). Međuključevi se biraju iz proširenog ključa tako što se prvi međuključ sastoji od prve četiri riječi (4 x 4 bajta =128 bitova), drugi od sljedeće četiri, itd. Svi međuključevi (njih 11) se pišu u obliku 4x4 matrice čiji su elementi bajtovi. Prve 4 riječi proširenog ključa (prvi međuključ) predstavljaju zadani (početni) ključ. Svaku sljedeću riječ ri

(i=0,1,2,...,43) dobijamo kao rezultat operacije XOR između prethodne riječi ri -1 i riječi koja se nalazi 4 mjesta ispred ri-4. Pri tome, prilikom dobijanja prve riječi u svakom međuključu (tj. kada je i djeljivo sa 4), prije operacije XOR, na ri–1 (to je, u ovom slučaju, posljednja riječ u prethodnom međuključu) se izvrše operacije RotWord i SubWord, a na kraju se još izvrši i operacija XOR s riječi rcon(j)=[02j -1,00,00,00], gdje je j (j=1,2,..,10) - redni broj međuključa koji se generiše. RotWord rotira riječ za jedno mjesto ulijevo (npr. za riječ r3: [k12 k13 k14 k15] promijeni u [k13 k14 k15 k12]). SubWord uzima jedan po jedan bajt iz riječi i na svakom od njih primjeni S-kutiju. Slijedi grafički prikaz generisanja međuključeva:

Početni ključ: Međuključevi: K0, K1, K2, ..., K10

K0 = k0 k1 k2 ... k15 = r0 r1 r2 r3

r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r40 r41 r42 r43

k0 k4 k8 k12 k16 k20 k24 k28 k32 k36 k40 k44 k160 k164 k168 k172

k1 k5 k9 k13 k17 k21 k25 k29 k33 k37 k41 k45 k161 k165 k169 k173

k2 k6 k10 k14 k18 k22 k26 k30 k34 k38 k42 k46 k162 k166 k170 k174

k3 k7 k11 k15 k19 k23 k27 k31 k35 k39 k43 k47 k163 k167 k171 k175

K0 K1 K2 K10

r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r40 r41 r42 r43

rcon1

RotWord,SubWord

rcon2

RotWord,SubWord

rcon3

RotWord,SubWord

Dešifrovanje se odvija po istom algoritmu kao i šifrovanje, osim što se umjesto transformacija ByteSub, ShiftRow i MixColumn koriste njihovi inverzi.

44