Representasi Data Algoritma AES

Encryption Standard. Dari hasil seleksi tahap pertama NIST memilih 15 algoritma, dan pada tahap kedua memilih 5 algoritma. NIST akhirnya mengumumkan standar baru pada November 2001. NIST memilih algoritma Rijndael yang dibuat oleh Dr. Vincent Rijmen dan Dr. Joan Daemen kriptografer dari Belgia sebagai algoritma AES Wiliam Stallings, 2003:140.

2.6.1. Representasi Data

Input dan output dari algoritma AES terdiri dair urutan data sebesar 128 bit. Urutan data yang sudah terbentuk dalam satu kelompok 128 bit tersebut disebut juga sebagai blok data atau plaintext yang nantinya akan dienkripsi mnjadi ciphertext. Cipher key dari AES terdiri dari key dengan panjang 128 bit, 192 bit, atau 256 bit. Urutan bit diberi nomor urut dari 0 sampai dengan n-1 dimana n adalah nomor urutan. Urutan data 8 bit secara beruntun disebut sebagai byte dimana byte ini adalah unit dasar dari operasi yang akan dilakukan pada blok data. Dalam algoritma AES, data sepanjang 128 bit akan dibagi- bagi menjadi array byte dimana setiap array byte ini terdiri dari 8 bit data input yang saling berurutan. Array byte ini direpsentasikan dalam bentuk : a a 1 a 2 ...a 15 2.1 Dimana : a = { input , input 1 ,..., input 7 } a 1 = { input 8 , input 9 ,..., input 15 } a 15 = { input 120 , input 121 ,..., input 127 } a n = { input 8n , input 8n+1 ,..., input 8n+7 } Operasi algoritma AES dilakukan pada sebuah state dimana state sendiri adalah sebuah array byte dua dimensi. Setiap state pasti mempunyai jumlah baris yang tetap, yaitu 4 baris, sedangkan jumlah kolom tergantung dari besarnya blok data. Baris pada state mempunyai indeks nomor row r dimana 0 ≤ r 4, sedangkan kolom mempunyai indeks nomor coloumn c dimana 0 ≤ c Nb. Nb sendiri adalah besarnya blok data dibagi 32. Pada saat permulaan, input bit pertama kali akan disusun menjadi suatu array byte dimana panjang dari array byte yang digunakan pada AES adalah sepanjang 8 bit data. Array byte inilah yang nantinya akan dimasukan atau dikopi ke dalam state dengan urutan : s[r,c] = in[r + 4c] untuk 0 ≤ r 4 dan 0 ≤ c Nb 2.2 Sedangkan dari state akan dikopi ke output dengan urutan : out[r + 4c] = s[r,c] untuk 0 ≤ r 4 dan 0 ≤ c Nb 2.3 Gambar 2.7. Masukan dan keluaran Array State Sumber: Renaldi Munir, 2006:158

2.6.2. Algoritma AES

Rinjdael mendukung panjang kunci dari 128 sampai 256 bit dengan step 32 bit. Karena AES menetapkan panjang kunci adalah 128, 192, dan 256, maka dikenal sebagai AES-128, AES-192, dan AES-256, yang perbedaannya akan ditunjukan oleh table 2.1. Tabel 2.1. Tiga buah versi AES Sumber:Rinaldi Munir, 2006:158 Panjang Kunci Nk words Ukuran Blok Nb words Jumlah Putaran Nr AES -128 4 4 10 AES -196 6 4 12 AES -256 8 4 14

2.6.2.1. Enkripsi

Proses enkripsi pada algoritma AES terdiri dari 4 jenis transformasi bytes, yaitu SubBytes, ShiftRows, MixColumns, dan AddRounkey. Pada awal proses enkripsi, input yang telah dikopikan ke dalam state akan mengalami transformasi byte AddRoundKey. Setelah itu state akan mengalami transformasi SubBytes, ShiftRows, MixColumns, dan AddRoundKey secara berulang-ulang sebanyak Nr jumlah putaran. Proses ini dalam algoritma AES di sebut juga round function. Round yang terakhir agak berbeda dengan round-round sebelumnya dimana pada round terakhir state tidak mengalami transformasi MixColumns. Gambar 2.8. Diagram alir proses enkripsi Sumber: httpwww.cert.or.id

2.6.2.1.1. SubBytes

Transformasi SubBytes memetakan setiap byte dari array state dengan menggunakan table subsitusi S-box yang ditunjukkan oleh tabel 2.2. Tabel2.2. Tabel S-box dalam transformasi Subbytes Sumber : Wiliam Stalling,2003:152 Cara pensubsitusiannya adalah sebagai berikut. Untuk setiap byte pada array state, misalkan S[r, c] = xy adalah digit heksadesimal dari nilai S[r, c], maka nilai subsitusi yang dinyatakan dengan S[r, c], adalah elemen dalama S-box yang merupakan perpotongan garis x dengan kolom y, gambar 2.12 memperlihatkan transformasi SubBytes. Gambar 2.9. Transformasi SubBytes Sumber : http:id.wikipedia.orgwiki Berkas:AES-SubBytes.svg

2.6.2.1.2. ShiftRows

Transformasi ShiftRows pada dasarnya adalah proses pergeseran bit dimana bit paling kiri akan dipindahkan menjadi bit paling kanan rotasi bit. Transformasi ini diterapkan pada baris 2, baris3, dan baris 4. Baris 2 akan mengalami pergeseran bit sebanyak satu kali, sedangkan baris 3 dan baris 4 masing –masing mengalami pergeseran bit sebanyak dua kali dan tiga kali. Gambar 2.10. Transformasi ShiftRows Sumber : http:student.ceid.upatras.gr

2.6.2.1.3. MixColumns

MixColumns mengoperasikan setiap elemen yang berada dalam satu kolom pada state. Elemen pada kolom dikalikan dengan suatu polinomial tetap ax = {03}x 3 + {01}x 2 + {01}x + {02}. Secara lebih jelas, transformasi MixColumns dapayt dilihat pada perkalian matriks berikut ini : ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ c c c c c c c c s s s s s s s s , 3 , 2 , 1 , , 3 , 2 , 1 , 02 01 01 03 03 02 01 01 01 03 02 01 01 01 03 02 } 02 { } 03 { } 03 { } 02 { } 03 { } 02 { } 03 { } 02 { , 3 , 2 , 1 , , 3 , 3 , 2 , 1 , , 2 , 3 , 2 , 1 , , 1 , 3 , 2 , 1 , , c c c c c c c c c c c c c c c c c c c o c s s s s s s s s s s s s s s s s s s s s • ¯ ¯ ¯ • = • ¯ • ¯ ¯ = ¯ • ¯ • ¯ = ¯ ¯ • ¯ • =

2.6.2.1.4. AddRoundKey

Pada proses AddRoundKey sebuah round key ditambahkan pada state dengan operasi bitwise XOR. Setiap round key terdiri dari Nb Word dimana tiap word tersebut akan dijumlahkan dengan word atau kolom yang bersesuaian dari state sehingga : [ ] [ ] [ ] Nb c w s s s s s s s s c Nb round c c c c c c c c untuk , , , , , , , 3 , 2 , 1 , , 3 , 2 , 1 , £ £ ¯ = + 2.5 [w i ] adalah word dari key yang bersesuaian dimana i = roundNb+c. Transformasi AddRoundKey diimplementasikan pertama kali pada round = 0, dimana key yang digunakan adalah initial key key yang dimasukan oleh kriptografer dan belum mengalami proses key expansion.

2.6.2.2. Dekripsi

Transformasi cipher dapat dibalikan dan diimplementasikan dalam arah yang berlawanan untuk menghasilkan inverse cipher yang mudah dipahami untuk algoritma AES. Transformasi byte yang digunakan pada invers cipher adalah InvShiftRows, InvSubBytes, InvMixColumns, dan AddroundKey. Algoritma dekripsi dapat dilihat pada skema berkut ini : Gambar2.11. Diagram alir proses dekripsi Sumber : http:www.cert.or.id

2.6.2.2.1 InvShiftRows

InShiftRows adalah transformasi byte yang berkebalikan dengan transformasi ShiftRows. Pada transformasi InvShiftRows, dilakukan pergeseran bit ke kanan sedangkan pada ShiftRows dilakukan pergeseran bit ke kiri. Pada baris kedua, pergeseran bit dilakukan sebanyak 3 kali, sedangkan pada baris ketiga dan baris keempat, dilakukan pergeseran bit sebanyak dua kali dan satu kali. Gambar 2.12. Transformasi InvShiftRows Sumber : http:student.ceid.upatras.gr

2.6.2.2.2. InvSubBytes

InvSubBytes juga merupakan transformasi bytes yang berkebalikan dengan transformasi SubBytes. Pada InvSubBytes, tiap elemen pada state dipetakan dengan menggunakan tabel inverse S-Box. Tabel 2.3. Tabel Inverse S-box dalam transformasi InvSubbytes Sumber : William Stalling, 2003:152 Perkalian invers yang dilakukan pada transformasi InvSubBytes ini sama dengan perkalian invers yang dilakukan pada transformasi SubBytes.

2.6.2.2.3. InvMix Columns

Pada InvMix Columns, kolom-kolom pada tiap state word akan dipandang sebagai polinom atas GF2 8 dan mengalikan modulo x 4 + 1 dengan polinom tetap a -1 x ang diperoleh dari : a -1 x= {0B}x 3 + {0D}x 2 + {09}x + {0E}. 2.6 Atau dalam matriks : x s x a x s ˜ = 2.7 ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ c c c c c c c c s s s s E D B B E D D B E D B E s s s s , 3 , 2 , 1 , , 3 , 2 , 1 , 09 09 09 09 } 02 { } 03 { } 03 { } 02 { } 03 { } 02 { } 03 { } 02 { , 3 , 2 , 1 , , 3 , 3 , 2 , 1 , , 2 , 3 , 2 , 1 , , 1 , 3 , 2 , 1 , , c c c c c c c c c c c c c c c c c c c o c s s s s s s s s s s s s s s s s s s s s • ¯ ¯ ¯ • = • ¯ • ¯ ¯ = ¯ • ¯ • ¯ = ¯ ¯ • ¯ • =

2.6.2.2.4. Inverse AddRoundKey

Transformasi Inverse AddRoundkey tidak mempunyai perbedaan dengan transformasi AddRoundKey karena pada tranformasi ini hanya dilakukan operasi penambahan sederhana dengan menggunakan operasi bitwise XOR.

2.6.2.3. Ekspansi Kunci

Algoritma AES mengambil kunci cipher, K, dan melakukan rutin ekspansi kunci key expansion untuk membentuk key schedule. Ekspansi kunci menghasilkan total NbNr+1 word. Algoritma ini membutuhkan set awal key yang terdiri dari Nb word, dan setiap round Nr membutuhkan data kunci sebanyak Nb word. Hasil key schedule terdiri dari array 4 byte word linear yang dinotasikan dengan [w i ]. SubWord adalah fungsi yang mengambil 4 byte word input dan mengaplikasikan S-Box ke tiap-tiap data 4 byteuntuk menghasilkan word output. Fungsi RotWord mengambil word [a , a 1 , a 2 , a 3 ] sebagai input, melakukan pergeseran siklik, dan mengembalikan word [a 1 , a 2 , a 3 , a ]. Rcon[i] terdiri dari nilai-nilai yang diberikan oleh [x i-1 , {00}, {00}, {00}], dengan x i-1 sebagai pangkat dari x x dinotasikan sebagai {02} dalam field GF2 8 . Pseudocode dari proses ekspansi key dapat dilihat seperti yang ada di bawah berikut ini : Gambar 2.13. Pseudcode proses ekspansi kunci Sumber : http:student.ceid.upatras.gr Dari pseudocode dapat dilihat bahwa word ke Nk pertama pada ekspansi kunci berisi kunci cipher. Setiap word berikutnya, w[i], sama dengan XOR dari word sebelumnya, w[i-1] dan word Nk yang ada pada posisi sebelumnya, w[i- Nk]. Untuk word pada posisi yang merupakan kelipatan Nk, sebuah tranformasi diaplikasikan pada w[i-1] sebelum XOR, lalu dilanjutkan oleh XOR dengan konstanta round, Rcon[i]. Transformasi ini terdiri dari pergeseran siklik dari byte data dalam suatu word RotWord, lalu diikuti aplikasi dari lookup tabel untuk semua 4 byte data dari word SubWord.

2.7. Bahasa Pemrograman C