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