Algoritma Rijndael Advance Encryption Standard

2.7.2. Algoritma Rijndael

Rijndael menggunakan substitusi dan permutasi, dan sejumlah putaran cipher berulang, setiap putaran menggunakan kunci internal yang berbeda kunci setiap putaran disebut round key. Tetapi tidak seperti DES yang berorientasi bit, Rijndael beroperasi dalam orientasi byte. Selain itu, Rijndael tidak menggunakan jaringan Feistel seperti DES dan GOST. Garis besar Algoritma Rijndael yang beroperasi pada blok 128-bit dengan kunci 128-bit adalah sebagai berikut Munir, 2006 : 159 : 1. AddRoundKey : melakukan XOR antara state awal plainteks dengan cipher key. Tahap ini disebut juga initial round . 2. Putaran sebanyak Nr – 1 kali. Proses yang dilakukan pada setiap putaran adalah : a. SubBytes : substitusi byte dengan menggunakan table substitusi S-box. b. ShiftRows : pergeseran baris-baris array state secara wrapping. c. MixColumns : mengacak data di masing-masing kolom array state. d. AddRoundKey : melakukan XOR antara state sekarang dengan round key. 3. Final round : proses untuk putaran terakhir : 25 a. SubBytes b. ShiftRows c. AddRoundKey Garis besar algoritma enkripsi Rijndael diperlihatkan pada gambar 2.5. state AddRoundKey Chiper Key ⊕ initial round 1-SubBytes 2-ShiftRows 3-MixColumns 4-AddRoundKey Round Key 0 ⊕ 9 rounds SubBytes ShiftRows Round Key 10 AddRoundKey ⊕ final round Gambar 2.5. Diagram Proses Enkripsi Sumber : Munir, 2006 : 159 Algoritma Rijndael mempunyai tiga parameter Munir, 2006 : 161 : 1. plaintext : array yang berukuran 16-byte, yang berisi data masukan. 26 S 0,0 S 0,1 S 0,1 S 0,3 S 1,0 S 1,1 S 1,2 S 1,3 S 2,0 S 2,1 S 2,2 S 2,3 S 3,0 S 3,1 S 3,2 S 3,3 out out 4 out 8 out 12 out 1 out 5 out 9 out 13 out 2 out 6 out 10 out 14 out 3 out 7 out 11 out 15 2. ciphertext : array yang berukuran 16-byte, yang berisi hasil enkripsi. 3. key : array yang berukuran 16-byte, yang berisi kunci ciphering disebut juga cipher key. Dengan 16 byte, maka baik blok data dan kunci yang berukuran 128-bit dapat disimpan di dalam ketiga array tersebut 128 = 16 x 8. Selama kalkulasi plainteks menjadi cipherteks, status sekarang dari data disimpan di dalam array of bytes dua dimensi, state, yang berukuran NROWS x NCOLS. Untuk blok data 128-bit, ukuran state adalah 4 x 4. Elemen array state diacu sebagai S[r,c], dengan 0 r 4 dan 0 c Nb Nb adalah panjang blok dibagi 32. Pada AES-128, Nb = 12832 = 4. Pada awal enkripsi, 16-byte data masukan, in ,in 1 ,…,in 15 disalin ke dalam array state direalisasikan oleh fungsi CopyPlaintextToStatestate, plaintext seperti diilustrasikan sebagai berikut : input bytes state array output bytes in in 4 in 8 in 12 in 1 in 5 in 9 in 13 in 2 in 6 in 10 in 14 in 3 in 7 in 11 in 15 Operasi Enkripsidekripsi dilakukan terhadap array S, dan keluarannya ditampung di dalam array out. Skema penyalinan array masukan in ke array S adalah sebagai berikut : 27 2b 28 ab 09 7e ae f7 cf 15 d2 15 4f 16 a6 88 3c S [r, c] in [r + 4c] untuk 0 r 4 dan 0 c Nb Skema penyalinan array S ke array keluaran out : out [r + 4c] S [r, c] untuk 0 r 4 dan 0 c Nb Contoh elemen state dan kunci dalam notasi HEX : input state Cipher key 32 88 31 e0 43 5a 31 37 f6 30 98 07 a8 8d a2 34 hexadecimal notation: Ex: 32 = 0011 0010 1 byte 3hex 2hex

2.7.3. Transformasi