SVEU ČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RA ČUNARSTVA

DIPLOMSKI RAD br. 132

PROGRAMSKO OSTVARENJE ALGORITAMA BLAKE, Shabal i SIMD

Monika Čeri

Zagreb, sije čanj 2011.

SVEU ČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RA ČUNARSTVA

DIPLOMSKI RAD br. 132

PROGRAMSKO OSTVARENJE ALGORITAMA BLAKE, Shabal i SIMD

Monika Čeri

Zagreb, sije čanj 2011.

Sadržaj

1. Uvod ...... 1 2. Funkcije za izra čunavanje sažetka poruke...... 2 3. Secure Hash Algorithm (SHA) ...... 4 3.1. SHA-1 ...... 4 3.1.1. Postupak dobivanja sažetka poruke algoritmom SHA-1...... 4 3.1.2. Napadi na SHA-0 i SHA-1...... 5 3.2. SHA-2 ...... 6 3.2.1. Postupak dobivanja sažetka poruke algoritmom SHA-2...... 7 3.2.2. Napadi na SHA-2...... 9 4. Natje čaj za SHA-3 ...... 10 4.1. Tijek natje čaja za SHA-3 ...... 10 4.1.1. Osnovni zahtjevi za prijavu na natje čaj ...... 10 4.1.2. Kriteriji ocjenjivanja...... 10 4.1.3. Krugovi natje čaja ...... 11 4.2. Kandidati drugog kruga natje čaja ...... 13 5. Algoritam BLAKE...... 15 5.1. Osnovne karakteristike algoritma...... 15 5.1.1. Notacija i korištene operacije ...... 15 5.1.2. Osnovna struktura algoritma...... 16 5.2. Postupak ra čunanja sažetka algoritmom BLAKE-32...... 17 5.2.1. Proširenje ulaznog teksta...... 18 5.2.2. Izra čun funkcije kompresije...... 18 5.3. Postupak ra čunanja sažetka algoritmom BLAKE-64...... 21 5.3.1. Proširenje ulaznog teksta...... 21 5.3.2. Izra čun funkcije kompresije...... 21 5.4. Postupak ra čunanja sažetka algoritmom BLAKE-28...... 22 5.4.1. Proširenje ulaznog teksta...... 22 5.4.2. Izra čun funkcije kompresije...... 23 5.5. Postupak ra čunanja sažetka algoritmom BLAKE-48...... 23 5.5.1. Proširenje ulaznog teksta...... 23 5.5.2. Izra čun funkcije kompresije...... 23 6. Algoritam Shabal ...... 25 6.1. Osnovne karakteristike algoritma...... 25 6.1.1. Notacija i korištene operacije ...... 25

ii

6.1.2. Osnovna struktura algoritma...... 25 6.2. Postupak ra čunanja sažetka algoritmom Shabal-256 ...... 26 6.2.1. Proširenje ulaznog teksta...... 26 6.2.2. Izra čun rundi pomo ću poruke...... 26 6.2.3. Finalizacija...... 29 6.3. Postupak ra čunanja sažetka algoritmom Shabal-512 ...... 30 6.4. Postupak ra čunanja sažetka algoritmom Shabal-224 ...... 30 6.5. Postupak ra čunanja sažetka algoritmom Shabal-384 ...... 31 7. Algoritam SIMD...... 32 7.1. Osnovne karakteristike algoritma...... 32 7.1.1. Notacija i korištene operacije ...... 32 7.1.2. Osnovna struktura algoritma...... 33 7.2. Postupak ra čunanja sažetka algoritmom SIMD-256 ...... 34 7.2.1. Proširenje ulaznog teksta...... 34 7.2.2. Izra čun funkcije kompresije...... 37 7.2.3. Finalizacija...... 39 7.3. Postupak ra čunanja sažetka algoritmom SIMD-512 ...... 40 7.3.1. Proširenje ulaznog teksta...... 40 7.3.2. Izra čun funkcije kompresije...... 41 7.3.3. Finalizacija...... 44 7.4. Postupak ra čunanja sažetka algoritmom SIMD-224 ...... 44 7.5. Postupak ra čunanja sažetka algoritmom SIMD-384 ...... 44 8. Prakti čni rad...... 46 8.1. Upute za upotrebu korisni čkog su čelja ...... 46 8.2. Formati ulaznih i izlaznih datoteka...... 47 8.3. Programsko ostvarenje algoritama za izra čunavanje sažetka poruke...... 48 8.3.1. Algoritam BLAKE...... 48 8.3.2. Algoritam Shabal ...... 51 8.3.3. Algoritam SIMD ...... 53 9. Usporedba vremena izra čuna sažetka...... 56 9.1. Vrijeme izra čunavanja sažetka algoritmom SHA-256 ...... 56 9.2. Vrijeme izra čunavanja sažetka algoritmom BLAKE-32 ...... 56 9.3. Vrijeme izra čunavanja sažetka algoritmom Shabal-256...... 57 9.4. Vrijeme izra čunavanja sažetka algoritmom SIMD-256...... 58 9.5. Usporedba algoritama po trajanju izra čuna sažetka ...... 58 10. Zaklju čak...... 60 11. Literatura...... 61

iii

Sažetak...... 62 Abstract ...... 63 Dodatak A...... 64 Dodatak B...... 67

iv

1. Uvod

Nakon otkri ća ranjivosti dosadašnjih funkcija za izra čunavanje sažetka poruke pomo ću napada kolizijom, dovela se u pitanje sigurnost certifikata i protokola koji ih koriste. Uspješnim napadom na algoritam SHA-1, NIST je za novu normu odredio skupinu algoritama SHA-2 koji se temelje na algoritmu SHA-1. Trenutno sigurnost algoritama SHA-2 nijje ugrožena, no dovodi se u pitanje njihova dugoro čnost upravo zbog toga što se temelje na algoritmu SHA-1. Samo je pitanje vremena kada će se i za njih prona ći slabosti. Upravo je zbog toga NIST objavio natje čaj za novi algoritam za izra čunavanje sažetka poruke, SHA-3, koji će naslijediti skupinu algoritama SHA-2. U ovom radu opisana su osnovna svojstva funkcija za izra čunavanje sažetka poruke i algoritmi iz familije SHA, BLAKE, Shabal i SIMD. Programski je ostvareno radno okruženje koje omogu ćava izra čun sažetka poruke pomo ću algoritama BLAKE, Shabal i SIMD. Tako ñer, uspore ñena su dobivena vremena sažimanja s algoritmom SHA-2.

1

2. Funkcije za izra čunavanje sažetka poruke

Kriptografska funkcija za izra čunavanje sažetka poruke (engl. hash function ) je deterministi čka funkcija koja uzima blok podataka i vra ća iz njega izra čunati sažetak fiksne duljine. Kako bi funkcija za izra čunavanje sažetka poruke bila idealna, to izra čunavanje mora biti jednostavno. Tako ñer, takva funkcija mora biti otporna na tri najpoznatija napada: 1. (izra čunavanje originala); 2. 2-nd preimage attack (izra čunavanje poruke koja daje isti sažetak); 3. (napad kolizijom). [1] Izra čunavanje originala (engl. preimage attack ) temelji se na dobivanju izravne poruke iz poznatog sažetka poruke. Ukoliko sažetak poruke ima ukupno N bitova, onda se originalna poruka može dobiti pretraživanjem cijelog prostora stanja, koji je u ovom slu čaju 2 N. Izra čunavanje poruke koja daje isti sažetak kao originalna poruka (engl. 2-nd preimage attack ) temelji se na pronalasku jedne poruke koja je razli čita od originalne poruke koja ima isti sažetak kao zadana poruka. Napad kolizijom (engl. collision attack ) temelji se na pronalasku dvije razli čite poruke koje daju isti sažetak iz beskona čnog skupa poruka. Ukoliko sažetak ima ukupno N bitova, onda je vjerojatnost da dvije poruke iz skupa približno jednakog 2 N/2 imaju isti sažetak ve ća od 50%. Ovaj napad temelji se na ro ñendanskom napadu (engl. ). Sukladno tome osnovna tri svojstva koja mora zadovoljiti svaka funkcija za izra čunavanje sažetka poruke su: 1. otpornost na izra čunavanje originala (engl. preimage resistance ); 2. otpornost na izra čunavanje poruke koja daje isti sažetak (engl. 2-nd preimage resistance ); 3. otpornost na kolizije (engl. collision resistance ). [1] Kriptografske funkcije za izra čunavanje sažetka imaju mnogo primjena u informacijskoj sigurnosti, a najviše u digitalnim potpisima, kodovima za autentifikaciju poruke i drugim oblicima autentifikacije. Tako ñer se primjenjuju za detekciju plagijata, identificiranje datoteka i kao kontrolna suma za provjeru slu čajnog ošte ćenja podataka. Danas postoji mnogo kriptografskih algoritama za izra čunavanje sažetka poruke, ali mnogi od njih su probijeni i više se ne upotrebljavaju (Tablica 2.1). Funkcije iz familije MD (engl. Message Digest ) i SHA (engl. Secure Hash Algorithm ) danas su u naj češ ćoj upotrebi.

2

Tablica 2.1. Popis najpoznatijih algoritama za izračunavanje sažetka poruke [2]

Ime Autor Godina Veli čina Veli čina Broj sažetka(bit) bloka(bit) rundi

Zheng, 128/160/192/ 3*32/4*32/ HAVAL Pieprzyk, 1994. 224/256 1024 5*32 Seberry

MD2 Rivest 1989. 128 128 18

MD4 Rivest 1990. 128 512 3*16

MD5 Rivest 1992. 128 512 4*16

PANAMA Daemen, 1998. 256 256 NA Clapp

RIPEMD The RIPE 1990. 128 512 4*16 Consortium

RIPEMD- Dobbertin, 128/256 Bosselaers, 1996. 128/256 512 4*16 Preneel

RIPEMD- Dobbertin, 160/320 Bosselaers, 1996. 160/320 512 5*16 Preneel

SHA-0 NIST/NSA 1991. 160 512 4*20

SHA-1 NIST/NSA 1993. 160 512 4*20

SHA-224 NIST/NSA 2004. 224 512 64

SHA-256 NIST/NSA 2000. 256 512 64

SHA-384 NIST/NSA 2000. 384 1024 80

SHA-512 NIST/NSA 2000. 512 1024 80

Tiger- Anderson, 1996. 192/160/128 512 3*8 192/160/128 Biham

WHIRLPOOL Barreto, 2000. 512 512 10 Rijmen

3

3. Secure Hash Algorithm (SHA)

SHA-0 objavio je NIST (engl. National Institute of Standards and Technology ) 1993. godine kao Secure Hash Standard . Ovaj algoritam povukla je NSA (engl. National Security Agency ) nedugo nakon njegove objave i umjesto njega je 1995. godine predložila SHA-1.

3.1. SHA-1

SHA-1 se razlikuje od SHA-0 samo u rotaciji poruke za jedan bit unutar funkcije kompresije. Ova rotacija dodana je kako bi se popravila pogreška koja je smanjivala sigurnost kriptografskog algoritma. Me ñutim, NSA nikada nije objasnila i otkrila pogrešku koja je ispravljena. Naknadno je utvr ñeno da je NSA ipak napravila zna čajnu stvar jer su napadi na SHA-1 bili otporniji nego na SHA-0. [3]

3.1.1. Postupak dobivanja sažetka poruke algoritmom SHA-1

SHA-1 proizvodi sažetak od 160 bitova. Sažetak se sastoji od pet nadovezanih varijabli A, B,C, D, E veli čine 32 bita. Inicijalne vrijednosti tih varijabli postavljaju se na [4]:

A = 67452301 B = EFCDAB 89 C = 98 BADCFE 0 16 0 16 0 16 . = = D0 10325476 16 E0 C3D2E1F016 Izvorni tekst, koji ne smije biti dulji od 2 64 -1 bitova, dijeli se na blokove duljine 512 bitova. Zadnji blok teksta ne mora biti potpun pa se nadopunjuje na 512 bitova tako da se iza zadnjeg bita dodaje jedna jedinica nakon koje slijedi toliko nula da u bloku preostanu 64 bita u koje se upisuje bitovna duljina izvorne poruke. Svaki se blok dijeli na 16 podblokova č duljine 32 bita, ije su oznake M 0 , M 1 ,..., M 15 . [3] Čitav postupak provodi se u ukupno četiri kruga, a svaki krug ima ukupno 20 koraka, što ukupno daje 80 koraka. Jedan korak algoritma prikazan je na Slici 3.1.

Slika 3.1. Postupak sažimanja poruke u i -tom koraku algoritma SHA-1 [5]

4

ñ č Prilikom provo enja postupka sažimanja koriste se etiri konstante K i , koje poprimaju vrijednosti ovisno o trenutnom koraku kako slijedi [4]: = K i 5A882799 16 za 1 ≤ i ≤ 20 K = 6ED 9EBA 1 za 21 ≤ i ≤ 40 i 16 = ≤ ≤ K i 8F1BBCDC 16 za 41 i 60 = ≤ ≤ K i CA 62 C1D616 za 61 i 80 č č Parametar Wi ozna ava rije u i -tom koraku duljine 32 bita. Ovisno o koraku postoje dva na čina na koja se ona dobiva [4]:

W = M − za 1 ≤ i ≤ 16 i i 1 = ⊕ ⊕ ⊕ <<< ≤ ≤ Wi (Wi−3 Wi−8 Wi−14 Wi−16 ) 1 za 17 i 80 Algoritmi SHA-0 i SHA-1 razlikuju se samo u rotaciji za jedan bit u koracima od 17 do 80 kojeg je dodala NSA. Svi ostali parametri i postupak dobivanja sažetka poruke su potpuno identi čni. [3] Funkcija F je nelinearna funkcija, a njena definicija tako ñer ovisi o trenutnom koraku. Tako postoje ukupno četiri funkcije [4]: = ∧ ∨ ¬ ∧ Fi (X ,Y, Z) (X Y ) (( X ) Z) za 1 ≤ i ≤ 20 F (X ,Y, Z) = X ⊕ Y ⊕ Z za 21 ≤ i ≤ 40 i = ∧ ∨ ∧ ∨ ∧ ≤ ≤ Fi (X ,Y, Z) (X Y ) (X Z) (Y Z) za 41 i 60 = ⊕ ⊕ ≤ ≤ Fi (X ,Y, Z) X Y Z za 61 i 80 Postupak se temelji na mijenjanju po četnih vrijednosti varijabli A, B,C, D, E u svakom koraku. Tako u i -tom koraku varijable poprimaju vrijednosti kako slijedi [4]: = <<< + + + + Ai (Ai−1 )5 Fi (Bi−1 ,Ci−1 , Di−1 ) Ei−1 Wi Ki = Bi Ai−1 = <<< Ci Bi−1 30 = Di Ci−1 = Ei Di−1 ć Nakon 80 ovakvih promjena varijabli uz odgovaraju e vrijednosti za K i ,Wi , Fi dobivaju se varijable A80 , B80 ,C80 , D80 , E80 . Sažetak poruke dobiva se nadovezivanjem tih vrijednosti, tj. sažetak je: = S A80 B80 C80 D80 E80 . [3]

3.1.2. Napadi na SHA-0 i SHA-1

Za izvo ñenje napada grubom silom za SHA-0 i SHA-1 potrebno je pretražiti prostor stanja veli čine 2160 . Napad kolizijom je u ovom slu čaju puno jednostavniji jer je prostor stanja koji je potrebno pretražiti u tom slu čaju otprilike veli čine 280 . Prvi uspješan napad na SHA-0 prezentirali su Florent Chabaud i Antoine Joux 1998. godine. Pronašli su koliziju u prostoru stanja veličine 261 . No, taj se napad nije mogao primijeniti na SHA-1. Prva uspješna implementacija napada na SHA-0 objavljena je u

5 kolovozu 2004. godine, a temeljila se na generalizaciji prvog prezentiranog napada objavljenog 1998. godine. Kolizija je prona ñena u prostoru stanja veli čine 2 51 nakon otprilike 80 000 procesorskih sati na super ra čunalu s 256 Itanium 2 procesora. Vremenski to iznosi otprilike oko 13 dana. Niti taj napad nije bio primjenjiv na SHA-1. Samo pet dana nakon ovog napada, Wang, Feng, Lai i Yu objavili su novi napad u prostoru stanja veli čine 240 , što je mnogo bolje od prethodnog pokušaja. U velja či 2005. godine Wang, Yin i Yu objavili su napad kolizijom u prostoru stanja veli čine 2 39 . Ovaj napad bio je primjenjiv i na algoritam SHA-1. [4] Prvi napad na SHA-1 objavljen je po četkom 2005. godine. Rijmen i Oswald pronašli su koliziju na reduciranom algoritmu SHA-1 koji se sastojao od 53 koraka od mogu ćih 80. U velja či 2005. godine Wang, Yin i Yu objavili su napad na potpuni algoritam SHA-1. Pronašli su koliziju pretragom prostora stanja veličine 269 . U kolovozu 2005. godine taj se broj smanjio na 2 63 . Danas se konkretna implementacija ovih napada obavlja na Sveu čilištu u Grazu na raspodijeljenoj platformi BOINC. [5] NIST je kao zamjenu za algoritam SHA-1 predložio familiju algoritama SHA-2 sve dok se ne objavi novi algoritam SHA-3.

3.2. SHA-2

Kako bi se i dalje osigurala sigurnost, upotrebom algoritma koji je sli čan algoritmu SHA-1, NSA je objavila familiju algoritama SHA-2. Svi algoritmi unutar ove familije temelje se na generiranju sažetka ve ćeg od 160 bita čime se postiže ve ća sigurnost i otpornost na napade kolizijom jer se proširuje prostor pretraživanja stanja. Ukupno postoje četiri algoritma u SHA-2 familiji. U Tablici 3.1 dana je usporedba algoritama iz familije SHA-2 i prijašnjih algoritama.

Tablica 3.1. Usporedba SHA familije algoritama [4, 6]

Veli č ina Veli čina Maksimalna Broj Korišteni operatori Ime i verzija sažetka bloka veli čina rundi algoritma (bit) (bit) poruke (bit)

SHA-0 160 512 264 – 1 80 +, and, or, xor, rot

SHA-1 160 512 264 – 1 80 +, and, or, xor, rot

SHA- 256/224 512 264 – 1 64 +, and, or, xor, shr, rot 256/224 SHA-2 SHA- 512/384 1024 2128 – 1 80 +, and, or, xor, shr, rot 512/384

6

3.2.1. Postupak dobivanja sažetka poruke algoritmom SHA-2

SHA-2 može proizvoditi sažetak od 224, 256, 384 i 512 bitova.

Sažetak od 256 bita sastoji se od osam nadovezanih varijabli A0 , B0 ,C0 , D0 , E0 , F0 ,G0 , H 0 veli čine 32 bita. Inicijalne vrijednosti tih varijabli postavljaju se na [4]: A = 6A09 E667 B = BB 67 AE 85 C = 3C6EF 372 D = A54 FF 53 A 0 16 0 16 0 16 0 16 . = = = = E0 510 E527 F16 F0 9B05688 C16 G0 1F83 D9AB 16 H 0 5BE 0CD 19 16 Izvorni tekst, koji ne smije biti dulji od 2 64 -1 bitova, dijeli se na blokove duljine 512 bitova. Zadnji blok teksta nadopunjuje se na isti na čin kao i kod algoritma SHA-1. Svaki se blok č dijeli na 16 podblokova duljine 32 bita, ije su oznake M 0 , M 1 ,..., M 15 . [3] Čitav postupak provodi se u ukupno 64 koraka. Jedan korak algoritma prikazan je na Slici 3.2.

Slika 3.2. Postupak sažimanja poruke u i -tom koraku algoritma SHA-2 [6]

č č Parametar Wi ozna ava rije u i -tom koraku duljine 32 bita. Ovisno o koraku postoje dva na čina na koja se ona dobiva [4]:

W = M − za 1 ≤ i ≤ 16 i i 1 = σ + + σ + ≤ ≤ Wi 2 (Wi−3 ) Wi−8 1 (Wi−14 ) Wi−16 za 17 i 64 SHA-256 koristi šest nelinearna funkcija [4]: Ch (X ,Y, Z) = (X ∧ Y ) ⊕ (¬X ∧ Z) Ma (X ,Y, Z) = (X ∧ Y ) ⊕ (X ∧ Z) ⊕ (Y ∧ Z) (X ) = ROTR 2 (X ) ⊕ ROTR 13 (X ) ⊕ ROTR 22 (X ) ∑1 . (X ) = ROTR 6 (X ) ⊕ ROTR 11 (X ) ⊕ ROTR 25 (X ) ∑2 σ = 7 ⊕ 18 ⊕ 3 1 (X ) ROTR (X ) ROTR (X ) SHR (X ) σ = 17 ⊕ 19 ⊕ 10 2 (X ) ROTR (X ) ROTR (X ) SHR (X )

7

ñ Prilikom provo enja postupka sažimanja koristi se za svaki korak druga konstanta K i . Vrijednosti konstanti su [4]: = = = = K 0 428 A2F98 16 K1 71374491 16 K 2 B5C0FBCF 16 K 3 E9B5DBA 516 = = = = K 4 3956 C25 B16 K 5 59 F111 F116 K 6 923 F82 A416 K 7 AB 1C5ED 516 = = = = K8 D807AA98 16 K 9 12835B01 16 K10 243185BE 16 K11 550C7DC3 16 = = = = K12 72BE5D74 16 K13 80DEB1FE 16 K14 9BDC06A7 16 K15 C19BF174 16 = = = = K16 E49B69C1 16 K17 EFBE 4786 16 K18 0FC 19 DC 616 K19 240 CA 1CC 16 = = = = K 20 2DE 92 C6F16 K 21 4A7484 AA 16 K 22 5CB 0A9DC 16 K 23 76 F988 DA 16 = = = = K 24 983E5152 16 K 25 A831C66D 16 K 26 B00327C8 16 K 27 BF597FC7 16 = = = = K 28 C6E00BF3 16 K 29 D5A79147 16 K 30 06CA6351 16 K 31 14292967 16 = = = = K 32 27B70A85 16 K 33 2E1B2138 16 K 34 4D2C6DFC 16 K 35 53380D13 16 = = = = K 36 650A7354 16 K 37 766A0ABB 16 K 38 81C2C92E 16 K 39 92722C85 16 = = = = K 40 A2BFE8A1 16 K 41 A81A664B 16 K 42 C24B8B70 16 K 43 C76C51A3 16 = = = = K 44 D192E819 16 K 45 D6990624 16 K 46 F40E3585 16 K 47 106AA070 16 = = = = K 48 19A4C116 16 K 49 1E376C08 16 K 50 2748774C 16 K 51 34B0BCB5 16 = = = = K 52 391C0CB3 16 K 53 4ED8AA4A 16 K 54 5B9CCA4F 16 K 55 682E6FF3 16 = = = = K 56 748F82EE 16 K 57 78A5636F 16 K 58 84C87814 16 K 59 8CC70208 16 = = = = K 60 90BEFFFA 16 K 61 A4506CEB 16 K 62 BEF9A3F7 16 K 63 C67178F2 16 Postupak se temelji na mijenjanju po četnih vrijednosti varijabli

A0 , B0 ,C0 , D0 , E0 , F0 ,G0 , H 0 u svakom koraku. Tako u i -tom koraku varijable poprimaju vrijednosti kako slijedi [4]:

A = H − + (E − ) + Ch (E − , F − ,G − ) + K +W + (A − ) + Ma (A − , B − ,C − ) i i 1 ∑2 i 1 i 1 i 1 i 1 i i ∑1 i 1 i 1 i 1 i 1 = Bi Ai−1 = Ci Bi−1 = Di Ci−1 E = D + H + (E ) + Ch (E , F ,G ) + K +W i i−1 i−1 ∑2 i−1 i−1 i−1 i−1 i i = Fi Ei−1 = Gi Fi−1 = H i Gi−1

Nakon 64 ovakvih promjena dobivaju se varijable A64 , B64 ,C64 , D64 , E64 , F64 ,G64 , H 64 . Sažetak poruke dobiva se nadovezivanjem tih vrijednosti, tj. sažetak je: = S A64 B64 C64 D64 E64 F64 G64 H 64 . [3, 4] Sažetak se kod SHA-224 dobiva na isti na čin samo se kao po četne vrijednosti varijabli

A0 , B0 ,C0 , D0 , E0 , F0 ,G0 , H 0 uzimaju vrijednosti koje slijede [4]: A = C1059 ED 8 B = 367 CD 507 C = 3070 DD 17 D = F70 E5939 0 16 0 16 0 16 0 16 . = = = = E0 FFC 00 B31 16 F0 68581511 16 G0 64 F98 FA 716 H 0 BEFA 4FA 416 Kona čan sažetak dobiva se nadovezivanjem prvih sedam varijabli.

8

Izra čun sažetka pomo ću algoritma SHA-512 vrlo je sli čan izra čunu sažetka algoritmom SHA-256. Razlika je u korištenju 64 bita umjesto 32 bita kod duljine podblokova i svih varijabli. Umjesto 64 koraka provodi se ukupno 80 koraka. Sve po četne vrijednosti se proširuju na 64 bita, a rotacije i pomaci se izvode za drugi broj bitova. [3, 4] Sažetak se kod SHA-384 dobiva korištenjem algoritma SHA-512 uz druga čiju č inicijalizaciju po etnih vrijednosti i nadovezivanjem svih varijabli osim G80 i H 80 . [3, 4]

3.2.2. Napadi na SHA-2

Proširenjem duljine sažetka poruke proširuje se i ukupan prostor stanja za pretraživanje. Zato je danas familija algoritama SHA-2 sigurna i nije poznat niti jedan napad kolizijom na potpunih 64, odnosno 80 koraka algoritma SHA-2. Trenutno najbolji poznati napad kolizijom proveden je na 24 koraka. Usprkos svojoj trenutnoj sigurnosti ovaj algoritam spada u klasu potencijalno nesigurnih algoritama u budu ćnosti pa je NIST raspisao natje čaj za novi algoritam SHA-3. [5]

9

4. Natje čaj za SHA-3

4.1. Tijek natje čaja za SHA-3

Natje čaj je objavljen 2.11.2007. godine. Svi kandidati trebali su predati svoje prijave do 31.10.2008. godine. [7]

4.1.1. Osnovni zahtjevi za prijavu na natje čaj Prijava se mora sastojati od pet komponenata. [7] 1. Prednja stranica. Ona mora sadržavati ime prijavljenog algoritma, podatke o prijavitelju, ime izumitelja algoritma i potpis prijavitelja. 2. Specifikacija algoritma i popratna dokumentacija. Specifikacija algoritma mora se sastojati od opisa svi matemati čkih operacija, jednadžbi, tablica, dijagrama i parametara korištenih prilikom ostvarenja algoritma. Uz to je potrebno opisati teorijsku podlogu samog algoritma, preliminarnu analizu napada na sigurnost algoritma, procijeniti efikasnost izvršavanja algoritma te memorijske, sklopovske i programske zahtjeve. Obavezno je potrebno opisati korištene tehnike testiranja i navesti dobivene rezultate. Detaljno treba opisati prednosti i ograni čenja algoritma na ostvarenje u razli čitim okruženjima. 3. Opti čki medij. On mora sadržavati sve elektroni čke podatke vezane uz algoritam. Najvažniji dio je samo ostvarenje algoritma koje mora biti pisano po ANSI C normi uz obavezne komentare. Tako ñer, važnija je jasno ća pisanja od efikasnosti algoritma. Potrebno je napraviti dvije verzije algoritma, jednu za 32- bitnu platformu, a drugu za 64-bitnu platformu. 4. Izjava o intelektualnom vlasništvu. Ona mora postojati kako bi se smanjila pitanja oko intelektualnog vlasništva nad algoritmom. Izjavu moraju napisati i potpisati vlasnik patenta i vlasnik referentnog i optimiziranog ostvarenja. 5. Op ći zahtjevi prijave. Sve pristigle prijave koje budu proglašene kompletnima moraju zadovoljiti tri osnovna zahtjeva. [7] 1. Algoritam mora biti otvoren javnosti i svjetski dostupan bez pla ćanja naknade ili ograni čenja intelektualnog vlasništva. 2. Algoritam mora biti modularan, tj. mora se mo ći ostvariti u širokom rasponu sklopovskih i programskih platformi. 3. Algoritam mora podržavati veli čine sažetka poruke od 224, 256, 384 i 512 bitova, te duljinu poruke od maksimalno 2 64 -1 bitova. Algoritam može sadržavati dodatno i druge veli čine sažetka i poruke.

4.1.2. Kriteriji ocjenjivanja Ocjenjiva čki tim činit će zaposlenici NIST-a. Svi rezultati i odluke tima biti će dostupne javnosti preko internetske stranice. Osim toga, tim će uzeti u obzir sve javne ocjene i analize kandidatskih algoritama (bile one pozitivnog ili negativnog ishoda). Nakon objave algoritama omogu ćiti će se javna rasprava pa će tim prilikom ocjenjivanja uzeti u obzir i sve komentare koji će se nalaziti u odgovoru na objavu. [7] Algoritmi će biti ocjenjivani prema tri čimbenika. [7]

10

1. Sigurnost je najvažniji čimbenik u ocjenjivanju. Algoritmi će se me ñusobno uspore ñivati prema sigurnosti koja može biti dana u razli čitim kriptografskim aplikacijama, poput digitalnog potpisa, autentifikacijskih kodova poruka, itd. Nadalje, NIST zahtijeva da svaki algoritam ima jednu konstrukciju koja podržava HMAC (engl. Hash Message Autentification Code ), PRF (engl. Pseudo Random Function ) i slu čajno generiranje sažetka (engl. randomized hashing ). Svaki algoritam mora biti otporan na: i. napade kolizijom (engl. collision attack ) od otprilike n 2/ bitova; ii. napad izra čunavanjem originala (engl. preimage attack ) od otprilike n bitova; iii. napad izra čunavanjem poruke koja daje isti sažetak (engl. 2-nd preimage attack ) od otprilike n − k bitova za svaku poruku kra ću od 2k bita; iv. napad produljenjem poruke (engl. length-extension attack ). Osim ovih napada, uzet će se u obzir i svi napadi otkriveni tijekom procesa ocjenjivanja, odnosno natje čaja. 2. Cijena je drugi važan čimbenik koji će se uzeti u obzir kod ocjenjivanja algoritama. Prvenstveno će se ocjenjivati ra čunalna efikasnost. Efikasnost će se ocjenjivati obzirom na programsko i na sklopovsko ostvarenje, s time što će se u prvom krugu detaljnije analizirati programsko ostvarenje, a u drugom sklopovsko. Ra čunalna efikasnost se u osnovici zasniva na brzini algoritma, pa će se brzina testirati izvo ñenjem algoritama na razli čitim platformama i generiranjem sažetaka razli čite duljine. Druga stvar koja ulazi u cijenu su memorijski zahtjevi. 3. Karakteristike i ostvarenje samog algoritma zadnja su stavka po kojoj će se ocjenjivati algoritmi. Ocjenjivat će se fleksibilnost i jednostavnost algoritma. Prednost će dobiti oni algoritmi koji koriste promjenjive parametre, koji se mogu izvoditi na više platformi i koji se mogu paralelizirati.

4.1.3. Krugovi natje čaja Prvi krug natje čaja zapo čeo je 1. studenog 2008. godine, odmah nakon zadnjeg dana za slanje algoritama. NIST je sveukupno primio 64 prijave za natje čaj od kojih je odabrano njih 51 koji su zadovoljavali minimalne zahtjeve za prijavu. Ukupno 13 algoritama nije prošlo u prvi krug natje čaja, no NIST nigdje javno nije objavio koji su to algoritmi i zašto su odbijeni. Samo je pet algoritama javno objavilo svoju dokumentaciju (Tablica 4.1). [8]

Tablica 4.1. Popis poznatih odbijenih algoritama

HASH 2x NKS 2D Maraca Ponic ZK-

Imena algoritama koji su ušli u prvi krug natje čaja objavljena su 9. prosinca 2008. godine. Popis svih algoritama koji su ušli u prvi krug dan je u Tablici 4.2. [9]

11

Tablica 4.2. Popis svih kandidata u prvom krugu natje čaja

Abacus CRUNCH ESSENCE Lesamnta Sgàil Tangle

ARIRANG CubeHash FSB Luffa Shabal TIB3

AURORA DCH Fugue LUX SHAMATA Twister

BLAKE Dynamic SHA Gröstl MCSSHA-3 SHAvite-3 Vortex

Blender Dynamic SHA2 Hamsi MD6 SIMD WaMM

BMW ECHO JH MeshHash Waterfall

BOOLE ECOH Keccak NaSHA Spectral Hash

Cheetah EDON-R Khichidi-1 SANDstorm StreamHash

CHI EnRUPT LANE Sarmal SWIFFTX

Prva konferencija održana je u Leuvenu u Belgiji u periodu od 22. do 25. velja če 2009. godine. Na ovoj konferenciji svi su kandidati prezentirali svoje algoritme javnosti. Tijekom prvog kruga natje čaja deset algoritama se povuklo s natje čaja jer su objavljeni uspješni napadi na njih (Tablica 4.3-crveno). Dodatno, iz objavljenih analiza i rasprava otkrilo se da je kod 16 algoritama prona ñena potencijalna slabost (Tablica 4.3-naran často). [9, 10]

Tablica 4.3. Klasifikacija kandidata

Abacus CRUNCH ESSENCE Lesamnta Sgàil Tangle

ARIRANG CubeHash FSB Luffa Shabal TIB3

AURORA DCH Fugue LUX SHAMATA Twister

BLAKE Dynamic SHA Gröstl MCSSHA-3 SHAvite-3 Vortex

Blender Dynamic SHA2 Hamsi MD6 SIMD WaMM

BMW ECHO JH MeshHash Skein Waterfall

BOOLE ECOH Keccak NaSHA Spectral Hash

Cheetah EDON-R Khichidi-1 SANDstorm StreamHash

CHI EnRUPT LANE Sarmal SWIFFTX

Na osnovi vlastitih analiza, javnih komentara i svih drugih dostupnih informacija NIST je 24. srpnja 2009. godine objavio 14 kandidata koji su ušli u drugi krug natje čaja. Preostali algoritmi koji nisu ušli u drugi krug natje čaja imaju nedostatke u samom dizajnu ili probleme s performansama (Tablica 4.3-žuto). Popis svih algoritama koji su ušli u drugi

12 krug natje čaja dan je u Tablici 4.4. [11]

Tablica 4.4. Popis svih kandidata u drugom krugu natje čaja

BLAKE ECHO Hamsi Luffa SIMD

BMW Fugue JH Shabal Skein

CubeHash Gröstl Keccak SHAvite-3

Druga konferencija održana je u Santa Barbari u Kaliforniji od 23. do 24. kolovoza 2010. godine. Na ovoj konferenciji detaljno se prezentirani kandidati koji su ušli u drugi krug natje čaja. Od ovih 14 algoritama NIST je 9. prosinca 2010. godine odabrao pet algoritama koji su ušli u tre ći, finalni krug natje čaja. Popis algoritama koji su ušli u tre ći krug natje čaja daj je u Tablici 4.5. [12]

Tablica 4.5. Popis svih kandidata u tre ćem krugu natje čaja

BLAKE Gröstl JH Keccak Skein

Tre ća konferencija održati će se u prolje ću 2012. godine, a objava pobjednika planira se nakon konferencije.

4.2. Kandidati drugog kruga natje čaja

Za svaki algoritam koji je ušao u drugi krug natje čaja mogu će je promatrati najvažnije karakteristike u njegovom ostvarenju. Popis i opis naj češ će korištenih karakteristika dan je u nastavku. [13] 1. Feistelova mreža (engl. Feistel Network ) – Predstavlja metodu transformiranja neke proizvoljne funkcije pomo ću permutacije. Postoje dva na čina transformiranja. Prvi na čin je balansirani kod kojeg se unutarnje stanje dijeli na lijevi i desni dio jednake duljine. Drugi na čin je nebalansirani kod kojeg se unutarnje stanje dijeli na proizvoljan broj dijelova proizvoljne duljine. 2. Dizajn široke proto čnosti (engl. Wide Pipe design ) – Predstavlja karakteristiku kod koje je unutarnje stanje funkcije za izra čunavanje sažetka poruke je dulje od samog sažetka poruke. 3. Prošireni klju č (engl. Schedule ) – Predstavlja karakteristiku kod koje funkcija za izra čunavanje sažetka poruke ima eksplicitni prošireni klju č ili algoritam za proširenje poruke. 4. MDS (engl. Maximum Distance Separable ) matrica – Predstavlja metodu koja koristi jednu ili više MDS matrica kao sastavni dio funkcije kompresije. 5. Transformacija izlaza (engl. Output Transformation ) – Predstavlja funkciju sa završnim transformacijom koja veže ulaz s dobivenim sažetkom. 6. Supstitucijska tablica (engl. S-box ) – Predstavlja upotrebu jedne ili više supstitucijskih tablica. 7. Pomo ćni registar s povratnom petljom (engl. Feedback Shift Register ) – Predstavlja upotrebu registra koji se koristi kako bi se sljede ći podaci

13

pomaknuli za odre ñen broj bitova na temelju trenutnih podataka. 8. Dodatna rotacija i XOR operacija – Predstavlja upotrebu dodatnih rotacija i XOR operacija s ciljem smanjenja linearnosti. 9. Logi čki operatori – Predstavlja upotrebu osnovnih logi čkih operatora u funkciji kompresije. U Tablici 4.5. za svaki algoritam koji je ušao u drugi krug dan je popis korištenih karakteristika u njihovom ostvarenju. U tablici su karakteristike pobrojane redom kojim su opisivane. Za Feistelovu mrežu korištene su dvije oznake, "N" za nebalansirani na čin i "B" za balansirani na čin. Kod MDS matrice dodatno su popisane sve veli čine korištenih matrica u bajtovima. Kod supstitucijske tablice dodatno je nazna čen broj bitova ulaza ( N ) i broj bitova izlaza ( M ) kao NxM. Kod rotacije i operacije XOR korištene su dvije oznake, "R" za upotrebu rotacije i "X" za upotrebu XOR operacije. Kod logi čkih operatora u zadnjem stupcu dan je popis konkretnih korištenih operatora. U ostalim stupcima korištene su dvije oznake, "X" ako je karakteristika implementirana i "-" ako karakteristika nije implementirana. [10, 13]

Tablica 4.6. Lista karakteristika za algoritme prvog kruga natje čaja

Algoritam FN WPD KS MDS OT S-box FSR R&XOR BOOL

Blake N - X - - - - R -

BMW - X X - - - - R & X -

CubeHash ------R & X -

ECHO - X - 4x4 - 8x8 - - -

Fugue - X - 4x4 X 8x8 - - -

Gröstl - X - 8x8 X 8x8 - - -

Hamsi - - X - - 4x4 - - -

JH B X - 1.5x1.5 - 4x4 - X -

Keccak - X ------Λ, ¬

Luffa - - - - X 4x4 - - -

Shabal - - X - - - X - Λ, ¬

SHAvite-3 B - X 4x4 - 8x8 X - -

SIMD N X X - - - - - Λ, V, ¬

Skein B X X - X - - R & X -

14

5. Algoritam BLAKE

BLAKE je trenutno jedan od algoritama koji je ušao u drugi krug natje čaja i kod kojeg nije na ñena niti jedna slabost u sigurnosti. Autori ovog algoritma su Jean-Philippe Aumasson, Luca Henzen, Willi Meier i Raphael C.-W. Phan. [14]

5.1. Osnovne karakteristike algoritma

BLAKE je familija funkcija od kojih se svaka funkcija odnosi na jednu duljinu sažetka poruke. Sažetak poruke može biti duljine 224, 256, 384 i 512 bita pa u skladu s time postoje četiri funkcije za izra čunavanje sažetka poruke, BLAKE-28, BLAKE-32, BLAKE-48 i BLAKE-64 prikazane u Tablici 5.1. U skladu sa SHA-2 familijom funkcija, BLAKE koristi algoritme BLAKE-32 i BLAKE-64 za dobivanje preostalih algoritama korištenjem drugih po četnih vrijednost i druga čijeg proširenja ulazne poruke.

Tablica 5.1. Karakteristike algoritma BLAKE (veli čine u bitovima) [15]

Algoritam Veli čina poruke Veli čina Duljina sažetka Duljina salta bloka

BLAKE-28 <2 64 512 224 128

BLAKE-32 <2 64 512 256 128

BLAKE-48 <2 128 1024 384 256

BLAKE-64 <2 128 1024 512 256

Ova familija funkcija karakteristi čna je po tome što koristi iste parametre kao i SHA-2 familija funkcija. Nadalje, podržava izra čun sažetka sa saltom . Ta metoda čini generiranje sažetka poruke još više slu čajnim i onemogu ćava nekoliko tipova generi čkih napada. je neki slu čajno odabrani broj koji se mora odrediti prije po četka same funkcije za izra čunavanje sažetka. Ukoliko se koristi dodaje se svakom bloku poruke. Ako se ne koristi on je jednak nuli. Prednosti ovog algoritma su jednostavnost, brzina, korištenje salta , mogu ćnost paralelizacije i prilagodljivost okruženju.

5.1.1. Notacija i korištene operacije

Osnovna jedinka algoritma je rije č. Rije č je 32-bitni niz kod funkcija BLAKE-28 i BLAKE- 32, odnosno 64-bitni niz kod funkcija BLAKE-48 i BLAKE-64. Ako je p niz bitova, on predstavlja niz od i rije či, gdje p i ozna čava i -tu rije č, odnosno p = p 0 || p1 || p 2 || ... .

Ako je m poruka, ona predstavlja niz od ukupno N blokova mi , odnosno = 0 1 2 N −1 č i č č m m m m ... m . Svaki blok sastoji se od 16 rije i pa m j ozna ava j -tu rije i -tog bloka poruke m .

15

Inicijalna vrijednost ozna čava se s IV . Vrijednost sažetka nakon svakog koraka naziva se ulan čana vrijednost. Tablica 5.2 predstavlja osnovne korištene operacije.

Tablica 5.2. Oznake korištenih operacija [15]

Oznaka Zna čenje

← dodjela vrijednosti varijabli

+ zbrajanje po modulu 2 32 (2 64 )

⊕ XOR

>>> k rotacija za k bitova prema manje zna čajnom bitu

<<< k rotacija za k bitova prema više zna čajnom bitu

5.1.2. Osnovna struktura algoritma

Cijelo izra čunavanje sažetka poruke pomo ću familije funkcija BLAKE može se podijeliti u tri osnovna koraka: 1. proširenje ulaznog teksta, 2. izra čun funkcije kompresije, 3. finalizacija. Proširenje ulaznog teksta sastoji se u dodavanju duljine poruke na kraj same poruke. Tako ñer, proširenjem se osigurava da se proširena poruka može podijeliti na blokove duljine 512 bita kod BLAKE-28 i BLAKE-32, te 1024 bita kod BLAKE-48 i BLAKE-64. Za svaki blok poruke iz prethodnog koraka izra čunava se jedna funkcija kompresije. Izra čun funkcije kompresije temelji se na iteracijskom postupku HAIFA. Taj postupak karakteristi čan je po tome što funkcija kompresije ovisi o saltu i broja ču koji predstavlja dosadašnji broj sažetih bitova poruke. Osnovna struktura funkcije kompresije prikazana je na Slici 5.1., a temelji se na dizajnu široke protočnosti na lokalnoj razini (engl. local wide- pipe ).

Slika 5.1. Osnovna struktura funkcije kompresije algoritma BLAKE [15]

16

Ovaj dizajn dijeli funkciju kompresije na tri dijela: 1. inicijalizacija, 2. izra čunavanje rundi, 3. finalizacija. Ulan čano stanje iz prethodnog koraka mijenja se unutar inicijalizacije pomo ću salta i broja ča. Slijede runde koje koriste poruku iz koje je potrebno izra čunati sažetak. Nakon izra čunavanja rundi, sljede ća ulan čana vrijednost dobiva se kompresijom korištenjem po četne ulan čane vrijednosti i salta . Nakon izra čunavanja funkcije kompresije za sve blokove ulazne poruke dobiva se sažetak kod algoritama BLAKE-32 i BLAKE-64. Za dobivanje sažetka kod algoritama BLAKE-28 i BLAKE-48 potrebno je izvršiti finalizaciju, odnosno odbacivanje nepotrebnih bitova. Op ćenito, sažetak proširene poruke m dobiva se kako slijedi [15]:

h0 ← IV for i = 0,...,N-1 hi+1 ← compress(h i, m i, s, l i) return h N

Na po četku se kao po četno stanje sažetka postavlja inicijalizacijski vektor. Za svaki od ukupno N blokova i po četne poruke m izra čunava se nova ulan čana vrijednost sažetka + hi 1 pozivom funkcije kompresije. Funkcija kompresije prima kao ulaz četiri vrijednosti [15]: č = 1. trenutnu ulan anu vrijednost, h h0 ,..., h7 , = 2. trenutni blok poruke, m m0 ,..., m15 , = 3. salt s s0 ,..., s3 , č = 4. broja t t0 ,t1 . Salt bira korisnik, a ukoliko se ne koristi postavlja se na nulu. Broja č t se odre ñuje pomo ću broja bitova originalne poruke. Ako je l broj bitova originalne poruke, onda l i predstavlja broj bitova originalne poruke u m 0 m1m 2 ... mi . Na primjer, ako je originalna poruka veli čine 600 bita, tada proširena poruka kod BLAKE-32 ima dva bloka od 512 bita. U ovom je slu čaju l 0 = 512 , l1 = 600 . Ako je originalna poruka veli čine 1020 bita, tada proširena poruka ima tri bloka od 512 bita. U ovom je slu čaju l 0 = 512 , l1 = 1020 , l 2 = 0 . Broja č poprima vrijednost l i . Kao izlaz funkcija kompresije daje novu ulan čanu vrijednost ' = ' ' č N č h h0 ,..., h7 . Kona no, h je dobiveni sažetak po etne poruke m koja se sastoji od N blokova. [15]

5.2. Postupak ra čunanja sažetka algoritmom BLAKE-32

Funkcija za izra čunavanje sažetka poruke BLAKE-32 koristi 32-bitne rije či i kao rezultat vra ća sažetak duljine 32 bajta (256 bita). Ulan čane vrijednosti su veli čine 256 bita, blokovi ulazne poruke 512 bita, salt 128 bita i broja č 64 bita.

17

5.2.1. Proširenje ulaznog teksta

Ulazna poruka m duljine l < 264 se na po četku proširuje tako da je njena duljina kongruentna sa 447 modulo 512. Proširenje se izvršava dodavanjem bita 1 nakon same poruke, nakon kojeg slijedi potreban broje nula. Nakon toga se ponovno dodaje bit 1, nakon kojeg slijedi 64-bitna reprezentacija duljine poruke. Cjelokupno proširenje ulazne poruke može se prikazati kao m ← m || 1000 ... 0001 l . Ovakvo proširenje poruke 64 osigurava da je duljina proširene poruke višekratnik broja 512. [15] − Proširena poruka se na po četku dijeli na 512-bitne blokove rije či m 0 m1m 2 ... m N 1 . Svaki blok sastoji se od 16 rije či veli čine 32 bita. Za svaki blok mi poziva se funkcija kompresije.

5.2.2. Izra čun funkcije kompresije

Funkcija kompresije sastoji se od dva dijela, inicijalizacije po četnih vrijednosti za trenutni blok i izra čuna rundi. 1. Inicijalizacija po četnih vrijednosti za trenutni blok poruke Ukoliko se izra čunava sažetak za prvi blok poruke m 0 , po četna vrijednost sažetka = ć h h0 ,..., h7 postavlja se na inicijalnu vrijednost pomo u inicijalizacijskog vektora IV . Vrijednost inicijalizacijskog vektora algoritma BLAKE-32 jednaka je vrijednosti inicijalizacijskog vektora kod algoritma SHA-256 [15]: IV = 6A09 E667 IV = BB 67 AE 85 IV = 3C6EF 372 IV = A54 FF 53 A 0 16 1 16 2 16 3 16 . = = = = IV 4 510 E527 F16 IV 5 9B05688 C16 IV 6 1F83 D9AB 16 IV 7 5BE 0CD 19 16 ć = Za svaki sljede i korak nova vrijednost sažetka h h0 ,..., h7 jednaka je dobivenoj ' = ' ' vrijednosti sažetka iz prethodnog koraka h h0 ,..., h7 . Stanje v je unutarnje stanje koje se koristi za izra čun samog sažetka. Veli čina unutarnjeg stanja dvostruko je ve ća od željenog sažetka i jednaka je duljini jednog bloka poruke, odnosno sastoji se od 16 rije či od 32 bita. Unutarnje stanje prikazuje se matricom veli čine 4x4. Po četna vrijednost postavlja se kako slijedi [15]:  v v v v   h h h h   0 1 2 3   0 1 2 3   v v v v   h h h h  4 5 6 7 ← 4 5 6 7 .  v v v v   s ⊕ c s ⊕ c s ⊕ c s ⊕ c   8 9 10 11   0 0 1 1 2 2 3 3     ⊕ ⊕ ⊕ ⊕  v12 v13 v14 v15   t0 c4 t0 c5 t1 c6 t1 c7  BLAKE-32 koristi 16 konstanti c [15]: = = = = c0 243 F6A88 16 c1 85 A308 D316 c2 13198 A2E16 c3 03707344 16 c = A4093822 c = 299 F31 D0 c = 082 EFA 98 c = EC 4E6C89 4 16 5 16 6 16 7 16 . = = = = c8 452821 E616 c9 38 D01377 16 c10 BE 5466 CF 16 c11 34 E90 C6C16 = = = = c12 C0AC 29 B716 c13 C97 C50 DD 16 c14 3F84 D5B516 c15 B5470917 16 2. Izra čunavanje rundi Nakon postavljanja po četne vrijednosti stanja v , funkcija kompresije mijenja to stanje kroz deset rundi r . Jedna runda predstavlja jednu transformaciju stanja v kroz osam poziva

18 funkcije Gi (a,b,c, d) kako slijedi [15]: G (v ,v ,v ,v ) G (v ,v ,v ,v ) G (v ,v ,v ,v ) G (v ,v ,v ,v ) 0 0 4 8 12 1 1 5 9 13 2 2 6 10 14 3 3 7 11 15 . G4 (v0 ,v5 ,v10 ,v15 ) G5 (v1 ,v6 ,v11 ,v12 ) G6 (v2 ,v7 ,v8 ,v13 ) G7 (v3 ,v4 ,v9 ,v14 ) č č Prva etiri poziva funkcije Gi mogu se izra unavati paralelno jer svaki poziv izvršava promjene nad razli čitim stupcima matrice v kao što je prikazano na Slici 5.2. Zbog toga č č č č se izra un prve etiri funkcije naziva još i stup asti korak. Druga etiri poziva funkcije Gi mogu se tako ñer izra čunavati paralelno jer svaki poziv izvršava promjene nad razli čitim dijagonalama matrice v kao što je prikazano na Slici 5.2. Ovaj se izračun naziva dijagonalni korak. [15]

č Slika 5.2. Stup asti i dijagonalni korak funkcije Gi [15]

Funkcija Gi (a,b,c, d) ovisi o trenutnoj rundi r i postavlja vrijednosti a,b,c, d kako slijedi [15]:

a ← a + b + (mσ ⊕ cσ + ) r 2( i) r 2( i )1 d ← (d ⊕ a) >>> 16 c ← c + d b ← (b ⊕ c) >>> 12 . a ← a + b + (mσ + ⊕ cσ ) r 2( i )1 r 2( i) d ← (d ⊕ a) >>> 8 c ← c + d b ← (b ⊕ c) >>> 7

Shematski prikaz funkcije Gi dan je na Slici 5.3.

19

Slika 5.3. Shematski prikaz funkcije Gi [15]

BLAKE-32 koristi 10 permutacija σ brojeva od 0 do 15 koje su dane u Tablici 5.3. Permutacije se koriste prilikom izbora rije či koja se upotrebljava iz bloka poruke = = č m m0 ,..., m15 i prilikom izbora konstante c c0 ,..., c15 prilikom izra una parametra a .

Tablica 5.3. Permutacije brojeva od 0 do 15 korištene u BLAKE algoritmu [15]

σ 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 σ 1 14 10 4 8 9 15 13 6 1 12 0 2 11 7 5 3 σ 2 11 8 12 0 5 2 15 13 10 14 3 6 7 1 9 4 σ 3 7 9 3 1 13 12 11 14 2 6 5 10 4 0 15 8 σ 4 9 0 5 7 2 4 10 15 14 1 11 12 6 8 3 13 σ 5 2 12 6 10 0 11 8 3 4 13 7 5 15 14 1 9 σ 6 12 5 1 15 14 13 4 10 0 7 6 3 9 2 8 11 σ 7 13 11 7 14 12 1 3 9 5 0 15 4 8 6 2 10 σ 8 6 15 14 9 11 3 0 8 12 2 13 7 1 4 10 5 σ 9 10 2 8 4 7 6 1 5 15 11 9 14 3 12 13 0 č č ' = ' ' Nakon 10 rundi izra unava se nova ulan ana vrijednost h h0 ,..., h7 iz stanja v0 ,..., v15 ć č = = pomo u ulazne ulan ane vrijednosti h h0 ,..., h7 i salta s s0 ,..., s3 kako slijedi [15]: ' ← ⊕ ⊕ ⊕ h0 h0 s0 v0 v8 ' ← ⊕ ⊕ ⊕ h1 h1 s1 v1 v9 ' ← ⊕ ⊕ ⊕ h2 h2 s2 v2 v10 h ' ← h ⊕ s ⊕ v ⊕ v 3 3 3 3 11 . ' ← ⊕ ⊕ ⊕ h4 h4 s0 v4 v12 ' ← ⊕ ⊕ ⊕ h5 h5 s1 v5 v13 ' ← ⊕ ⊕ ⊕ h6 h6 s2 v6 v14 ' ← ⊕ ⊕ ⊕ h7 h7 s3 v7 v15

20

č ' = ' ' Dobivena vrijednost predstavlja novu ulan anu vrijednost h h0 ,..., h7 duljine 256 bita ukoliko se kao trenutni blok ulazne poruke koristio bilo koji blok osim zadnjeg bloka. N −1 N = N N Ukoliko se koristio zadnji blok ulazne poruke m dobivena je vrijednost h h0 ,..., h7 i ona predstavlja kona čni sažetak poruke m . [15]

5.3. Postupak ra čunanja sažetka algoritmom BLAKE-64

Funkcija za izra čunavanje sažetka poruke BLAKE-64 koristi 64-bitne rije či i kao rezultat vra ća sažetak duljine 64 bajta (512 bita). Sve veli čine varijabli jednake su dvostrukoj vrijednosti varijabli iz algoritma BLAKE-32. Ulan čane vrijednosti su veli čine 512 bita, blokovi ulazne poruke 1024 bita, salt 256 bita i broja č 128 bita.

5.3.1. Proširenje ulaznog teksta

Ulazna poruka m duljine l < 264 se na po četku proširuje tako da je njena duljina kongruentna s 895 modulo 1024. Proširenje se izvršava dodavanjem bita 1 nakon same poruke, nakon kojeg slijedi potreban broje nula. Nakon toga se ponovno dodaje bit 1, nakon kojeg slijedi 128-bitna reprezentacija duljine poruke. Cjelokupno proširenje ulazne poruke može se prikazati kao m ← m || 1000 ... 0001 l . Ovakvo proširenje poruke 128 osigurava da je duljina proširene poruke višekratnik broja 1024. [15] − Proširena poruka na po četku se dijeli na 1024-bitne blokove rije či m 0 m1m 2 ... m N 1 . Svaki blok sastoji se od 16 rije či veli čine 64 bita. Za svaki blok mi poziva se funkcija kompresije.

5.3.2. Izra čun funkcije kompresije

Funkcija kompresije sastoji se od dva dijela, inicijalizacije po četnih vrijednosti za trenutni blok i izra čuna rundi. 1. Inicijalizacija po četnih vrijednosti za trenutni blok poruke Ukoliko se izra čunava sažetak za prvi blok poruke m 0 , po četna vrijednost sažetka = ć h h0 ,..., h7 postavlja se na inicijalnu vrijednost pomo u inicijalizacijskog vektora IV . Vrijednost inicijalizacijskog vektora algoritma BLAKE-64 jednaka je vrijednosti inicijalizacijskog vektora kod algoritma SHA-512 [15]: = = IV 0 6A09 E667 F3BCC 908 16 IV 1 BB 67 AE 8584 CAA 73 B16 IV = 3C6EF 372 FE 94 F82 B IV = A54 FF 53 A5F1D36 F1 2 16 3 16 . = = IV 4 510 E527 FADE 682 D116 IV 5 9B05688 C2B3E6C1F16 = = IV 6 1F83 D9ABFB 41 BD 6B16 IV 7 5BE 0CD 19137 E2179 16 ć = Za svaki sljede i korak nova vrijednost sažetka h h0 ,..., h7 jednaka je dobivenoj ' = ' ' vrijednosti sažetka iz prethodnog koraka h h0 ,..., h7 . Po četna vrijednost stanja v jednaka je vrijednosti kod algoritma BLAKE-32. BLAKE-64 koristi 16 konstanti c [15]:

21

= = = c0 243 F6A8885 A308 D316 c1 13198 A2E03707344 16 c2 A4093822299 F31 D016 = = = c3 082 EFA 98 EC 4E6C89 16 c4 452821 E638 D01377 16 c5 BE 5466 CF 34 E90 C6C16 = = = c6 C0AC 29 B7C97 C50 DD 16 c7 3F84 D5B5B5470917 16 c8 9216 D5D98979 FB 1B16 = = = c9 D1310 BA 698 DFB 5AC 16 c10 2FFD 72 DBD 01 ADFB 716 c11 B8E1AFED 6A267 E96 16 = = = c12 BA 7C9045 F12 C7F99 16 c13 24 A19947 B3916 CF 716 c14 0801 F2E2858 EFC 16 16 = c15 636920 D871574 E69 16

2. Izra čunavanje rundi Nakon postavljanja po četne vrijednosti stanja v , funkcija kompresije mijenja to stanje kroz 14 rundi r . Jedna runda predstavlja jednu transformaciju stanja v kroz osam poziva funkcije Gi (a,b,c, d) kao i kod algoritma BLAKE-32.

Funkcija Gi (a,b,c, d) ovisi o trenutnoj rundi r i postavlja vrijednosti a,b,c, d kako slijedi [15]:

a ← a + b + (mσ ⊕ cσ + ) r 2( i) r 2( i )1 d ← (d ⊕ a) >>> 32 c ← c + d b ← (b ⊕ c) >>> 25 . a ← a + b + (mσ + ⊕ cσ ) r 2( i )1 r 2( i) d ← (d ⊕ a) >>> 16 c ← c + d b ← (b ⊕ c) >>> 11

Jedina razlika s algoritmom BLAKE-32 je u broju bitova kod rotacije. Za runde r > 9 č ć σ permutacija se ra una pomo u modula 10, odnosno r mod 10 . BLAKE-64 koristi iste permutacije kao i BLAKE-32 (Tablica 5.3.). [15]

č č ' = ' ' Nakon 14 rundi izra unava se nova ulan ana vrijednost h h0 ,..., h7 iz stanja v0 ,..., v15 ć č = = č pomo u ulazne ulan ane vrijednosti h h0 ,..., h7 i salta s s0 ,..., s3 na isti na in kao i kod algoritma BLAKE-32. [15]

5.4. Postupak ra čunanja sažetka algoritmom BLAKE-28

Funkcija za izra čunavanje sažetka poruke BLAKE-28 koristi identi čne vrijednosti vrijednostima algoritma BLAKE-32. Jedina je razlika u duljini kona čnog sažetka koji iznosi 28 bajta (224 bita).

5.4.1. Proširenje ulaznog teksta

Ulazna poruka m duljine l < 264 se proširuje na isti na čin kao i poruka kod algoritma BLAKE-32. Jedina je razlika u tome što se bit koji prethodi duljini poruke postavlja na nulu, a ne na jedan kao kod algoritma BLAKE-32. Cjelokupno proširenje ulazne poruke može se prikazati kao m ← m || 1000 ... 0000 l . [15] 64

22

5.4.2. Izra čun funkcije kompresije

Funkcija kompresije sastoji se od tri dijela, inicijalizacije po četnih vrijednosti za trenutni blok, izra čuna rundi i odbacivanja bitova. 1. Inicijalizacija po četnih vrijednosti za trenutni blok poruke Vrijednost inicijalizacijskog vektora za BLAKE-24 jednaka je vrijednosti inicijalizacijskog vektora kod algoritma SHA-224 [15]: IV = 6A09 E667 IV = BB 67 AE 85 IV = 3C6EF 372 IV = A54 FF 53 A 0 16 1 16 2 16 3 16 . = = = = IV 4 510 E527 F16 IV 5 9B05688 C16 IV 6 1F83 D9AB 16 IV 7 5BE 0CD 19 16 Sve ostale vrijednosti odre ñuju se na identi čan na čin kao i kod algoritma BLAKE-32. 2. Izra čunavanje rundi Ovaj korak identi čan je koraku algoritma BLAKE-32. 3. Odbacivanje bitova

č č N = N N Nakon izra una kona nog sažetka h h0 ,..., h7 ulazne poruke m odbacuje se zadnja č N N = N N rije h7 kako bi se dobio 224-bitni sažetak, odnosno sažetak poruke je h h0 ,..., h6 . [15]

5.5. Postupak ra čunanja sažetka algoritmom BLAKE-48

Funkcija za izra čunavanje sažetka poruke BLAKE-48 koristi identi čne vrijednosti vrijednostima algoritma BLAKE-64. Jedina je razlika u duljini kona čnog sažetka koji iznosi 48 bajta (384 bita).

5.5.1. Proširenje ulaznog teksta

Ulazna poruka m duljine l < 264 se proširuje na isti na čin kao i poruka kod algoritma BLAKE-64. Jedina je razlika u tome što se bit koji prethodi duljini poruke postavlja na nulu, a ne na jedan kao kod algoritma BLAKE-64. Cjelokupno proširenje ulazne poruke može se prikazati kao m ← m || 1000 ... 0000 l . [15] 128

5.5.2. Izra čun funkcije kompresije

Funkcija kompresije sastoji se od tri dijela, inicijalizacije po četnih vrijednosti za trenutni blok, izra čuna rundi i odbacivanja bitova. 1. Inicijalizacija po četnih vrijednosti za trenutni blok poruke Vrijednost inicijalizacijskog vektora za BLAKE-44 jednaka je vrijednosti inicijalizacijskog vektora kod algoritma SHA-384 [15]: = = IV 0 CBBB 9D5DC 1059 ED 816 IV 1 629 A292 A367 CD 507 16 IV = 9159015 A3070 DD 17 IV = 152 FECD 8F70 E5939 2 16 3 16 . = = IV 4 67332667 FFC 00 B31 16 IV 5 8EB 44 A8768581511 16 = = IV 6 DB 0C2E0D64 F98 FA 716 IV 7 47 B5481 DBEFA 4FA 416 Sve ostale vrijednosti odre ñuju se na identi čan na čin kao i kod algoritma BLAKE-64.

23

2. Izra čunavanje rundi Ovaj korak identi čan je koraku algoritma BLAKE-64. 3. Odbacivanje bitova

č č N = N N Nakon izra una kona nog sažetka h h0 ,..., h7 ulazne poruke m odbacuju se zadnje č N N dvije rije i h6 i h7 kako bi se dobio 384-bitni sažetak, odnosno sažetak poruke je N = N N h h0 ,..., h5 . [15]

24

6. Algoritam Shabal

Shabal je trenutno jedan od algoritama drugog kruga natje čaja. Algoritam je nastao u sklopu projekta SAPHIR (engl. Security and Analysis of Hash Primitives ) francuske agencije ANR (franc. Agence Nationale de la Recherche ). [16]

6.1. Osnovne karakteristike algoritma

Shabal je familija funkcija od kojih se svaka funkcija odnosi na jednu duljinu sažetka poruke. Sažetak poruke može biti duljine 192, 224, 256, 384 i 512 bita pa u skladu s time postoji pet funkcija za izra čunavanje sažetka poruke, Shabal-192, Shabal-224, Shabal- 256, Shabal-384 i Shabal-512. [17] Ova familija funkcija karakteristi čna je po izrazitoj jednostavnosti izra čuna sažetka. Prednosti ovog algoritma su brzina, mogu ćnost paralelizacije i prilagodljivost okruženju.

6.1.1. Notacija i korištene operacije

Osnovna jedinka algoritma je rije č. Rije č je 32-bitni niz kod svih funkcija algoritma Shabal. č Duljina sažetka ozna ava se s lh i može poprimati ukupno pet vrijednosti, odnosno ∈{ } lh 192 ,224 ,256 ,348 ,512 . [17] Tablica 6.1. predstavlja osnovne korištene operacije.

Tablica 6.1. Oznake korištenih operacija

Oznaka Zna čenje

← dodjela vrijednosti varijabli

⊕ XOR

∧ AND

x komplement od x

x <<< j rotacija x za j bitova u lijevo

+ zbrajanje po modulu 2 32

- oduzimanje po modulu 2 32

6.1.2. Osnovna struktura algoritma

Cijelo izra čunavanje sažetka poruke pomo ću familije funkcija Shabal može se podijeliti u tri osnovna koraka: 1. proširenje ulaznog teksta, 2. izra čun rundi, 3. finalizacija.

25

Proširenje ulaznog teksta sastoji se u dodavanju bitova na kraj same poruke. Proširenjem poruke osigurava se da je duljina poruke višekratnik broja 512. Nakon proširenja, poruka se dijeli na 512-bitne blokove. Za svaki blok poruke iz prethodnog koraka izra čunava se po jedna runda. Runda ovisi o trenutnom bloku poruke i broja ču do sada korištenih blokova poruke prilikom izra čuna sažetka. Nakon izra čunavanja rundi za sve blokove ulazne poruke izvršavaju se tri dodatne runde koje koriste završni blok poruke te se dobiva sažetak. Ovisno o željenoj duljini sažetka provodi se odbacivanje bitova. Op ćenito, sažetak proširene poruke M dobiva se kako slijedi [17]:

(A, B, C, W) ← (A 0, B 0, C 0, 1) for i = 0,...,N-1

(A, B, C) ← P(A, B, C, M i, i) for j = 0,..,2

(A, B, C) ← P(A, B, C, M N-1)

return C

Na po četku se kao po četno stanje postavlja inicijalizacijski vektor. Za svaki od ukupno N blokova i po četne poruke M izra čunavaju se nove vrijednosti pomo ćnih spremnika. Nakon toga se ra čunaju tri završne runde te se kao sažetak vra ća sadržaj pomo ćnog spremnika C kojem su se prethodno oduzeli nepotrebni bitovi.

6.2. Postupak ra čunanja sažetka algoritmom Shabal-256

Funkcija za izra čunavanje sažetka poruke Shabal-256 koristi 32-bitne rije či i kao rezultat vra ća sažetak duljine 256 bita.

6.2.1. Proširenje ulaznog teksta

< 73 č Ulazna poruka M duljine lh 2 se na po etku proširuje tako da je duljina proširene poruke višekratnik broja 512. Proširenje se izvršava dodavanjem bita 1 nakon same poruke, nakon kojeg slijedi potreban broje nula da se poruka dopuni do prvog punog bloka. Ukoliko je duljina poruke prije proširenja višekratnik broja 512, dodaje se novi blok. Cjelokupno proširenje ulazne poruke može se prikazati kao M ← M || 1000 ... 000 . [17] č č Proširena poruka na po etku se dijeli na 512-bitne blokove rije i M 1M 2 ... M k . Svaki blok sastoji se od 16 rije či veli čine 32 bita. Za svaki blok zove se po jedna runda.

6.2.2. Izra čun rundi pomo ću poruke

Izra čun rundi pomo ću poruke sastoji se od dva dijela, inicijalizacije po četnih vrijednosti za trenutni blok i samog izra čuna rundi. Postupak izra čuna rundi prikazan je na Slici 6.1.

26

Slika 6.1. Izra čunavanje rundi kod funkcije Shabal-256 [17]

1. Inicijalizacija po četnih vrijednosti za trenutni blok poruke Za izra čun sažetka Shabal koristi unutarnje stanje koje se sastoji od ukupno tri niza 32- bitnih rije či A , B i C . Nizovi B i C sastoje se od 16 rije či, odnosno veli čina tih nizova je 512 bita. Veli čina niza A odre ñuje se iz izraza 32 r , gdje je r prilagodljivi sigurnosni parametar. Predložena vrijednost ovog parametra za algoritam Shabal je 12, pa se niz A sastoji od ukupno 12 rije či, odnosno njegova veli čina iznosi 384 bita. [17] č Ukoliko se izra unava sažetak za prvi blok poruke M 1 , vrijednosti unutarnjih stanja A , B i C postavljaju se na inicijalnu vrijednost. Vrijednost inicijalizacijskih vektora A0 , B0 ,

C0 za Shabal-256 su [17]:

A0 : 52F84552 16 E54B7999 16 2D8EE3EC 16 B9645191 16 E0078B86 16 BB7C44C9 16

D2B5C1CA 16 B0D2EB8C 16 14CE5A45 16 22AF50DC 16 EFFDBC6B 16 EB21B74A 16

B0 : B555C6EE 16 3E710596 16 A72A652F 16 9301515F 16 DA28C1FA 16 696FD868 16

9CB6BF72 16 0AFE4002 16 A6E03615 16 5138C1D4 16 BE216306 16 B38B8890 16

3EA8B96B 16 3299ACE4 16 30924DD4 16 55CB34A5 16

C0 : B405F031 16 C4233EBA 16 B3733979 16 C0DD9D55 16 C51C28AE 16 A327B8E1 16

56C56167 16 ED614433 16 88B59D60 16 60E2CEBA 16 758B4B8B 16 83E82A7F 16

BC968828 16 E6E00BF7 16 BA839E55 16 9B491C60 16

Dodatna varijabla koja se koristi priliko ra čunanja sažetka je 64-bitni broja č W koji broji blokove ulazne poruke. Po četna vrijednost ove varijable postavlja se na jedan i pove ćava za jedan nakon procesiranja jednog bloka ulazne poruke, odnosno izra čuna runde. 2. Izra čunavanje rundi Nakon postavljanja po četnih vrijednosti unutarnjih stanja A , B i C , izra čunavaju se runde. Runda kao ulaz prima ukupno tri vrijednosti [17]: 1. unutarnja stanja A , B i C , 2. broja č blokova W ,

3. blok ulazne poruke M ω . Kao izlaz vra ćaju se izmijenjena unutarnja stanja A , B i C , koja služe kao ulaz u sljede ću rundu. Svaka runda mijenja unutarnja stanja kroz set instrukcija kako slijedi [17]:

27

B ← B + M ω A[][][]0 ← A 0 ⊕W 0 A[][][]1 ← A1 ⊕W 1 ()()← A, B PMω ,C A, B

C ← C − M ω ()()B,C ← C, B Na po četku se ulazni blok poruke dodaje unutarnjem stanju B . Nakon toga se izvršava operacija XOR izme ñu broja ča W i prve dvije rije či unutarnjeg stanja A . Slijedi poziv funkcije permutacije P koja mijenja stanja A i B pomo ću stanja C i ulaznog bloka poruke M ω . Nakon izra čuna funkcije permutacije, od unutarnjeg stanja C oduzima se trenutni blok poruke M ω . Na kraju se zamjenjuju unutarnja stanja B i C . Funkcija permutacije P mijenja unutarnja stanja A i B . Na po četku funkcije svaka rije č unutarnjeg stanja B rotira se u lijevo za 17 bita odnosno B[i] ← B[i] <<< 17 . Nakon toga sijede tri kruga koja mijenjaju rije či unutarnjih stanja A i B . Broj krugova odre ñen je sigurnosnim parametrom p . Svaki krug sastoji se od 16 koraka (po jedan korak za svaku rije č unutarnjeg stanja). Shematski prikaz jednog koraka prikazan je na Slici 6.2.

Slika 6.2. Struktura funkcije permutacije algoritma Shabal [17]

Ako je s oznakom j prikazan trenutni krug, a s oznakom i trenutni korak unutar kruga j , u tom slu čaju mijenja se (i +16 j mod r) -ta rije č unutarnje vrijednosti A i i -ta rije č vrijednosti B . Kao što je ve ć re čeno, parametar r je sigurnosni parametar i postavljen je na 12. Prvo se izra čunava novo stanje stanja A kako slijedi [17]:

28

A[i +16 j mod r] ← U (A[i +16 j mod r]⊕V (A[i −1+16 j mod r] <<< 15 )⊕ C[8 − i mod 16 ]) ⊕ []+ B i o1 mod 16 ⊕ ()[][]+ ∧ + B i o2 mod 16 B i o3 mod 16 ⊕ M []i gdje su U i V nelinearne funkcije koje izvršavaju množenje po modulu 2 32 . Funkcija U definirana je kao U : x → 3× x mod 232 , a funkcija V kao V : x → 5× x mod 232 . č ñ Vrijednosti oi predstavljaju pomake, ije su vrijednosti unaprijed odre ene kao ( ) = ( ) č č o1 ,o2 ,o3 13 6,9, . Nakon izra una unutarnje vrijednosti A , izra unava se vrijednost B kako slijedi [17]: B[i] ← (B[i] <<< 1)⊕ A[i +16 j mod r]. Nakon završetka tri kruga, funkcija permutacije izvršava završnu petlju u kojoj se svakoj rije či unutarnje vrijednosti A dodaje jedna rije č iz vrijednosti C kako slijedi [17]: A[i mod r] ← A[ j mod r]+ C[ j + 3mod 16 ].

Cijeli postupak izra čuna rundi završava nakon zadnjeg bloka ulazne poruke M ω . Unutarnje vrijednosti A , B i C se nakon toga šalju na izra čun finalizacije.

6.2.3. Finalizacija

Postupak finalizacije sastoji se od tri runde kao što je prikazano na Slici 6.3. Runde se izvode na isti na čin kao i runde za blokove ulazne poruke uz dvije izmjene. Parametri W i

M ω poprimaju fiksnu vrijednost za sve tri runde. Vrijednosti se postavljaju na vrijednosti koje su korištene prilikom izra čuna zadnje runde u prethodnom koraku. Broja č se postavlja na ukupan broj blokova W = k , a kao ulazni blok poruke koristi se zadnji = blok M ω M k .

Slika 6.3. Izra čunavanje finalizacije kod algoritma Shabal [17]

Nakon izra čuna ove tri runde dobivaju se završne unutarnje vrijednosti A , B i C . Vrijednosti A i B se zanemaruju dok se iz vrijednosti C izra čunava sažetak poruke č č [ − ] [ ] odbacivanjem bitova. Sažetak poruke ine rije i od C 16 lh 32/ do C 15 , odnosno za Shabal-256 od C[8] do C[15 ]. [17]

29

6.3. Postupak ra čunanja sažetka algoritmom Shabal-512

Funkcija za izra čunavanje sažetka poruke Shabal-512 koristi 32-bitne rije či i kao rezultat vra ća sažetak duljine 512 bita. Sam postupak izra čuna sažetka jednak je postupku izra čuna sažetka za funkciju Shabal-256, uz dvije razlike. Prva razlika su druga čije vrijednosti inicijalizacijskih vektora A0 , B0 , C0 . Inicijalizacijski vektori za Shabal-512 su [17]:

A0 : 20728DFD 16 46C0BD53 16 E782B699 16 55304632 16 71B4EF90 16 0EA9E82C 16

DBB930F1 16 FAD06B8B 16 BE0CAE40 16 8BD14410 16 76D2ADAC 16 28ACAB7F 16

B0 : C1099CB7 16 07B385F3 16 E7442C26 16 CC8AD640 16 EB6F56C7 16 1EA81AA9 16

73B9D314 16 1DE85D08 16 48910A5A 16 893B22DB 16 C5A0DF44 16 BBC4324E 16

72D2F240 16 75941D99 16 6D8BDE82 16 A1A7502B 16

C0 : D9BF68D1 16 58BAD750 16 56028CB2 16 8134F359 16 B5D469D8 16 941A8CC2 16

418B2A6E 16 04052780 16 7F07D787 16 5194358F 16 3C60D665 16 BE97D79A 16

950C3434 16 AED9A06D 16 2537DC8D 16 7CDB5969 16

Druga razlika je kod odbacivanja bitova prilikom izdvajanja sažetka iz unutarnje vrijednosti č č [ − ] [ ] č C . Kako sažetak poruke ine rije i od C 16 lh 32/ do C 15 , za Shabal-512 to zna i da sažetak predstavlja cijela unutarnja vrijednost C . [17]

6.4. Postupak ra čunanja sažetka algoritmom Shabal-224

Funkcija za izra čunavanje sažetka poruke Shabal-224 koristi 32-bitne rije či i kao rezultat vra ća sažetak duljine 224 bita. Sam postupak izra čuna sažetka jednak je postupku izra čuna sažetka za funkciju Shabal-256, uz dvije razlike. Prva razlika su druga čije vrijednosti inicijalizacijskih vektora A0 , B0 , C0 . Inicijalizacijski vektori za Shabal-224 su [17]:

A0 : A5201467 16 A9B8D94A 16 D4CED997 16 68379D7B 16 A7FC73BA 16 F1A2546B 16

606782BF 16 E0BCFD0F 16 2F25374E 16 069A149F 16 5E2DFF25 16 FAECF061 16

B0 : EC9905D8 16 F21850CF 16 C0A746C8 16 21DAD498 16 35156EEB 16 088C97F2 16

26303E40 16 8A2D4FB5 16 FEEE44B6 16 8A1E9573 16 7B81111A 16 CBC139F0 16

A3513861 16 1D2C362E 16 918C580E 16 B58E1B9C 16

C0 : E4B573A1 16 4C1A0880 16 1E907C51 16 04807EFD 16 3AD8CDE5 16 16B21302 16

02512C53 16 2204CB18 16 99405F2D 16 E5B648A1 16 70AB1D43 16 A10C25C2 16

16F1AC05 16 38BBEB56 16 9B01DC60 16 B1096D83 16

Druga razlika je kod odbacivanja bitova prilikom izdvajanja sažetka iz unutarnje vrijednosti č č [ − ] [ ] č C . Kako sažetak poruke ine rije i od C 16 lh 32/ do C 15 , za Shabal-224 to zna i da se za sažetak uzimaju rije či od C[9] do C[15 ]. [17]

30

6.5. Postupak ra čunanja sažetka algoritmom Shabal-384

Funkcija za izra čunavanje sažetka poruke Shabal-384 koristi 32-bitne rije či i kao rezultat vra ća sažetak duljine 384 bita. Sam postupak izra čuna sažetka jednak je postupku izra čuna sažetka za funkciju Shabal-256, uz dvije razlike. Prva razlika su druga čije vrijednosti inicijalizacijskih vektora A0 , B0 , C0 . Inicijalizacijski vektori za Shabal-384 su [17]:

A0 : C8FCA331 16 E55C504E 16 003EBF26 16 BB6B8D83 16 7B0448C1 16 41B82789 16

0A7C9601 16 8D659CFF 16 B6E2673E 16 CA54C77B 16 1460FD7E 16 3FCB8F2D 16

B0 : 527291FC 16 2A16455F 16 78E627E5 16 944F169F 16 1CA6F016 16 A854EA25 16

8DB98ABE 16 F2C62641 16 30117DCB 16 CF5C4309 16 93711A25 16 F9F671B8 16

B01D2116 16 333F4B89 16 B285D165 16 86829B36 16

C0 : F764B11A 16 76172146 16 CEF6934D 16 C6D28399 16 FE095F61 16 5E6018B4 16

5048ECF5 16 51353261 16 6E6E36DC 16 63130DAD 16 A9C69BD6 16 1E90EA0C 16

7C35073B 16 28D95E6D 16 AA340E0D 16 CB3DEE70 16

Druga razlika je kod odbacivanja bitova prilikom izdvajanja sažetka iz unutarnje vrijednosti č č [ − ] [ ] č C . Kako sažetak poruke ine rije i od C 16 lh 32/ do C 15 , za Shabal-384 to zna i da se za sažetak uzimaju rije či od C[4] do C[15 ]. [17]

31

7. Algoritam SIMD

SIMD je jedan od algoritama koji je ušao u drugi krug natje čaja. Autori ovog algoritma su Gaëtan Leurent, Charles Bouillaguet i Pierre-Alain Fouque. [18]

7.1. Osnovne karakteristike algoritma

SIMD je familija funkcija od kojih se svaka funkcija odnosi na jednu duljinu sažetka poruke n . Ova familija funkcija temelji se na dvije funkcije SIMD-256 i SIMD-512. Osnovne karakteristike ovih funkcija dane su u Tablici 7.1. Duljina sažetka poruke može se izabrati proizvoljno. Ukoliko je željena duljina sažetka n ≤ 256 funkcija SIMD- n dobiva se pomo ću funkcije SIMD-256. Ukoliko je željena duljina sažetka 256 < n ≤ 512 funkcija SIMD- n dobiva se pomo ću funkcije SIMD-512. [19]

Tablica 7.1. Karakteristike algoritma SIMD (veli čine u bitovima) [19]

Algoritam Duljina sažetka Veli čina Veli čina unutarnjeg bloka stanja

SIMD-256 256 512 512

SIMD-512 512 1024 1024

Ova familija funkcija karakteristi čna je po specifi čnom na činu proširenja ulaznog teksta. Naime, ve ćina napada temelji se na pretpostavci da se umjesto promjene bitova proširene poruke može na vrlo jednostavan na čin izvršiti promjena bitova nad originalnom porukom. Zbog dodatne transformacije proširene poruke ovaj algoritam je nešto kompliciraniji i brzinski zahtjevniji od preostalih algoritama.

7.1.1. Notacija i korištene operacije

č i Sve matrice koje se koriste prilikom ra unanja algoritma obilježavaju se s Aj , gdje je A oznaka matrice, i ozna čava redak matrice, a j stupac matrice.

Sve operacije ovog algoritma izvode se u polju F257 . Kako je broj 257 prost broj, krug Ζ č 257 koji se sastoji od cjelobrojnih brojeva modulo 257 ini polje F257 . Sve operacije koje se koriste u ovom algoritmu provode se po modulu 257. [19] č č Unutar polja F257 definirana je numeri ka transformacija veli ine n , NTT n (engl. Number- Theoretic Transform ) kao [19]:

n−1 − − ()x n 1 → ()y n 1 : y = x ω ij (mod 257 ) , j j=0 i i=0 i ∑ j j=0 ≤ ω č gdje je n 256 , a je n -ti lan polja F257 . Ova transformacija jednaka je Fourierovoj transformaciji samo što se izvršava nad nizom cjelobrojnih brojeva, umjesto nad nizom kompleksnih brojeva. Tablica 7.2. predstavlja osnovne korištene operacije.

32

Tablica 7.2. Oznake korištenih operacija

Oznaka Zna čenje

← dodjela vrijednosti varijabli

+ zbrajanje po modulu 2 32

× množenje po modulu 2 16

∨ OR

∧ AND

¬ NOT

⊕ XOR

<<< x s rotacija rije či x u lijevo za s bitova

Uz te operacije, dodatno su definirane dvije operacije nad bitovima 32-bitnih rije či prikazane pomo ću boolean funkcija [19]: IF (A, B,C) = (A ∧ B)∨ (¬A ∧ C) . MAJ ()()()()A, B,C = A ∧ B ∨ A ∧ C ∨ B ∧ C

7.1.2. Osnovna struktura algoritma

Cijelo izra čunavanje sažetka poruke pomo ću familije funkcija SIMD prikazano je na Slici 7.1. i može se podijeliti u tri osnovna koraka: 1. proširenje ulaznog teksta, 2. izra čun funkcije kompresije, 3. finalizacija.

Slika 7.1. Izra čunavanje sažetka algoritmom SIMD [19]

Proširenje ulaznog teksta sastoji se u dodavanju novog bloka poruci koji sadrži duljinu same poruke. Prethodni blok se dopunjava nulama. Proširenjem se osigurava da se proširena poruka može podijeliti na blokove duljine 512 bita kod algoritma SIMD-256, te 1024 bita kod algoritma SIMD-512. Za svaki blok poruke iz prethodnog koraka, osim zadnjeg bloka koji sadrži duljinu poruke,

33 izra čunava se jedna funkcija kompresije C . Izra čun funkcije kompresije temelji se na Davies-Meyerovom postupku. Taj postupak karakteristi čan je po tome što se funkcija = ⊕ kompresije gradi iz blokovske šifre E izrazom C(h, m) Em (h) h , gdje h predstavlja unutarnje stanje. Prilikom izgradnje funkcije kompresije napravljene su dvije modifikacije Davies-Meyerovog postupka. Modificirani postupak dijeli funkciju kompresije na tri dijela kao što je prikazano na Slici 7.2.: 1. inicijalizacija, 2. izra čunavanje blokovske šifre, 3. finalizacija.

Slika 7.2. Izra čunavanje sažetka algoritmom SIMD [19]

Inicijalizacija predstavlja prvu modifikaciju i sastoji se u dodavanju bloka poruke unutarnjem stanju dobivenom u prethodnom koraku, odnosno h ⊕ m . Nakon toga se izvodi blokovska šifra E nad blokom podataka iz prethodnog koraka korištenjem bloka ⊕ ñ poruke, odnosno Em (h m) . Druga modifikacija sastoji se u provo enju dodatnih Felstelovih rundi umjesto provo ñenja obi čne XOR funkcije izme ñu dobivenog izraza nakon izvršavanja blokovske šifre i unutarnjeg stanja iz prethodnog koraka. Ovaj korak čini finalizaciju i sastoji se u izra čunu funkcije P koja kao ulaz prima unutarnje stanje iz = ⊕ prethodnog koraka. Funkcija kompresije definira se kao C P(h, Em (h m)) . [19] Nakon izra čunavanja funkcije kompresije za sve blokove ulazne poruke, provodi se finalizacija. Finalizacija se sastoji u izra čunavanju funkcije kompresije C' za završni blok poruke koji sadrži duljinu ulazne poruke i ra čunanju sažetka iz zadnjeg unutarnjeg stanja pomo ću odbacivanja bitova funkcijom T . [19]

7.2. Postupak ra čunanja sažetka algoritmom SIMD-256

Funkcija za izra čunavanje sažetka poruke SIMD-256 koristi 32-bitne rije či i kao rezultat vra ća sažetak duljine 32 bajta (256 bita). Blokovi ulazne poruke su veli čine 512 bita.

7.2.1. Proširenje ulaznog teksta

Ulazna poruka m duljine l < 264 se na po četku proširuje tako da ju je mogu će podijeliti na 512-bitne blokove. Nakon što se poruka podijeli na 512-bitne blokove, ukoliko zadnji blok ne sadrži 512 bita, njemu se dodaje potreban broj nula na kraj. Nakon toga se dodaje novi blok koji sadrži duljinu ulazne poruke. [19]

34

Nad ovako proširenom ulaznom porukom provode se tri sloja promjena: 1. numeri čka transformacija (NTT); 2. nadovezivanje; 3. permutacija. 1. Numeri čka transformacija (NTT) ć Osnovna ideja ovog koraka je prikaz poruke pomo u polinoma P stupnja 63 u polju F257 i č č evaluacija polinoma kroz 128 to aka polja F257 korištenjem numeri ke transformacije. Da bi se izbjegla linearnost, prilikom predstavljanja poruke polinomom, polinomu se na kraj dodaje konstanta X 127 . Numeri čka transformacija definirana je kako slijedi [19]:

63 63 → 127 = α ij + α 127 i (x j ) j=0 (yi )i=0 : yi ∑ x j (mod 257 ) , j=0 α = č gdje je 139 , i predstavlja 128. vor polja F257 . Dobivene vrijednosti nakon transformacije nalaze se u rasponu od 0 do 255. Prilikom izra čuna numeri čke transformacije za završni blok ulazne poruke dodaje se još jedna konstanta X 125 , odnosno transformacija za zadnji blok se definira kao:

63 63 → 127 = α ij + α 127 i + α 125 i (x j ) j=0 (yi )i=0 : yi ∑ x j (mod 257 ) . [19] j=0 Ovim postupkom se iz 64 bajtnog bloka podataka dobiva blok s 128 cjelobrojnih vrijednosti. Primjer 1.

Neka je blok poruke jednak nulama, odnosno: M [0...... 7] = 00 00 00 00 00 00 00 00 M []8.... 15 = 00 00 00 00 00 00 00 00 M []16 ... 23 = 00 00 00 00 00 00 00 00 M []24 ... 31 = 00 00 00 00 00 00 00 00

M []32 ... 39 = 00 00 00 00 00 00 00 00 M []40 ... 47 = 00 00 00 00 00 00 00 00 M []48 ... 55 = 00 00 00 00 00 00 00 00 M []56 ... 63 = 00 00 00 00 00 00 00 00 Pretpostavlja se da se radi o zadnjem bloku ulazne poruke. Potrebno je izra čunati numeri čku transformaciju bloka poruke. Kako se radi o zadnjem bloku poruke potrebno je izra čunati

63 63 → 127 = α ij + α 127 i + α 125 i α = (x j ) j=0 (yi )i=0 : yi ∑ x j (mod 257 ) , uz 139 . j=0 č = = Vrijednosti varijabli x0 ... x63 iš itavaju se iz zadanog ulaznog bloka poruke ( x0 M 0 0 , itd.). Za i = 0 vrijedi:

35

63 = 0⋅ j + 127 ⋅0 + 125 ⋅0 = + + = y0 ∑ x j 139 139 139 (mod 257 ) 0 1 1 2 j=0 Za i = 1 vrijedi:

63 = 1⋅ j + 127 ⋅1 + 125 ⋅1 = + 127 + 125 = + = y1 ∑ x j 139 139 139 (mod 257 ) 0 139 mod 257 139 mod 257 98 58 156 j=0 Postupak je identi čan za preostale korake i = 2,... 127 . 2. Nadovezivanje Nakon numeri čke transformacije dobivaju se cjelobrojni brojevi koji nisu prikladni za daljnji izra čun. Zbog toga se provode tri koraka kako bi se dobilo polje veli čine 4096 bita. Prvi korak sastoji se u podizanju svih cjelobrojnih vrijednosti x iz skupa {0,..., 257 } u skup {−128 ,..., 128 }. Dobivene vrijednosti ozna čavaju se pomo ću ~x . Ova operacija ne mijenja brojeve iz skupa {0,..., 128 }. Ako je broj ve ći od 128, njega se transformira u broj iz skupa {−128 ,..., −1} tako da mu se oduzme broj 257. [19] Drugi korak sastoji se u dobivanju 16-bitnih vrijednosti pomo ću enkodiranja. Enkodiranje se provodi pomo ću unutarnjeg koda → . Taj kod sastoji se od modularnog I : F257 Z 216 množenja svake vrijednosti s konstantom C . Konstanta C izabrana je tako da daje minimalnu Hammingovu udaljenost od 4 bita. Postoje četiri takva broja 185, 233 i njihove suprotnosti. Za enkodiranje se u ovom slu čaju koriste dvije konstante C = 185 i C = 233 , odnosno dvije funkcije [19]: → → × ~ I : F Z 16 x 185 x(mod 257 ) 185 257 2 . I : F → Z x → 233 × ~x(mod 257 ) 233 257 216 Polje koje se dobije nakon prvog koraka se udvostručuje. Prvo polje se modularno množi s 185, a drugo s 233. Time se dobiva ukupno 256 vrijednosti veli čine 16 bita. Tre ći korak sastoji se u nadovezivanju 16-bitnih vrijednosti u 32-bitne radi lakšeg ra čunanja. Ovim postupkom dobiva se ukupno 128 vrijednosti veli čine 32 bita. Ukoliko se č č č donjih 16 bita u 32-bitnoj rije i ozna i s I C (x) , a gornjih 16 bita s I C (y) , 32-bitna rije se č = + 16 ozna ava kao I C (x, y) I C (x) 2 I C (y) . Ove vrijednosti spremaju se u 32x4 matrici rije či. Za 0 ≤ j ≤ 3 matrica se popunjava kako slijedi [19]: I (y[8i + 2 j], y[8i + 2 j +1]) za 0 ≤ i ≤ 15  185 (i) = [][]+ − + − ≤ ≤ Z j I 233 (y 8i 2 j 128 , y 8i 2 j 64 ) za 16 i 23  [][]+ − + − ≤ ≤ I 233 (y 8i 2 j 191 , y 8i 2 j 127 ) za 24 i 31 3. Permutacija Nakon nadovezivanja varijabli dobiva se matrica Z veli čine 32x4. Zadnji sloj koji se provodi nakon proširenja poruke sastoji se od permutacije redaka matrice Z . Time se (i) = (P(i)) dobiva nova matrica W . Nova matrica se definira kao: W j Z j . Permutacije P i)( dane su u Tablici 7.3. [19]

36

Tablica 7.3. Permutacije korištene u algoritmu SIMD-256 kod proširenja poruke [19]

i 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

P i)( 4 6 0 2 7 5 3 1 15 11 12 8 9 13 10 14

i 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

P i)( 17 18 23 20 22 21 16 19 30 24 25 31 27 29 28 26

Proširena poruka na po četku se dijeli na 512-bitne blokove rije či. Svaki blok sastoji se od 16 rije či veli čine 32 bita i može se prikazati pomo ću matrice veli čine 4x4. Za svaki blok osim zadnjeg poziva se funkcija kompresije.

7.2.2. Izra čun funkcije kompresije

Funkcija kompresije sastoji se od dva dijela, inicijalizacije po četnih vrijednosti za trenutni blok i izra čuna rundi. 1. Inicijalizacija po četnih vrijednosti za trenutni blok poruke č č Stanje S256 je unutarnje stanje koje se koristi za izra un samog sažetka. Veli ina unutarnjeg stanja dvostruko je ve ća od željenog sažetka i jednaka je duljini jednog bloka poruke, odnosno sastoji se od 16 rije či od 32 bita. Unutarnje stanje prikazuje se matricom veli čine 4x4 [19]:

A0 B0 C0 D0    A B C D S =  1 1 1 1  . 256 A B C D   2 2 2 2  A3 B3 C3 D3  Po četne vrijednosti ove matrice odre ñene su inicijalizacijskim vektorom kako slijedi [19]:

A ..0 3 4D567983 16 07190BA9 16 8474577B 16 39D726E9 16 B AAF3D925 3EE20B03 AFD5E751 C96006D3 ..0 3 16 16 16 16 C ..0 3 C2C2BA14 16 49B3BCB4 16 F67CAF46 16 668626C9 16

D ..0 3 E2EAA8D2 16 1FF47833 16 D0C661A5 16 55693DE1 16 Za svaki sljede ći korak nova vrijednost matrice jednaka je dobivenoj vrijednosti matrice iz prethodnog koraka. 2. Izra čunavanje blokovske šifre č Nakon postavljanja po etne vrijednosti stanja S256 , funkcija kompresije mijenja to stanje pomo ću Feistelove rešetke. Cijeli postupak provodi se kroz ukupno četiri runde. Jedna runda sastoji se od osam koraka. Svaki korak sastoji se od poziva funkcije Step koja predstavlja jedan korak Feistelove rešetke. Ta funkcija mijenja stanja matrice S256 kao je prikazano na Slici 7.3. i dano sljede ćim izrazima [19]:

37

<<< (i ) <<< (i ) (i) = ( (i− )1 + (i) + φ (i) ( (i− )1 (i− )1 (i− )1 )) s + (i− )1 r Aj D j W j A j , B j ,C j Ap(i ) ( j) <<< (i ) (i) = (i− )1 r B j A j (i) = (i− )1 C j B j (i) = (i− )1 D j C j

Slika 7.3. Korak jedne Feistelove rešetke [19]

SIMD-256 koristi četiri paralelne Feistelove rešetke koje su u interakciji zbog permutacije p (i) . U svakom koraku izra čunavaju se vrijednosti sve četiri rešetke i šalju se kao ulaz u sljede ći korak kako je prikazano na Slici 7.4. Preciznije jedan korak je [19]:   A0 B0 C0 D0  W0        A B C D W  Step  1 1 1 1 ,  1 ,φ,r, s, p =       A2 B2 C2 D2 W2       A3 B3 C3 D3  W3   ()+ + φ() <<< s + <<< r <<< r  D W A , B ,C A )0( A B C  0 0 0 0 0 p 0 0 0  ()+ + φ() <<< s + <<< r <<< r  D1 W1 A1 , B1 ,C1 Ap )1( A1 B1 C1  ()+ + φ() <<< s + <<< r <<< r  D W A , B ,C A )2( A B C  2 2 2 2 2 p 2 2 2  ()+ + φ() <<< s + <<< r <<< r  D W A , B ,C A )3( A B C  3 3 3 3 3 p 3 3 3  gdje je φ (i) boolean funkcija IF ili MAJ . Izbor funkcije ovisi o trenutnom koraku. Za prva četiri koraka u svakoj rundi poziva se funkcija IF , a za druga četiri koraka u svakoj rundi poziva se funkcija MAJ .

38

Slika 7.4. Nekoliko koraka Feistelove rešetke [19]

38

Varijable r i s predstavljaju broj bitova za rotaciju. Njihova vrijednost ovisi o trenutnoj rundi i koraku, kako slijedi [19]:

i r (i) s (i) π π 0 0 1 π π π π π π 1 1 2 runda 0 1 2 3 π π 2 2 3 0 3 23 17 27 π π 3 3 0 1 28 19 22 7 π π 4 0 1 2 29 9 15 5 π π 5 1 2 3 4 13 10 25 π π 6 2 3 π π 7 3 0

Za SIMD-256 definirane su sljede će permutacije p [19]:

j 0 1 2 3 p )0( ( j) 1 0 3 2

p )1( ( j) 2 3 0 1 p )2( ( j) 3 2 1 0

Permutacija koja se koristi u koraku i dobiva se pomo ću izraza p (i mod )3 . č Nakon ukupno 4 runde, odnosno 32 koraka dobiva se unutarnja matrica S256 ije se vrijednosti šalju na finalizaciju. [19] 3. Finalizacija Finalizacija se sastoji u izra čunu četiri dodatna koraka. Umjesto ulaznog teksta uvrštava se po četna unutarnja vrijednost, a permutacije se biraju kao da se radi o četvrtoj rundi. Cijeli izra čun proširenja poruke i funkcije kompresije dan je na Slici 7.5.

7.2.3. Finalizacija

Nakon izra čuna funkcije kompresije za sve blokove ulazne poruke osim za zadnji blok, poziva se funkcija kompresije za zadnji blok ulazne poruke. Ovaj blok karakteristi čan je po tome što sadrži samo duljinu poruke. Nakon završne funkcije kompresije dobivaju se č završne vrijednosti unutarnjeg stanja matrice S256 . Iz te se matrice iš itava sažetak č č odbacivanjem suvišnih bitova. Kona an sažetak dobiva se iz rije i A0 , A1 , A2 , A3 , B0 ,

B1 , B2 i B3 . [19]

39

Slika 7.5. Proširenje poruke i izra čun funkcije kompresije za algoritam SIMD-256 [19]

7.3. Postupak ra čunanja sažetka algoritmom SIMD-512

Funkcija za izra čunavanje sažetka poruke SIMD-512 koristi 32-bitne rije či i kao rezultat vra ća sažetak duljine 64 bajta (512 bita). Blokovi ulazne poruke su veli čine 1024 bita.

7.3.1. Proširenje ulaznog teksta

Ulazna poruka m duljine l < 264 se na po četku proširuje tako da ju je mogu će podijeliti na 1024-bitne blokove. Nakon što se poruka podijeli na 1024-bitne blokove, ukoliko zadnji blok ne sadrži 1024 bita, njemu se dodaje potreban broj nula na kraj. Nakon toga se dodaje novi blok koji sadrži duljinu ulazne poruke. [19]

40

Nad ovako proširenom ulaznom porukom provode se tri sloja promjena: 1. numeri čka transformacija (NTT); 2. nadovezivanje; 3. permutacija. 1. Numeri čka transformacija (NTT) Osnovna ideja ovog koraka je prikaz poruke pomo ću polinoma P stupnja 127 u polju č č F257 i evaluacija polinoma kroz 256 to aka polja F257 korištenjem numeri ke transformacije. Da bi se izbjegla linearnost, prilikom predstavljanja poruke polinomom, polinomu se na kraj dodaje konstanta X 255 . Numeri čka transformacija definirana je kako slijedi [19]:

127 127 → 255 = β ij + β 255 i (x j ) j=0 (yi )i=0 : yi ∑ x j (mod 257 ) , j=0 α = č gdje je 41 , i predstavlja 256. vor polja F257 . Dobivene vrijednosti nakon transformacije nalaze se u rasponu od 0 do 255. Prilikom izra čuna numeri čke transformacije za završni blok ulazne poruke dodaje se još jedna konstanta X 253 , odnosno transformacija za zadnji blok se definira kao [19]:

127 127 → 255 = β ij + β 255 i + β 253 i (x j ) j=0 (yi )i=0 : yi ∑ x j (mod 257 ) . j=0 Ovim postupkom se iz 128 bajtnog bloka podataka dobiva blok s 256 cjelobrojnih vrijednosti. 2. Nadovezivanje Prva dva koraka nadovezivanja, podizanje cjelobrojnih brojeva i enkodiranje, u potpunosti su jednaka algoritmu SIMD-256. Tre ći korak sastoji se u nadovezivanju 16-bitnih vrijednosti u 32-bitne radi lakšeg ra čunanja. Ovim postupkom dobiva se ukupno 256 vrijednosti veli čine 32 bita. Ove vrijednosti spremaju se u 32x8 matrici rije či. Za 0 ≤ j ≤ 7 matrica se popunjava kako slijedi [19]: I (y[16 i + 2 j], y[16 i + 2 j + ])1 za 0 ≤ i ≤ 15  185 (i) = [][]+ − + − ≤ ≤ Z j I 233 (y 16 i 2 j 256 , y 16 i 2 j 128 ) za 16 i 23  [][]+ − + − ≤ ≤ I 233 (y 16 i 2 j 383 , y 16 i 2 j 255 ) za 24 i 31 3. Permutacija Ovaj korak identi čan je koraku algoritma SIMD-256. Proširena poruka na po četku se dijeli na 1024-bitne blokove rije či. Svaki blok sastoji se od 32 rije či veli čine 32 bita i može se prikazati pomo ću matrice veli čine 8x4. Za svaki blok osim zadnjeg poziva se funkcija kompresije. [19]

7.3.2. Izra čun funkcije kompresije

Funkcija kompresije sastoji se od dva dijela, inicijalizacije po četnih vrijednosti za trenutni blok i izra čuna rundi.

41

1. Inicijalizacija po četnih vrijednosti za trenutni blok poruke č č Stanje S512 je unutarnje stanje koje se koristi za izra un samog sažetka. Veli ina unutarnjeg stanja dvostruko je ve ća od željenog sažetka i jednaka je duljini jednog bloka poruke, odnosno sastoji se od 32 rije či od 32 bita. Unutarnje stanje prikazuje se matricom veli čine 8x4 [19]:

A0 B0 C0 D0    A1 B1 C1 D1  A B C D   2 2 2 2  A3 B3 C3 D3  S = . 512 A B C D   4 4 4 4  A5 B5 C5 D5  A B C D   6 6 6 6  A7 B7 C7 D7  Po četne vrijednosti ove matrice odre ñene su inicijalizacijskim vektorom kako slijedi [19]:

A ..0 3 0BA16B95 16 72F999AD 16 9FECC2AE 16 BA3264FC 16

A ..4 7 5E894929 16 8E9F30E5 16 2F1DAA37 16 F0F2C558 16

B ..0 3 AC506643 16 A90635A5 16 E25B878B 16 AAB7878F 16 B 88817F7A 0A02892B 559A7550 598F657E ..4 7 16 16 16 16 C ..0 3 7EEF60A1 16 6B70E3E8 16 9C1714D1 16 B958E2A8 16

C ..4 7 AB02675E 16 ED1C014F 16 CD8D65BB 16 FDB7A257 16

D ..0 3 09254899 16 D699C7BC 16 9019B6DC 16 2B9022E4 16

D ..4 7 8FA14956 16 21BF9BD3 16 B94D0943 16 6FFDDC22 16 Za svaki sljede ći korak nova vrijednost matrice jednaka je dobivenoj vrijednosti matrice iz prethodnog koraka. 2. Izra čunavanje blokovske šifre č Nakon postavljanja po etne vrijednosti stanja S512 , funkcija kompresije mijenja to stanje pomo ću Feistelove rešetke. Cijeli postupak provodi se kroz ukupno četiri runde. Jedna runda sastoji se od osam koraka. Svaki korak sastoji se od poziva funkcije Step koja predstavlja jedan korak Feistelove rešetke. Ta funkcija mijenja stanja matrice na isti na čin kao i kod algoritma SIMD-256. Jedina je razlika u tome što SIMD-512 koristi osam paralelnih Feistelovih rešetki koje su u interakciji zbog permutacije p (i) . [19]

42

Jedan korak može se izraziti kako slijedi [19]:   A0 B0 C0 D0  W    0   A B C D     1 1 1 1  W1     A B C D     2 2 2 2 W2       A B C D W3   3 3 3 3    φ = Step  , , ,r, s, p A B C D W4   4 4 4 4       A B C D  W5  5 5 5 5         A B C D W6   6 6 6 6     W  A7 B7 C7 D7   7   <<< ()D +W + φ()A , B ,C s + A<<< r A<<< r B C   0 0 0 0 0 p )0( 0 0 0  ()+ + φ() <<< s + <<< r <<< r  D1 W1 A1 , B1 ,C1 Ap )1( A1 B1 C1  ()+ + φ() <<< s + <<< r <<< r  D W A , B ,C A )2( A B C  2 2 2 2 2 p 2 2 2  ()+ + φ() <<< s + <<< r <<< r  D W A , B ,C A )3( A B C  3 3 3 3 3 p 3 3 3  ()+ + φ() <<< s + <<< r <<< r  D W A , B ,C A )4( A B C  4 4 4 4 4 p 4 4 4  ()+ + φ() <<< s + <<< r <<< r  D5 W5 A5 , B5 ,C5 Ap )5( A5 B5 C5  <<<  ()D +W + φ()A , B ,C s + A<<< r A<<< r B C  6 6 6 6 6 p )6( 6 6 6  ()+ + φ() <<< s + <<< r <<< r  D W A , B ,C A )7( A B C  7 7 7 7 7 p 7 7 7  gdje je φ (i) boolean funkcija IF ili MAJ . Izbor funkcije ovisi o trenutnom koraku. Za prva četiri koraka u svakoj rundi poziva se funkcija IF , a za druga četiri koraka u svakoj rundi poziva se funkcija MAJ . Varijable r i s predstavljaju broj bitova za rotaciju. Njihova vrijednost ovisi o trenutnoj rundi i koraku kao i kod algoritma SIMD-256. Za SIMD-512 definirane su sljede će permutacije p [19]:

j 0 1 2 3 4 5 6 7 p )0( ( j) 1 0 3 2 5 4 7 6 p )1( ( j) 6 7 4 5 2 3 0 1 p )2( ( j) 2 3 0 1 6 7 4 5

p )3( ( j) 3 2 1 0 7 6 5 4 p )4( ( j) 5 4 7 6 1 0 3 2 p )5( ( j) 7 6 5 4 3 2 1 0 p )6( ( j) 4 5 6 7 0 1 2 3

Permutacija koja se koristi u koraku i dobiva se pomo ću izraza p (i mod )7 . [19] č Nakon ukupno 4 runde, odnosno 32 koraka dobiva se unutarnja matrica S512 ije se vrijednosti šalju na finalizaciju. [19] 3. Finalizacija Ovaj korak identi čan je koraku algoritma SIMD-256.

43

7.3.3. Finalizacija

Nakon izra čuna funkcije kompresije za sve blokove ulazne poruke osim za zadnji blok, poziva se funkcija kompresije za zadnji blok ulazne poruke. Nakon završne funkcije kompresije dobivaju se završne vrijednosti unutarnjeg stanja matrice S512 . Iz te se matrice č č č iš itava sažetak odbacivanjem suvišnih bitova. Kona an sažetak dobiva se iz rije i A0 ,

A1 , A2 , A3 , A4 , A5 , A6 , A7 , B0 , B1 , B2 , B3 , B4 , B5 , B6 i B7 . [19]

7.4. Postupak ra čunanja sažetka algoritmom SIMD-224

Funkcija za izra čunavanje sažetka poruke SIMD-224 koristi 32-bitne rije či i kao rezultat vra ća sažetak duljine 28 bajta (224 bita). Blokovi ulazne poruke su veli čine 512 bita. SIMD-224 izvodi se iz algoritma SIMD-256. ñ č Postoje dvije razlike izme u ta dva algoritma, po etne vrijednosti unutarnjeg stanja S256 i finalizacija. Po četne vrijednosti unutarnjeg stanja odre ñene su inicijalizacijskim vektorom kako slijedi [19]:

A ..0 3 33586E9F 16 12FFF033 16 B2D9F64D 16 6F8FEA53 16 B DE943106 2742E439 4FBAB5AC 62B9FF96 ..0 3 16 16 16 16 C ..0 3 22E7B0AF 16 C862B3A8 16 33E00CDC 16 236B86A6 16

D ..0 3 F64AE77C 16 FA373B76 16 7DC1EE5B 16 7FB29CE8 16 Nakon završne funkcije kompresije dobivaju se završne vrijednosti unutarnjeg stanja č č matrice S256 . Iz te se matrice iš itava sažetak odbacivanjem suvišnih bitova. Kona an č sažetak dobiva se iz rije i A0 , A1 , A2 , A3 , B0 , B1 i B2 . [19]

7.5. Postupak ra čunanja sažetka algoritmom SIMD-384

Funkcija za izra čunavanje sažetka poruke SIMD-384 koristi 32-bitne rije či i kao rezultat vra ća sažetak duljine 48 bajta (384 bita). Blokovi ulazne poruke su veli čine 1024 bita. SIMD-384 izvodi se iz algoritma SIMD-512. ñ č Postoje dvije razlike izme u ta dva algoritma, po etne vrijednosti unutarnjeg stanja S512 i finalizacija. Po četne vrijednosti odre ñene su inicijalizacijskim vektorom kako slijedi [19]:

A ..0 3 8A36EEBC 16 94A3BD90 16 D1537B83 16 B25B070B 16

A ..4 7 F463F1B5 16 B6F81E20 16 0055C339 16 B4D144D1 16

B ..0 3 7360CA61 16 18361A03 16 17DCB4B9 16 3414C45A 16 B A699A9d2 E39E9664 468BFE77 51D062F8 ..4 7 16 16 16 16 C ..0 3 B9E3BFE8 16 63BECE2A 16 8FE506B9 16 F8CC4AC2 16

C ..4 7 7AE11542 16 B1AADDA1 16 64B06794 16 28D2F462 16

D ..0 3 E64071EC 16 1DEB91A8 16 8AC8DB23 16 3F782AB5 16

D ..4 7 039B5CB8 16 71DDD962 16 FADE2CEA 16 1416DF71 16

44

Nakon završne funkcije kompresije dobivaju se završne vrijednosti unutarnjeg stanja č č matrice S512 . Iz te se matrice iš itava sažetak odbacivanjem suvišnih bitova. Kona an č sažetak dobiva se iz rije i A1 , A2 , A3 , A4 , A5 , A6 , A7 , B0 , B1 , B2 i B3 . [19]

45

8. Prakti čni rad

U sklopu rada na činjen je programski sustav koji omogu ćuje izra čuna sažetka teksta po volji odabranim algoritmima. Program je izra ñen u Microsoft Visual Studiju 2008 , u objektno orijentiranom programskom jeziku C#. Za izradu su čelja korišten je Microsoft.NET Framework 2.0 . Aplikacija se pokre će u Windows okruženju.

8.1. Upute za upotrebu korisni čkog su čelja

Korisni čko su čelje je samo po sebi intuitivno (Slika 8.1). Za pokretanje aplikacije potrebno je imati instaliran Microsoft .NET Framework 2.0 .

Slika 8.1. Izgled korisni čkog su čelja

Nakon pokretanja aplikacije otvara se grafi čko korisni čko su čelje koje se sastoji od tri kartice. Svaka kartica predstavlja jedan ostvareni algoritam za izra čunavanje sažetka poruke. Struktura kartica je jednaka i može se podijeliti na četiri dijela: Ina čica , Ulazni parametri , Izlazni parametri i Rezultat . 1. Unutar prvog dijela Ina čica omogu ćen je izbor izme ñu ina čice algoritma koja se želi upotrijebiti za izra čun sažetka poruke. Svaki algoritam podržava četiri razli čite ina čice ovisne o željenoj duljini sažetka. 2. Unutar drugog dijela Ulazni parametri omogu ćen je izbor ulaznih parametara potrebnih za izra čun sažetka. Za svaki algoritam potrebno je odabrati datoteku s ulaznim tekstom odabirom gumba Učitaj . Inicijalno je ona postavljena na tekst.txt . Za algoritam BLAKE dodatno je omogu ćena upotreba salta pa se on može u čitati odabirom gumba Učitaj ili nasumi čno generirati odabirom gumba Generiraj . Inicijalno je ta datoteka postavljena ne salt.txt . Trenutno u čitane datoteke mogu se pregledati odabirom gumba Pregledaj .

46

3. Unutar tre ćeg dijela Izlazni parametri o mogu ćen je izbor izlazne datoteke u koju će se spremiti izra čunati sažetak odabirom gumba Učitaj . Inicijalno je ova datoteka postavljena na sazetak.txt . Dodatno je omogu ćen pregled datoteke sa sažetkom ukoliko se odabere gumb Pogledaj . 4. Unutar četvrtog dijela Rezultat prikazuje se dobiveni sažetak i vrijeme potrebno za izra čun sažetka u milisekundama. Gumbom Izra čunaj sažetak pokre će se postupak izra čuna sažetka. Izgled korisni čkog su čelja nakon uspješno izra čunatog sažetka prikazan je na Slici 8.2.

Slika 8.2. Korisni čko su čelje nakon izra čunatog sažetka

8.2. Formati ulaznih i izlaznih datoteka

U okviru rada korištene su tri razli čite vrste datoteka s time da sve datoteke moraju imati .txt ekstenziju. Prva datoteka sadrži informacije iz kojih se želi izra čunati sažetak. Ova datoteka može u sebi sadržavati bilo koju poruku. Druga datoteka koristi se samo kod algoritma BLAKE, a sadrži salt . Ukoliko se unosi proizvoljan salt , osnovni izgled datoteke prikazan je na Slici 8.3. Datoteka u sebi sadrži opis, algoritam koji se primjenjuje, duljinu salta i sam salt . Kako je omogu ćeno nasumi čno generiranje salta , dobiveni salt se automatski sprema u ve ć spomenutom formatu. Tre ća datoteka koja se koristi predstavlja generirani sažetak. Format datoteke s dobivenim sažetkom prikazan je na Slici 8.4. Sli čno datoteci sa saltom , ova datoteka u sebi sadrži opis, korišteni algoritam i sažetak. Prilikom ostvarenja algoritama korišten je gotov projekt libOS2 koji se sastoji od dvije klase. Klasa FormatiZapisaHelper omogu ćuje u čitavanje iz zadane datoteke i spremanje u zadanu datoteku. Klasa je modificirana prema konkretnom problemu pa se sastoji od funkcija za spremanje i u čitavanje salta , te od funkcije za spremanje dobivenog sažetka u datoteku u normaliziranom obliku. Unutar druge klase FormatiZapisa ostvareni su konkretni upisi i čitanja iz datoteka.

47

Slika 8.3. Format ulazne datoteke sa saltom

Slika 8.4.Format izlazne datoteke sa sažetkom

8.3. Programsko ostvarenje algoritama za izra čunavanje sažetka poruke

U okviru rada ostvarena su tri algoritma za izra čunavanje sažetka poruke BLAKE, Shabal i SIMD sa svim njihovim ina čicama. Za svaki algoritam ostvaren je zaseban projekt. Svi projekti (BLAKE, libOS2, Shabal i SIMD) uklju čeni su u završni projekt pod imenom ZavrsniRad koji obuhva ća ostvarenje korisni čkog su čelja. U nastavku slijedi opis ostvarenja svakog pojedinog algoritma i njegovih ina čica.

8.3.1. Algoritam BLAKE

Za svaku ina čicu algoritma BLAKE ostvarena je zasebna klasa. Dijagrami klasa prikazani su na Slici 8.5. Kako su u globalu razlike izme ñu sve četiri klase zaista male, u nastavku je dan detaljan opis klase BLAKE32Engine . Analogan opis vrijedi za preostale tri klase: BLAKE28Engine , BLAKE48Engine i BLAKE64Engine . Primjer izra čuna sažetka za poruke čiji su primjeri dani u službenoj dokumentaciji [15] dan je u Dodatku A-1.

48

Slika 8.5 Dijagrami klasa za ina čice algoritma BLAKE

Unutar klase BLAKE32Engine ostvaren je algoritam BLAKE-32. Struktura koda može se podijeliti na pet cjelina. 1. Deklaracija varijabli Postoji ukupno deset varijabli koje se koriste u ostvarenju algoritma. Polje ulaz služi za spremanje ulaznog teksta m u bajtovima. Polje ulaz32 sadrži ulazni tekst u UInt32 tipu podatka jer sve operacije koje se koriste unutar algoritma koriste 32-bitni tip podataka. Polje salt8 služi za spremanje salta s u bajtovima. Polje salt32 sadrži salt u UInt32 tipu podatka. Polje sazetak služi za spremanje sažetka h u bajtovima. Polje sazetak32 sadrži sažetak u UInt32 tipu podatka. Matrica counter32 služi za spremanje broja ča t . Varijabla brojBitova ozna čava ukupan broj bitova u ulaznom tekstu, a varijabla brojBlokova ozna čava ukupan broj blokova ulaznog teksta veli čine 512 bita. Polje V služi za spremanje unutarnjeg stanja v . 2. Definiranje konstanti Ukupno su definirane tri konstante koje se koriste prilikom izra čuna sažetka. Polje IV sadrži inicijalizacijski vektor IV , polje C sadrži konstante c i matrica O sadrži permutacije σ . 3. Izra čun sažetka Ovaj dio sastoji se od dvije funkcije. Funkcija public string GenerirajSazetak ( string ulazna, string salt, string izlazna); je funkcija koja prima imena datoteka s ulaznim tekstom, saltom i datotekom u koju se želi spremiti sažetak. Kao izlaz vra ća

49

sažetak koji se ispisuje na korisni čkom su čelju. Na po četku funkcije se pozivaju funkcije za u čitavanje ulaznog teksta i salta . Nakon toga se inicijalizira polje u koje će se spremiti sažetak u bajtovima, te se poziva glavna funkcija za izra čunavanje sažetka. Sažetak se potom sprema u datoteku i pretvara u string. Funkcija public void Sazetak(); je funkcija unutar koje je ostvaren sam algoritam. Izvorni kod dan je u Dodatku B-1. Na po četku se prepisuju vrijednosti iz inicijalizacijskog vektora u polje za izra čun sažetka. Nakon toga se za svaki ulazni blok poruke postavljaju nove vrijednosti polja V nakon čega slijedi izra čun rundi. Funkcija G32 se ukupno poziva 80 puta, svaki put s drugim ulaznim parametrima. Nakon rundi slijedi spremanje rezultata u polje za izra čun sažetka. Nakon što se dobije kona čan sažetak, on se sprema u za to predvi ñeno polje, te se pretvara u bajtove. 4. Ostvarenje pomo ćnih funkcija Ovaj dio sastoji se od tri funkcije. Funkcija public UInt32 mod(UInt32 a, UInt32 b); služi za zbrajanje dva broja po modulu 32. Funkcija prima dva broja koja je potrebno zbrojiti, a vra ća rezultat modularnog zbrajanja. Funkcija public uint Rot32( uint a, int n); služi za rotiranje broja za definiran broj bitova. Funkcija prima broj a koji je potrebno rotirati i broj n koji predstavlja veli činu za koju je potrebno rotirati poslani broj a. Kao rezultat vra ća rotirani broj. Funkcija public void G32( int a, int b, int c, int d, int runda,

int blok, int i); je funkcija unutar koje je ostvarena funkcija Gi . Funkcija prima vrijednosti unutarnjeg stanja a, b, c, d, broj trenutne runde putem varijable runda , broj trenutnog bloka putem varijable blok i broja č i koji broji koliko puta se pozvala funkcija G32 unutar jedne runde. 5. Čitanje podataka iz datoteka Ovaj dio sastoji se od dvije funkcije. Funkcija private void UcitajUlaz(string ulazna); prvenstveno služi za učitavanje ulaznog teksta. Kao ulaz prima ime datoteke s ulaznom porukom za koju je potrebno izra čunati sažetak. Na po četku se odre ñuje duljina ulaznog teksta koja se sprema u varijablu brojBitova . Nakon toga se odre ñuje broj blokova ulaznog teksta (po potrebi se dodaje dodatan blok ako nema dovoljno bitova za zapis duljine poruke u zadnjem bloku) i sprema u varijablu brojBlokova . Nakon toga se puni broja č counter32 . Za svaki blok se provjerava je li to bio naknadno dodan blok prilikom proširenja. Ukoliko je to slu čaj broja č se postavlja na nulu, a ako nije onda se u broja č sprema do sada sažet broj bitova poruke. Slijedi unos podataka iz datoteke u polje ulaz , dodavanje standardnog proširenja, te veli čine ulaznog teksta. Nakon toga se polje bajtova ulaz pretvara u polje cjelobrojnih brojeva ulaz32 tako da se vežu po četiri bajta iz polja ulaz . Funkcija private void UcitajSalt(string salt); služi za u čitavanje salta iz datoteke. Kao ulaz prima ime datoteke sa saltom . Prvo se podaci u čitavaju iz standardne datoteke u polje bajtova salt8, a nakon toga se pretvara u polje cjelobrojnih brojeve salt32 tako da se vežu po četiri bajta iz polja salt8.

50

8.3.2. Algoritam Shabal

Za svaku od četiri ina čice algoritma Shabal ostvarena je zasebna klasa. Dijagrami klasa prikazani su na Slici 8.6. Kako su u globalu razlike izme ñu sve četiri klase zaista male, u nastavku je dan detaljan opis klase Shabal32Engine . Analogan opis vrijedi za preostale tri klase: Shabal28Engine , Shabal48Engine i Shabal64Engine . Primjer izra čuna sažetka za poruke čiji su primjeri dani u službenoj dokumentaciji [17] dan je u Dodatku A- 2.

Slika 8.6 Dijagrami klasa za ina čice algoritma Shabal

Unutar klase Shabal32Engine ostvaren je algoritam Shabal-256. Struktura koda može se podijeliti na pet cjelina. 1. Deklaracija varijabli Postoji ukupno sedam varijabli koje se koriste u ostvarenju algoritma. Polje M služi za spremanje ulaznog teksta M u cjelobrojnom prikazu. Polje W služi za spremanje broja ča ulaznih blokova. Varijabla brojBlokova ozna čava ukupan broj blokova ulaznog teksta veli čine 512 bita. Polje sazetak služi za spremanje sažetka u bajtovima. Unutrašnja stanja spremaju se u poljima A, B i C. 2. Definiranje konstanti Ukupno je definirano osam konstanti koje se koriste prilikom izra čuna sažetka. Polja A0, B0 i C0 sadrže inicijalizacijske vrijednosti za unutarnja stanja. Konstanta P predstavlja ukupan broj krugova unutar jedne runde. Konstanta r

51

predstavlja parametar vezan uz duljinu unutarnjeg stanja A . Vrijednosti pomaka koje se koriste u koracima krugova jedne runde dani su u konstantama o1 , o2 i o3 . 3. Izra čun sažetka Ovaj dio sastoji se od dvije funkcije. Funkcija public string GenerirajSazetak ( string ulazna, string izlazna); je funkcija koja prima imena datoteka s ulaznim tekstom i datotekom u koju se želi spremiti sažetak. Kao izlaz vra ća sažetak koji se ispisuje na korisni čkom su čelju. Na po četku funkcije se poziva funkcija za učitavanje ulaznog teksta. Nakon toga se inicijalizira polje broja ča W i kopiraju se po četne vrijednosti unutarnjih varijabli. Za svaki blok poruke povećava se broja č blokova i poziva se funkcija za izra čun rundi Runda . Slijedi izra čun završne tri runde. Zatim se inicijalizira polje bajtova sazetak u koje se sprema sažetak iz varijable C. Za Shabal-256 uzimaju se zadnjih osam rije či varijable C. Na kraju se sažetak sprema u datoteku, pretvara u string i šalje kao izlaz funkcije. Funkcija public void Runda( int pomak); je funkcija unutar koje je ostvarena runda. Izvorni kod dan je u Dodatku B-2. Funkcija prima broja č rije či ulaznog teksta kako bi se moglo pomicati po polju s ulaznim tekstom. Na po četku se dodaje novi ulazni blok unutarnjoj vrijednosti B. Zatim se izvršava operacija XOR nad broja čem W i ulaznom vrijednosti A. Slijedi poziv funkcije Permutacija . Na kraju se od unutarnje vrijednosti C oduzima ulazna poruka te se mijenjaju sadržaji vrijednosti B i C. 4. Ostvarenje pomo ćnih funkcija Ovaj dio sastoji se od pet funkcija. Funkcija public void Permutacija(int pomak); služi za izra čun permutacije. Izvorni kod dan je u Dodatku B-2. Na po četku se rotira vrijednost B za 17 bita u lijevo. Slijedi izra čun vrijednosti A i B kroz tri kruga i 16 koraka. Na kraju se vrijednosti A dodaje vrijednost C. Funkcija public void PovecajBrojac(uint [] W); služi za pove ćavanje broja ča ulaznih blokova poruke. Funkcija public uint RotL32( uint a, int n); služi za rotiranje broja za definiran broj bitova u lijevo. Funkcija prima broj a koji je potrebno rotirati i broj n koji predstavlja veli činu za koju je potrebno rotirati poslani broj a. Kao rezultat vra ća rotirani broj. Funkcija public uint Neg(uint vrijednost); služi za izra čun komplementa. Funkcija prima broj vrijednost za koju je potrebno izra čunati komplement. Funkcija public uint UV(uint vrijednost, int a); je funkcija u kojoj su ostvarene nelinearne funkcije U i V . Funkcija prima vrijednost vrijednost koju je potrebno pomnožiti s 3 ili 5 (ovisno o parametru a) po modulu 2 32 . 5. Čitanje podataka iz datoteka Ovaj dio sastoji se od jedne funkcije. Funkcija private void UcitajUlaz(string ulazna); prvenstveno služi za učitavanje ulaznog teksta. Kao ulaz prima ime datoteke s ulaznom porukom za koju je potrebno izra čunati sažetak. Na po četku se odre ñuje broj bajtova

52

ulaznog teksta koji se sprema u varijablu brojBajtova . Nakon toga se odre ñuje broj blokova ulaznog teksta i sprema u varijablu brojBlokova . Nakon toga se instancira cjelobrojno polje M u koje će se spremiti ulazna poruka. Učitavanje iz datoteke vrši se pomo ću pomo ćnog polja bajtova buffer . Nakon učitavanja podataka iz datoteke obavlja se proširenje dodavanjem bita 1 i potrebnog broja nula. Na kraju se podaci iz polja buffer pretvaraju u cjelobrojne vrijednosti i spremaju u polje M.

8.3.3. Algoritam SIMD

Za svaku ina čicu algoritma SIMD ostvarena je zasebna klasa. Dijagrami klasa prikazani su na Slici 8.7. Kako su u globalu razlike izme ñu sve četiri klase zaista male, u nastavku je dan detaljan opis klase SIMD32Engine . Analogan opis vrijedi za preostale tri klase: SIMD28Engine , SIMD48Engine i SIMD64Engine . Primjer izra čuna sažetka za poruke čiji su primjeri dani u službenoj dokumentaciji [19] dan je u Dodatku A-3.

Slika 8.7 Dijagrami klasa za ina čice algoritma SIMD

Unutar klase SIMD32Engine ostvaren je algoritam SIMD-256. Struktura koda može se podijeliti na pet cjelina. 1. Deklaracija varijabli Postoji ukupno sedam varijabli koje se koriste u ostvarenju algoritma. Polja A,

53

B, C, i D služe za spremanje unutarnjeg stanja. Varijabla brojBlokova ozna čava ukupan broj blokova ulaznog teksta. Polje sazetak služi za spremanje sažetka u bajtovima. Polje poruka sadrži ulazni tekst u bajtovima. 2. Definiranje konstanti Ukupno je definirano šest konstanti koje se koriste prilikom izra čuna sažetka. Polja A0, B0, C0, i D0 sadrže po četne vrijednosti unutarnjeg stanja. Polje P sadrži brojeve koji se koriste kod izra čuna permutacije redaka. Konstanta alpha postavlja se na 139 i koristi se kod numeri čke transformacije. 3. Izra čun sažetka Ovaj dio sastoji se od dvije funkcije. Funkcija public string GenerirajSazetak (string ulazna, string salt, string izlazna); je funkcija koja prima imena datoteka s ulaznim tekstom i datotekom u koju se želi spremiti sažetak. Kao izlaz vra ća sažetak koji se ispisuje na korisni čkom su čelju. Na po četku funkcije poziva se funkcija za u čitavanje ulaznog teksta. Nakon toga se postavljaju po četne vrijednosti unutarnjih stanja, te se za svaki blok ulazne poruke, osim zadnjeg, poziva funkcija kompresije. Nakon toga slijedi poziv funkcije kompresije za zadnji blok poruke. Slijedi inicijalizacija polja u koje će se spremiti sažetak u bajtovima, te njegovo punjenje vrijednostima iz unutarnjih stanja. Sažetak se potom sprema u datoteku i pretvara u string. Funkcija public void SIMDCompress(uint [] A, uint [] B, uint [] C, uint [] D, int offset, bool lastBlock); je funkcija unutar koje je ostvaren sam algoritam. Izvorni kod dan je u Dodatku B-3. Na po četku se poziva funkcija koja obavlja kompresiju ulazne poruke. Slijedi deklaracija pomo ćnih varijabli i spremanje unutarnjih stanja prethodnog koraka s proširenom porukom pomo ću operacije XOR. Nakon toga se broj koraka postavlja na nulu te se prvo pozivaju četiri runde. Nakon izvršavanja rundi potrebno je pozvati izvršavanje zadnja četiri koraka, te kopirati dobivene unutarnje vrijednosti u za to predvi ñene varijable. 4. Ostvarenje pomo ćnih funkcija Ovaj dio sastoji se od šest funkcija. Funkcija public uint IF(uint A, uint B, uint C); služi kao uvjetna if- else funkcija. Funkcija prima tri broja, a kao rezultat vra ća rezultat uvjetne funkcije. Funkcija public public uint MAJ(uint A, uint B, uint C); služi za odabir najve će vrijednosti od tri ulazne vrijednosti. Funkcija public static uint RotL(uint a, int n); služi za rotiranje broja za definiran broj bitova. Funkcija prima broj a koji je potrebno rotirati i broj n koji predstavlja veli činu za koju je potrebno rotirati poslani broj a. Kao rezultat vra ća rotirani broj. Funkcija public static int ModularnoPotenciranje(byte b, int a, int mod); služi za izra čun modularnog potenciranja. Funkcija izra čunava izraz b a po modulu mod . Modularno potenciranje ostvareno je pomo ću stoga. Funkcija public void Round(uint [] A, uint [] B, uint [] C, uint [] D, uint [] W, int wOffset, ref int korak, int [] pi); je funkcija unutar koje je ostvarena jedna runda. Funkcija prima vrijednosti unutarnjeg stanja A, B, C, D, blok proširene poruke W, varijablu koja sadrži pomak za izra čun

54

trenutne pozicije u polju s proširenom porukom wOffset , trenutni broj koraka korak i polje pi koje sadrži konstante potrebne za trenutnu rundu. Funkcija poziva osam puta funkciju za izra čun runde tako da joj prva četiri puta šalje funkciju IF , a druga četiri puta funkciju MAJ . Ostvarenje ove funkcije dano je u Dodatku B-3. Funkcija public void Step(uint [] A, uint [] B, uint [] C, uint [] D, uint [] W, int wOffset, int korak, fi fja, int r, int s); je funkcija unutar koje je ostvaren jedan korak. Funkcija prima vrijednosti unutarnjeg stanja A, B, C, D, blok proširene poruke W, varijablu koja sadrži pomak za izra čun trenutne pozicije u polju s proširenom porukom wOffset , trenutni broj koraka korak , funkciju koju je potrebno pozvati fja i dva broja koja ozna čavaju broj bitova za rotaciju r i s . Na po četku funkcije deklariraju se pomo ćne varijable za izra čun unutarnjeg stanja, te se postavljaju na po četne vrijednosti. Nakon toga slijedi izra čun novih vrijednosti unutar koraka. Ostvarenje ove funkcije dano je u Dodatku B-3. 5. Čitanje podataka iz datoteka Ovaj dio sastoji se od dvije funkcije. Funkcija private void UcitajUlaz(string ulazna); prvenstveno služi za učitavanje ulaznog teksta. Kao ulaz prima ime datoteke s ulaznom porukom za koju je potrebno izra čunati sažetak. Na po četku se odre ñuje duljina ulaznog teksta koja se sprema u varijablu brojBitova . Nakon toga se odre ñuje broj blokova ulaznog teksta i sprema u varijablu brojBlokova . U polje bajtova poruka učitavaju se podaci iz datoteke. Nakon toga se obavlja proširenje tako da se dodaju nule na kraj predzadnjeg bloka, a u zadnji blok se upisuje duljina ulazne poruke. Funkcija public static uint [] ProsirenjePoruke(long offset, bool lastBlock); služi za izra čun operacija nad proširenim ulaznim tekstom kako bi se dobio kona čni prošireni tekst koji se onda može koristiti za izra čun samog sažetka poruke. Funkcija prima varijablu offset koja predstavlja trenutni pomak za polje ulaznog teksta i varijablu lastBlock koja ozna čava radi li se proširenje zadnjeg bloka poruke ili ne. Na po četku se inicijaliziraju dva polja y1 i y2 . U svaki element polja y1 upisuje se rezultat numeri čke transformacije s time da se pazi ra čuna li se transformacija zadnjeg bloka poruke ili ne. Nakon toga se obavlja enkodiranje (množenje s konstantama). Tim korakom se prvo puni polje y2 pomo ću polja y1, te se mijenja polje y1. Slijedi nadovezivanje varijabli iz oba polja čiji se rezultat sprema u polje Z. Permutacija je provedena istovremeno. Funkcija vra ća dobiveno polje Z. Ostvarenje ove funkcije dano je u Dodatku B-3.

55

9. Usporedba vremena izra čuna sažetka

U okviru rada napravljeno je istraživanje koje se sastojalo u usporedbi vremena trajanja ostvarenih algoritama BLAKE, Shabal i SIMD s familijom funkcija SHA-2. Uspore ñena su vremena trajanja za ina čice koje izra čunavaju sažetak duljine 256 bita. Usporedba vremena izvršena je nad devet ulaznih datoteka razli čitih duljina. Tako ñer, korištena su dva razli čita ra čunala: 1. Mobile AMD Sempron 3100+, 789 MHz, 384 MB RAM; 2. AMD Athlon 64 x2 Dual Core Processor 3800+, 2.01 GHz, 2.75 GB RAM. Za svaku ulaznu datoteku sažetak je izra čunat deset puta, te je za vrijeme trajanja izra čuna sažetka uzeta srednja vrijednost dobivenih vrijednosti zaokružena na najbliži cijeli broj.

9.1. Vrijeme izra čunavanja sažetka algoritmom SHA-256

Za izra čun trajanja sažetka algoritmom SHA-256 ostvaren je dodatan projekt. Mjerenja vremena trajanja izra čuna i dobivene srednje vrijednosti prikazane se u Tablici 9.1. Veli čina datoteka izražena je u kilobajtima, a vrijeme trajanja izra čuna u sekundama. Prvi dio tablice prikazuje mjerenja obavljena na prijenosnom ra čunalu, a drugi dio na stolnom ra čunalu.

Tablica 9.1. Vrijeme izra čuna sažetka algoritmom SHA-256 u sekundama

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. AVR 0 0.033 0.029 0.029 0.035 0.030 0.029 0.037 0.030 0.040 0.035 0.033 32 0.144 0.146 0.146 0.145 0.145 0.147 0.145 0.145 0.145 0.145 0.145 64 0.285 0.285 0.285 0.286 0.285 0.285 0.285 0.282 0.285 0.285 0.285 128 0.509 0.427 0.487 0.412 0.484 0.470 0.441 0.430 0.428 0.441 0.453 256 0.736 0.745 0.673 0.708 0.716 0.733 0.681 0.709 0.726 0.715 0.714 512 1.266 1.178 1.137 1.183 1.244 1.052 1.194 1.192 1.202 1.240 1.189 1024 2.200 2.194 2.242 2.180 2.207 2.011 2.198 2.208 2.217 2.268 2.193 2048 4.269 4.240 4.179 4.187 4.243 4.217 4.216 4.194 4.191 4.145 4.208 4096 8.260 8.169 8.229 8.427 8.458 8.212 8.159 8.267 8.203 8.171 8.256 0 0.010 0.010 0.010 0.010 0.010 0.010 0.010 0.010 0.010 0.010 0.010 32 0.060 0.059 0.059 0.059 0.059 0.059 0.059 0.059 0.059 0.059 0.059 64 0.118 0.118 0.118 0.118 0.117 0.117 0.118 0.117 0.117 0.117 0.118 128 0.235 0.234 0.237 0.234 0.234 0.235 0.233 0.235 0.234 0.233 0.234 256 0.471 0.469 0.469 0.468 0.469 0.468 0.469 0.469 0.469 0.467 0.469 512 0.937 0.937 0.935 0.936 0.936 0.935 0.937 0.936 0.936 0.936 0.936 1024 1.879 1.870 1.872 1.870 1.871 1.875 1.872 1.873 1.872 1.872 1.873 2048 3.743 3.738 3.741 3.736 3.742 3.741 3.729 3.738 3.738 3.743 3.739 4096 7.490 7.485 7.478 7.473 7.473 7.479 7.481 7.485 7.480 7.481 7.481

9.2. Vrijeme izra čunavanja sažetka algoritmom BLAKE-32

Prilikom testiranja ovog algoritma nije korišten salt . Mjerenja vremena trajanja izra čuna i dobivene srednje vrijednosti prikazane se u Tablici 9.2. Veli čina datoteka izražena je u kilobajtima, a vrijeme trajanja izra čuna u sekundama. Prvi dio tablice prikazuje mjerenja obavljena na prijenosnom ra čunalu, a drugi dio na stolnom ra čunalu.

56

Tablica 9.2. Vrijeme izra čuna sažetka algoritmom BLAKE-32 u sekundama

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. AVR 0 0.083 0.082 0.089 0.084 0.083 0.084 0.082 0.081 0.089 0.081 0.084 32 0.129 0.128 0.129 0.128 0.132 0.128 0.131 0.129 0.129 0.129 0.129 64 0.272 0.262 0.259 0.257 0.255 0.257 0.257 0.257 0.254 0.257 0.259 128 0.451 0.360 0.394 0.373 0.414 0.377 0.425 0.337 0.451 0.342 0.392 256 0.692 0.594 0.620 0.591 0.560 0.672 0.615 0.662 0.664 0.587 0.626 512 1.129 1.077 1.114 1.018 1.086 1.082 1.098 1.040 1.029 1.116 1.079 1024 1.999 1.930 1.959 1.959 1.991 1.928 1.968 1.925 1.932 2.017 1.961 2048 3.747 3.778 3.785 3.809 3.737 3.737 3.785 3.734 3.815 3.763 3.769 4096 7.581 7.377 7.322 8.810 7.308 7.419 7.365 7.368 7.343 7.351 7.524 0 0.031 0.020 0.018 0.019 0.019 0.019 0.019 0.018 0.019 0.019 0.020 32 0.052 0.053 0.052 0.052 0.052 0.053 0.052 0.052 0.052 0.052 0.052 64 0.104 0.104 0.107 0.104 0.104 0.104 0.103 0.103 0.105 0.107 0.105 128 0.214 0.208 0.213 0.218 0.216 0.216 0.207 0.208 0.208 0.212 0.212 256 0.426 0.415 0.416 0.432 0.430 0.427 0.425 0.418 0.412 0.420 0.422 512 0.835 0.864 0.856 0.847 0.845 0.851 0.854 0.839 0.856 0.838 0.849 1024 1.804 1.722 1.696 1.713 1.690 1.724 1.726 1.696 1.729 1.725 1.723 2048 3.431 3.436 3.413 3.420 3.425 3.441 3.424 3.471 3.403 3.471 3.434 4096 6.872 6.849 6.901 6.848 6.856 6.853 6.842 6.863 6.843 6.890 6.862

9.3. Vrijeme izra čunavanja sažetka algoritmom Shabal-256

Mjerenja vremena trajanja izra čuna i dobivene srednje vrijednosti prikazane se u Tablici 9.3. Veli čina datoteka izražena je u kilobajtima, a vrijeme trajanja izra čuna u sekundama. Prvi dio tablice prikazuje mjerenja obavljena na prijenosnom ra čunalu, a drugi dio na stolnom ra čunalu.

Tablica 9.3. Vrijeme izra čuna sažetka algoritmom Shabal-256 u sekundama

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. AVR 0 0.019 0.021 0.020 0.019 0.019 0.022 0.021 0.021 0.020 0.018 0.020 32 0.029 0.028 0.029 0.029 0.028 0.026 0.027 0.027 0.028 0.027 0.028 64 0.054 0.053 0.054 0.050 0.054 0.053 0.053 0.053 0.053 0.050 0.053 128 0.103 0.099 0.100 0.100 0.099 0.101 0.099 0.100 0.099 0.099 0.100 256 0.202 0.199 0.201 0.197 0.225 0.199 0.201 0.201 0.199 0.197 0.202 512 0.394 0.320 0.339 0.363 0.362 0.314 0.340 0.380 0.340 0.367 0.352 1024 0.469 0.463 0.529 0.493 0.485 0.537 0.487 0.535 0.486 0.482 0.496 2048 0.866 0.812 0.794 0.797 0.873 0.892 0.790 0.819 0.808 0.859 0.831 4096 1.691 1.773 1.602 1.520 1.553 1.707 1.548 1.591 1.788 1.608 1.638 0 0.014 0.013 0.012 0.012 0.012 0.012 0.012 0.012 0.012 0.012 0.012 32 0.021 0.021 0.021 0.021 0.021 0.020 0.021 0.021 0.022 0.021 0.021 64 0.031 0.031 0.031 0.031 0.031 0.030 0.032 0.031 0.031 0.031 0.031 128 0.038 0.037 0.038 0.037 0.038 0.038 0.038 0.037 0.039 0.038 0.038 256 0.074 0.076 0.076 0.075 0.074 0.075 0.075 0.075 0.075 0.075 0.075 512 0.151 0.150 0.150 0.152 0.150 0.150 0.150 0.150 0.150 0.150 0.150 1024 0.300 0.298 0.297 0.298 0.300 0.297 0.298 0.299 0.297 0.300 0.298 2048 0.600 0.601 0.597 0.597 0.595 0.597 0.602 0.596 0.598 0.600 0.598 4096 1.199 1.205 1.193 1.193 1.196 1.200 1.215 1.197 1.188 1.207 1.199

57

9.4. Vrijeme izra čunavanja sažetka algoritmom SIMD-256

Mjerenja vremena trajanja izra čuna i dobivene srednje vrijednosti prikazane se u Tablici 9.4. Veli čina datoteka izražena je u kilobajtima, a vrijeme trajanja izra čuna u sekundama. Prvi dio tablice prikazuje mjerenja obavljena na prijenosnom ra čunalu, a drugi dio na stolnom ra čunalu.

Tablica 9.4. Vrijeme izra čuna sažetka algoritmom SIMD-256 u sekundama

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. AVR

0 0.070 0.070 0.083 0.070 0.069 0.069 0.070 0.070 0.069 0.069 0.071 32 5.899 5.922 5.689 5.758 5.722 5.844 5.852 5.827 5.804 5.839 5.816 64 11.342 11.318 11.403 11.660 11.853 11.732 14.473 12.641 13.406 12.446 12.227 128 28.296 28.625 22.386 30.380 28.232 29.976 24.320 30.127 29.347 28.274 27.996 256 61.918 61.928 63.163 65.725 62.437 63.278 61.589 64.921 65.137 61.942 63.204 512 129.282 129.365 129.434 129.346 130.071 128.941 129.291 129.479 129.720 129.562 129.449 1024 264.514 261.653 263.128 264.712 261.782 264.991 261.780 263.100 264.789 262.419 263.287 2048 520.358 519.927 521.112 520.497 520.789 521.017 519.832 520.718 520.540 520.886 520.568 4096 1075.432 1082.212 1069.125 1072.654 1102.396 1090.775 1078.983 1084.309 1081.547 1076.004 1081.344 0 0.026 0.026 0.026 0.026 0.026 0.026 0.026 0.026 0.026 0.026 0.026 32 4.945 4.984 4.976 5.031 4.975 5.015 4.963 4.973 5.022 4.968 4.985 64 10.052 9.859 9.906 9.850 9.927 10.028 9.992 9.943 9.931 9.959 9.945 128 20.108 20.071 20.065 20.082 20.143 19.892 20.037 19.848 19.856 20.004 20.011 256 39.886 39.801 39.910 39.960 39.916 39.964 39.968 39.788 39.816 39.974 39.898 512 79.636 79.814 80.046 79.626 79.921 79.695 80.037 79.912 79.621 80.057 79.837 1024 159.485 159.326 159.672 159.718 160.012 159.230 159.780 158.942 160.038 159.518 159.572 2048 319.541 320.005 318.421 321.728 319.625 319.927 320.011 320.121 319.846 319.550 319.878 4096 646.372 645.721 646.321 646.827 646.213 646.505 647.007 646.021 645.975 646.392 646.335

9.5. Usporedba algoritama po trajanju izra čuna sažetka

U Tablici 9.5. dani su kona čni rezultati mjerenja za sva četiri algoritma. Veli čina datoteka izražena je u kilobajtima, a vrijeme trajanja izraženo je u sekundama. Lijevi dio tablice prikazuje mjerenja obavljena na prijenosnom ra čunalu, a desni dio na stolnom ra čunalu.

Tablica 9.5. Vremena izra čuna sažetka za ostvarene algoritma u sekundama

SHA- BLAKE- Shabal- SIMD- SHA- BLAKE- Shabal- SIMD- 256 32 256 256 256 32 256 256 0 0.033 0.084 0.020 0.071 0.010 0.020 0.012 0.026 32 0.145 0.129 0.028 5.816 0.059 0.052 0.021 4.985 64 0.285 0.259 0.053 12.227 0.118 0.105 0.031 9.945 128 0.453 0.392 0.100 27.996 0.234 0.212 0.038 20.011 256 0.714 0.626 0.202 63.204 0.469 0.422 0.075 39.898 512 1.189 1.079 0.352 129.449 0.936 0.849 0.150 79.837 1024 2.193 1.961 0.496 263.287 1.873 1.723 0.298 159.572 2048 4.208 3.769 0.831 520.568 3.739 3.434 0.598 319.878 4096 8.256 7.524 1.638 1081.344 7.481 6.862 1.199 646.335

58

Kao što je vidljivo iz tablice, Shabal-256 je najbrži algoritam od tri ostvarena algoritma. Razlog tome je izrazita jednostavnost algoritma. Najsporiji je SIMD-256. Kao što se vidi iz tablice, dobivene vremenske vrijednosti drasti čno se razlikuju za ovaj algoritam u usporedbi s preostala dva algoritma. Glavni problem ovog algoritma je priprema proširenog teksta ulazne poruke za izra čun sažetka. Naime, autori ovog algoritma smatraju da se glavna slabost svih dosadašnjih algoritama nalazi u proširenju poruke. Većina se napada temelji na pretpostavci da se umjesto promjene bitova proširene poruke može na vrlo jednostavan na čin izvršiti promjena bitova nad originalnom porukom. Zbog toga se provode dodatne promjene nad proširenom porukom. Jedna od promjena je izra čunavanje numeri čke transformacije koja zahtjeva ra čunanje modularnog potenciranja za veliku koli činu brojeva. Taj dio je vremenski vrlo zahtjevan pa usporava cijeli proces izra čuna sažetka. Vrijeme izra čuna sažetka za algoritam BLAKE-32 vrlo je sli čno vremenu izra čuna za algoritam SHA-256, uz činjenicu da je BLAKE-32 nešto brži. Algoritam Shabal-256 je otprilike šest puta brži od algoritma SHA-256, dok je algoritam SIMD-256 daleko sporiji od algoritma SHA-256.

59

10. Zaklju čak

Nakon otkrivanja ranjivosti algoritma SHA-1, NIST je objavio natje čaj za novu normu za izra čunavanje sažetka poruke SHA-3. Na natje čaj za novi algoritam za izra čunavanje sažetka poruke prijavilo se mnogo kandidata. Trenutno je službeno ostalo samo pet algoritama koji su u utrci za novu normu SHA-3. Svi algoritmi drugog kruga natje čaja mogu se podijeliti u tri skupine. U prvu skupinu spadaju svi algoritmi koji koriste elemente algoritma AES, u drugu algoritmi koji koriste elemente algoritma SHA-2 i u tre ću skupinu algoritmi koji imaju originalan dizajn. U sklopu ovog rada odabrana su tri algoritma, BLAKE, Shabal i SIMD. Sva tri algoritma vrlo su sli čna SHA-2 algoritmu po strukturi izra čuna sažetka. Iako je sama struktura odabranih algoritama vrlo sli čna SHA-2 familiji funkcija, brzina izra čuna sažetka se razlikuje. Ispitivanjem je dobiveno da je vremenski najbrži algoritam Shabal. Glavna prednost ovog algoritma je njegova brzina i jednostavnost. Pretpostavlja se da je upravo jednostavnost algoritma bila jedan od glavnih razloga zašto ga NIST nije odabrao kao finalista. BLAKE je ušao u finalni krug natje čaja. Brzina izra čuna sažetka poruke vrlo je sli čna brzini izra čuna sažetka poruke pomo ću algoritma iz familije funkcija SHA-2. Kao glavnu prednost ovog algoritma NIST je istaknuo mogu ćnost paralelizacije i korištenja salta . Kao najsporiji algoritam prilikom ispitivanja pokazao se SIMD. Iako su autori pokušali biti originalni prilikom dizajniranja samog algoritma, na kraju se upravo taj originalni dizajn pokazao kao glavni nedostatak algoritma te zbog toga nije ušao u finalni krug natje čaja. U ovom radu definirane su funkcije za izra čunavanje sažetka poruke, navedena su njihova poželjna svojstva i detaljno su opisani algoritmi SHA-0, SHA-1, SHA-2, te njihovi nedostaci. Nadalje, opisan je dosadašnji tijek natje čaja za novi algoritam SHA-3 i navedena je klasifikacija prijavljenih algoritama. Detaljno su opisani algoritmi BLAKE, Shabal i SIMD. Tako ñer, programski je ostvareno radno okruženje koje omogu ćuje primjenu tih algoritama nad proizvoljno unesenim tekstom. Opisano je korisni čko su čelje, dane su upute za upotrebu i opisano je ostvarenje pojedinih algoritama. Na kraju je uspore ñeno vrijeme sažimanja ostvarenih algoritama s algoritmom SHA-2.

60

11. Literatura

[1] Schneier B., Applied Cryptography, Second Edition: Protocols, Algorithms, and Source Code in C , Wiley & Sons, Inc., 1996. [2] Cryptographic Hash Functions , dostupno na Internet adresi: http://en.wikipedia.org/wiki/Cryptographic_hash_function, 25.9.2010. [3] Golub M., Napredni operacijski sustavi, FER, 2009. [4] NIST, Secure Hash Standard , dostupno na Internet adresi: http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf, 25.9.2010. [5] SHA-1, dostupno na Internet adresi: http://en.wikipedia.org/wiki/SHA-1, 25.9.2010. [6] SHA-2, dostupno na Internet adresi: http://en.wikipedia.org/wiki/SHA-2, 25.9.2010. [7] Kayser R., Announcing Request for Candidate Algorithm Nominations for a New Cryptographic Hash Algorithm (SHA-3) Family , NIST, 2.11.2007., dostupno na Internet adresi: http://cryptome.info/nist110207.htm, 25.9.2010. [8] NIST Hash Function Competiton , dostupno na Internet adresi: http://en.wikipedia.org/wiki/SHA-3, 25.9.2010. [9] NIST, First Round Candidates , dostupno na Internet adresi: http://csrc.nist.gov/groups/ST/hash/sha-3/Round1/submissions_rnd1.html, 25.9.2010. [10] The SHA-3 Zoo, dostupno na Internet adresi: http://ehash.iaik.tugraz.at/wiki/The_SHA-3_Zoo, 25.9.2010. [11] NIST, Second Round Candidates , dostupno na Internet adresi: http://csrc.nist.gov/groups/ST/hash/sha-3/Round2/submissions_rnd2.html, 25.9.2010. [12] NIST, Third (Final) Round Candidates , dostupno na Internet adresi: http://csrc.nist.gov/groups/ST/hash/sha-3/Round3/submissions_rnd3.html, 11.12.2010. [13] Fleischmann E., Forler C., Gorski M., Classification of the SHA-3 Candidates , 19.4.2009. dostupno na Internet adresi: http://eprint.iacr.org/2008/511.pdf, 25.9.2010. [14] SHA-3 proposal BLAKE , dostupno na Internet adresi: http://www.131002.net/blake/, 25.9.2010. [15] Aumasson J.-P., Henzen L., Meier W., Phan R., SHA-3 Proposal BLAKE , dostupno na Internet adresi: http://www.131002.net/blake/blake.pdf, 25.9.2010. [16] Shabal , dostupno na Internet adresi: http://www.shabal.com/, 25.9.2010. [17] Canteaut A., Chevallier-Mames B., Gouget A., Paillier P., Pornin T., Shabal, a Submission to NIST's Cryptographic Hash Algorithm Competition , dostupno na Internet adresi: http://www.shabal.com/wp-content/uploads/Shabal.pdf, 25.9.2010. [18] The SIMD Hash Function , dostupno na Internet adresi: http://www.di.ens.fr/~leurent/simd.html, 25.9.2010. [19] Leurent G., SIMD Is a Message Digest , dostupno na Internet adresi: http://www.di.ens.fr/~leurent/files/SIMD.pdf, 25.9.2010.

61

Sažetak

PROGRAMSKO OSTVARENJE ALGORITAMA BLAKE, Shabal i SIMD

Danas korištena norma za izra čunavanje sažetka poruke SHA-2 temelji se na algoritmu SHA-1. Nakon otkri ća ranjivosti algoritma SHA-1 pomo ću napada kolizijom, NIST je objavio natje čaj za novi algoritam za izra čunavanje sažetka poruke, SHA-3, koji će naslijediti SHA-2 skupinu algoritama. BLAKE, Shabal i SIMD su jedni od kandidata koji su ušli u drugi krug natje čaja za izra čunavanje sažetka poruke. U ovom radu prezentirani su navedeni algoritmi te je provedena usporedba vremena izra čuna sažetka s algoritmom SHA-2.

Klju čne rije či: SHA-3, BLAKE, Shabal, SIMD, funkcije za izra čunavanje sažetka poruke

62

Abstract

PROGRAM IMPLEMENTATION OF ALGORITHMS BLAKE, Shabal and SIMD

Current hash standard SHA-2 is based on the algorithm SHA-1. Since the discovery of collision attacks against algorithm SHA-1, NIST has announced the competition for a new hash algorithm, SHA-3, that will replace the SHA-2 group of algorithms. BLAKE, Shabal, and SIMD are the candidates that were accepted for the second round of the competition. This paper contains aforementioned algorithms and comparison in length of hashing with algorithm SHA-2.

Key words: SHA-3, BLAKE, Shabal, SIMD, hash functions

63

Dodatak A

Za provjeru ispravnosti rada ostvarenog programa obavljena su ispitivanja korištenjem ulaznih poruka iz službenih dokumentacija. U nastavku je za svaki algoritam prikazan rezultat izra čuna 256-bitnog sažetka poruke. 1. Primjer izra čuna sažetka algoritmom BLAKE-32

Primjer 1.

Kao ulazna poruka korištena je 8-bitna poruka 00000000. Prema dokumentaciji sažetak koji se dobiva iz ove poruke je [15]: D1E39 B45 7D2250 B4 F5B152 E7 4157 FBA 4 . C1B423 B8 7549106 B 07 FD 3A3E 7F 4AEB 28 Programski se dobiva isti rezultat kao što je prikazano na Slici A.1.

Slika A.1. Rezultat programskog izra čuna sažetka algoritmom BLAKE-32

Primjer 2.

Kao ulazna poruka korištena je 576-bitna poruka 0000...0000. Prema dokumentaciji sažetak koji se dobiva iz ove poruke je [15]: 8A638488 C318 C5AB 222 A1813 174 C36 B4 . BB 66 E45 B 09 AFDDFD 7F2B2FE 3 161 B7A6D Programski se dobiva isti rezultat kao što je prikazano na Slici A.2.

64

Slika A.2. Rezultat programskog izra čuna sažetka algoritmom BLAKE-32

2. Primjer izra čuna sažetka algoritmom Shabal-256

Kao ulazna poruka korištena je 102-bajtna poruka: abcdefghij klmnopqrst uvwxyz - 0123456789 - ABCDEFGHIJ KLMNOPQRST UVWXYZ -

0123456789 - abcdefghij klmnopqrst uvwxyz Prema dokumentaciji sažetak koji se dobiva iz ove poruke je [17]: B49 F34 BF 51864 C30 533 CC 46 C C2542 BDE . C2F96 FD 0 6F5C539 A FF 6EAD 58 83 F7327 A Programski se dobiva isti rezultat kao što je prikazano na Slici A.3. 3. Primjer izra čuna sažetka algoritmom SIMD-256

Kao ulazna poruka korištena je prazna poruka. Prema dokumentaciji sažetak koji se dobiva iz poruke je [19]: 8029 E81 E 7320 E13 E D9001 DC 3 D8021 FEC . 695 B7A25 CD 43 AD 80 5260181 C 35 FCAEA 8 Programski se dobiva isti rezultat kao što je prikazano na Slici A.4.

65

Slika A.3. Rezultat programskog izra čuna sažetka algoritmom Shabal-256

Slika A.4. Rezultat programskog izra čuna sažetka algoritmom SIMD-256

66

Dodatak B

1. Izvorni kod ostvarenja algoritma BLAKE-32 public void Sazetak() { V = new UInt32 [16]; UInt32 [] h = new UInt32 [8]; for ( int i = 0; i < 8; i++) { h[i] = IV[i]; }

for ( int i = 0; i < brojBlokova; i++) { V[0] = h[0]; V[1] = h[1]; V[2] = h[2]; V[3] = h[3]; V[4] = h[4]; V[5] = h[5]; V[6] = h[6]; V[7] = h[7]; V[8] = salt32[0] ^ C[0]; V[9] = salt32[1] ^ C[1]; V[10] = salt32[2] ^ C[2]; V[11] = salt32[3] ^ C[3]; V[12] = counter32[i, 0] ^ C[4]; V[13] = counter32[i, 0] ^ C[5]; V[14] = counter32[i, 1] ^ C[6]; V[15] = counter32[i, 1] ^ C[7];

for ( int j = 0; j < 10; j++) { G32(0, 4, 8, 12, j, i, 0); G32(1, 5, 9, 13, j, i, 1); G32(2, 6, 10, 14, j, i, 2); G32(3, 7, 11, 15, j, i, 3); G32(0, 5, 10, 15, j, i, 4); G32(1, 6, 11, 12, j, i, 5); G32(2, 7, 8, 13, j, i, 6); G32(3, 4, 9, 14, j, i, 7); }

h[0] = h[0] ^ salt32[0] ^ V[0] ^ V[8]; h[1] = h[1] ^ salt32[1] ^ V[1] ^ V[9]; h[2] = h[2] ^ salt32[2] ^ V[2] ^ V[10]; h[3] = h[3] ^ salt32[3] ^ V[3] ^ V[11]; h[4] = h[4] ^ salt32[0] ^ V[4] ^ V[12]; h[5] = h[5] ^ salt32[1] ^ V[5] ^ V[13]; h[6] = h[6] ^ salt32[2] ^ V[6] ^ V[14]; h[7] = h[7] ^ salt32[3] ^ V[7] ^ V[15]; }

sazetak32 = new UInt32 [8]; for ( int i = 0; i < 8; i++) { sazetak32[i] = h[i]; }

67

int indeks = 0; for ( int i = 0; i < 8; i++) { byte [] pom = new byte [4]; pom = BitConverter .GetBytes(sazetak32[i]); for ( int j = 3; j >= 0; j--) { sazetak[indeks] = pom[j]; indeks++; } } } public void G32( int a, int b, int c, int d, int runda, int blok, int i) { this .V[a] = mod(mod(V[a], V[b]), (ulaz32[(blok * 16) + O[runda, 2 * i]] ^ C[O[runda, (2 * i + 1)]])); this .V[d] = Rot32((V[d] ^ V[a]), 16); this .V[c] = mod(V[c], V[d]); this .V[b] = Rot32((V[b] ^ V[c]), 12); this .V[a] = mod(mod(V[a], V[b]), (ulaz32[(blok * 16) + O[runda, (2 * i + 1)]] ^ C[O[runda, 2 * i]])); this .V[d] = Rot32((V[d] ^ V[a]), 8); this .V[c] = mod(V[c], V[d]); this .V[b] = Rot32(V[b] ^ V[c], 7); }

2. Izvorni kod ostvarenja algoritma Shabal-256 public void Runda( int pomak) { for ( int i = 0; i < B.Length; i++) { B[i] = B[i] + M[pomak + i]; }

A[0] = A[0] ^ W[0]; A[1] = A[1] ^ W[1];

Permutacija(pomak);

for ( int i = 0; i < C.Length; i++) { C[i] = C[i] - M[pomak + i]; }

uint [] pom = B; B = C; C = pom; } public void Permutacija( int pomak) { for ( int i = 0; i < B.Length; i++) { B[i] = RotL32(B[i], 17); }

68

for ( int j = 0; j < p; j++) { for ( int i = 0; i < B.Length; i++) { int iA = (i + 16 * j) % A.Length; int iAminus = ((i - 1 + 16 * j) < 0 ? A.Length : 0) + (i - 1 + 16 * j); iAminus %= A.Length; int iCminus = ((8 - i) < 0 ? C.Length : 0) + (8 - i); iCminus %= C.Length; A[iA] = UV(A[iA] ^ UV(RotL32(A[iAminus], 15), 5) ^ C[iCminus], 3); A[iA] = A[iA] ^ B[(i + o1) % B.Length]; A[iA] = A[iA] ^ (B[(i + o2) % B.Length] & Neg(B[(i + o3) % B.Length])); A[iA] = A[iA] ^ M[pomak + i];

B[i] = RotL32(B[i], 1) ^ Neg(A[iA]); } }

for ( int j = 0; j < 36; j++) { A[j % A.Length] += C[(j + 3) % C.Length]; } }

3. Izvorni kod ostvarenja algoritma SIMD-256 public void SIMDCompress( uint [] A, uint [] B, uint [] C, uint [] D, int offset, bool lastBlock) { uint [] W = ProsirenjePoruke(offset, lastBlock);

uint [] a = new uint [4]; uint [] b = new uint [4]; uint [] c = new uint [4]; uint [] d = new uint [4];

for ( int i = 0; i < 4; i++) { a[i] = A[i] ^ ( uint )BitConverter .ToInt32(poruka, offset + i * 16); b[i] = B[i] ^ ( uint )BitConverter .ToInt32(poruka, offset + i * 16 + 4); c[i] = C[i] ^ ( uint )BitConverter .ToInt32(poruka, offset + i * 16 + 8); d[i] = D[i] ^ ( uint )BitConverter .ToInt32(poruka, offset + i * 16 + 12); }

int korak = 0; Round(a, b, c, d, W, 8 * 4 * 0, ref korak, new int [] { 3, 23, 17, 27 }); Round(a, b, c, d, W, 8 * 4 * 1, ref korak, new int [] { 28, 19, 22, 7 }); Round(a, b, c, d, W, 8 * 4 * 2, ref korak, new int [] { 29, 9, 15, 5 }); Round(a, b, c, d, W, 8 * 4 * 3, ref korak, new int [] { 4, 13, 10, 25 });

69

Step(a, b, c, d, A, 0, korak++, IF, 4, 13); Step(a, b, c, d, B, 0, korak++, IF, 13, 10); Step(a, b, c, d, C, 0, korak++, IF, 10, 25); Step(a, b, c, d, D, 0, korak++, IF, 25, 4);

for ( int i = 0; i < 4; i++) { A[i] = a[i]; B[i] = b[i]; C[i] = c[i]; D[i] = d[i]; } } public void Round( uint [] A, uint [] B, uint [] C, uint [] D, uint [] W, int wOffset, ref int korak, int [] pi) { for ( int i = 0; i < 4; i++) { Step(A, B, C, D, W, wOffset + 4 * i, korak, IF, pi[i], pi[(i + 1) % 4]); korak++; }

for ( int i = 0; i < 4; i++) { Step(A, B, C, D, W, wOffset + 4 * (i + 4), korak, MAJ, pi[i], pi[(i + 1) % 4]); korak++; } } public void Step( uint [] A, uint [] B, uint [] C, uint [] D, uint [] W, int wOffset, int korak, fi fja, int r, int s) { uint [] a = new uint [4]; uint [] b = new uint [4]; uint [] c = new uint [4]; uint [] d = new uint [4];

for ( int i = 0; i < 4; i++) { a[i] = A[i]; b[i] = B[i]; c[i] = C[i]; d[i] = D[i]; }

for ( int i = 0; i < 4; i++) { A[i] = RotL(d[i] + W[wOffset + i] + fja(a[i], b[i], c[i]), s) + RotL(a[i ^ (korak % 3 + 1)], r); B[i] = RotL(a[i], r); C[i] = b[i]; D[i] = c[i]; } }

70 public static uint [] ProsirenjePoruke( long offset, bool lastBlock) { int [] y1 = new int [128]; int [] y2 = new int [128];

int modulo216 = 1 << 16;

for ( int i = 0; i < y1.Length; i++) { y1[i] = 0; for ( int j = 0; j < 64; j++) { y1[i] += (poruka[offset + j] * ModularnoPotenciranje(alpha, i * j, 257)) % 257; } y1[i] += ModularnoPotenciranje(alpha, 127 * i, 257); if (lastBlock) { y1[i] += ModularnoPotenciranje(alpha, 125 * i, 257); } y1[i] %= 257; y1[i] = y1[i] > 128 ? y1[i] - 257 : y1[i]; y2[i] = (y1[i] * 233) % modulo216; y1[i] = (y1[i] * 185) % modulo216; }

uint [] Z = new uint [32 * 4]; for ( int i = 0; i < 32; i++) { for ( int j = 0; j < 4; j++) { if (i < 16) { Z[P[i] * 4 + j] = ( uint )((y1[(8 * i + 2 * j) % y1.Length] & 0x0000ffff) ^ (y1[(8 * i + 2 * j + 1) % y1.Length] << 16)); } else if (i < 24) { int ind128 = (8 * i + 2 * j - 128) % y2.Length; ind128 = ind128 < 0 ? ind128 + y2.Length : ind128; int ind64 = (8 * i + 2 * j - 64) % y2.Length; ind64 = ind64 < 0 ? ind64 + y2.Length : ind64; Z[P[i] * 4 + j] = ( uint )((y2[ind128] & 0x0000ffff) ^ (y2[ind64] << 16)); } else { int ind191 = (8 * i + 2 * j - 191) % y2.Length; ind191 = ind191 < 0 ? ind191 + y2.Length : ind191; int ind127 = (8 * i + 2 * j - 127) % y2.Length; ind127 = ind127 < 0 ? ind127 + y2.Length : ind127; Z[P[i] * 4 + j] = ( uint )((y2[ind191] & 0x0000ffff) ^ (y2[ind127] << 16)); } } } return Z; }

71