ENKRIPSI PESAN RAHASIA MENGGUNAKAN ALGORITMA (Advanced Encryption Standard ) AES : RIJNDAEL
Muhamad Farid Fachrurozi
PROGRAM STUDI MATEMATIKA JURUSAN MIPA FAKULTAS SAINS DAN TEKNOLOGI UNIVERSITAS ISLAM NEGERI SYARIF HIDAYATULLAH JAKARTA 2006 M / 1427 H
ENKRIPSI PESAN RAHASIA MENGGUNAKAN ALGORITMA (Advanced Encryption Standard ) AES : RIJNDAEL
Skripsi Sebagai Salah Satu Syarat Untuk Memperoleh Gelar Sarjana Sains Fakultas Sains dan Teknologi Universitas Islam Negeri Syarif Hidayatullah Jakarta
Oleh :
Muhamad Farid Fachrurozi 102094026471
PROGRAM STUDI MATEMATIKA JURUSAN MIPA FAKULTAS SAINS DAN TEKNOLOGI UNIVERSITAS ISLAM NEGERI SYARIF HIDAYATULLAH JAKARTA
2006 M / 1427 H
ENKRIPSI PESAN RAHASIA MENGGUNAKAN ALGORITMA (Advanced Encryption Standard ) AES : RIJNDAEL
Sebagai Salah Satu Syarat Untuk Memperoleh Gelar Sarjana Sains Pada Fakultas Sains dan Teknologi Universitas Islam Negeri Syarif Hidayatullah Jakarta
Oleh :
Muhamad Farid Fachrurozi 102094026471
Menyetujui, Pembimbing I
Pembimbing II
Hermawan Setiawan, M.Si M.ScTech NIP. 250 000 505
Taufik Edy Sutanto, NIP. 150 377 447 Mengetahui, Ketua Jurusan MIPA
Dr. Agus Salim, M.Si NIP. 150 294 451 JURUSAN MIPA PROGRAM STUDI MATEMATIKA FAKULTAS SAINS DAN TEKNOLOGI UIN SYARIF HIDAYATULLAH JAKARTA Dengan ini menyatakan bahwa skripsi yang ditulis oleh : Nama
: Muhamad Farid Fachrurozi
NIM
: 102094026471
Program Studi : Matematika Judul Skripsi : Enkripsi
Pesan
Rahasia
Menggunakan
Algoritma
(Advanced Encryption Standard ) AES:Rijndael
Dapat diterima sebagai syarat kelulusan untuk memperoleh gelar Sarjana Sains pada Jurusan MIPA Program Studi Matematika, Fakultas Sains dan Teknologi Universitas Islam Negeri Syarif Hidayatullah Jakarta.
Jakarta, Juli 2006 Menyetujui, Dosen Pembimbing Pembimbing I
Hermawan Setiawan, M.Si M.ScTech NIP. 250 000 505
Pembimbing II
Taufik Edy Sutanto, NIP. 150 377 447
Mengetahui, Dekan Fakultas Sains dan Teknologi
Ketua Jurusan MIPA
Dr. Syopiansyah Jaya Putra, M.Sis NIP. 150 317 965
Dr. Agus Salim, M.Si NIP. 150 294 451
PENGESAHAN UJIAN Skripsi yang berjudul “Enkripsi Pesan Rahasia Menggunakan Algoritma (Advanced Encryption Standard ) AES:Rijndael”. Telah diuji dan dinyatakan lulus dalam sidang Munaqosyah Fakultas Sains dan Teknologi, Universitas Islam Negeri Syarif Hidayatullah Jakarta pada hari Jumat, 14 Juli 2006. Skripsi ini telah diterima sebagai salah satu syarat untuk memperoleh gelar sarjana strata satu (S1) pada Jurusan MIPA Program Studi Matematika. Jakarta, Juli 2006 Tim Penguji Penguji I
Penguji II
Dr. Agus Salim, M.Si NIP. 150 294 451
Nur Inayah, S.Pd, M.Si NIP. 150 326 911
Mengetahui, Pembimbing I
Hermawan Setiawan, M.Si M.ScTech NIP. 250 000 505
Pembimbing II
Taufik Edy Sutanto, NIP. 150 377 447
Menyetujui, Dekan Fakultas Sains dan Teknologi
Dr. Syopiansyah Jaya Putra, M.Sis NIP. 150 317 965
Ketua Jurusan MIPA
Dr. Agus Salim, M.Si NIP. 150 294 451
PERNYATAAN
DENGAN INI SAYA MENYATAKAN BAHWA SKRIPSI INI BENARBENAR HASIL KARYA SENDIRI YANG BELUM PERNAH DIAJUKAN SEBAGAI SKRIPSI ATAU KARYA ILMIAH PADA PERGURUAN TINGGI ATAU LEMBAGA MANAPUN.
Jakarta, Juli 2006
Muhamad Farid Facrurozi 102094026471
ABSTRACT
Muhamad Farid Fachrurozi, Enkripsi Pesan Rahasia Menggunakan Algoritma (Advanced Encryption Standard) AES:Rijndael. (Di bawah bimbingan Hermawan Setiawan dan Taufik Edy Sutanto). Perkembangan teknologi yang semakin pesat membantu pelayanan masyarakat luas dari segi pengiriman dan penyimpanan data. Dibalik manfaat tersebut ada bahaya yang mengancam yang kurang disadari oleh user (pengguna teknologi) pemula, yaitu penyadapan dan perubahan data. Perlu adanya suatu solusi yang dapat menyikapi dalam menjaga keamanan tersebut, kriptologi merupakan salah satu jawabannya. Algoritma kriptologi cukup banyak dan berkembang pesat, salah satunya adalah (Advanced Encryption Standard) AES yang dicetuskan oleh Rijmen dan Daemen. Algoritma ini menggunakan 4 teknik yaitu : SubBytes(), ShiftRows(), MixColoums(), dan AddRoundKey(). Keempat teknik ini yang menjadikan AES mempunyai kinerja yang baik, ditunjukan dari segi keamanan, kesederhanaan struktur dan fleksibelitas yang membawa AES sebagai pemenang algoritma paling optimal untuk menggantikan Algoritma (Data Encryption Standard) DES yang pernah popular tahun 80-an.
Key Word : Finite Field GF(28), Algoritma AES:Rijndael, dan Kriptografi.
ABSTRAK
Muhamad Farid Fachrurozi, Enkripsi Pesan Rahasia Menggunakan Algoritma (Advanced Encryption Standard) AES:Rijndael. (Di bawah bimbingan Hermawan Setiawan dan Taufik Edy Sutanto). Perkembangan teknologi yang semakin pesat membantu pelayanan masyarakat luas dari segi pengiriman dan penyimpanan data. Dibalik manfaat tersebut ada bahaya yang mengancam yang kurang disadari oleh user (pengguna teknologi) pemula, yaitu penyadapan dan perubahan data. Perlu adanya suatu solusi yang dapat menyikapi dalam menjaga keamanan tersebut, kriptologi merupakan salah satu jawabannya. Algoritma kriptologi cukup banyak dan berkembang pesat, salah satunya adalah (Advanced Encryption Standard) AES yang dicetuskan oleh Rijmen dan Daemen. Algoritma ini menggunakan 4 teknik yaitu : SubBytes(), ShiftRows(), MixColoums(), dan AddRoundKey(). Keempat teknik ini yang menjadikan AES mempunyai kinerja yang baik, ditunjukan dari segi keamanan, kesederhanaan struktur dan fleksibelitas yang membawa AES sebagai pemenang algoritma paling optimal untuk menggantikan Algoritma (Data Encryption Standard) DES yang pernah popular tahun 80-an.
Kata Kunci : Finite Field GF(28), Algoritma AES:Rijndael, dan Kriptografi.
KATA PENGANTAR Sembah dan sujud syukur bagi Dzat Yang Maha Sempurna, yang telah menganugrahkan akal dan memancarkan hidayah-Nya bagi manusia. Ya Robbal Izzatii... terimalah setiap titik keringat dan air mata yang menggenangi perjuangan dalam menyelesaikan studi, khususnya skripsi ini, sebagai satu tanda bukti syukur dan pengabdianku pada-Mu dan jadikan ia
pemicu semangat jihadku untuk
mencapai Ridho-Mu. Sholawat dan salam bagi Baginda Rosulullah SAW, suri tauladan dalam menjalani hidup ini. Ya Bahjatan nafsii ... semoga Allah memperkenankan ku menatap indah paras dan akhlakmu dan meleburkan kerinduanku padamu kelak di surga-Nya. Amin. Dengan seluruh daya dan upaya dan atas keridhoan Allah SWT, akhirnya penulis dapat menyelesaikan skripsi ini. Meskipun demikian, penulis sadar bahwa dalam mengerjakannya banyak bantuan dari berbagai pihak. Oleh karena itu pada kesempatan ini penulis ingin mengucapkan terima kasih yang sebesar-besarnya kepada :
1.
Ayahanda dan ibunda serta teteh dan adik-adikku tercinta juga seluruh keluarga besarku serta nenek ”nyak” yang selalu memberikan do’a, kasih sayang, dukungan dan semangat yang tiada hentinya.
2.
Bapak Dr. Syopiansyah Jaya Putra, M.Sis, Selaku Dekan Fakultas Sains dan Teknologi.
3.
Bapak Dr. Agus Salim, M.Si, selaku Ketua Jurusan MIPA dan sekaligus dosen penguji I. Terima kasih atas bimbingan yang telah bapak berikan.
4.
Ibu Nur Inayah, S.Pd, M.Si, selaku Ketua Program Studi Matematika dan sekaligus dosen penguji II yang tidak bosan memberikan nasehat dan semangat kepada penulis.
5.
Bapak Hermawan Setiawan, M.Si, selaku dosen pembimbing yang bersamasama dengan Bapak Taufik Edy Sutanto, M.ScTech telah memberikan bimbingan dan saran-saran tiada letih dalam penyusunan skripsi penulis.
6.
Seluruh dosen Jurusan MIPA Program Studi Matematika yang sudah mengajarkan ilmu-ilmu yang bermanfaat bagi penulis selama penulis kuliah.
7.
Seluruh staf akademik Fakultas Sains dan Teknologi diantaranya Pa Gun, Bu Opah, dan semuanya yang tidak dapat penulis sebutkan satu-persatu, yang dengan sabar melayani masalah administrasi mahasiswa program studi Matematika khususnya penulis sendiri.
8.
Pengelola Perpustakaan Fakultas Sains dan Teknologi yang telah memberikan fasilitas untuk mengadakan studi kepustakaan.
9.
Teman-teman seperjuangan Matematika angkatan 2002 Andi, Hata, dan Bambang yang mulai menata masa depan. Tidak lupa Abub, Sopi, Mute, Ubed semoga sukses selalu. Untuk Maia, Cie-cie, Anie, Indrie, dan Bulan sebagai team sukses konsumsi serta dadar dan muntiani sekawan sejalan. Spesial untuk Ismah yang menginspirasikan dan memberi semangat selalu. Semua kawan-kawan seatap-selantai yang tidak bisa penulis sebutkan satu per satu.
10.
Adik-adik kelasku Matematika semoga kalian bisa menjaga kerahasiaan data kalian, yang ingin aku katatakan hanya “Maju Trus Kriptografi Ku !!! Semoga kalian bisa meneruskan.!!!! ”. Penulis menyadari bahwa masih banyak kelemahan dan kekurangan yang
terdapat dalam skripsi ini, yang masih harus diperbaiki. Akhir kata penulis berharap semoga skripsi ini dapat bermanfaat bagi kita semua.
Jakarta, Juli 2006
Penulis
DAFTAR ISI
HALAMAN JUDUL ....................................................................................
i
HALAMAN PERNYATAAN .......................................................................
ii
KATA PENGANTAR ..................................................................................
iii
DAFTAR ISI ................................................................................................
vi
DAFTAR TABEL .......................................................................................... ix DAFTAR GAMBAR ...................................................................................... x DAFTAR LAMPIRAN .................................................................................
xi
BAB I. PENDAHULUAN .........................................................................
1
1.1. Latar Belakang ......................................................................
1
1.2. Perumusan Masalah ..............................................................
4
1.3. Batasan Masalah ....................................................................
4
1.4. Tujuan Penelitian ...................................................................
8
1.5. Sistematika Penulisan ...........................................................
9
BAB II. LANDASAN TEORI ......................................................................
6
2.1. Kriptografi ..............................................................................
6
2.1.1. Kriptografi Klasik .......................................................
7
2.1.1.1. Teknik Subtitusi ............................................
8
2.1.1.2. Teknik Tranposisi (Permutasi) ......................
8
2.1.2. Kriptografi Modern ...................................................
11
2.1.2.1. Kerahasiaan Data ........................................
13
2.1.2.2. Integritas Data ..............................................
14
2.1.2.3. Keaslian Data ...............................................
14
2.2. Algoritma .............................................................................
15
2.2.1. Algoritma Simetris ....................................................
16
2.2.1.1. Stream Cipher ..............................................
18
2.2.1.2. Block Cipher ................................................
19
2.2.2. Algoritma Asimetris ..................................................
22
2.3. Operasi Aljabar ....................................................................
24
2.3.1. Field GF(28) ..............................................................
24
2.3.1.1. Penjumlahan .................................................
25
2.3.1.2. Perkalian .......................................................
26
2.3.1.3. Perkalian dengan Variabel x .........................
27
2.3.2. Koefisien Polinom pada GF(28) .................................
27
BAB III. AES:RIJNDAEL ...........................................................................
30
3.1. Pendahuluan .........................................................................
30
3.2. Representasi Data .................................................................
33
3.3. Enkripsi ................................................................................
35
3.3.1. SubBytes() .................................................................
36
3.3.2. ShiftRows() ................................................................
37
3.3.3. MixColoums() ............................................................
38
3.3.4. AddRoundKey() .........................................................
39
3.4. Ekspansi Kunci ....................................................................
40
3.5. Dekripsi ................................................................................
41
3.5.1. InvSubBytes() ............................................................
42
3.5.2. InvShiftRows() ...........................................................
42
3.5.3. InvMixColoums() ......................................................
43
BAB IV. SIMULASI ...................................................................................
44
4.1. Simulasi Cipher (Enkripsi) ..................................................
44
4.1.1. AddRoundKey() ...........................................................
45
4.1.2. SubBytes() ..................................................................
46
4.1.3. ShiftRows() ..................................................................
47
4.1.4. MixColoums() .............................................................
47
4.2. Simulasi Invers Cipher (Dekripsi) .........................................
51
4.2.1. InvShiftRows() ............................................................
52
4.2.2. InvSubBytes() .............................................................
53
4.2.3. AddRoundKey() ..........................................................
53
4.3. Simulasi Ekspansi Kunci .....................................................
54
BAB V. PENUTUP ..................................................................................... 57 5.1. Kesimpulan ........................................................................... 57 5.2. Penelitian Selanjutnya ........................................................... 57
REFERENSI ................................................................................................. 59 LAMPIRAN .................................................................................................. 61
DAFTAR TABEL
Tabel 2-1 Subtitusi Caesar Cipher ( n+3 ) ...................................................... 7 Tabel 2-2 Representasi Bit, Heksadesimal, dan Desimal .............................. 12 Tabel 2-3 Operasi XOR ................................................................................ 12 Tabel 3-1 Pengindeks-an Aliran Input .......................................................... 34 Tabel 3-2 S-Box ............................................................................................ 37 Tabel 3-3 S-Box-1 .......................................................................................... 42
DAFTAR GAMBAR
Gambar 2.1. Proses Umum Enkripsi dan Dekripsi ....................................... 16 Gambar 2.2. Proses Enkripsi dan Dekripsi pada Algoritma Simetris ............ 17 Gambar 2.3. Proses Enkripsi pada Stream Cipher ........................................ 19 Gambar 2.4. Proses Pemetaan Data pada Block Cipher ................................ 20 Gambar 2.5. Proses Enkripsi dan Dekripsi pada Block Cipher....................... 21 Gambar 2.6. Proses Enkripsi dan Dekripsi pada Algoritma Asimetris .......... 22 Gambar 3.1. SubBytes(),ShiftRows(),MixColoums(),dan AddRoundKey() .... 32 Gambar 3.2. Algoritma AES-128 .................................................................. 33 Gambar 3.3. State Array pada Input dan Output ............................................ 35 Gambar 3.4. State Array Ekivalen pada Word Array ..................................... 35 Gambar 3.5. Subtitusi Bytes .......................................................................... 36 Gambar 3.6. Shift Rows................................................................................... 38 Gambar 3.7. Mix Coloums ............................................................................ 39 Gambar 3.8. Operasi XOR pada AddRoundKey() .......................................... 39 Gambar 3.9. Invers Shift Rows ....................................................................... 43
DAFTAR LAMPIRAN
LAMPIRAN 1 : SIMULASI CIPHER .......................................................... 61 LAMPIRAN 2 : SIMULASI INVERS CIPHER ............................................ 62 LAMPIRAN 3 : SIMULASI KUNCI EKSPANSI ......................................... 63 LAMPIRAN 4 : TABEL ASCII ................................................................... 64
BAB I PENDAHULUAN
1.1. Latar Belakang Perkembangan Teknologi komputer dan telekomunikasi yang cukup pesat masa kini berpengaruh pada penggunaan informasi. Sehingga melahirkan sebuah istilah “information-based society” [10] , dimana kemampuan untuk mengakses dan menyediakan informasi secara cepat dan akurat menjadi sangat esensial bagi sebuah organisasi atau lembaga, baik organisasi komersial (perusahaan), perguruan tinggi (akademisi), lembaga pemerintahan (birokrasi), maupun individual (pribadi). Seiring
dengan
perkembangan
Teknologi
telekomunikasi
dan
penyimpanan data dengan menggunakan komputer tersebut, memungkinkan pengiriman data jarak jauh yang relatif cepat dan murah. Dilain pihak pengiriman data jarak jauh melalui jaringan internet, gelombang radio maupun media lain yang digunakan masyarakat luas (public) sangat memungkinkan pihak lain dapat menyadap dan mengubah data yang dikirim. Perkembangan internet salah satunya sebagai sarana komunikasi merupakan teknologi yang mampu menyikapi persoalan-persolan yang semakin kompetitif saat ini, terbukti dengan pemakai internet yang sudah mendunia. Semakin mudahnya mendapatkan akses dari internet membuat dunia seolah-olah tidak ada batasan lagi, sehingga adanya internet memang sejalan dengan era globalisasi dan kebijakan pasar bebas.
Dibalik perkembangan dan pemanfaatan internet yang demikian pesat, ternyata ada bahaya yang mengancam yakni fenomena yang kurang disadari oleh para user (pengguna internet) pemula, yaitu user yang kurang memahami tentang keamanan data [14] . Untuk meminimalkan kemungkinan terjadinya tindak kejahatan di internet inilah diperlukan teknologi keamanan informasi, khususnya sistem dan mesin enkripsi (penyandian). Enkripsi merupakan bagian dari cabang kriptografi, dimana algoritma kriptografi untuk penyandian telah mengalami perkembangan dan perbaikan dari masa ke masa. Sehingga proses tersebut menghasilkan algoritma yang memuaskan, misalnya DES, IDEA, RSA, dan lain-lain. Salah satu algoritma yang cukup popular dan kuat sehingga tidak mudah dipecahkan pada tahun 80-an adalah (Data Encryption Standard) DES. DES merupakan nama dari sebuah algoritma untuk mengenkripsi data yang dikeluarkan oleh Federal Information Processing Standard (FIPS) di Amerika. Algoritma tersebut dikembangkan oleh IBM, NSA, NBS yang berperan penting dalam pengembangan algoritma DES. Ada sedikit modifikasi dan perbaikan pada perkembangan algoritma DES yaitu algoritma Triple DES, cara ini dipakai untuk membuat algoritma DES lebih kuat lagi. Akan tetapi algoritma yang digunakan sama, hanya saja algoritma Triple DES melakukan enkripsi algoritma DES sebanyak tiga kali dengan menggunakan dua kunci yang berbeda. NIST (National Institute of Standards and Technology) yang berada di Amerika setiap lima tahun sekali mensertifikasi ulang algoritma DES sejak
tahun 1977, disebabkan banyaknya kelemahan pada algoritma DES, kini NIST tidak lagi mensertifikati sejak tahun 1993 (penyertifikatan terakhir untuk DES). Salah satu kelemahan DES dutunjukkan oleh Michael Wierner (1995) yang merancang sebuah chip untuk melakukan brute - force attack (teknik menemukan atau memecahkan kunci) pada algoritma DES-56 bit. Chip tersebut dapat menemukan kunci rahasia dalam waktu rata-rata 3,5 jam dan kunci itu dijamin dapat ditemukan dalam waktu 7 jam [10] dan [12] . Selanjutnya dikembangkanlah suatu algoritma baru yang diharapkan dapat menggatikan DES yaitu (Advanced Encryption Standard) AES. AES yang lahir pada November 2001 dengan pencetus Rijmen dan Daemen (Rijndael) cukup mengejutkan dunia kriptografi, karena pada saat itu menyisihkan empat finalis algoritma lainnya yang cukup popular yaitu MARS, RC6, Serpent, dan Twofish. Terbukti dengan diberlakukan AES secara efektif tahun 2002, AES mendapatkan sertifikat dari NIST saja sudah mencapai 144 produk sampai bulan Mei 2004. AES memang dipersiapkan untuk penerapan software, firmware, hardware atau kombinasinya. Jadi, suatu hal yang cukup wajar bila usaha pengembangannya banyak dan bervariasi [1] . Selain keunggulan yang telah disebutkan, Algoritma AES:Rijndael juga dirancang untuk memiliki properti ketahanan terhadap semua jenis serangan yang telah diketahui, kesederhanaan rancangan, dan kekompakan kode serta kecepatan koputasi pada berbagai platform. Rijndael cipher (AES:Rijndael)
dapat dikategorikan sebagai iterated
block cipher dengan panjang blok (128 bit) dan panjang kunci yang dapat
dipilih secara independent sebanyak 128, 192, atau 256 bit. Sebagai pembuktian akan ditunjukkan salah satu kekuatannya dalam bentuk desimal yaitu kira-kira 3.4 x 1038 kemungkinan untuk kunci 128 bit, 6.2 x 1057 kemungkinan untuk kunci 192 bit, dan 1.1 x 1077 kemungkinan untuk kunci 256 bit. Pengukuran dan perbandingan dari kekuatan relatif algoritma AESRijndael pada algoritma DES diilustrasikan sebagai berikut : “Jika komputer membutuhkan waktu selama 1 detik untuk memecahkan kunci algoritma DES dengan panjang kunci 256 bit, maka komputer yang sama dengan panjang kunci 256 bit juga akan membutuhkan waktu 149 trilyun (149 x 1012) tahun untuk memecahkan kunci pada algoritma AESRijndael”.
1.2. Rumusan Masalah Masalah yang akan dibahas pada penelitian ini adalah simulasi algoritma AES pada pesan rahasia menggunakan panjang kunci 128 bit.
1.3. Batasan Masalah Penelitian tugas akhir ini dibatasi pada simulasi Model Enkripsi Simetris – Block Cipher menggunakan algoritma AES:Rijndael dengan panjang kunci 128 bit.
1.4. Tujuan Penelitian
Secara umum tujuan penelitian ini adalah mensimulasikan algoritma AES Rijndael dengan enkripsi seacak mungkin (berusaha menghilangkan pola) sehingga lebih sulit untuk dipecahkan.
1.5. Sistematika Penulisan BAB I, menjelaskan tentang fenomena pentingnya pengamanan data, kriptografi salah satu jawabannya. Algoritma kriptografi yang cukup popular pada tahun 80-an adalah DES akan tetapi diganti dengan AES yang mempunyai cukup banyak kelebihan dan keunggulan dari DES, terutama dalam kekuatan pemecahan kunci. BAB II, menjelaskan kriptografi dari sejarahnya, teknik, dan metode serta landasan matematika yang menjadi dasar terbentuknya teknik-teknik yang digunakan
Algoritma AES, beberapa teknik dalam AES dibangun dari
operasi matematika khususnya pada AES adalah GF(28). BAB III, menjelaskan teknik yang membangun algoritma AES, tetapi sebelumnya dijelaskan dulu tentang pengertian dan kemampuan AES sebagai penghantar kepada algoritmanya. BAB IV, menjelaskan simulasi program sebagai hasil dari gambaran model Algoritma AES:Rijndael dengan panjang kunci 128 bit. BAB V, menjelaskan kesimpulan dan penelitian lebih lanjut.
BAB II LANDASAN TEORI
2.1. Kriptografi Kriptografi berasal dari Bahasa Yunani, yaitu kripto dan graphia. Menurut bahasa kripto berarti rahasia (secret) dan graphia berarti tulisan (writing). Menurut terminologi, kriptografi adalah
ilmu atau seni untuk menjaga
keamanan pesan ketika pesan dikirim dari suatu tempat ke tempat yang lain [1] . Secara keseluruhan kriptografi dapat disimpulkan sebagai ilmu yang mempelajari tentang pengacakan pesan dengan fungsi matematika agar tidak bisa dibaca oleh pihak yang tidak berwenang. Kriptografi merupakan studi matematika yang mempunyai hubungan dengan aspek keamanan informasi seperti integritas data dan keaslian data. Dalam penerapannya, kriptografi merupakan suatu metode enkripsi atau penyandian data yang hanya diketahui atau berarti oleh suatu kelompok pengguna tertentu. Metoda ini telah dikenal sejak lama, salah satu contoh penggunaannya pada masa ke-Kaisaran Romawi Kuno. Pada waktu itu Julius Caesar tidak menginginkan berita atau pesan yang dibawa oleh kurir-kurirnya jatuh kepada pihak lawan. Oleh karena itu, beliau menggunakan sistem substitusi sederhana, yang kini disebut dengan Caesar Cipher. Algoritma sistem Caesar ini sangat sederhana, yaitu setiap huruf digeser atau ditambah tiga dengan modulo 26 sehingga huruf A menjadi D, huruf B menjadi E, dan seterusnya (Tabel 2.1.).
Tabel 2.1. Subtutusi Caesar Cipher (n + 3) A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
A
B
C
Dalam kriptografi ada beberapa istilah yang sering digunakan, antara lain sebagai berikut :
1. Plaintext adalah informasi asli sebelum dienkripsi atau teks terang. 2. Enkripsi adalah proses kriptografi dari plaintext menjadi ciphertext. 3. Ciphertext adalah informasi acak yang berasal dari plaintext yang telah dimasukkan kedalam fungsi kriptografi atau dienkripsi. 4. Dekripsi adalah proses pengubahan ciphertext menjadi plaintext. 5. Kriptoanalisis adalah studi yang mempelajari teknik matematika untuk memecahkan teknik kriptografi. 6. Kriptoanalis adalah orang yang melakukan kriptonalisis. 7. Kriptologi adalah ilmu tentang kriptografi dan kriptonalisis.
2.1.1. Kriptografi Klasik Kriptografi sudah digunakan sejak lama seperti algoritma Caesar Cipher yang menggunakan teknik subtitusi, algoritma ini sudah digunakan
beberapa abad yang lalu. Dua teknik dasar yang biasa digunakan pada Kriptografi Klasik, adalah sebagai berikut [1] :
1. Teknik Subtitusi : Penggantian setiap karakter plaintext dengan karakter lain 2. Teknik Tranposisi (Permutasi) : Teknik ini menggunakan permutasi karakter.
Untuk memahami pengertian lebih lanjut, dijelaskan sebagai berikut :
2.1.1.1. Teknik Subtitusi Teknik subtitusi ini merupakan penggantian setiap karakter dari plaintext dengan karakter lainnya, ada empat istilah dari subtitusi cipher diantaranya adalah : monoalphabet, polyalphabet, monograph, dan polygraph. Contoh teknik subtitusi adalah Caesar Cipher, Playfair Cipher, Shift Cipher, Hill Cipher, dan Vigenere Cipher. Lihat (Tabel 2.1.) Subtitusi Caesar Cipher merupakan pencetus dalam dunia
kriptografi,
penyandian
ini
dilakukan
pada
zaman
Pemerintahan Julius Caesar dengan menggeser atau mengganti posisi huruf alphabet. Misal pergeseran yang dilakukan sebanyak tiga kali, berarti kunci dekripsinya adalah (n – 3). Sebenarnya
pergeseran yang dilakukan tergantung keinginan dari kesepakatan pihak pengirim dan penerima, ini yang dinamakan kunci.. Misal kunci yang digunakan ((n x 2) - 1) atau yang lainnya. Contoh pesan yang akan disandikan dari algoritma Caesar Cipher dengan kunci (n + 3) (Tabel 2.1. subtutusi Caesar Cipher) sebagai berikut :
Plaintext
=
T E RIMA KAS IH
Ciphertext
=
WHULPD NDVLK
Dengan subtitusi atau mengeser tiga kali sehingga huruf T Æ W, E Æ H, A Æ D, ……, H Æ K. Caesar Cipher ini dapat dipecahkan dengan cara Brute Force Attack suatu bentuk dari sebuah serangan dengan mencoba kemungkinan-kemungkinan pola untuk menemukan kunci rahasia sampai kunci tersebut ditemukan. Banyak kemungkinan kunci yang dapat digunakan oleh Caesar Cipher sehingga cukup merespon para kriptoanalis, walaupun sederhana akan tetapi butuh cukup waktu untuk memecahkannya karena penggunaan Enkripsi Klasik tidak semudah sekarang dengan bantuan komputer.
2.1.1.2. Teknik Tranposisi (Permutasi) Teknik ini menggunakan permutasi karakter, dengan menggunakan teknik ini pesan yang asli tidak dapat dibaca kecuali
pihak yang memiliki kunci untuk mengembalikan pesan tersebut kebentuk semula atau mendekripsikannya. Sebagai contoh :
Ada enam kunci yang digunakan untuk melakukan permutasi cipher yaitu: Posisi Plaintext
1 3
Posisi Ciphertext
2 5
3 1
4 6
5 4
6 2
Untuk mendekripsikan digunakan juga 6 kunci invers cipher yaitu :
Posisi Ciphertext
1 3
Posisi Plaintext
2 6
3 1
4 5
5 2
6 4
Sehingga sebuah pesan Plaintext
=
T E RIMAKAS IH
Terlebih dahulu kalimat tersebut dibagi menjadi 6 block dan apabila terjadi kekurangan pada block bisa ditambahkan dengan huruf yang disepakati, misal “X”.
Posisi
=
1 2 3 4 5 6
1 2 3 4 56
Plaintext
=
T E RIMA
KAS I HX
Ciphertext
=
R ATMEI
S XKHAI
Untuk
mendekripsikan
ciphertextnya,
maka
harus
melakukan hal yang sama seperti ciphernya dengan menggunakan kunci invers cipher dari permutasi tersebut. Banyak teknik lain permutasi seperti zig-zag, segitiga, spiral, dan diagonal. Dengan beberapa macam pola Teknik Tranposisi (Permutasi) maka dapat dilakukan untuk menyandikan atau menyembunyikan pesan secara aman dari pihak yang tidak berwenang. Dari kombinasi teknikteknik inilah yang menjadi dasar dari pembentukan algoritma kriptografi yang dikenal dengan Kriptografi Modern [1] .
2.1.2. Kriptografi Modern Perbedaan kriptografi ini dengan Kriptografi Klasik, adalah pada Kriptografi Modern sudah menggunakan perhitungan komputasi atau program dalam pengoperasiannya, yang berfungsi mengamankan data baik yang ditransfer melalui jaringan komputer maupun tidak. Hal ini sangat berguna untuk untuk melindungi keamanan, integritas, dan keaslian dari data. Pada kriptografi ini karakter-karakter yang akan dioprasiakan seperti plaintext dan kunci dikonversikan ke dalam suatu urutan digit biner (bit) yaitu 0 atau 1, yang umumnya digunakan untuk skema pengkodeaan ASCII (American Standart Code for Information Interchange) lihat lampiran 4.
Satu buah karakter sama dengan delapan bit, maka jumlah karakter yang terbentuk dari delapan bit tersebut adalah 256. Begitu juga ASCII yang mempunyai jumlah karakter 256, pada pembahasan selanjutnya 256 karakter ASCII tersebut menjadi himpunan dari elemen finite field subBAB 2.3. Operasi Aljabar. Ada beberapa metode yang bisa digunakan, misal salah satu dari dua metode, yaitu : pertama stream cipher (aliran cipher) dan kedua block cipher (blok cipher). Kedua metode ini digunakan pada Algoritma kunci Simetris yang akan dijelaskan pada sub-Bab 2.2.1. Algoritma Simetris pembahasan selanjutnya. Pada stream cipher metode yang digunakan dengan sejumlah urutan dari bit dienkripsi secara bit per bit. Untuk block cipher, suatu urutan pembagian dibentuk dalam ukuran blok(block) yang dinginkan sehingga dapat dioperasikan block per block. Contoh penulisan bit (basis dua) dengan basis lainnya yaitu heksadesimal (basis 16) dan desimal (basis 10) dengan empat bit yang menghasilkan bilangan desimal 0 ..15 seperti Tabel 2.2..
Tabel 2.2. Representase Bit, Heksadesimal, dan Desimal Bit Hexa 0000 0 0001 1 0010 2 0011 3 0100 4 0101 5
Dec 0 1 2 3 4 5
Bit Hexa Dec 0110 6 6 0111 7 7 1000 8 8 1001 9 9 1010 A 10 1011 B 11
Bit Hexa Dec 1100 C 12 1101 D 13 1110 E 14 1111 F 15
Operasi dasar enkripsi yang menggunakan bit (binary digit) lihat Tabel 2.2. biasanya menggunakan metode kombinasi dua bit yang disebut dengan ”Exclusive OR” dan terkadang ditulis dengan ”XOR” menggunakan notasi “ ⊕ ”. Operasi ini merupakan suatu penambahan modulo 2 yang digambarkan Tabel 2.3..
Tabel 2.3. Operasi XOR ⊕ 0 1
0 0 1
1 1 0
Operasi XOR pada Tabel 2.3. dengan rincian sebagai berikut :
0 ⊕ 0 = 0;
0 ⊕ 1 = 1;
1 ⊕ 0 = 1;
1 ⊕ 1 = 0.
Sebagai contoh dalam bentuk heksadesimal dengan melihat Tabel 2.2. sebagai proses konversi dari heksadesimal ke bit agar dapat dioperasikan seperti Tabel 2.3. yaitu operasi XOR.
Contoh : 1 1 1⊕ 1 Hasil = 0
09 ⊕ 0D 0 1 0⊕ 1 1
0 1 0 1 0⊕ 0 1⊕ 1 0 0 = 04
09 ⊕ 0D = 04
01 ⊕ 0F
& 0 1 0⊕ 1 1 &
0 1 0⊕ 1 1
0 1 1 1 0⊕ 1 1⊕ 1 1 0 = 0E
01 ⊕ 0F = 0E
Algoritma
kriptografi
terus
berkembang
sesuai
dengan
perkembangan teknologi komunikasi data. Sampai saat ini terdapat berbagai macam algoritma dengan tujuan penggunaan yang berbeda, seperti digunakan untuk enkripsi data, gambar atau suara. Namun tujuan utama dari masing-masing algoritma adalah sama, yaitu [4]:
2.1.2.1. Kerahasiaan Data. Kerahasiaan data digunakan untuk menjaga isi informasi dari semua pihak kecuali pihak yang berhak mendapatkan informasi tersebut saja. Ada beberapa cara dalam menjaga kerahasiaan
informasi,
mulai
dari
proteksi
fisik
seperti
penyimpanan data di tempat khusus sampai kepada algoritma matematika yang mengubah data informasi terang (data asli) menjadi data acak.
2.1.2.2. Integritas Data. Integritas data bertujuan untuk menjaga adanya perubahan yang tidak diinginkan terhadap data. Untuk menjamin integritas data, maka perlu pengetahuan dalam mendeteksi perubahan data oleh sekelompok orang yang tidak berkepentingan. Perubahan data bisa berupa pemasukan data baru, penghapusan atau penukaran data.
2.1.2.3. Keaslian data. Keaslian data berhubungan dengan identifikasi, dimana fungsi ini berlaku untuk pelaku dan informasi itu sendiri. Dua pihak yang ingin bergabung dalam sebuah komunikasi harus mengidentifikasi satu sama lainnya. Informasi yang dikirim dalam sebuah paket harus diidentifikasi sesuai dengan keasliannya, sebagai contoh berupa tanggal aslinya, isi data, waktu kirim, dan sebagainya. Untuk alasan inilah aspek dari kriptografi biasanya dibagi menjadi dua bagian yaitu identifikasi pelaku dan identifikasi keaslian data.
Keamanan data pada lalu lintas jaringan merupakan suatu hal yang diinginkan oleh banyak orang untuk menjaga kerahasiaannya. Supaya data yang dikirim tetap aman dari orang yang tidak berwenang maka data harus disembunyikan menggunakan algoritma kriptografi.
2.2. Algoritma Definisi algoritma secara terminologi adalah urutan langkah-langkah logis untuk penyelesaian masalah yang disusun secara sistematis. Sehingga algoritma
kriptografi
merupakan
langkah-langkah
logis
bagaimana
menyembunyikan pesan dari orang yang tidak berhak atas pesan tersebut.
Proses algoritma kriptografi penyandian terdiri dari algoritma Enkripsi (E) dan algoritma Dekripsi (D), secara umum proses enkripsi dan dekripsi dapat diterangkan menggunakan Persamaan 2.1..
EK (P) = C ⎫ ⎬ ………...................................…….. DK (C) = P ⎭ 2.1.
Ket : E = Enkripsi D = Dekripsi P = Plaintext C = Ciphertext K = Kunci
Jika pesan ”P” (teks terang) dienkripsi dengan ”E” menngunakan suatu kunci ”K” maka menghasilkan pesan ”C” (teks acak). Sedangkan pada proses dekripsi, pesan ”C” tersebut diuraikan atau didekripsi dengan ”D” menggunakan kunci ”K” sehingga dihasilkan pesan ”P” yang sama seperti pesan semula (lihat Persamaan 2.1.) [4] . Untuk lebih jelasnya dapat dilihat Gambar 2.1..
Informasi/ Pesan
Plaintext
Ciphertext
Enkripsi
Kunci
Plaintext
Dekripsi
Gambar 2.1. Proses Umum Enkripsi dan Dekripsi
Keamanan suatu pesan diharapkan tergantung pada kunci yang digunakan, sehingga algoritma-algoritma yang digunakan bukan menjadi kekuatan utama pada keamanan enkripsi. Disini peranan algoritma enkripsi perlu diuji dan dikaji terus. Karakteristik kunci yang menggunakan algoritma kriptografi dapat digolongkan sebagai berikut :
1. Algoritma kunci rahasia (simetris) : menggunakan satu kunci untuk enkripsi dan dekripsi. 2. Algoritma kunci publik (asimetris) : menggunakan kunci yang berbeda untuk enkripsi dan dekripsi.
2.2.1. Algoritma Simetris Simetris Kriptografi adalah algoritma dengan menggunakan kunci yang sama pada enkripsi dan dekripsinya. Oleh karena itu, kunci yang digunakan untuk enkripsi tidak boleh diberikan kepada publik melainkan hanya kepada orang tertentu yang tahu atau boleh sehingga dapat membaca data yang dienkripsi. Algoritma ini dikenal juga dengan istilah algoritma kunci rahasia, karena kuncinya hanya boleh diketahui oleh dua pihak yang berkomunikasi tersebut saja. Lihat Gambar 2.2. sebagai ilustrasi dari proses enkripsi dan dekripsi pada kunci rahasia.
Plaintext
Enkripsi
Ciphertext
Kunci rahasia
Ciphertext
Dekripsi
Plaintext
Gambar 2.2. Proses Enkripsi dan Dekripsi pada Algoritma Simetris (Kunci Rahasia)
Algoritma simetris pada umumnya banyak digunakan saat ini baik untuk kalangan pemerintahan ataupun bisnis. Kunci dari algoritma ini harus dijaga ketat supaya tidak ada pihak luar yang mengetahuinya. Masalahnya sekarang adalah bagaimana untuk memberi tahu pihak penerima mengenai metode atau kunci yang akan digunakan sebelum komunikasi yang aman dapat berlangsung. Misalnya dengan jalur komunikasi yang lebih aman yaitu bertemu langsung. Selain
masalah komunikasi awal untuk penyampaian kunci di atas, algoritma ini mempunyai kelemahan lainnya. Kelemahan ini timbul jika terdapat banyak pihak yang ingin saling berkomunikasi. Karena setiap pasangan harus sepakat dengan kunci pribadi tertentu yang mengakibatkan pembengkakan memori pada penyimpanan kunci, sehingga mempunyai kesulitan dalam menghafal banyak kunci dan harus menggunakannya secara tepat. Contoh Algoritma Simetris seperti : DES, Triple DES, AES, RC2, RC4, IDEA, dan lain-lain. AES dengan kepanjangan “Advanced Encryption Standard” akan menjadi pembahasan utama lihat
BAB III.
2.2.1.1. Stream Cipher Stream cipher (aliran cipher) merupakan bagian dari algoritma simetris. Metode ini mengoprasikan bit per bit, setiap bit plaintext dengan bit kunci. Kunci yang digunakan adalah kunci utama (kunci induk) sebagai pembangkit kunci acak semu dari Pseudo-Random Sequnce Generator (PRSG) dengan menjadikan suatu nilai yang nampak seperti acak, tetapi sesungguhnya nilai tersebut merupakan suatu urutan. Random Number Generator (RNG) atau pembangkit nilai random secara umum adalah Pseudorandom yang memberikan inisial state atau seed (nilai yang diinput ke dalam state). Pseudorandomess
menghasilkan
urutan
yang
sama
secara
berulang-ulang pada penempatan yang berbeda. Kemudian kunci
acak semu tersebut dioperasikan XOR dengan menggunakan plaintext untuk mendapatkan bentuk ciphertext. Lihat Gambar 2.3. (a) dan (b) untuk lebih jelasnya.
Key
Pseudo-Random Sequnce Generator (PRSG)
⊕
Plaintext Bitstream
Plaintext Bitstream (a)
Plaintext Bitstream
1 1 1 1 1 1 0 0 0 0 0 1…
Pseudo-Random Stream
1 0 0 1 0 0 0 1 1 1 0 1…
Ciphertext Bitstream
0 1 1 0 1 1 0 1 1 1 0 0… (b)
Gambar 2.3. Proses enkripsi pada stream cipher. (a) Pambangkitan bilangan random, dan (b) operasi XOR setelah bilangan random dibangkitkan.
Untuk mensimulasikan suatu random dengan kunci yang mempunyai panjang terbatas, Algoritma Simetris Stream ini menghasilkan bit dari sumber yang lain oleh pesan itu sendiri.
Sehingga Stream Cipher adalah Suatu urutan flow yang berkelanjutan dan unsur-unsur yang berdiri sendiri, metode ini kebalilkan dari block cipher, dimana elemen-elemen dua atau lebih dikoleksi sebagai block.
2.2.1.2. Block Cipher Block Cipher merupakan suatu metode dalam algoritma dengan input dan outputnya berupa block, dan setiap block terdiri dari beberapa bit (64 bit atau 128 bit). Block Cipher mempunyai banyak aplikasi yang digunakan untuk memberi pelayanan kerahasiaan data, integritas data dan keaslian data serta memberikan layanan keystream generator untuk stream cipher. Contoh
pada
sub-BAB
2.1.1.2.
Teknik
Tranposisi
(Permutasi) yang mengenkripsi plaintext “ TERIMA KASIH ” dengan merepresentasikan lebih dahulu ke dalam bentuk blockblock, misal 1 block terdiri dari 6 karakter. Secara umum digambarkan representasi plaintext dalam 1 block terdiri dari 64 bit sama dengan 4 karakter. Karakter[8] = a1, a2, a3,…… ,a8
Block 1 1 1 0 0
0 1 0 0 0 0 1 1 0 0 0 0 a1 a3 1 1 0 0 0 1 0 0 0 0 1 1 0 0 0 0 a2 a4 Block 2 0 0 0 0
0 0 0 1 1 1 0 0 0 0 0 0 a7 a5 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 0 a6 a8 Gambar 2.4. Proses Pemetaan Data pada Block Cipher
Block cipher secara sederhana mempunyai keuntungan, yaitu jika satu block ada yang rusak tidak akan mempengaruhi block yang lainnya, sehingga hanya block yang rusak yang perlu dikirim ulang, tidak perlu semua block. Sedangkan stream cipher, jika ada data yang rusak maka perlu dikirim ulang semua data yang bersangkutan, karena data satu dengan yang lainnya mempunyai keterikatan sebagai aliran data. Selain itu keuntungan yang dimiliki block cipher yaitu pada proses dekripsinya tidak harus menunggu semua pesan diterima lebih dahulu, maka dekripsi dapat dilakukan bersamaan pada saat pesan dikirim. Secara umum pengiriman block cipher dapat dilihat pada Gambar 2.5.(a) dan (b).
Plaintext Block 1
Kunci
Plaintext Block 2
Kunci
Plaintext Block n
Algoritma Enkripsi
Algoritma Enkripsi
Algoritma Enkripsi
Ciphertext Block 1
Ciphertext Block 2
Ciphertext Block n
Kunci
(a) Proses Enkripsi
Ciphertext Block 1
Kunci
Ciphertext Block 2
Kunci
Ciphertext Block n
Algoritma Dekripsi
Algoritma Dekripsi
Algoritma Dekripsi
Plaintext Block 1
Plaintext Block 2
Plaintext Block n
Kunci
(b) Proses Dekripsi
Gambar 2.5. Proses Enkripsi dan Dekripsi pada Block Cipher
2.2.2. Algoritma Asimetris. Asimetris Kriptografi adalah algoritma yang mengunakan kunci enkripsinya berbeda dengan dekripsi. Pada algorima ini kunci dekripsinya tidak dibuka atau rahasia, sedangkan kunci enkripsinya bisa diberikan
kepada publik. Untuk memperoleh atribut ini, algoritma dirancang pada mekasime yang sulit untuk dipecahkan secara matematika. Dalam Algoritma Asimetris kunci enkripsi dibuka, sehingga siapapun yang ingin berkomunikasi dapat menggunakannya. Tetapi untuk kunci dekripsi, hanya satu pihak saja yang mempunyai kunci dan dapat menggunakannya. Oleh karena itu, kunci yang digunakan untuk enkripsi disebut kunci publik, sedangkan kunci yang digunakan untuk dekripsi
Pengiriman Pesan
disebut kunci pribadi atau kunci rahasia (Gambar 2.6.).
Plaintext
Enkripsi
Ciphertext
Penerimaan Pesan
Kunci Publik untuk pengirim Kunci Rahasia untuk penerima
Ciphertext
Dekripsi
Plaintext
Gambar 2.6. Proses Enkripsi dan Dekripsi Algoritma Asimetris (Kunci Publik)
Algoritma ini digunakan untuk banyak area yang berbeda. Yang paling umum digunakan adalah dalam hal pengiriman kunci algoritma simetris pada tahap awal sebagai alternatif dari kelamahan Algoritma
Simetris di atas jika kedua pihak jaraknya jauh dan sulit untuk bertemu langsung. Seperti telah dijelaskan sebelumnya, kunci publik digunakan untuk enkripsi dan kunci rahasia digunakan untuk dekripsi. Ketika Algoritma
membandingkan
Simetris
dan
kelebihan
Algoritma
dan
Asimetris,
kekurangan algoritma
antara yang
menggunakan kunci publik pada umumnya mempunyai lebih banyak keuntungan dalam istilah kriptografi, seperti kelemahan pada algoritma simetris di atas pada pengiriman awal dan pembengkakan momori atau penghafalan
kunci
yang
banyak.
Algoritma
Asimetris
dapat
menanggulangi kelemahan-kelemahan tersebut. Kendati kelebihan yang telah dijelaskan sebelumnya, Algoritma Asimetris mempunyai kelemahan yaitu dari segi kecepatan (perhitungan komputasi yang besar) yang lebih lambat dari Algoritma Simetris. Oleh karena itu, dari tinjauan kelemahan dan kelebihannya kedua sistem algoritma ini sering digabungkan atau dikombinasikan. Algoritma Asimetris sebagai sarana komunikasi awal pengiriman kunci simetris, selanjutnya digunakan Algorima Simetris dengan kunci rahasia di kedua belah pihak agar pengoprasianya lebih cepat dari pada menggunakan Algoritma Asimetris. Contoh dari algoritma yang menggunakan kunci publik adalah PGP, RSA, dan lain-lain.
2.3. Operasi Aljabar
Secara umum akan dibahas beberapa operasi matematika yang berkaitan dengan
AES:Rijndael,
seluruh
dari
tiap-tiap
tahap
atau
langkah
transformasinya melibatkan state (1 blok ), akan tetapi sebenarnya unit dasar operasi AES:Rinjdael adalah byte (terdiri dari 8 bit). Setiap byte sebagai elemen finite field GF(28) yang didefinisikan pada operasi penjumlahan dan perkalian. Elemen finite field tersebut merupakan elemen dari field yang memiliki sifat ring komutatif. Dalam hal ini, untuk semua finite field yang memiliki pn untuk p merupakan bilangan prima dan n merupakan bilangan bulat n≥1 sama dengan notasi GF(pn). Oleh karena itu, elemen-elemen GF(28) juga merupakan ring komutatif yang memiliki sifat berikut : grup ( [g , +] : tertutup pada ’+’, asosiatif pada ’+’, memiliki elemen identitas, dan mempunyai invers), grup abelian ( grup komutatif), ring ( [g , + , • ] : tertutup pada ’ • ’, asosiatif pada ’ • ’, dan distributif) [16].
2.3.1. Field GF(28) Elemen dari finite field bisa direpresentasikan dalam beberapa cara yang berbeda (polinomial, bit, dan heksadesimal). Untuk semua pangkat n bilangan prima memiliki satu finite field, oleh karena itu GF(28) dan ASCII merupakan isomorfisme, yaitu homomorfisme yang merupakan fungsi 1-1. Sedangakan homomorfisme adalah fungsi dari ring ke ring lain yang mempunyai sifat f(a+b) = f(a) + f(b) dan f(ab) = f(a).f(b) [16] . Oleh karena itu elemen tersebut sama, saat direpresentasikan memiliki pengaruh
yang kuat dalam implemetasi yang kompleks. Dalam halm ini akan direpresentasikan ring atas polinomial. Jika b, merupakan suatu nilai dari 0 atau 1 maka terbentuk suatu ukuran byte dari urutan bit b7 + b6 + b5 + b4 + b3 + b2 + b1 + b0 (koefisien binary) dapat dituliskan pada Persamaan 2.2..
b(x) = b7x7 + b6x6 + b5x5 + b4x4 + b3x3 + b2x2 + b1x + b0
…………….. 2.2.
Persamaan 2.2. menjelaskan bahwa pangkat tertinggi dari polinomial GF(28) tersebut adalah x7.
Contoh : Nilai byte dalam bilangan heksadesimal ‘57’ (bentuk biner 01010111) sama dengan bentuk polinomial x6 + x4 + x2 + x + 1.
2.3.1.1. Penjumlahan Penjumlahan dua elemen finite field didefinisikankan sebagai operasi XOR (penjumlahan 2 elemen dengan modulo 2) per
lihat
bit
Tabel
2.3..
Sebagai
konsekuensinya,
penyederhanaannya merupakan operasi yang identik. Ekspresi berikut
ini
adalah
ekivalen
antara
(heksadesimal, bit, dan notasi polinomial). Contoh : ’57’ ⊕ ’83’ = ’d4’ 01010111 10000011 ⊕
satu
dengan
lainnya
11010100 (x6+x4+ x2+ x+1) + (x7+x+1) = (x7+ x6+x4+ x2)
Seluruh kondisi yang penting dalam menyelesaikan operasi di atas merupakan bagian dari grup abelian yaitu mempunyai sifat : komutatif ( x+y = y+x ), tertutup, asosiatif, mempunyai elemen identitas, dan mempunyai invers.
2.3.1.2. Perkalian Perkalian elemen GF(28 ) (notasi • ) adalah perkalian dalam bentuk representasi polinomial dengan modulo polinomial m(x) yang irreducible [15] (lihat Persamaan 2.3.) dari polinomial pangkat
delapan.
Irreducible
yaitu
polinom
yang
hanya
mempunyai factor ‘01’ dan bilangan itu sendiri.
m(x) = x8+x4+ x3+ x+1 ………………………… 2.3.
atau ‘11B’ dalam bentuk heksadesimal dan betuk desimal adalah 283.
Contoh : ‘57’ • ’83’ = ‘ C1’
(x6+x4+ x2+ x+1).(x7+x+1) = x13+ x11+ x9+ x8+ x7+ x7+ x5+ x3+ x2+ x+ x6+ x4+ x2+ x + 1 = x13+ x11+ x9+ x8+ x6+ x5+ x4+ x3+1 (x13+ x11+ x9+ x8+ x6+ x5+ x4+ x3+1) modulo (x8+x4+ x3+ x+1) = x7 + x6 + 1
2.3.1.3. Perkalian dengan variabel x Jika dituliskan perkalian b(x) sebagai berikut :
x.b(x) = b8x8+b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x+b0
Perkalian x • b(x) dapat diwujudkan sebagai left shift (pergeseran ke kiri bit) yang diikuti XOR kondisional dengan {1b}, jika b8 = 1, maka XOR dilakukan, jika b8 = 0, maka XOR tidak dilakukan. Exclusive-OR kondisional tersebut tidak lain adalah operasi modulo dengan m(x). Serangkaian left shift yang disusul operasi XOR tersebut dapat digunakan untuk perkalian antara elemen finite field. Operasi x • b(x) dinotasikan sebagai xtime() [15] . Sebagai contoh : ‘57’ • ’13’ = ‘FE’ ‘57’ • ’02’ = xtime(57) = ‘AE’ ‘57’ • ’04’ = xtime(AE) = ‘47’ ‘57’ • ’08’ = xtime(47) = ‘8E’
‘57’ • ’10’ = xtime(8E) = ‘07’ ‘57’ • ’13’ = ‘57’ • (’01’ ⊕ ’02’ ⊕ ’10’) = ‘57’ ⊕ ’AE’ ⊕ ’07’ = ‘FE’
2.3.2. Koefisien Polinom pada GF(28) Direpresentasikan polinomial yang didefinisikan dengan koefisien GF(28) sebagai Persamaan 2.4..
a( x) = a3 x 3 + a 2 x 2 + a1 x + a 0 …...………………. 2.4.
Sehingga
didapat
bentuk
koefisien
sebagai
[ a3 , a 2 , a1 , a 0 ].
Polinoimial ini berbeda dengan polinomial pada finite field sebelumnya sebagai polinomial koefisian binary. Pada polinomial ini akan dioperasikan perkalian dengan polinomial yang berbeda, akan tetapi bentuk polinomialnya sama yaitu berderajat 4, lihat b(x) lihat Persamaan 2.5..
b( x) = b3 x 3 + b2 x 2 + b1 x + b0 ………...…………. 2.5.
Definisi kedua yaitu kedua polinomial di atas diopersasikan sebagai operasi XOR antara persamaan 2.4 dengan persamaan 2.5. operasi XOR ini koresponden antara pangkat pada variabel x, dapat dilihat Persamaan 2.6. sebagai hasilnya.
a ( x) + b( x) = (a3 ⊕ b3 ) x 3 + (a 2 ⊕ b2 ) x 2 + (a1 ⊕ b1 ) x + (a 0 ⊕ b0 ) …. 2.6.
Didefinisikan
a ( x ) + b( x ) = c ( x ) ,
sehingga
menghasilkan
Persamaan 2.7..
c( x) = c6 x 6 + c5 x 5 + c 4 x 4 + c3 x 3 + c 2 x 2 + c1 x + c0 ………….. 2.7.
Didapat dengan cara :
c0 = a 0 • b0
c 4 = a3 • b1 ⊕ a 2 • b2 ⊕ a1 • b3
c1 = a1 • b0 ⊕ a 0 • b1
c5 = a3 • b2 ⊕ a 2 • b3
c 2 = a 2 • b0 ⊕ a1 • b1 ⊕ a 0 • b2
c6 = a3 • b3
c3 = a3 • b0 ⊕ a 2 • b1 ⊕ a1 • b2 ⊕ a 0 • b3
Hasil dari c(x) di atas belum dalam bentuk empat byte, maka langkah selanjutnya c(x) di modularkan dengan polinomial derajat 4. Pada algoritma AES diberikan polinomial x4+1, menjadi :
xi mod ( x4 + 1 ) = xi mod 4
Operasi modular dari a(x) dan b(x) menghasilkan sebuah d(x) yang direpresentasikan pada Persamaan 2.8..
d ( x) = d 3 x 3 + d 2 x 2 + d1 x + d 0 ………………… 2.8. Dengan hasil :
d 0 = (a 0 • b0 ) ⊕ (a 3 • b1 ) ⊕ (a 2 • b2 ) ⊕ (a1 • b3 ) ⎫ d1 = (a1 • b0 ) ⊕ (a 0 • b1 ) ⊕ (a3 • b2 ) ⊕ (a 2 • b3 ) ⎪⎪ ⎬ ………………… 2.9. d 2 = (a 2 • b0 ) ⊕ (a1 • b1 ) ⊕ (a 0 • b2 ) ⊕ (a3 • b3 )⎪ d 3 = (a 3 • b0 ) ⊕ (a 2 • b1 ) ⊕ (a1 • b2 ) ⊕ (a 0 • b3 ) ⎪⎭
⎡d 0 ⎤ ⎡a 0 ⎢d ⎥ ⎢ a ⎢ 1⎥=⎢ 1 ⎢d 2 ⎥ ⎢a 2 ⎢ ⎥ ⎢ ⎣d 3 ⎦ ⎣ a3
a3
a2
a0 a1 a2
a3 a0 a1
a1 ⎤ ⎡b0 ⎤ ⎢ ⎥ a 2 ⎥⎥ ⎢b1 ⎥ …………………………2.10. a3 ⎥ ⎢b2 ⎥ ⎥⎢ ⎥ a0 ⎦ ⎣b3 ⎦
BAB III ADVANCED ENCRYPTION STANDARD (AES): RIJNDAEL
3.1. Pendahuluan
Algoritma AES:Rijndael yang disosialisasikan oleh National Institute of Standards and Technology (NIST) pada November 2001 lahir sebagai standar baru enkripsi yang dikembangkan dari algoritma DES (Data Encryption Standard) melalui seleksi yang ketat dengan algoritma yang lainnya. AES yang di cetuskan oleh Dr. Vincent Rijmen dan Dr. Joan Daemen menjadi pemenang pada saat seleksi algoritma baru untuk menggantikan DES. Alasan utama terpilihnya AES:Rijndael ini bukan karena algoritmanya yang paling aman dari MARS, RC6, Serpent,Twofish, dan yang lainnya, tetapi AES:Rijndael memiliki keseimbangan antara keamanan serta fleksibelitas dalam berbagai platform software dan hardware [1] . Evaluasi terhadap AES:Rijndael dijelaskan sebagai berikut :
1. Belum ada jenis serangan yang telah diketahui dapat memecahkan Algoritma Rijndael. 2. Algoritma ini memakai S-Box nonlinier. 3. Rijndael mempunyai suatu security margin yang cukup, tetapi kritik yang
datang
pada
Rijndael
cukup
banyak,
karena
struktur
matematikanya yang sederhana bisa memberikan peluang suatu saat
untuk diserang. Dengan kata lain, struktur yang sederhana memberikan Rijndael untuk dikembangkan dalam waktu dekat. 4. Rijndael tidak memakan banyak sumber daya komputasi. Kecepatan antara dekripsi lebih lama dibandingkan dengan enkripsinya. 5. AES:Rijndael mendukung perhitungan sub kunci untuk enkripsi. 6. AES:Rijndael memerlukan satu waktu dalam eksekusi untuk key schedule dari semua sub kunci dekripsi dengan menggunakan kunci khusus.
Algoritma AES:Rijndael menyandikan data dalam empat langkah dasar yaitu, langkah SubBytes() , langkah ShiftRows(), langkah MixColumns(), dan AddRoundKey(). Langkah-langkah tersebut dapat dideskripsikan lebih mudah
dengan memvisualisasikan data yang akan dikonversi dalam array byte segi empat. SubBytes() diperoleh dengan memakai atau mensubtitusikan ke dalam tabel nonlinear yang dikenal dengan tabel S-Box. ShiftRows() dilakukan melalui permutasi byte-byte data dari kolom array yang berbeda. Langkah MixColumns() menyandikan data menjadi kombinasi linear dari byte-byte data dalam satu kolom array tersebut. AddRoundKey() dilakukan dengan operasi XOR antara data dengan kunci. Keempat langkah tersebut akan memiliki nama khusus dalam algoritma yang diterangkan AES (Gambar 3.1.)
Plaintext
=
MajuTrusKriptoKu
Kunci
=
State (tranformasi sementara) =
☺☻♥♦♣♠
○ ♂♀
ٱŽWgaö§μڤxΫjỒ’ir
Heksadesimal : Plaintext =
M
T
K
t
π
4D616A75547275734B726970746F4B75
a
r
r
o
∩
Kunci =
j
u
i
K
000102030405060708090A0B0C0D0E0F
u
s
p
u
│
Æ
?
?
¿
☻
¥
·
│
¥
Å
Q
│
Æ
↑
n
Setelah SubBytes()
plaintext
π
♫☼
«
‼
┘
ٱ
a
ڤ
Ồ
?
?
¿
∩
Å
≤
q
║
Ž
ö
x
’
·
│
☻
¥
U
í
ò
»
W
§
Ϋ
i
n
¥
Å
Q
d
▓
a
}
g
μ
j
r
Setelah ShiftRows()
Setelah MixColumns()
Setelah AddRoundKey()
Gambar3.1. SubBytes() , ShiftRows(), MixColumns(), dan AddRoundKey() pada karakter
Algoritma AES adalah cipher block simetrik, kunci rahasia yang sama digunakan untuk menyandikan data maupun untuk memperoleh kembali data tersebut dari data tersandinya. Istilah “AES-128” merujuk pada algoritma Rijndael dengan panjang blok (block) data dan panjang kunci 128 bit. AES sendiri menggunakan panjang block data 128 bit, tetapi panjang kunci bisa berbeda-beda (AES-128, AES-192, dan AES-256). AES-128 melakukan 10
round dengan 9 round utama ditambah sekali final round, berikut Gambar 3.2. sebagai ilustrasi diagram alir dari algoritma AES-128.
start
start
Round Å 0
Round Å 0
AddRoundKey()
AddRoundKey()
Round Å Round +1
Round Å Round +1
SubBytes()
InvSubBytes()
SiftRows()
InvSiftRows()
MixColoumns()
InvMixColoumns()
AddRoundKey()
AddRoundKey()
Round = 9
Round = 9
SubBytes()
InvSubBytes()
SiftRows()
InvSiftRows()
AddRoundKey()
AddRoundKey()
End
End
(a)
(b)
Gambar3.2. Algoritma (a) Cipher, dan (b) Invers Cipher pada AES-128
3.2. Representasi Data
AES merepresentasikan data dengan cara urutan byte dan bit (0 atau 1 pada bn), dimana data diturunkan dari urutan input 128 bit per blok. Bit-bit tersebut diberi indeks mulai dari 0 sampai dengan 127 (0 ≤ i < 128). Setiap urutan 8 bit (1 byte) diberlakukan sebagai entitas tunggal yang merupakan elemen finite field dengan representasi polinomial pada Persamaan 3.1..
b(x) = b7x7 + b6x6 + b5x5 + b4x4 + b3x3 + b2x2 + b1x + b0
……………... 3.1.
Pengindeks-an bit dalam byte pada block dapat dilihat pada Tabel 3.1..
Tabel 3.1. Pengindeksan Aliran Input Urutan Bit Input Posisi Bit/Byte State
0
1
2
7
6
5
3 4 5 Input0 4 3 2 State0
6
7
8
9
10
1
0
7
6
5
11
12 13 Input1 4 3 2 State1
14
15
1
0
… … … …
Cipher AES dilakukan pada array byte 2 dimensi yang disebut state. Block data disusun dalam state yang terdiri atas empat baris Nb byte (Nb = panjang block/4 adalah 4 untuk AES-128). Setiap byte diberi dua indeks yang
menyatakan posisinya, dinyatakan sebagai sr,c atau s[r,c], dengan indeks baris r (row) dalam interval 0 ≤ r < 4, sedangkan indeks kolom c (coloum) dalam 0 ≤ c < Nb. Data dalam state menginformasikan hasil setiap tahap transformasi (intermediate result). Input dikopi ke state array pada permulaan cipher dan inverse cipher, kemudian state diperbaharui pada akhir setiap transformasi (Gambar 3.1.). Nilai state pada transformasi yang terakhir kemudian dikopi ke output kembali (lihat Gambar 3.3.) dengan pengindeks-an yang serupa Tabel 3.1.
in0
Input in 4 in8
in12
in1
in5
in9
in 2
in6
in3
in7
out 0
Output out 4 out 8
out12
s1,3
out1
out 5
out 9
out13
s 2, 2
s 2,3
out 2
out 6
out10
out14
s 3, 2
s 3, 3
out 3
out 7
out11
out15
s 0, 0
State s 0,1 s 0, 2
s 0,3
in13
s1, 0
s 1,1
s1, 2
in10
in14
s 2, 0
s 2,1
in11
in15
s 3, 0
s3,1
Gambar3.3. State array pada input dan output
State juga dapat dipandang sebagai word 4 byte, dengan indeks baris r dari sr,c menyatakan indek dari keempat byte dalam setiap word. Dengan kata lain, state ekivalen dengan array dari empat word yang berindeks c (indek kolom dari sr,c) seperti dilihat pada Gambar 3.4.. w0 = s0,0 . s1,0 . s2,0 . s3,0
w2 = s0,2 . s1,2 . s2,2 . s3,2
w1 = s0,1 . s1,1 . s2,1 . s3,1
w3 = s0,3 . s1,3 . s2,3 . s3,3
s 0, 0
s 0,1
s 0, 2
s 0,3
s1, 0
s 1,1
s1, 2
s1,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
W0
w1
w2
w3
Gambar3.4. State array ekivalen pada word array
3.3. Enkripsi
Cipher (Gambar 3.2.) berlangsung dalam rentetan empat fungsi pembangun (primitif) yang telah dijelaskan yaitu : SubBytes(), ShiftRows(), MixColumns(), dan AddRoundKey(). Rentetan tersebut dijalankan sebanyak Nr-1 sebagai loop utama, setiap loop disebut round (Nr = 10 round untuk AES-128). AddRoundKey() dieksekusi sebagai round inisial sebelum loop
utama. Setelah loop utama tersebut berakhir (sembilan round), SubBytes(), ShiftRows(),dan AddRoundKey(), dieksekusi secara berturut-turut sebagai final round.
3.3.1. SubBytes()
Operasi ini merupakan suatu operasi subtitusi nonlinier yang beroperasi secara mandiri pada setiap byte dengan menggunakan tabel SBox (Tabel 3.2.), transfomasi yang telah ditabelkan tersebut mengambil
invers multiplikatif GF(28) tiap byte, kemudian diikuti dengan transformasi affine. Tranformasi affine merupakan sebuah tranformasi yang terdiri dari perkalian oleh matriks yang diikuti dengan penjumlahan dari vector seperti yang ditunjukan pada Persamaan 3.2..
0 0 0 1 1 1 1⎤ ⎡ x0 ⎤ ⎡1 ⎤ ⎢ ⎥ 1 0 0 0 1 1 1⎥⎥ ⎢ x1 ⎥ ⎢⎢1 ⎥⎥ 1 1 0 0 0 1 1 ⎥ ⎢ x 2 ⎥ ⎢0 ⎥ ⎥⎢ ⎥ ⎢ ⎥ 1 1 1 0 0 0 1 ⎥ ⎢ x 3 ⎥ ⎢0 ⎥ ……………… 3.2. + 1 1 1 1 0 0 0 ⎥ ⎢ x 4 ⎥ ⎢0 ⎥ ⎥⎢ ⎥ ⎢ ⎥ 1 1 1 1 1 0 0⎥ ⎢ x5 ⎥ ⎢1 ⎥ 0 1 1 1 1 1 0⎥ ⎢ x6 ⎥ ⎢1 ⎥ ⎥⎢ ⎥ ⎢ ⎥ 0 0 1 1 1 1 1⎥⎦ ⎢⎣ x7 ⎥⎦ ⎢⎣0⎥⎦
⎡ y 0 ⎤ ⎡1 ⎢y ⎥ ⎢ ⎢ 1 ⎥ ⎢1 ⎢ y 2 ⎥ ⎢1 ⎢ ⎥ ⎢ ⎢ y 3 ⎥ = ⎢1 ⎢ y 4 ⎥ ⎢1 ⎢ ⎥ ⎢ ⎢ y 5 ⎥ ⎢0 ⎢ y ⎥ ⎢0 ⎢ 6⎥ ⎢ ⎢⎣ y 7 ⎥⎦ ⎢⎣0
s 0, 0
s 0,1
s1,0
s 0′ , 0
s0′ ,1
s 0′ , 2
s 0′ ,3
s1,3
s1′,0
sr′,c
s1′, 2
s1′,3
s 0, 2
s 0,3
sr,c s1, 2
S-Box
s 2,0
s 2,1
s 2, 2
s 2,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
s 3′,0
s 3′,1
s 3′, 2
s 3′,3
Gambar3.5. Subtitusi Byte
Tabel 3.2. S-Box - nilai subtitusi untuk byte ( sr,c) dalam bentuk heksadesimal s
r
C 0
1
2
3
4
5
6
7
8
0
63
7C
77
1
CA
82
C9
2
B7
FD
93
26
3
04
C7
23
C3
18
4
09
83
2C
1A
1B
5
53
D1
00
ED
20
FC
6
D0
EF
AA
FB
43
4D
33
85
45
7
51
A3
40
8F
92
9D
38
F5
BC
8
CD
0C
13
EC
5F
97
44
17
C4
9
A
B
C
D
E
7B
F2
6B
6F
C5
30
01
7D
FA
59
47
F0
AD
D4
36
3F
F7
CC
34
A5
E5
96
05
9A
07
12
6E
5A
A0
52
3B
B1
5B
6A
CB
F
67
2B
FE
D7
AB
76
A2
AF
9C
A4
72
C0
F1
71
D8
31
15
80
E2
EB
27
B2
75
D6
B3
29
E3
2F
84
BE
39
4A
4C
58
CF
F9
02
7F
50
3C
9F
A8
B6
DA
21
10
FF
F3
D2
A7
7E
3D
64
5D
19
73
9
60
81
4F
DC
22
2A
90
88
46
EE
B8
14
DE
5E
0B
DB
A
E0
32
3A
0A
49
06
24
5C
C2
D3
AC
62
91
95
E4
79
B
E7
C8
37
6D
8D
D5
4E
A9
6C
56
F4
EA
65
7A
AE
08
C
BA
78
25
2E
1C
A6
B4
C6
E8
DD
74
1F
4B
BD
8B
8A
D
70
3E
B5
66
48
03
F6
0E
61
35
57
B9
86
C1
1D
9E
E
E1
F8
98
11
69
D9
8E
94
9B
1E
87
E9
CE
55
28
DF
F
8C
A1
89
0D
BF
E6
42
68
41
99
2D
0F
B0
54
BB
16
3.3.2. ShiftRows()
ShiftRows() merupakan langkah permutasi yang dieksekusi lewat pergeseran siklik secara memutar dengan geseran yang acak pada tiga baris terakhir state (baris pertama, r = 0, tidak digeser). Untuk AES-128 baris ke dua digeser secara siklik ke kiri sekali, baris ke tiga dua kali, baris ke empat tiga kali (Gambar 3.6.(a) dan (b)).
ShiftRows() s r ,0
s r ,1
sr ,2
sr′,0 sr′,1 sr′,2 sr′,3
s r ,3 (a)
ShiftRows() s 0, 0
s 0,1
s 0, 2
s 0,3
s 0, 0
s 0,1
s 0, 2
s 0,3
s1, 0
s 1,1
s1, 2
s1,3
s 1,1
s1, 2
s1,3
s1, 0
s 2, 0
s 2,1
s 2, 2
s 2,3
s 2, 2
s 2,3
s 2,0
s 2,1
s 3, 0
s 3,1
s 3, 2
s 3, 3
s 3, 3
s 3, 0
s 3,1
s 3, 2
(b) Gambar3.6. Shift Rows
3.3.3. MixColumns()
Transformasi MixColumns() mengoperasikan state kolom demi kolom. Operasi ini dilakukan pada state kolom, dengan mengkoversikan setiap kolom sebagai polinomial. Kolom dianggap sebagai polinomial pada GF(28). Transformasi ini dapat digambarkan pada Gambar 3.7. dengan perkalian matriks seperti Persamaan 3.3. dan Persamaan 3.4..
s 0′ ,c = ([02] • s 0,c ) ⊕ ([03] • s1,c ) ⊕ s 2,c ⊕ s3,c ⎫ ⎪ s1′,c = s 0,c ⊕ ([02] • s1,c ) ⊕ ([03] • s 2,c ) ⊕ s3,c ⎪ ⎬ ………………3.3. s 2′ ,c = s 0,c ⊕ s1,c ⊕ ([02] • s 2,c ) ⊕ ([03] • s3,c )⎪ s3′,c = ([03] • s 0,c ) ⊕ s1,c ⊕ s 2,c ⊕ ([02] • s 3,c ) ⎪⎭
⎡02 ⎢ 01 ⎢ ⎢ 01 ⎢ ⎣03
03 02 01 01
01 03 02 01
01⎤ ⎡ s 0,c ⎤ ⎡ s 0′ ,c ⎤ ⎢ ⎥ ⎢ ⎥ 01⎥⎥ ⎢ s1,c ⎥ ⎢ s1′,c ⎥ × = ………………… 3.4. 03⎥ ⎢ s 2,c ⎥ ⎢ s 2′ ,c ⎥ ⎥ ⎢ ⎥ ⎢ ⎥ 02⎦ ⎢⎣ s 3,c ⎥⎦ ⎢⎣ s 3′,c ⎥⎦
MixColumns()
s 0, 0
s 0,c s 0, 2
s 0,3
s 0′ , 0
s 0′ ,c
s 0′ , 2
s 0′ ,3
s1,0
s1,c
s1, 2
s1,3
s1′, 0
s1′,c
s1′, 2
s1′,3
s 2,0
s 2,c s 2, 2
s 2,3
s 2′ ,0
s 2′ ,c
s 2′ , 2
s 2′ ,3
s 3, 0
s 3, c
s 3, 3
s 3′,0
s 3′,c
s 3′, 2
s 3′,3
s 3, 2
Gambar3.7. Mix Coloum
3.3.4. AddRoundKey()
Operasi ini merupakan suatu operasi dari penambahan kunci untuk setiap elemen pada finite field yang didefinisikan dengan operasi XOR (tabel 2.3.) dan setiap kunci round terdiri dari w[i] dimana w[i] merupakan sub kunci yang diturunkan dari kunci primer. Penjumlahan (Bagian 2.3.1.1.) dilakukan antara state dengan Round Key hasil ekspansi (Gambar 3.8.). Persamaan 3.5. berikut ini menjabarkan penjumlahan tersebut.
[ s0′ ,c , s1′,c , s 2′ ,c , s3′ ,c , ] = [ s 0,c , s1,c , s 2,c , s3,c , ] ⊕ [ wround *4+ c ] …………… 3.5. dengan 0 ≤ c < 4 (penjumlahan per block).
s 0, 0
s 0,c s 0, 2
s 0,3
s 0′ , 0
s 0′ ,c s ′
s 0′ ,3
s1, 0
s1,c s 1, 2
s1,3
s1′,0
s1′,c s ′
1, 2
s1′,3
s 2,0
s 2,c s
2, 2
s 2,3
s 2′ ,0
s 2′ ,c ′ s 2, 2
s 2′ ,3
s 3, 0
s 3, c s 3, 2
s 3, 3
s 3′,0
s 3′,c ′ s 3, 2
s 3′,3
⊕
w1+ 0
w1+ c w1+ 2
w1+ 3
0, 2
Gambar3.8. Operasi XOR pada AddRoundKey()
3.4. Ekspansi Kunci
Algoritma AES melaksanakan kunci primer dan membuat suatu ekspansi kunci untuk menghasilkan key schedule. Kunci direpresentasikan menjadi word (w[i]) lihat Gambar 3.4. serupa dengan state, akan tetapi elemen statenya adalah cipher key. Ekspansi kunci yang diperlukan AES Nb(Nr+1) word, sehingga untuk AES-128 membutuhkan 4(10+1) word = 44 word. Beberapa langkah yang ditempuh untuk membuat key schedule yaitu Rotword(), SubWord, dan Rcon().
RotWord() adalah Jika w [i] direpresentasikan dengan array baris atau kolom menjadi baris (transpose), maka dapat di ilustrasikan dengan menggeser sekali ke kiri pada posisi byte seperti yang dilakukan shiftrows() pada baris kedua. Misal w[i] = (a 0 , a1 , a 2 , a3 ) , maka didapat RotWord(w[i]) =
(a1 , a 2 , a3 , a0 ) . SubWord() yaitu subtitusikan setiap byte yang dikonversikan kebentuk heksadesimal dengan tabel S-Box seperti yang dilakukan SubBytes(). Misal w[i] = CF4F3C09, dengan mensubtitusikan ketabel S-Box menghasilkan SubWord(w[i]) = 8A84EB01, dimana CF menjadi 8A, 4F menjadi 84, 3C menjadi EB, dan 09 menjadi 01. Rcon[i] merupakan suatu komponen tetap (konstanta) word dari round dalam perhitungan ekspansi ke dalam key schedule. Adapun nilainya untuk AES-128 yang menggunakan 10 kali putaran dari Persamaan 3.6..
Rcon[i] = [xi, ‘00’, ‘00’, ‘00’] ………………………… 3.6.
Rcon[1] = [x0, ‘00’, ‘00’, ‘00’] = [‘01’, ‘00’, ‘00’, ‘00’] = 01000000 Rcon[2] = [x1, ‘00’, ‘00’, ‘00’] = [‘02’, ‘00’, ‘00’, ‘00’] = 02000000 Rcon[3] = [x2, ‘00’, ‘00’, ‘00’] = [‘04’, ‘00’, ‘00’, ‘00’] = 04000000 Rcon[4] = [x3, ‘00’, ‘00’, ‘00’] = [‘08’, ‘00’, ‘00’, ‘00’] = 08000000 Rcon[5] = [x4, ‘00’, ‘00’, ‘00’] = [‘10’, ‘00’, ‘00’, ‘00’] = 10000000 Rcon[6] = [x5, ‘00’, ‘00’, ‘00’] = [‘20’, ‘00’, ‘00’, ‘00’] = 20000000
Rcon[7] = [x6, ‘00’, ‘00’, ‘00’] = [‘40’, ‘00’, ‘00’, ‘00’] = 40000000 Rcon[8] = [x7, ‘00’, ‘00’, ‘00’] = [‘80’, ‘00’, ‘00’, ‘00’] = 80000000 Rcon[9] = [x8, ‘00’, ‘00’, ‘00’] = [x7 • x, ‘00’, ‘00’, ‘00’] = 1B000000 x7 • x = xtime(x7) = xtime(80) = [leftshift(80)] = ‘1B’ Rcon[10] = [x9, ‘00’, ‘00’, ‘00’] = [x8 • x, ‘00’, ‘00’, ‘00’] = 36000000
3.5. Dekripsi
Transformasi-transformasi yang merupakan kebalikan dari setiap cipher diterapkan dalam program dekripsi (inverse cipher) (Gambar3.2.(b)). Fungsi AddRoundKey() untuk enkripsi digunakan kembali untuk dekripsi. Adapun yang
harus
dibuat
lagi
adalah
InvSubBytes(),
InvShiftRows(),
dan
InvMixColumns(). Beberapa bagian cukup dikopi dari fungsi kebalikannya yang telah digunakan saat enkripsi. AddRoundKey() dieksekusi sebagai initial round, diikuti sembilan round rentetan
InvShiftRows(),
InvSubBytes(),
InvMixColumns(),
dan
AddRoundKey(). Round ke-10 yang mengikutinya tidak menyertakan InvMixColumns serupa dengan final round enkripsi.
3.5.1. InvSubBytes()
InvSubBytes() perubahan hanya pada tabel S-box yang digunakan yaitu
S-Box-1. Invers dari tabel S-Box yang digunakan untuk invers
SubBytes() tersedia sebagai S-Box-1 seperti Tabel 3.3..
Tabel 3.3. S-Box-1- nilai subtitusi untuk byte (sr,c) dalam bentuk heksadesimal
s
C 0
r
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
0
52
09
6A
D5
30
36
A5
38
BF
40
A3
9E
81
F3
D7
FB
1
7C
E3
39
82
9B
2F
FF
87
34
8E
43
44
C4
DE
E9
CB
2
54
7B
94
32
A6
C2
23
3D
EE
4C
95
0B
42
FA
C3
4E
3
08
2E
A1
66
28
D9
24
B2
76
5B
A2
49
6D
8B
D1
25
4
72
F8
F6
64
86
68
98
16
D4
A4
5C
CC
5D
65
B6
92
5
6C
70
48
50
FD
ED
B9
DA
5E
15
46
57
A7
8D
9D
84
6
90
D8
AB
00
8C
BC
D3
0A
F7
E4
58
05
B8
B3
45
06
7
D0
2C
1E
8F
CA
3F
0F
02
C1
AF
BD
03
01
13
8A
6B
8
3A
91
11
41
4F
67
DC
EA
97
F2
CF
CE
F0
B4
E6
73
9
96
AC
74
22
E7
AD
35
85
E2
F9
37
E8
1C
75
DF
6E
A
47
F1
1A
71
1D
29
C5
89
6F
B7
62
0E
AA
18
BE
1B
B
FC
56
3E
4B
C6
D2
79
20
9A
DB
C0
FE
78
CD
5A
F4
C
1F
DD
A8
33
88
07
C7
31
B1
12
10
59
27
80
EC
5F
D
60
51
7F
A9
19
B5
4A
0D
2D
E5
7A
9F
93
C9
9C
EF
E
A0
E0
3B
4D
AE
2A
F5
B0
C8
EB
BB
3C
83
53
99
61
F
17
2B
04
7E
BA
77
D6
26
E1
69
14
63
55
21
0C
7D
3.5.2. InvShiftRows()
Kebalikan ShiftRows() ini (Bagian 3.3.2.) berlangsung dengan menggeser siklik ke arah berlawanan. Baris ke dua digeser siklik ke kanan sekali, baris ke tiga dua kali, baris ke empat tiga kali (Gambar 3.9.).
s 0, 0
s 0,1
s 0, 2
s 0,3
s 0, 0
s 0,1
s 0, 2
s 0,3
s1, 0
s 1,1
s1, 2
s1,3
s1,3
s1,0
s 1,1
s1, 2
s 2, 0
s 2,1
s 2, 2
s 2,3
s 2, 2
s 2,3
s 2,0
s 2,1
s 3, 0
s 3,1
s 3, 2
s 3, 3
s 3,1
s 3, 2
s 3, 3
s 3, 0
Gambar3.9.Invers Shift Rows
3.5.3. InvMixColumns()
Operasi state per kolom yang diwujudkan MixColumns() (Bagian 3.3.3.) memiliki kebalikan berupa Persamaan 3.7..
s 0′ ,c = ([0 E ] • s 0,c ) ⊕ ([0 B] • s1,c ) ⊕ ([0 D] • s 2,c ) ⊕ ([09] • s 3,c ) ⎫ ⎪ s1′,c = ([09] • s 0,c ) ⊕ ([0 E ] • s1,c ) ⊕ ([0 B] • s 2,c ) ⊕ ([0 D] • s 3,c ) ⎪ ⎬ …..…. s 2′ ,c = ([0 D] • s 0,c ) ⊕ ([09] • s1,c ) ⊕ ([0 E ] • s 2,c ) ⊕ ([0 B] • s 3,c )⎪ s 3′ ,c = ([0 B] • s 0,c ) ⊕ ([0 D] • s1,c ) ⊕ ([09] • s 2,c ) ⊕ ([0 E ] • s 3,c ) ⎪⎭ 3.7.
⎡ 0 E 0 B 0 D 09 ⎤ ⎡ s 0,c ⎤ ⎡ s 0′ ,c ⎤ ⎢ 09 0 E 0 B 0 D ⎥ ⎢ s ⎥ ⎢ s ′ ⎥ ⎢ ⎥ × ⎢ 1,c ⎥ = ⎢ 1,c ⎥ …………………….. 3.8. ⎢0 D 09 0 E 0 B ⎥ ⎢ s 2,c ⎥ ⎢ s ′2,c ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎣ 0 B 0 D 09 0 E ⎦ ⎢⎣ s3,c ⎥⎦ ⎢⎣ s3′,c ⎥⎦
Koefisien pengali dalam InvMixColumns() adalah {09}, {0b}, {0d}, dan {0e}.
BAB IV SIMULASI
4.1. Simulasi Cipher (Enkripsi)
Simulasi ini diambil dari Lampiran 1 dengan bentuk karakter sebagai berikut :
Plaintext
=
◄"3DUfwêÖ¬╗╠▌ε
Kunci
=
☺☻♥♦♣♠
Ciphertext
=
i─α╪j{♦0╪═╖Çp┤┼Z
○ ♂♀
♫☼
Enkripsi yang merupakan proses pengacakan pesan seperti telah dijelaskan pada sub-BAB 3.3. dengan menunjukan state sebagai objek utama yang akan disimulasikan secara block per block untuk panjang kunci 128 bit dalam bentuk heksadesimal (Lampiran 1) [5] sebagai berikut :
Plaintext
=
00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE
Kunci
=
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E
FF
0F
AddRoundKey
St1 00
44
88
CC
11
55 66
99
DD
AA
EE
77
BB Input
FF
22 33
⊕
St2 00
04
08
0C
01
05
09
0D
02
06
0A
0E
03
07 0B Kunci
0F
S-Box
St3 00
40
80
C0
St4 63
09
CD BA
10
50
90
D0
CA 53
60
70
20
60
A0
E0
B7
D0
E0
E1
30
70
B0
F0
04
51
E7
8C
SiftRows()
St5 63
09
CD
BA
St6 5F
57
F7
1D
53
60
70
CA
72
F5
BE
B9
E0
E1
B7
D0
64
BC 3B
F9
8C
04
51
E7
15
92
1A
29
MixColoums()
4.1.1. AddRoundKey
Langkah pertama yaitu mengkopi plaintext sebagai St1 dan Kunci sebagai St2. St3 didapat dari proses AddRoundKey (Opersai XOR lihat Tabel 2.3.) antara St1 dan St2 yang dikonversikan ke dalam bentuk biner (basis 2) terlebih dahulu lihat tabel ASCII (lampiran 4), dijelaskan sebagai berikut :
00000000 = ‘00’ 00010001 = ‘11’ 00100010 = ‘22’ 00110011 = ‘33’ 00000000 = ‘00’ 00000001 = ‘01 00000010 = ‘02’ 00000011 = ‘03’ 00000000 = ‘00’ 00010000 = ‘10’ 00100000 = ‘20’ 00110000 = ’30’ 01000100 = ‘44’ 01010101 = ‘55’ 01100110 = ‘66’ 01110111 = ‘77’ 00000100 = ‘04’ 00000101 = ‘05’ 00000110 = ‘06’ 00000111 = ‘07’ 01000000 = ‘40’ 01010000 = ‘50’ 01100000 = ‘60’ 01110000 = ‘70’ 10001000 = ‘88’ 10011001 = ‘99’ 10101010 = ‘AA’ 10111011 = ‘BB’ 00001000 = ‘08’ 00001001 = ‘09’ 00001010 = ‘0A’ 00001011 = ‘0B’ 10000000 = ‘80’ 10010000 = ‘90’ 10100000 = ‘A0’ 10110000 = ‘B0’ 11001100 = ‘CC’ 11011101 = ‘DD’ 11101110 = ‘EE’ 11111111 = ‘FF’ 00001100 = ‘0C’ 00001101 = ‘0D’ 00001110 = ‘0E’ 00001111 = ‘0F’ 11000000 = ‘C0’ 11010000 = ‘D0’ 11100000 = ‘E0’ 11110000 = ‘F0’ Sehingga dihasilkan { ’00’ ; ’10’ ; ’20’ ; ’30’ ; ’40’ ; ’50’ ; ’60’ ; ’70’ ; ’80’ ; ’90’ ; ’A0’ ; ’B0’ ; ’C0’ ; ’D0’ ; ’E0’ ; ’F0’ }.
4.1.2. SubBytes()
Langkah selanjutnya SubBytes() yaitu mensubtitusikan St3 dalam bentuk heksadesimal kedalam tabel S-Box (Tabel 3.2.) sehingga menghasilkan St4. Dimana diketahui Sr,c sebagai state 3 serta r (row) merupakan baris dan c (coloum) merupakan kolom. Digambarkan ‘00’ menjadi ‘63’ sebagai berikut :
S
C 0
1
2
0
63
7C
77
1
CA
82
C9
3
4
5
6
7
8
9
7B
F2
6B
6F
C5
30
01
7D
FA
59
47
F0
AD
D4
A
B
C
D
E
F
67
2B
FE
D7
AB
76
A2
AF
9C
A4
72
C0
R
2
B7
FD
93
26
36
3F
F7
CC
34
A5
E5
F1
71
D8
31
15
3
04
C7
23
C3
18
96
05
9A
07
12
80
E2
EB
27
B2
75
4
09
83
2C
1A
1B
6E
5A
A0
52
3B
D6
B3
29
E3
2F
84
5
53
D1
00
ED
20
FC
B1
5B
6A
CB
BE
39
4A
4C
58
CF
6
D0
EF
AA
FB
43
4D
33
85
45
F9
02
7F
50
3C
9F
A8
7
51
A3
40
8F
92
9D
38
F5
BC
B6
DA
21
10
FF
F3
D2
8
CD
0C
13
EC
5F
97
44
17
C4
A7
7E
3D
64
5D
19
73
9
60
81
4F
DC
22
2A
90
88
46
EE
B8
14
DE
5E
0B
DB
A
E0
32
3A
0A
49
06
24
5C
C2
D3
AC
62
91
95
E4
79
B
E7
C8
37
6D
8D
D5
4E
A9
6C
56
F4
EA
65
7A
AE
08
C
BA
78
25
2E
1C
A6
B4
C6
E8
DD
74
1F
4B
BD
8B
8A
D
70
3E
B5
66
48
03
F6
0E
61
35
57
B9
86
C1
1D
9E
E
E1
F8
98
11
69
D9
8E
94
9B
1E
87
E9
CE
55
28
DF
F
8C
A1
89
0D
BF
E6
42
68
41
99
2D
0F
B0
54
BB
16
4.1.3. ShiftRows()
St5 merupakan hasil dari proses ShiftRows() dengan menggeser secara cyclic (lihat Gambar 3.6. (b)) sebagai berikut :
4
63
09
CD
BA
4
CA
53
60
70
CA 53
B7
D0 E0
E1
04
51
8C
E7
4.1.4. MixColoums()
04
63
09 60
CD BA 70
B7 D0
E0
E1
51
E7
8C
5
63
09
CD BA
53
60
70
CA
E0
E1
B7
D0
8C 04
51
E7
Langkah selanjutnya yaitu MixColoums() (lihat Gambar 3.7.), St6 dihasilkan dari perkalian antara koefisien { ‘02’ ; ‘03’ ; ‘01’ ; ‘01’ } yang ditetatapkan Rijndael dengan St5 (per-word). Operasi yang dilakukan
sebagai
perkalian
matriks
(lihat
Gambar
3.7.
(a))
dengan
merepresentasikan ke dalam bentuk polinomial sehingga mendapatkan persamaan seperti persamaan 3.3., dijelaskan sebagai berikut :
w0 = 6353E08C w1 = 0960E104
w2 = CD70B751 w3 =
BACAD0E7
Sebagai contoh w0 = 6353E08C dibawah ini.
s0′ ,c = ([02] • 63) ⊕ ([03] • 53) ⊕ E 0 ⊕ 8C s1′, c = 63 ⊕ ([02] • 53) ⊕ ([03] • E 0) ⊕ 8C s′2,c = 63 ⊕ 53 ⊕ ([02] • E 0) ⊕ ([03] • 8C ) s3′ ,c = ([03] • 63) ⊕ 53 ⊕ E 0 ⊕ ([02] • 8C )
Representasi polinomial :
‘01’ = 00000001
= 1 ; elemen identitas ( • )
’02’ = 00000010
= x
‘03’ = 00000011
= x +1
‘63’ = 01100011
= x6 + x5 + x + 1
‘53’ = 01010011
= x6 + x4 + x + 1
‘E0’ = 11100000
= x7 + x6 + x5
‘8C’ = 10001100
= x7 + x3 + x2
Perkalian ( • )
1. s 0′ ,c = ([02] • 63) ⊕ ([03] • 53) ⊕ E 0 ⊕ 8C ‘02’ • ’63’ = ( x ).( x 6 + x 5 + x + 1 ) = x 7 + x 6 + x 2 + x = 11000110 ‘03’ • ’53’ = ( x + 1 ).( x 6 + x 4 + x + 1 ) = ( x 7 + x 5 + x 2 + x )+( x 6 + x 4 + x + 1 ) = x 7 + x 6 + x 5 + x 4 + x 2 + 1 = 11110101 ‘01’ • ’E0’ = (1).( x 7 + x 6 + x 5 ) = x 7 + x 6 + x 5 = 11100000 ’01’ • ’8C’ = (1).( x 7 + x 3 + x 2 ) = x 7 + x 3 + x 2 = 10001100
2. s1′,c = 63 ⊕ ([02] • 53) ⊕ ([03] • E 0) ⊕ 8C ‘01’ • ’63’ = (1).( x 6 + x 5 + x + 1 ) = x 6 + x 5 + x + 1 = 01100011 ‘02’ • ’53’ = ( x ).( x 6 + x 4 + x + 1 ) = x 7 + x 5 + x 2 + x = 10100110 ‘03’ • ’E0’ = ( x + 1 ).( x 7 + x 6 + x 5 ) = ( x 8 + x 7 + x 6 )+( x 7 + x 6 + x 5 ) = ( x 8 + x 5 ) modulo ( x 8 + x 4 + x 3 + x + 1 ) 1
= x + x + x + x +1 x + x 8
4
3
8
5
x8 + x 4 + x3 + x + 1 x5 + x4 + x3 + x + 1
= x 5 + x 4 + x 3 + x + 1 = 00111011 ’01’ • ’8C’ = (1).( x 7 + x 3 + x 2 ) = x 7 + x 3 + x 2 = 10001100
3. s2′ ,c = 63 ⊕ 53 ⊕ ([02] • E 0) ⊕ ([03] • 8C ) ‘01’ • ’63’ = (1).( x 6 + x 5 + x + 1 ) = x 6 + x 5 + x + 1 = 01100011 ‘01’ • ’53’ = (1).( x 6 + x 4 + x + 1 ) = x 6 + x 4 + x + 1 = 01010011 ‘02’ • ’E0’ = ( x ).( x 7 + x 6 + x 5 ) = x 8 + x 7 + x 6 = ( x 8 + x 7 + x 6 ) modulo ( x 8 + x 4 + x 3 + x + 1 ) 1
= x8 + x 4 + x3 + x + 1 x8 + x7 + x6 x8 + x 4 + x3 + x + 1 x7 + x6 + x4 + x3 + x + 1
= x 7 + x 6 + x 4 + x 3 + x + 1 = 11011011 ’03’ • ’8C’ = ( x + 1 ).( x 7 + x 3 + x 2 ) = ( x 8 + x 4 + x 3 )+( x 7 + x 3 + x 2 ) = ( x 8 + x 7 + x 4 + x 2 ) modulo ( x 8 + x 4 + x 3 + x + 1 ) 1
= x + x + x + x +1 x + x + x + x 8
4
3
8
7
4
2
x8 + x 4 + x3 + x + 1 x7 + x3 + x2 + x + 1
= x 7 + x 3 + x 2 + x + 1 = 10001111
4. s 3′,c = ([03] • 63) ⊕ 53 ⊕ E 0 ⊕ ([02] • 8C ) ‘03’ • ’63’ = ( x + 1 ).( x 6 + x 5 + x + 1 ) = ( x 7 + x 6 + x 2 + x )+( x 6 + x 5 + x + 1 ) = x 7 + x 5 + x 2 + 1 = 10100101 ‘01’ • ’53’ = (1).( x 6 + x 4 + x + 1 ) = x 6 + x 4 + x + 1 = 01010011
‘01’ • ’E0’ = (1).( x 7 + x 6 + x 5 ) = x 7 + x 6 + x 5 = 11100000 ’02’ • ’8C’ = ( x ).( x 7 + x 3 + x 2 ) = ( x 8 + x 4 + x 3 ) = ( x 8 + x 4 + x 3 ) modulo ( x 8 + x 4 + x 3 + x + 1 )
1 = x + x + x + x +1 x + x + x 8
4
3
8
4
3
x8 + x 4 + x3 + x + 1 x +1 = x + 1 = 00000011
Penjumlahan ( ⊕ ) 11000110 11110101 11100000 10001100 01011111=‘5F’
01100011 10100110 00111011 10001100 01110010=’72’
01100011 10100101 01010011 01010011 11011011 11100000 10001111 00000011 01100100 =’64’ 00010101=’15’
Dapat dituliskan sebagai berikut :
⎡02 ⎢ 01 ⎢ ⎢ 01 ⎢ ⎣03
03 02 01 01
01 03 02 01
01⎤ ⎡63 ⎤ ⎡5 F ⎤ 01⎥⎥ ⎢⎢53 ⎥⎥ ⎢⎢72 ⎥ ⎥ × = 03⎥ ⎢ E 0⎥ ⎢64 ⎥ ⎥ ⎢ ⎥ ⎢ ⎥ 02⎦ ⎣8C ⎦ ⎣15 ⎦
Nilai yang dioperasikan di atas sama dengan caranya untuk mencari w1,w2, dan w3.
Diasumsikan untuk round selanjutnya sama dengan simulasi di atas, hanya saja kunci yang digunakan pada AddRounKey menggunakan key schedule(subBAB 4.3.)
4.2. Simulasi Invers Cipher (Dekripsi)
Dekripsi merupakan penterjemahan ciphertext menjadi ke bentuk semula atau plaintext. Berikut ini akan disimulasikan pada Round ke-10 (Final Round) lihat Lampiran 2 yang merupakan invers dari Cipher sub-BAB 4.1., yang mana proses MixColoums() tidak diikut sertakan pada round ini. Dijelaskan dibawah ini :
InvShiftRows()
St1 63
09
CD
BA
53
60
70
CA
CA 53
60
70
E0
E1
B7
D0
B7
D0
E0
E1
8C
04
51
E7
04
51
E7
8C
00
04
08
0C
01
05
09
0D
02
06
0A
0E
03
07
0B
0F
St2
63
09
CD BA
S-Box-1
AddRoundKey
St3 00
40
80
C0
10
50
D0
20
60
90 A0
30
70
B0
E0 F0
⊕
St4
St5 00
44
88
CC
11
55
99
DD
22
66
AA
EE
33
77
BB
FF
4.2.1. InvShiftRows()
Invers ShiftRows() ini seperti (sub-BAB 3.5.2.) dengan menggeser secara cyclic St1 menjadi St2 sebagai berikut :
St1
63
09
CD
BA
53
60
70
CA
E0
E1
B7
D0
8C
04
51
E7
St1
St2
63
63
09
CD BA
53
60
70
CA
E0
E1
B7
D0
8C
04
51
09
CA 53
E7
CD BA 60
70
B7
D0 E0
E1
04
51
8C
E7
4.2.2. InvSubBytes()
Langkah selanjutnya Invers SubBytes() yaitu mensubtitusikan St2 dalam bentuk heksadesimal ke dalam tabel S-Box-1 (Invers S-Box) lihat
Tabel 3.3. sehingga menghasilkan St3. Digambarkan ‘63’ menjadi ‘00’ sebagai berikut :
s
C 0
r
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
0
52
09
6A
D5
30
36
A5
38
BF
40
A3
9E
81
F3
D7
FB
1
7C
E3
39
82
9B
2F
FF
87
34
8E
43
44
C4
DE
E9
CB
2
54
7B
94
32
A6
C2
23
3D
EE
4C
95
0B
42
FA
C3
4E
3
08
2E
A1
66
28
D9
24
B2
76
5B
A2
49
6D
8B
D1
25
4
72
F8
F6
64
86
68
98
16
D4
A4
5C
CC
5D
65
B6
92
5
6C
70
48
50
FD
ED
B9
DA
5E
15
46
57
A7
8D
9D
84
6
90
D8
AB
00
8C
BC
D3
0A
F7
E4
58
05
B8
B3
45
06
7
D0
2C
1E
8F
CA
3F
0F
02
C1
AF
BD
03
01
13
8A
6B
8
3A
91
11
41
4F
67
DC
EA
97
F2
CF
CE
F0
B4
E6
73
9
96
AC
74
22
E7
AD
35
85
E2
F9
37
E8
1C
75
DF
6E
A
47
F1
1A
71
1D
29
C5
89
6F
B7
62
0E
AA
18
BE
1B
B
FC
56
3E
4B
C6
D2
79
20
9A
DB
C0
FE
78
CD
5A
F4
C
1F
DD
A8
33
88
07
C7
31
B1
12
10
59
27
80
EC
5F
D
60
51
7F
A9
19
B5
4A
0D
2D
E5
7A
9F
93
C9
9C
EF
E
A0
E0
3B
4D
AE
2A
F5
B0
C8
EB
BB
3C
83
53
99
61
F
17
2B
04
7E
BA
77
D6
26
E1
69
14
63
55
21
0C
7D
4.2.3. AddRounKey()
Langkah terakhir yaitu AddRounKey() dengan mengoprasikan XOR (lihat Tabel 2.3) antara St3 dan St4 . Sehingga menghasilkan St5 sebagai plaintext, dijelaskan sebagai berikut :
00000000 = ‘00’ 00010000 = ‘10’ 00100000 = ‘20’ 00110000 = ’30’ 00000000 = ‘00’ 00000001 = ‘01 00000010 = ‘02’ 00000011 = ‘03’ 00000000 = ‘00’ 00010001 = ‘11’ 00100010 = ‘22’ 00110011 = ‘33’ 01000000 = ‘40’ 01010000 = ‘50’ 01100000 = ‘60’ 01110000 = ‘70’ 00000100 = ‘04’ 00000101 = ‘05’ 00000110 = ‘06’ 00000111 = ‘07’ 01000100 = ‘44’ 01010101 = ‘55’ 01100110 = ‘66’ 01110111 = ‘77’ 10000000 = ‘80’ 10010000 = ‘90’ 10100000 = ‘A0’ 10110000 = ‘B0’
00001000 = ‘08’ 00001001 = ‘09’ 00001010 = ‘0A’ 00001011 = ‘0B’ 10001000 = ‘88’ 10011001 = ‘99’ 10101010 = ‘AA’ 10111011 = ‘BB’ 11000000 = ‘C0’ 11010000 = ‘D0’ 11100000 = ‘E0’ 11110000 = ‘F0’ 00001100 = ‘0C’ 00001101 = ‘0D’ 00001110 = ‘0E’ 00001111 = ‘0F’ 11001100 = ‘CC’ 11011101 = ‘DD’ 11101110 = ‘EE’ 11111111 = ‘FF’
Sehingga kembali ke bentuk aslinya atau plaintext { ’00’ ; ’11’ ; ’22’ ; ’33’ ; ’44’ ; ’55’ ; ’66’ ; ’77’ ; ’88’ ; ’99’ ; ’AA ; ’BB’ ; ’CC’ ; ’DD’ ; ’EE’ ; ’FF’ }.
Diasumsikan juga seperti Cipher bahwa simulasi round 1 sampai dengan 9 caranya sama seperti di atas (lihat sub-BAB 3.3. dan 4.1 serta sub-BAB 3.4). Sehingga pesan yang acak dapat dikembalikan seperti semula (Lampiran 2) [5], ditunjukkan dalam bentuk karakter sebagai berikut :
=
Ciphertext Kunci
=
Plaintext
i─α╪j{♦0╪═╖Çp┤┼Z
☺☻♥♦♣♠ =
○
♂♀
♫☼
◄"3DUfwêÖ¬╗╠▌ε
4.3. Simulasi Ekspansi Kunci
Ekspansi kunci yang dibangkitkan dari kunci primer menghasilkan key schedule. Kunci direpresentasikan menjadi word (w[i]) lihat sub-BAB 3.4.. Misalnya diketahui: CIPHER KEY = 2B 7E 15 16 28 AE D2 A6 AB F7 15 88 09 CF 4F 3C
w0 = 2B7E1516
w1 = 28AED2A6 w2 = ABF71588 w3 = 09CF4F3C
Maka akan diselesaikan dengan langkah dibawah ini :
1. Temp sebagai variabel menyimpan key schedule sebelumnya, untuk yang pertama diperoleh dari w3. ‘09’
‘CF’
‘4F’
‘3C’
2. RotWord() merupakan proses pergeseran satu kali kekiri secara cyclic seperti ShiftRows().
09
CF 4F
3C
‘CF’
09
‘4F’
‘3C’
CF
4F
3C
CF
4F
3C
09
‘09’
3. SubWord() merupakan proses subtitusi tabel nonlinier (S-Box) seperti SubBytes().
‘CF’ Æ ‘8A’
‘4F’ Æ ‘84’ ‘8A’
‘84’
‘3C’ Æ ‘EB’ ‘EB’
‘09’ Æ ‘01’
‘01’
4. Operasikan XOR antara hasil langkah 3 dengan Rcon[i] lihat Persamaan 3.4..
10001010 = ‘8A’ 10000100 = ‘84’ 11101011 = ‘EB’ 00000001 = ‘01’
00000001 = ‘01’ 00000000 = ‘00’ 00000000 = ‘00’ 00000000 = ‘00’ 10001011 = ‘8B’ 10000100 = ‘84’ 11101011 = ‘EB’ 00000001 = ‘01’ ‘8B’
‘84’
‘EB’
‘01’
5. Langkah terakhir yaitu operaikan XOR antara hasil langkah 4 dengan w[i-Nk].
10001011 = ‘8B’ 10000100 = ‘84’ 11101011 = ‘EB’ 00000001 = ‘01’ 00101011 = ‘2B’ 01111110 = ‘7E’ 00010101 = ‘15’ 00010110 = ‘16’ 10100000 = ‘A0’ 11111010 = ‘FA’ 11111110 = ‘FE’ 00010111 = ‘17’ ‘A0’
‘FA’
‘FE’
‘17’
Langkah selanjutnya seperti 5 langkah diatas, untuk AES-128 sampai mencapai 44 words key schedule(lihat Lampiran 3).
BAB V PENUTUP
5.1. Kesimpulan
AES: Rijndael merupakan algoritma yang cukup sulit untuk dipecahkan saat ini, karena belum ada serangan atau pemecahan yang benar-benar mampu secara analisis matematis dengan efektif dan efisien dengan alasan pola yang dibentuk cukup acak. Keacakan pola tersebut didapat dari sebagian teknik AES sebagai kekuatan yang dimiliki algoritma ini, yaitu SubBytes() dan MixColoums() yang dibangun secara nonlinier sehingga menjadi tantangan kriptoanalisis linier. Akan tetapi keamanan ini mempunyai banyak kritik jika dilihat dari struktur matematikanya yang cukup sederhana, sehingga ini yang menjadi
keuntungan
pengkajian
sebagai
peluang
AES:Rijndael
ini
dikembangkan dalam waktu dekat. AES:Rijndael ini tidak membutuhkan operasi matematika yang besar dari segi perhitungan, sehingga menjadi keuntungan daya memori dan kecepatan komputasi dalam pengoprasian. Pengoperasian yang tidak memakan memori terlalu besar ini yang banyak diminati pasar karena kebutuhan efesiensi waktu yang relatif cepat.
5.2. Penelitian Selanjutnya
Aplikasi nyata yang diberikan AES:Rijndael cukup beragam, oleh karena itu penulis mempunyai saran untuk penelitian selanjutnya agar menggunakan
pemograman melalui Bahasa Pascal, C++, Java, atau yang lainnya sebagai bentuk nyata dari aplikasi AES:Rijndael ini. Simulasi yang dibahas di atas hanya pada panjang kunci 128 bit, oleh karena itu dapat dikaji ulang untuk panjang kunci lainnya yang dimiliki AES:Rijndael seperti 192 bit atau 256 bit.
REFERENSI
[1]
Ariyus, Dony, Kriptografi : Keamanan Data Dan Komunikasi, Graha Ilmu, September 2005.
[2]
Davis, Tom, Cryptography, http://www.geometer.org/mathcircles, 2000.
[3]
Goldreich, Oded, On the Foundations of Modern Cryptography, Department of Computer Science and Applied Mathematics Weizmann Institute of Science, Rehovot, Israel, 1997.
[4]
Komputer, Wahana, Memahami Model Enkripsi & Security Data, ANDI
[email protected],
OFFSET, Yogyakarta, 2003. [5]
NIST, Advanced Encryption Standard, Federal Information Processing
Standards Publication 197, November 2001. [6]
NIST, An Introduction to Computer Security:The NIST Handbook, United State Of America.
[7]
NIST, Recommendation For Block Cipher Modes Of Operation : Methods
And Techniques, United State Of America, Desember 2001. [8]
NIST, Recommendation For Block Cipher Modes Of Operation : The
CMAC Mode For Authentication, United State Of America, Mei 2005. [9]
Rahardjo ,Budi, Aspek Pengamanan Dalam Dunia E-Commerce, INDONESIA COMPUTER EMERGENCY RESPONSE TEAM, 3 Agustus 2000.
[10]
Rahardjo ,Budi, Keamanan Sistem Informasi Berbasis Internet, PT Insan Infonesia - Bandung & PT INDOCISC – Jakarta -1998, 1999, 2000, 2001, 2002.
[11]
Stallings, William, Cryptography And Network Security - Principles And
Practices, Third Edition, Prentice Hall, 2003. [12]
Stamp, Mark, Information Security Principles And Practice, WILEYINTERSCIENCE, 2006.
[13]
Sukarman, Herry, Teori Bilangan, Pusat Penerbitan Universitas Terbuka,
Februari 2001. [14]
Syukri, Agus Fanar, Masa Depan Securiti Informasi, Copyright © 2003 IlmuKomputer.Com.
[15]
Vincent, Rijmen dan Joan Daemen, AES Proposal : Rijndael, Federal
Information Processing Standards Publication , April 2003. [16]
Wagstaff, Samuel S., Cryptanalysis of Number Theoretic Ciphers, Chapman & Hall/CRC.
Lampiran 1 SIMULASI CIPHER [5] PLAINTEXT KUNCI ROUND[ 0].INPUT ROUND[ 0].K_SCH ROUND[ 1].START ROUND[ 1].S_BOX ROUND[ 1].S_ROW ROUND[ 1].M_COL ROUND[ 1].K_SCH ROUND[ 2].START ROUND[ 2].S_BOX ROUND[ 2].S_ROW ROUND[ 2].M_COL ROUND[ 2].K_SCH ROUND[ 3].START ROUND[ 3].S_BOX ROUND[ 3].S_ROW ROUND[ 3].M_COL ROUND[ 3].K_SCH ROUND[ 4].START ROUND[ 4].S_BOX ROUND[ 4].S_ROW ROUND[ 4].M_COL ROUND[ 4].K_SCH ROUND[ 5].START ROUND[ 5].S_BOX ROUND[ 5].S_ROW ROUND[ 5].M_COL ROUND[ 5].K_SCH ROUND[ 6].START ROUND[ 6].S_BOX ROUND[ 6].S_ROW ROUND[ 6].M_COL ROUND[ 6].K_SCH ROUND[ 7].START ROUND[ 7].S_BOX ROUND[ 7].S_ROW ROUND[ 7].M_COL ROUND[ 7].K_SCH ROUND[ 8].START ROUND[ 8].S_BOX ROUND[ 8].S_ROW
: 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF : 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 00 10 20 30 40 50 60 70 80 90 A0 B0 C0 D0 E0 F0 63 CA B7 04 09 53 D0 51 CD 60 E0 E7 BA 70 E1 8C 63 53 E0 8C 09 60 E1 04 CD 70 B7 51 BA CA D0 E7 5F 72 64 15 57 F5 BC 92 F7 BE 3B 29 1D B9 F9 1A D6 AA 74 FD D2 AF 72 FA DA A6 78 F1 D6 AB 76 FE 89 D8 10 E8 85 5A CE 68 2D 18 43 D8 CB 12 8F E4 A7 61 CA 9B 97 BE 8B 45 D8 AD 1A 61 1F C9 73 69 A7 BE 1A 69 97 AD 73 9B D8 C9 CA 45 1F 61 8B 61 FF 87 96 84 31 D8 6A 51 64 51 51 FA 77 3A D0 09 B6 92 CF 0B 64 3D BD F1 BE 9B C5 00 68 30 B3 FE 49 15 59 8F 55 E5 D7 A0 DA CA 94 FA 1F 0A 63 F7 3B 59 CB 73 FC D9 0E E0 57 74 22 2D C0 67 FB 68 3B D9 22 68 FC 74 FB 73 57 67 CB E0 C0 59 0E 2D 4C 9C 1E 66 F7 71 F0 76 2C 3F 86 8E 53 4D F2 56 B6 FF 74 4E D2 C2 C9 BF 6C 59 0C BF 04 69 BF 41 FA 63 6A 28 25 B3 39 C9 40 66 8A 31 57 24 4D 17 2D FB 02 34 3F 6D 12 DD 09 33 7E C7 5B 36 E3 F0 2D 6D 7E F0 3F 33 E3 34 09 36 02 DD 5B FB 12 C7 63 85 B7 9F FC 53 8D F9 97 BE 47 8E 75 47 D6 91 47 F7 F7 BC 95 35 3E 03 F9 6C 32 BC FD 05 8D FD 24 72 40 23 69 66 B3 FA 6E D2 75 32 88 42 5B 6C 36 40 09 26 F9 33 6D 2D 9F B5 9D 23 C4 2C 39 50 36 33 9D 50 F9 B5 39 26 9F 2C 09 2D C4 40 6D 23 F4 BC D4 54 32 E5 54 D0 75 F1 D6 C5 1D D0 3B 3C 3C AA A3 E8 A9 9F 9D EB 50 F3 AF 57 AD F6 22 AA C8 16 77 BC 9B 7A C9 3B 25 02 79 92 B0 26 19 96 E8 47 F5 65 14 DA DD E2 3F 77 B6 4F E7 F7 D4 90 E8 DA B6 90 14 77 D4 65 3F F7 F5 E2 E7 47 DD 4F 98 16 EE 74 00 F8 7F 55 6B 2C 04 9C 8E 5A D0 36 5E 39 0F 7D F7 A6 92 96 A7 55 3D C1 0A A3 1F 6B C6 2F E1 09 F7 5E ED C3 CC 79 39 5D 84 F9 CF 5D B4 15 F8 01 68 58 55 2E 4B B6 12 4C 5F 99 8A 4C B4 58 12 4C 68 B6 8A 01 4B 99 F8 2E 5F 15 55 4C C5 7E 1C 15 9A 9B D2 86 F0 5F 4B E0 98 C6 34 39 14 F9 70 1A E3 5F E2 8C 44 0A DF 4D 4E A9 C0 26 D1 87 6C 0F 79 C4 30 0A B4 55 94 AD D6 6F F4 1F 3E 17 50 76 B6 1C 04 67 8D FC 22 95 F6 A8 BF C0 3E 1C 22 C0 B6 FC BF 76 8D A8 50 67 F6 17 04 95
ROUND[ 8].M_COL ROUND[ 8].K_SCH ROUND[ 9].START ROUND[ 9].S_BOX ROUND[ 9].S_ROW ROUND[ 9].M_COL ROUND[ 9].K_SCH ROUND[10].START ROUND[10].S_BOX ROUND[10].S_ROW ROUND[10].K_SCH ROUND[10].OUTPUT
BA A0 3D E7 A1 F9 B5 6E 47 43 87 35 A4 1C 65 B9 FD E3 BA D2 05 E5 D0 D7 54 11 F4 B5 6B D9 70 0E 54 D9 90 A1 6B A0 9A B5 E9 F7 4E EC 02 30 20 F6 54 99 32 D1 F0 85 57 68 BD 6E 7C 3D F2 B5 77 9E 7A 9F 10 27 89 D5 F5 0B 7A D5 FD A7 89 EF 4E 27 13 11 1D 7F E3 94 4A 17 69 C4 E0 D8 6A 7B 04 30
D5 51 2C BA 5F E0 16 BA F4 AE 35 47 96 4E F1 96 A0 90 2F A1 96 BB F4 0E A1 1B F2 CC F2 35 10 93 ED 9C BE 0B 61 21 6E 8B 2B EF FD 9F 3D 2B CA 10 0B 3D F3 07 A7 8B 4D D8 CD B7 80 70
41 4D BF 7A FE 37 BB 9A 11 70 3C 21 2C 97 10 B6 CA 4E 9F F5 2B 30 B4 C5
23 D2 F1 A1 2F C7 4E 89 A7 9F C5 5A
Lampiran 2 SIMULASI INVERS CIPHER [5] CIPHERTEXT KUNCI ROUND[ 0].IINPUT ROUND[ 0].IK_SCH ROUND[ 1].ISTART ROUND[ 1].IS_ROW ROUND[ 1].IS_BOX ROUND[ 1].IK_SCH ROUND[ 1].IK_ADD ROUND[ 2].ISTART ROUND[ 2].IS_ROW ROUND[ 2].IS_BOX ROUND[ 2].IK_SCH ROUND[ 2].IK_ADD ROUND[ 3].ISTART ROUND[ 3].IS_ROW ROUND[ 3].IS_BOX ROUND[ 3].IK_SCH ROUND[ 3].IK_ADD ROUND[ 4].ISTART ROUND[ 4].IS_ROW ROUND[ 4].IS_BOX ROUND[ 4].IK_SCH ROUND[ 4].IK_ADD ROUND[ 5].ISTART ROUND[ 5].IS_ROW ROUND[ 5].IS_BOX ROUND[ 5].IK_SCH ROUND[ 5].IK_ADD ROUND[ 6].ISTART ROUND[ 6].IS_ROW ROUND[ 6].IS_BOX ROUND[ 6].IK_SCH ROUND[ 6].IK_ADD ROUND[ 7].ISTART ROUND[ 7].IS_ROW ROUND[ 7].IS_BOX ROUND[ 7].IK_SCH ROUND[ 7].IK_ADD
: 69 C4 E0 D8 6A 7B 04 30 D8 CD B7 80 70 B4 C5 5A : 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 69 C4 E0 D8 6A 7B 04 30 D8 CD B7 80 70 B4 C5 5A 13 11 1D 7F E3 94 4A 17 F3 07 A7 8B 4D 2B 30 C5 7A D5 FD A7 89 EF 4E 27 2B CA 10 0B 3D 9F F5 9F 7A 9F 10 27 89 D5 F5 0B 2B EF FD 9F 3D CA 4E A7 BD 6E 7C 3D F2 B5 77 9E 0B 61 21 6E 8B 10 B6 89 54 99 32 D1 F0 85 57 68 10 93 ED 9C BE 2C 97 4E E9 F7 4E EC 02 30 20 F6 1B F2 CC F2 35 3C 21 C7 54 D9 90 A1 6B A0 9A B5 96 BB F4 0E A1 11 70 2F 54 11 F4 B5 6B D9 70 0E 96 A0 90 2F A1 BB 9A A1 FD E3 BA D2 05 E5 D0 D7 35 47 96 4E F1 FE 37 F1 47 43 87 35 A4 1C 65 B9 E0 16 BA F4 AE BF 7A D2 BA A0 3D E7 A1 F9 B5 6E D5 51 2C BA 5F 41 4D 23 3E 1C 22 C0 B6 FC BF 76 8D A8 50 67 F6 17 04 95 3E 17 50 76 B6 1C 04 67 8D FC 22 95 F6 A8 BF C0 D1 87 6C 0F 79 C4 30 0A B4 55 94 AD D6 6F F4 1F 14 F9 70 1A E3 5F E2 8C 44 0A DF 4D 4E A9 C0 26 C5 7E 1C 15 9A 9B D2 86 F0 5F 4B E0 98 C6 34 39 B4 58 12 4C 68 B6 8A 01 4B 99 F8 2E 5F 15 55 4C B4 15 F8 01 68 58 55 2E 4B B6 12 4C 5F 99 8A 4C C6 2F E1 09 F7 5E ED C3 CC 79 39 5D 84 F9 CF 5D 5E 39 0F 7D F7 A6 92 96 A7 55 3D C1 0A A3 1F 6B 98 16 EE 74 00 F8 7F 55 6B 2C 04 9C 8E 5A D0 36 E8 DA B6 90 14 77 D4 65 3F F7 F5 E2 E7 47 DD 4F E8 47 F5 65 14 DA DD E2 3F 77 B6 4F E7 F7 D4 90 C8 16 77 BC 9B 7A C9 3B 25 02 79 92 B0 26 19 96 3C AA A3 E8 A9 9F 9D EB 50 F3 AF 57 AD F6 22 AA F4 BC D4 54 32 E5 54 D0 75 F1 D6 C5 1D D0 3B 3C 36 33 9D 50 F9 B5 39 26 9F 2C 09 2D C4 40 6D 23 36 40 09 26 F9 33 6D 2D 9F B5 9D 23 C4 2C 39 50 24 72 40 23 69 66 B3 FA 6E D2 75 32 88 42 5B 6C 47 F7 F7 BC 95 35 3E 03 F9 6C 32 BC FD 05 8D FD 63 85 B7 9F FC 53 8D F9 97 BE 47 8E 75 47 D6 91 2D 6D 7E F0 3F 33 E3 34 09 36 02 DD 5B FB 12 C7 2D FB 02 34 3F 6D 12 DD 09 33 7E C7 5B 36 E3 F0 FA 63 6A 28 25 B3 39 C9 40 66 8A 31 57 24 4D 17 B6 FF 74 4E D2 C2 C9 BF 6C 59 0C BF 04 69 BF 41 4C 9C 1E 66 F7 71 F0 76 2C 3F 86 8E 53 4D F2 56
ROUND[ 8].ISTART ROUND[ 8].IS_ROW ROUND[ 8].IS_BOX ROUND[ 8].IK_SCH ROUND[ 8].IK_ADD ROUND[ 9].ISTART ROUND[ 9].IS_ROW ROUND[ 9].IS_BOX ROUND[ 9].IK_SCH ROUND[ 9].IK_ADD ROUND[10].ISTART ROUND[10].IS_ROW ROUND[10].IS_BOX ROUND[10].IK_SCH ROUND[10].IOUTPUT
3B D9 22 68 FC 3B 59 CB 73 FC 49 15 59 8F 55 B6 92 CF 0B 64 FF 87 96 84 31 A7 BE 1A 69 97 A7 61 CA 9B 97 89 D8 10 E8 85 D6 AA 74 FD D2 5F 72 64 15 57 63 53 E0 8C 09 63 CA B7 04 09 00 10 20 30 40 00 01 02 03 04 00 11 22 33 44
74 FB 73 57 67 CB E0 D9 0E E0 57 74 22 2D E5 D7 A0 DA CA 94 FA 3D BD F1 BE 9B C5 00 D8 6A 51 64 51 51 FA AD 73 9B D8 C9 CA 45 BE 8B 45 D8 AD 1A 61 5A CE 68 2D 18 43 D8 AF 72 FA DA A6 78 F1 F5 BC 92 F7 BE 3B 29 60 E1 04 CD 70 B7 51 53 D0 51 CD 60 E0 E7 50 60 70 80 90 A0 B0 05 06 07 08 09 0A 0B 55 66 77 88 99 AA BB
C0 59 0E 2D C0 67 FB 68 1F 0A 63 F7 68 30 B3 FE 77 3A D0 09 1F 61 8B 61 1F C9 73 69 CB 12 8F E4 D6 AB 76 FE 1D B9 F9 1A BA CA D0 E7 BA 70 E1 8C C0 D0 E0 F0 0C 0D 0E 0F CC DD EE FF
Lampiran 3 SIMULASI KUNCI EKSPANSI [5]
CIPHER KEY = 2B 7E 15 16 28 AE D2 A6 AB F7 15 88 09 CF 4F 3C w0 = 2B7E1516
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
09CF4F3C A0FAFE17 88542CB1 23A33939 2A6C7605 F2C295F2 7A96B943 5935807A 7359F67F 3D80477D 4716FE3E 1E237E44 6D7A883B EF44A541 A8525B7F B671253B DB0BAD00 D4D1C6F8 7C839D87 CAF2B8BC 11F915BC 6D88A37A 110B3EFD DBF98641 CA0093FD 4E54F70E
w1 = 28AED2A6
w2 = ABF71588
w3 = 09CF4F3C
CF4F3C09 8A84EB01 01000000 8B84EB01 2B7E1516 28AED2A6 ABF71588 09CF4F3C 6C76052A 50386BE5 02000000 52386BE5 A0FAFE17 88542CB1 23A33939 2A6C7605 59F67F73 CB42D28F 04000000 CF42D28F F2C295F2 7A96B943 5935807A 7359F67F 7A883B6D DAC4E23C 08000000 D2C4E23C 3D80477D 4716FE3E 1E237E44 6D7A883B 0BAD00DB 2B9563B9 10000000 3B9563B9 EF44A541 A8525B7F B671253B DB0BAD00 F915BC11 99596582 20000000 B9596582 D4D1C6F8 7C839D87 CAF2B8BC 11F915BC 0093FDCA 63DC5474 40000000 23DC5474 6D88A37A 110B3EFD
A0FAFE17 88542CB1 23A33939 2A6C7605 F2C295F2 7A96B943 5935807A 7359F67F 3D80477D 4716FE3E 1E237E44 6D7A883B EF44A541 A8525B7F B671253B DB0BAD00 D4D1C6F8 7C839D87 CAF2B8BC 11F915BC 6D88A37A 110B3EFD DBF98641 CA0093FD 4E54F70E 5F5FC9F3
30 31 32 33 34 35 36 37 38 39 40 41 42 43
5F5FC9F3 84A64FB2 4EA6DC4F A6DC4F4E 2486842F 80000000 A486842F EAD27321 B58DBAD2 312BF560 7F8D292F 8D292F7F 5DA515D2 1B000000 46A515D2 AC7766F3 19FADC21 28D12941 575C006E 5C006E57 4A639F5B 36000000 7C639F5B D014F9A8 C9EE2589 E13F0CC8
DBF98641 CA0093FD 4E54F70E 5F5FC9F3 84A64FB2 4EA6DC4F EAD27321 B58DBAD2 312BF560 7F8D292F AC7766F3 19FADC21 28D12941 575C006E
84A64FB2 4EA6DC4F EAD27321 B58DBAD2 312BF560 7F8D292F AC7766F3 19FADC21 28D12941 575C006E D014F9A8 C9EE2589 E13F0CC8 B6630CA6
Lampiran 4 TABEL ASCII Desimal 000 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021
Karakter ☺ ☻ ♥ ♦ ♣ ♠
○ ♂ ♀ ♫ ☼ ► ◄ ↕ ‼ ¶ §
Binary 00000000 00000001 00000010 00000011 00000100 00000101 00000110 00000111 00001000 00001001 00001010 00001011 00001100 00001101 00001110 00001111 00010000 00010001 00010010 00010011 00010100 00010101
Heksadesimal 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15
022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060
▬ ↨ ↑ ↓ → ← ∟ ↔ ▲ ▼ ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; <
00010110 00010111 00011000 00011001 00011010 00011011 00011100 00011101 00011110 00011111 00100000 00100001 00100010 00100011 00100100 00100101 00100110 00100111 00101000 00101001 00101010 00101011 00101100 00101101 00101110 00101111 00110000 00110001 00110010 00110011 00110100 00110101 00110110 00110111 00111000 00111001 00111010 00111011 00111100
16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C
061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099
= > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c
00111101 00111110 00111111 01000000 01000001 01000010 01000011 01000100 01000101 01000110 01000111 01001000 01001001 01001010 01001011 01001100 01001101 01001110 01001111 01010000 01010001 01010010 01010011 01010100 01010101 01010110 01010111 01011000 01011001 01011010 01011011 01011100 01011101 01011110 01011111 01100000 01100001 01100010 01100011
3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
d e f g h i j k l m n o p q r s t u v w x y z { | } ~ ⌂ Ç ü é â ä à å ç ê ë è
01100100 01100101 01100110 01100111 01101000 01101001 01101010 01101011 01101100 01101101 01101110 01101111 01110000 01110001 01110010 01110011 01110100 01110101 01110110 01110111 01111000 01111001 01111010 01111011 01111100 01111101 01111110 01111111 10000000 10000001 10000010 10000011 10000100 10000101 10000110 10000111 10001000 10001001 10001010
64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
ï î ì Ä Å É æ Æ ô ö ò û ù ÿ Ö Ü ¢ £ ¥ ₧ ƒ á í ó ú ñ Ñ ª º ¿ ⌐ ¬ ½ ¼ ¡ « » ░ ▒
10001011 10001100 10001101 10001110 10001111 10010000 10010001 10010010 10010011 10010100 10010101 10010110 10010111 10011000 10011001 10011010 10011011 10011100 10011101 10011110 10011111 10100000 10100001 10100010 10100011 10100100 10100101 10100110 10100111 10101000 10101001 10101010 10101011 10101100 10101101 10101110 10101111 10110000 10110001
8B 8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216
▓ │ ┤ ╡ ╢ ╖ ╕ ╣ ║ ╗ ╝ ╜ ╛ ┐ └ ┴ ┬ ├ ─ ┼ ╞ ╟ ╚ ╔ ╩ ╦ ╠ ═ ╬ ╧ ╨ ╤ ╥ ╙ ╘ ╒ ╓ ╫ ╪
10110010 10110011 10110100 10110101 10110110 10110111 10111000 10111001 10111010 10111011 10111100 10111101 10111110 10111111 11000000 11000001 11000010 11000011 11000100 11000101 11000110 11000111 11001000 11001001 11001010 11001011 11001100 11001101 11001110 11001111 11010000 11010001 11010010 11010011 11010100 11010101 11010110 11010111 11011000
B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8
217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
┘ ┌ █ ▄ ▌ ▐ ▀ α ß Γ π Σ σ µ τ Φ Θ Ω δ ∞ φ ε ∩ ≡ ± ≥ ≤ ⌠ ⌡ ÷ ≈ ° · · √ ⁿ ² ■
11011001 11011010 11011011 11011100 11011101 11011110 11011111 11100000 11100001 11100010 11100011 11100100 11100101 11100110 11100111 11101000 11101001 11101010 11101011 11101100 11101101 11101110 11101111 11110000 11110001 11110010 11110011 11110100 11110101 11110110 11110111 11111000 11111001 11111010 11111011 11111100 11111101 11111110 11111111
D9 DA DB DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF