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