STUDI ALGORITMA RIJNDAEL DALAM SISTEM KEAMANAN DATA
SKRIPSI
EKO SATRIA 051411010
DEPARTEMEN MATEMATIKA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS SUMATERA UTARA MEDAN 2009
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
STUDI ALGORITMA RIJNDAEL DALAM SISTEM KEAMANAN DATA
SKRIPSI Diajukan untuk melengkapi tugas dan memenuhi syarat mencapai gelar Sarjana Sains
EKO SATRIA 051411010
DEPARTEMEN MATEMATIKA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS SUMATERA UTARA MEDAN 2009
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
ii
PERSETUJUAN
Judul
: STUDI ALGORITMA RIJNDAEL DALAM SISTEM KEAMANAN DATA : SKRIPSI : EKO SATRIA : 051411010 : SARJANA (S1) MATEMATIKA : MATEMATIKA : MATEMATIKA DAN ILMU PENGETAHUAN ALAM (FMIPA) UNIVERSITAS SUMATERA UTARA
Kategori Nama Nomor Induk Mahasiswa Program Studi Departemen Fakultas
Diluluskan di Medan, Komisi Pembimbing
:
Pembimbing 2
Pembimbing 1
Dra. Mardiningsih, M.Si. NIP. 131803344
Syahriol Sitorus, S.Si, M.IT. NIP. 132174687
Diketahui/Disetujui oleh Departemen Matematika FMIPA USU Ketua,
DR. Saib Suwilo, M.Sc. NIP. 131796149
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
iii
PERNYATAAN
STUDI ALGORITMA RIJNDAEL DALAM SISTEM KEAMANAN DATA SKRIPSI
Saya mengakui bahwa skripsi ini adalah hasil kerja saya sendiri, kecuali beberapa kutipan dan ringkasan yang masing-masing disebutkan sumbernya.
Medan,
Eko Satria 051411010
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
iv
PENGHARGAAN
Puji dan syukur penulis panjatkan kehadirat Tuhan Yang Maha Pemurah dan Maha Penyayang, dengan limpahan rahmat dan karunia-Nya skripsi ini berhasil diselesaikan dalam waktu yang telah direncanakan. Ucapan terima kasih saya sampaikan kepada Bapak Syahriol Sitorus, S.Si, M.IT dan Ibu Dra. Mardiningsih, M.Si. selaku pembimbing pada penyelesaian skripsi ini yang telah memberikan panduan dan penuh kepercayaan kepada saya untuk menyempurnakan skripsi ini. Panduan ringkas, padat dan profesional telah diberikan kepada saya agar penulis dapat menyelesaikan tugas ini. Ucapan terima kasih juga ditujukan kepada Ketua dan Sekretaris Departemen Dr. Saib Suwilo, M.Sc. dan Bapak Drs. Henri Rani Sitepu, M.Si., Dekan dan Pembantu Dekan Fakultas Matematika dan Ilmu Pengetahuan Alam Universitas Sumatera Utara, semua dosen pada Departemen Matematika FMIPA USU, pegawai di FMIPA USU, dan rekan-rekan kuliah. Akhirnya, tidak terlupakan kepada bapak, ibu dan semua ahli keluarga yang selama ini memberikan bantuan dan dorongan yang diperlukan. Semoga Tuhan Yang Maha Esa membalasnya.
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
v
ABSTRAK
Algoritma kriptografi bernama Rijndael didesain oleh Vincent Rijmen dan John Daemen asal Belgia yang keluar sebagai pemenang kontes algoritma kriptografi sebagai pengganti DES yang diadakan oleh NIST (National Institutes of Standards and Technology) milik pemerintah Amerika Serikat pada 26 November 2001. Algoritma Rijndael inilah yang kemudian dikenal dengan Advanced Encryption Standard (AES). Setelah mengalami beberapa proses standardisasi oleh NIST, Rijndael kemudian diadopsi menjadi standard algoritma kriptografi secara resmi pada 22 Mei 2002. Tugas akhir ini membahas tentang studi dan implementasi Algoritma Rijndael untuk menyandikan data yang disimpan dalam media penyimpanan dan dalam pengimplementasinya menggunakan bahasa pemrograman Microsoft Visual Basic 6.0.
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
vi
THE STUDY OF THE ALGORITHM RIJNDAEL IN THE SECURITY SYSTEM OF THE DATA ABSTRACT The cryptography algorithm named Rijndael was designed by Vincent Rijmen and John Daemen from Belgium that went out as the winner of the contest of the cryptography algorithm as the replacement Des that was held by NIST (National Institutes of Standards and Technology) property of the United States government on November 26 2001. This Rijndael algorithm that afterwards was known with Advanced Encryption Standard (AES). After experiencing several processes of the standardisation by NIST, Rijndael was afterwards adopted to standard the cryptography algorithm officially on May 22 2002. The task of this end discussed about the study and the algorithm Rijndael implementation to encode the data that was kept in the storage media and in pengimplementasi him used the programming language of Microsoft Visual Basic 6.0.
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
vii
DAFTAR ISI
Halaman PERSETUJUAN PERNYATAAN PENGHARGAAN ABSTRAK ABSTRACT DAFTAR ISI DAFTAR GAMBAR DAFTAR TABEL
ii iii iv v vi vii ix x
BAB 1 PENDAHULUAN 1.1 Latar Belakang 1.2 Perumusan Masalah 1.3 Pembatasan Masalah 1.4 Tujuan Penelitian 1.5 Kontribusi Penelitian 1.6 Metode Penelitian 1.7 Tinjauan Pustaka
1 2 3 3 3 4 4
BAB 2 LANDASAN TEORI 2.1 Teori Dasar Kriptografi 2.2 Algoritma Kriptografi 2.2.1 Algoritma Simetri 2.2.2 Algoritma Tak Simetri 2.2.3 Fungsi Hash (Hash Function) 2.3 Teknik Dasar Kriptografi 2.3.1 Metode Substitusi 2.3.2 Teknik Blok 2.3.3 Teknik Permutasi atau Teknik Transposisi 2.4 Teknik-teknik Kriptanalisis 2.5 Algoritma Rijndael 2.6 Keamanan Rijndael
7 8 10 12 14 15 15 15 16 17 22 32
BAB 3 PEMBAHASAN 3.1 Analisis Desain Rijndael 3.1.1 Kotak Substitusi (S-Box) 3.1.2 Operasi MixColumns 3.1.3 Ekspansi Kunci 3.2 Implementasi Algoritma Rijndael 3.2.1 Pembentukan Kotak Substitusi (S-Box) 3.2.2 Proses MixColumns 3.2.3 Proses Enkripsi 3.2.4 Proses Dekripsi
34 34 35 35 36 36 39 39 43
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
viii
3.3 Flowchart Program 3.4 Implementasi 3.5 Rijndael Untuk Integritas Data
47 48 54
BAB 4 KESIMPULAN DAN SARAN 4.1 Kesimpulan 4.2 Saran
60 61
DAFTAR PUSTAKA
62
LAMPIRAN
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
ix
DAFTAR GAMBAR Halaman Gambar 2.1 Proses enkripsi dan dekripsi Gambar 2.2 Algoritma simetri Gambar 2.3 Algoritma tak simetri Gambar 2.4 Permutasi Gambar 2.5 Serangan kriptografi man-in-the middle Gambar 2.6 Diagram proses enkripsi dan proses dekripsi Gambar 2.7 Transformasi SubByte dengan S-Box Gambar 2.8 Proses SubBytes Gambar 2.9 Hasil SubBytes Gambar 2.10 Transformasi Shiftrows Gambar 2.11 Proses transformasi Shiftrows Gambar 2.12 Hasil dari ShiftRows Gambar 2.13 Operasi MixColumns Gambar 2.14 Hasil keseluruhan MixColumns Gambar 2.15 Transformasi AddRoundKey Gambar 2.16 Hasil AddRoundKey Gambar 2.17 Proses ekspansi kunci Gambar 2.18 Proses algoritma Rijndael Gambar 3.1 Flowchart aplikasi enkripsi dan dekripsi algoritma Rijndael Gambar 3.2 Form utama Gambar 3.3 Hasil enkripsi teks Gambar 3.4 Hasil dekripsi teks Gambar 3.5 Enkripsi file Gambar 3.6 Dekripsi file Gambar 3.7 Hasil file enkripsi Gambar 3.8 Grafik waktu proses enkripsi Rijndael dan 3DES Gambar 3.9 Grafik waktu proses dekripsi Rijndael dan 3DES
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
10 11 13 16 19 24 25 25 25 26 27 28 28 28 28 29 30 31 47 48 49 49 50 50 51 52 53
x
DAFTAR TABEL Halaman Tabel 2.1 Subtitusi Tabel 2.2 Teknik blok Tabel 2.3 Versi-versi AES Tabel 2.4 S-Box Rijndael Tabel 3.1 Waktu Proses Enkripsi Algoritma Rijndael dan 3DES Tabel 3.2 Waktu Proses Dekripsi Algoritma Rijndael dan 3DES
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
15 16 22 24 52 53
1
BAB 1 PENDAHULUAN
1.1 Latar Belakang Data merupakan salah satu aset penting dalam kelangsungan hidup perusahaan mana pun,
instansi-instansi
pemerintahan,
maupun
institusi-institusi
pendidikan.
Penyimpanan data memerlukan berbagai macam pertimbangan, terutama dari segi keamanannya dan kerahasiaannya. Dalam menjaga keamanan data terdapat sebuah metode pengamanan data yang dikenal dengan nama kriptografi. Kriptografi merupakan salah satu metode pengamanan data yang dapat digunakan untuk menjaga kerahasiaan data, keaslian data serta keaslian pengirim. Kriptografi adalah ilmu yang berguna untuk mengacak (kata yang lebih tepat adalah masking) data sedemikian rupa sehingga tidak bisa dibaca oleh pihak ke tiga. Tentu saja data yang diacak harus bisa dikembalikan ke bentuk semula oleh pihak yang berwenang. Selain pengertian tersebut terdapat pula pengertian ilmu yang mempelajari teknik-teknik matematika yang berhubungan dengan aspek keamanan informasi seperti kerahasiaan data, keabsahan data, integritas data, serta autentikasi data . Data yang ingin diacak biasanya disebut Plainteks (Plaintext). Data diacak dengan menggunakan Kunci Enkripsi (Encryption Key). Proses pengacakan itu sendiri disebut Enkripsi (Encryption). Plainteks yang telah diacak disebut Cipherteks (Chipertext). Kemudian proses untuk mengembalikan Cipherteks ke Plainteks disebut
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
2
Dekripsi (Decryption). Kunci yang digunakan pada tahap Dekripsi disebut Kunci Dekripsi (Decryption Key). 2 (Dua) tipe dasar dari teknologi kriptografi adalah symmetric key (secret/private key) cryptography dan asymmetric (public key) cryptography. Pada symmetric key cryptography, baik pengirim maupun penerima memiliki kunci rahasia yang umum. Pada asymmetric key cryptography, pengirim dan penerima masingmasing berbagi kunci publik. Algoritma kriptografi yang baik akan memerlukan waktu yang lama untuk memecahkan data yang telah disandikan. Seiring dengan perkembangan teknologi komputer, dunia teknologi informasi membutuhkan algoritma kriptografi yang lebih kuat dan aman. Algoritma kriptografi bernama Rijndael yang didesain oleh Vincent Rijmen dan John Daemen asal Belgia sebagai pemenang kontes algoritma kriptografi pengganti DES yang diadakan oleh NIST (National Institutes of Standards and Technology) milik pemerintah Amerika Serikat pada 26 November 2001. Algoritma Rijndael inilah yang kemudian dikenal dengan Advanced Encryption Standard (AES). Setelah mengalami beberapa proses standardisasi oleh NIST, Rijndael kemudian diadopsi menjadi standard algoritma kriptografi secara resmi pada 22 Mei 2002.
1.2 Perumusan Masalah Bagaimana menganalisa dan mengimplementasikan algoritma Rijndael dalam menjaga keamanan data agar pihak yang tidak berwenang atau Kriptanalisis tidak dapat memecahkan data yang telah diacak sehingga keamanan dan kerahasian data dapat terjaga.
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
3
1.3 Pembatasan Masalah Dalam perancangan sistem keamanan data menggunakan algoritma Rijndael dilakukan beberapa batasan sebagai berikut: 1.
Metode yang digunakan menggunakan algoritma Rijndael.
2.
Dalam pengamanan data hanya sebatas integritas data.
3.
Dalam pengamanan data file yang dapat diproses file-file yang ada pada Microsoft Office, file berekstensi exe, rtf, txt.
4.
Dalam
perancangan
dan
menerapkan
algoritma
Rijndael
dengan
menggunakan bahasa pemrograman Visual Basic 6.0.
1.4
Tujuan Penelitian
Tujuan penelitian menganalisa dan mengimplentasikan algoritma Rijndael dalam sistem pengamanan data.
1.5 Kontribusi Penelitian Manfaat penelitian ini untuk menambah pengetahuan dan wawasan penulis tentang kriptografi khususnya enkripsi dan dekripsi di dalam pengamanan dan kerahasiaan suatu data menggunakan Algoritma Rijndael.
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
4
1.6 Metode Penelitian Penelitian ini dilakukan dengan langkah-langkah sebagi berikut: 1. Melakukan studi literatur mengenai algoritma Rijndael baik pada beberapa buku, makalah, maupun artikel-artikel yang ada pada situs-situs internet yang berhubungan dengan algoritma Rijndael. 2. Menganalisa proses enkripsi dan dekripsi pada algoritma Rijndael. 3. Melakukan perancangan dan menerapkan algoritma Rijndael dengan menggunakan bahasa pemrograman Visual Basic 6.0.
1.7 Tinjauan Pustaka Dalam tulisan ini, penulis memanfaatkan buku-buku yang dapat dipergunakan untuk menjelaskan teori-teori pemecahan masalah atau dasar pemikiran untuk menjelaskan masalah yang dibahas. (Andi, 2003) dalam bukunya ”Memahami Model Enkripsi dan Security Data”, berkaitan dengan masalah yang terjadi dan perlunya pengamanan terhadap data yang ada dalam komputer, lingkup keamanan data dari suatu sistem komputer mencakup hal-hal yang tidak saja berkaitan dengan: 1.
Keamanan fisik, komputer harus diletakkan pada tempat yang dapat dikontrol, karena kemungkinan penyalahgunaan dapat terjadi (user yang tidak disiplin meninggalkan komputer dalam keadaan hidup sehingga orang tidak berhak dapat menggunakan fasilitas komputer tersebut).
2.
Keamanan akses, apabila seluruh akses sistem komputer secara administrasi
harus
dikontrol
dan
terdokumentasi,
maka
suatu
permasalahan dapat diketahui penyebabnya dan mencari pemecahannya.
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
5
3.
Keamanan file atau data, apabila file atau data yang sensitif dan bersifat rahasia, maka diperlukan tingkat akses dan bahkan dapat dibuatkan suatu kode sandi tertentu. Jika file atau data tersebut dicuri, maka isi informasinya tidak mudah didapatkan.
4.
Keamanan jaringan, dengan pemanfaatan jaringan publik, data yang ditransmisikan dalam jaringan harus aman dari kemungkinan dapat diketahui isi informasinya sehingga untuk informasi yang sensitif harus dibuatkan kode sandi tertenru untuk pengamanannya pada saat transmisi.
(Dony Ariyus, 2006) dalam bukunya “Kriptografi Keamanan Data dan Komunikasi“, kriptografi berasal dari bahasa Yunani, menurut bahasa dibagi menjadi 2 (dua) yaitu kripto dan graphia, kripto berarti secret (rahasia) dan graphia berarti writing (tulisan). Menurut terminologinya kriptografi adalah ilmu dan seni untuk menjaga keamanan pesan ketika pesan dikirim dari suatu tempat ke tempat yang lain. Algoritma adalah urutan langkah-langkah logis untuk penyelesaian masalah yang disusun secara sistematis. Algoritma kriptografi merupakan langkah-langkah logis untuk menyembunyikan pesan dari orang-orang yang tidak berhak atas pesan tersebut. Algoritma kriptografi terdiri dari 3 (tiga) fungsi dasar yaitu: 1. Enkripsi, merupakan hal yang sangat penting dalam kriptografi yang merupakan pengaman data yang dikirimkan terjaga rahasianya. Pesan asli disebut plaintext yang dirubah menjadi kode-kode yang tidak dimengerti. Enkripsi bisa diartikan dengan cipher. 2. Deskripsi, merupakan kebalikan dari enkripsi, pesan yang telah dienkripsi dikembalikan kebentuk asalnya (plaintext) disebut dengan deskripsi pesan. 3. Kunci, yang dimaksud disini adalah kunci yang dipakai untuk melakukan enkripsi dan dekripsi, kunci terbagi 2 (dua) bagian yaitu kunci pribadi (private key) dan kunci umum (public key).
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
6
(Rinaldi Munir, 2006) dalam bukunya “Kriptografi“, Rijndael menggunakan substitusi dan permutasi, dan sejumlah putaran (cipher berulang) setiap putaran menggunakan kunci internal yang berbeda (kunci setiap putaran disebut round key). Joan Daemen & Vincent Rijmen, dalam artikel yang berjudul A Specification for Rijndael, the AES Algorithm, menjelaskan input dan output dari algoritma AES terdiri dari urutan data sebesar 128 bit. Urutan data yang sudah terbentuk dalam satu kelompok 128 bit tersebut disebut juga sebagai blok data atau plaintext yang nantinya akan dienkripsi menjadi chipertext. Chiper key dari AES terdiri dari key dengan panjang 128 bit, 192 bit, atau 256 bit. Federal Information Processing Standards Publication 197, dalam artikel yang berjudul Announcing the ADVANCED ENCRYPTION STANDARD (AES), menjelaskan pada algoritma AES, jumlah blok input, blok output dan state adalah 128 bit. Dengan besar data 128 bit, berarti Nb=4 yang menunjukkan panjang data tiap baris adalah 4 byte. Dengan blok input atau blok data sebesar 128 bit, key yang digunakan pada algoritma AES tidak harus mempunyai besar yang sama dengan blok input. Chiper key pada algoritma AES bisa menggunakan kunci dengan panjang 128 bit, 192 bit atau 256 bit. Perbedaan panjang kunci akan mempengaruhi jumlah round yang akan diimplementasikan pada algoritma AES ini.
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
7
BAB 2 LANDASAN TEORI
2.1 Teori Dasar Kriptografi Kriptografi (cryptography) berasal dari bahasa Yunani “cryptos” artinya “secret” (rahasia), sedangkan “graphein” artinya “writing” (tulisan). Jadi, kriptografi berarti “secret writing” (tulisan rahasia). Ada beberapa definisi kriptografi yang telah dikemukakan di dalam beberapa literatur. Definisi yang dipakai di dalam buku-buku yang lama (sebelum tahun 1980-an) menyatakan bahwa kriptografi adalah ilmu dan seni untuk menjaga kerahasiaan pesan dengan cara menyandikannya ke dalam bentuk yang tidak dapat dimengerti lagi maknanya. Definisi ini mungkin cocok pada masa lalu di mana kriptografi digunakan untuk keamanan komunikasi penting seperti komunikasi di kalangan militer, diplomat dan mata-mata. Namun saat ini kriptografi lebih dari sekedar privacy, tetapi juga tujuan data integrity, authentication dan non repudiation. Ada 4 (empat) tujuan mendasar dari ilmu kriptografi ini yang juga merupakan aspek keamanan informasi yaitu: 1. Kerahasiaan (confidentiality), adalah layanan yang ditujukan untuk menjaga agar pesan tidak dapat dibaca oleh pihak-pihak yang tidak berhak. Di dalam kriptografi, layanan ini direalisasikan dengan menyandikan pesan menjadi cipherteks. 2. Integritas data (data integrity), adalah layanan yang menjamin bahwa pesan masih asli atau belum pernah dimanipulasi selama pengiriman.
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
8
Dengan kata lain, aspek keamanan ini dapat diungkapkan sebagai pertanyaan: “Apakah pesan yang diterima masih asli atau tidak mengalami perubahan?”. Untuk menjaga integritas data, sistem harus memiliki kemampuan untuk mendeteksi manipulasi pesan oleh pihak-pihak yang tidak berhak, antara lain penyisipan, penghapusan, dan pensubstitusian data lain ke dalam pesan yang sebenarnya. 3. Otentikasi (authentication), adalah layanan yang berhubungan dengan identifikasi,
baik
mengindentifikasi
kebenaran
pihak-pihak
yang
berkomunikasi (user authentication atau entity authentication) maupun mengindentifikasi kebenaran sumber pesan (data origin authencation). Pihak yang saling berkomunikasi harus dapat mengotentikasi satu sama lain sehingga dapat memastikan sumber pesan. Pesan yang dikirim melalui saluran komunikasi juga harus diotentikasi asalnya. Dengan kata lain, aspek keamanan ini dapat diungkapkan sebagai pertanyaan: “Apakah pesan yang diterima benar-benar berasal dari pengirim yang benar?”. 4. Nirpenyangkal (non-repudiation), adalah layanan untuk mencegah entitas yang berkomunikasi melakukan penyangkalan, yaitu pengirim pesan menyangkal melakukan pengiriman atau penerima pesan menyangkal telah menerima pesan.
2.2 Algoritma Kriptografi Algoritma kriptografi disebut juga cipher yaitu aturan untuk enchipering dan dechipering, atau fungsi matematika yang digunakan untuk enkripsi dan dekripsi. Beberapa cipher memerlukan algoritma yang berbeda untuk enciphering dan dechiphering. Keamanan algoritma kriptografi sering diukur dari banyaknya kerja yang dibutuhkan untuk memecahkan cipherteks menjadi plainteks tanpa mengetahui kunci yang digunakan. Apabila semakin banyak proses yang diperlukan berarti juga semakin
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
9
lama waktu yang dibutuhkan, maka semakin kuat algoritma tersebut dan semakin aman digunakan untuk menyandikan pesan. Algoritma kriptografi terdiri dari fungsi dasar yaitu: 1. Enkripsi, merupakan hal yang sangat penting dalam kriptografi yang merupakan pengamanan data yang dikirimkan terjaga rahasianya, pesan asli disebut plainteks yang dirubah menjadi kode-kode yang tidak dimengerti. Enkripsi bisa diartikan dengan cipher atau kode. 2. Dekripsi, merupakan kebalikan dari enkripsi, pesan yang telah dienkripsi dikembalikan kebentuk asalnya (plainteks) disebut dengan dekripsi pesan. Algoritma yang digunakan untuk dekripsi tentu berbeda dengan yang digunakan untuk enkripsi. 3. Kunci, yang dimaksud di sini adalah kunci yang dipakai untuk melakukan enkripsi dan dekripsi, kunci terbagi jadi 2 (dua) bagian yaitu kunci pribadi (private key) dan kunci umum (public key). Konsep matematis yang mendasari kriptografi adalah relasi antara 2 (dua) buah himpunan yaitu himpunan yang berisi elemen-elemen plainteks dan himpunan yang berisi cipherteks. Enkripsi dan dekripsi merupakan fungsi yang memetakan elemen-elemen antar kedua himpunan tersebut. Misalkan P menyatakan plainteks dan C menyatakan cipherteks, maka fungsi enkripsi E memetakan P ke C, E(P)=C
(2.1)
Dan fungsi dekripsi D memetakan C ke P, D(C)=P
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
(2.2)
10
Karena proses enkripsi kemudian dekripsi mengembalikan pesan ke pesan asal, maka kesama berikut harus benar, D(E(P))=P
(2.3)
Kriptografi modern menggunakan kunci, yang dalam hal ini algoritma tidak lagi dirahasiakan, tetapi kunci harus dijaga kerahasiaannya. Kunci adalah parameter yang digunakan untuk transformasi enciphering dan dechipering. Kunci biasanya berupa string atau deretan bilangan. Jika menggunakan kunci K, maka fungsi enkripsi dan dekripsi dapat ditulis sebagai EK(P)=C dan DK(C)=P
(2.4)
dan ke dua fungsi ini memenuhi DK(EK(P))=P
(2.5)
Gambar dibawah memperlihatkan skema enkripsi dan dekripsi dengan menggunakan kunci. Kunci
Kunci Cipherteks
Plainteks Enkripsi
Plainteks Dekripsi
Gambar 2.1 Proses enkripsi dan dekripsi
2.2.1 Algoritma Simetri Algoritma ini juga sering disebut dengan algoritma klasik, karena memakai kunci yang sama untuk kegiatan enkripsi dan dekripsinya. Mengirim pesan dengan menggunakan algoritma ini, penerima pesan harus diberitahukan kunci dari pesan
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
11
tersebut agar bisa mendekripsi pesan yang dikirim. Keamanan dari pesan yang menggunakan algoritma ini tergantung pada kunci. Jika kunci tersebut diketahui oleh orang lain, maka orang tersebut bisa melakukan enkripsi dan dekripsi terhadap pesan tersebut. Secara umum, cipher yang termasuk ke dalam kriptografi simetri beroperasi dalam mode blok (block cipher), yaitu setiap kali enkripsi atau dekripsi dilakukan terhadap satu blok data yang berukuran tertentu, atau beroperasi dalam mode aliran (stream cipher), yaitu setiap kali enkripsi atau dekripsi dilakukan terhadap 1 bit atau 1 byte data. Aplikasi kriptografi simetri yang utama adalah melindungi kerahasiaan data yang dikirim melalui saluran tidak aman dan melindungi kerahasiaan data yang disimpan pada media yang tidak aman. Kelemahan dari sistem ini adalah baik pengirim maupun penerima pesan harus memiliki kunci yang sama, sehingga pengirim pesan harus mencari cara yang aman untuk memberitahukan kunci kepada penerima pesan. Kunci Cipherteks
Plainteks Enkripsi
Plainteks Dekripsi
Gambar 2.2 Algoritma simetri Namun, di samping kelemahan tersebut, kriptografi simetri memiliki keuntungan juga. Keuntungan menggunakan kriptografi simetri ini adalah kecepatan operasinya yang sangat baik. Dibandingkan dengan kriptografi tak simetri, kriptografi simetri memiliki kecepatan operasi yang jauh lebih cepat. Kelebihan kriptografi kunci simetri: 1. Algoritma kriptografi simetri dirancang sehingga proses enkripsi dan dekripsi membutuhkan waktu yang singkat. 2. Ukuran kunci simetri relatif pendek. Algoritma kriptografi simetri dapat digunakan untuk membangkitkan bilangan acak.
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
12
3. Algoritma kriptografi simetri dapat disusun untuk menghasilkan cipher yang lebih kuat. 4. Otentikasi pengirim pesan langsung diketahui dari cipherteks yang diterima, karena kunci hanya diketahui oleh pengirim dan penerima pesan saja. Kelemahan kriptografi kunci simetri: 1. Kunci simetri harus dikirim melalui saluran yang aman. 2 (dua) entitas yang berkomunikasi harus menjaga kerahasiaan kunci ini. 2. Kunci harus sering diubah, mungkin pada setiap sesi komunikasi.
2.2.2 Algoritma Tak Simetri Algoritma tak simetri sering juga disebut dengan algoritma kunci publik, dengan arti kata kunci yang digunakan untuk melakukan enkripsi dan dekripsinya berbeda. Pada algoritma tak simetri kunci terbagi menjadi 2 (dua) bagian: 1. Kunci umum (public key) adalah kunci yang boleh semua orang tahu (dipublikasikan). 2. Kunci pribadi (private key) adalah kunci yang dirahasiakan (hanya boleh diketahui oleh satu orang). Kunci-kunci tersebut saling berhubungan satu dengan yang lainnya. Dengan kunci publik orang dapat mengenkripsi pesan tapi tidak bisa mendekripsinya, hanya orang yang memiliki kunci pribadi yang dapat mendekripsi pesan tersebut. Algoritma tak simetri bisa melakukan pengiriman pesan lebih aman dari pada algoritma simetris.
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
13
Kunci Umum
Kunci Pribadi Cipherteks
Plainteks Enkripsi
Plainteks Dekripsi
Gambar 2.3 Algoritma tak simetri
Kelebihan kriptografi kunci tak simetri: 1. Hanya kunci pribadi yang perlu dijaga kerahasiaannya oleh setiap entitas yang berkomunikasi (tetapi, otentikasi kunci publik tetap harus terjamin). Tidak ada kebutuhan mengirim kunci pribadi sebagaimana pada sistem simetri. 2. Pasangan kunci publik dan kunci pribadi tidak perlu diubah, bahkan dalam periode waktu yang panjang. 3. Dapat digunakan untuk mengamankan pengiriman kunci simetri. 4. Beberapa algoritma kunci publik dapat digunakan untuk memberi tanda tangan digital pada pesan.
Kelemahan kriptografi kunci tak simetri: 1. Enkripsi dan dekripsi data umumnya lebih lambat daripada sistem simetri, karena enkripsi dan dekripsi menggunakan bilangan yang besar dan melibatkan operasi perpangkatan yang besar. 2. Ukuran cipherteks lebih besar daripada plainteks (bisa dua sampai empat kali ukuran plainteks). 3. Ukuran kunci relatif besar daripada ukuran kunci simetri.
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
14
4. Jika kunci publik diketahui secara luas dan dapat digunakan setiap orang, maka cipherteks tidak memberikan informasi mengenai otentikasi pengirim. 5. Tidak ada algoritma kunci publik yang terbukti aman.
Aplikasi kriptografi kunci publik dapat dibagi menjadi 3 (tiga) kategori, yaitu: 1. Kerahasiaan data. Seperti pada kriptografi kunci simetri, kriptografi kunci publik
dapat
digunakan
untuk
menjaga
kerahasiaan
data
(provide
confidentiality/secrecy) melalui mekanisme enkripsi dan dekripsi. Contoh algoritma untuk aplikasi ini adalah RSA, Knapsack, Rabin, ElGamal, Elliptic Curve Cryptography (ECC). 2. Tanda-tangan digital. Tanda-tangan digital (digital signature) dengan menggunakan algoritma kriptografi kunci publik dapat digunakan untuk membuktikan otentikasi pesan maupun otentikasi pengirim (provide authentication). Contoh algoritmanya untuk aplikasi ini adalah RSA, DSA dan ElGamal. 3. Pertukaran kunci (key exchange). Algoritma kriptografi kunci publik dapat digunakan
untuk
pengiriman
kunci
simetri
(session
keys).
Contoh
algoritmanya adalah RSA dan Diffie-Hellman.
2.2.3
Fungsi Hash (Hash Function)
Fungsi hash sering disebut dengan fungsi hash satu arah (one way function), message digest, fingerprint, fungsi kompresi dan Message Authentication Code (MAC), hal ini merupakan suatu fungsi matematika yang mengambil input panjang variabel dan mengubahnya kedalam urutan biner dengan panjang yang tetap. Fungsi hash biasanya untuk keperluan membuat sidik jari dari suatu pesan. Sidik jari pada pesan merupakan
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
15
suatu tanda yang menandakan bahwa pesan tersebut benar-benar dari orang yang diinginkan.
2.3 Teknik Dasar Kriptografi Berikut ini dicontohkan metode atau cipher yang menjadi dasar dalam melakukan proses enkripsi dan dekripsi pada suatu data. 2.3.1 Metode Substitusi Metode ini berkerja dengan menukar 1 karakter yang lain. Langkah pertama adalah membuat suatu tabel substitusi. Tidak ada aturan khusus dalam membuat tabel substitusi, dapat dibuat sesuai keinginan, dengan catatan bahwa penerima pesan memiliki tabel yang sama untuk keperluan dekripsi. Semakin acak tabel substitusi maka semakin sulit pemecahan cipherteks. Salah satu contoh teknik ini adalah Caesar cipher. Tabel 2.1 Subtitusi A E
B C D E F G H I J K L M N O P Q R S T U F G H I J K L M N O P Q R S T U V W X Y
V Z
W [
X Y Z \ ] ^
Plaintext
: METODE SUBSTITUSI
Ciphertext
: QIXSHI WYFWXMXYWM
2.3.2 Teknik Blok Sistem enkripsi kadang membagi plainteks menjadi blok-blok yang terdiri atas beberapa karakter yang kemudian dienkripsikan secara independen. Contoh plainteks yang dienkripsikan dengan menggunakan teknik blok adalah:
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
16
Tabel 2.2 Teknik blok E
P K I Blok 1
N S
R
Blok 2
K
I
Blok 3
R D P
Blok 4
I
Blok 5
I E
S
Dengan menggunakan teknik blok dipilih jumlah lajur dan kolom untuk penulisan pesan. Jumlah lajur atau kolom menjadi kunci bagi kriptografi dengan teknik ini. Plainteks dituliskan secara vertikal ke bawah berurutan pada lajur, dan dilanjutkan pada kolom berikutnya sampai seluruhnya tertulis. Cipherteksnya adalah hasil pembacaan plainteks secara horizontal berurutan sesuai dengan bloknya. Jadi cipherteks yang dihasilkan dengan teknik ini adalah “EPEKINSR KII RDP IES”. Plainteks
dapat pula ditulis secara horizontal dan cipherteksnya adalah hasil
pembacaan secara vertikal.
2.3.3 Teknik Permutasi atau Teknik Transposisi Teknik ini memindahkan atau merotasikan karakter dengan aturan tertentu. Prinsipnya adalah berlawanan dengan teknik substitusi. Dalam teknik substitusi, karakter berada posisi yang tetap tetapi identitasnya yang diacak. Pada teknik permutasi, identitas karakternya tetap, namun posisinya yang diacak sebelum dilakukan permutasi, umumnya plainteks dibagi menjadi blok-blok dengan panjang yang sama. Contoh:
Gambar 2.4 Permutasi
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
17
2.4 Teknik-teknik Kriptanalisis Terdapat beberapa teknik dalam melakukan kriptanalisis, tergantung kepada akses yang dimiliki oleh kriptanalis, apakah melalui cipherteks, plainteks, ataupun aspek lain dari sistem kriptografi. Berikut adalah beberapa tipe penyerangan yang umum dipakai untuk memecahkan sandi:
1. Known-Plaintext Analysis Dengan prosedur ini, kriptanalis mengetahui sebagian isi plainteks dari cipherteks yang berhasil didapatkan. Menggunakan informasi yang ada ini, kriptanalis berusaha untuk mencari kunci yang digunakan untuk menghasilkan cipherteks. Pesan-pesan yang memiliki format terstruktur memberikan peluang kepada kriptanalis untuk menebak plainteks dari cipherteks yang bersesuaian. Contoh dari pesan-pesan terstruktur ini adalah email dengan kolom from, to, subject, kemudian salam penutup dan pembuka pada surat seperti ”dengan hormat”, salam dan lainnya. Linear Cryptanalysis adalah salah satu algoritma yang termasuk ke dalam serangan known-plaintext. Linear Cryptanalysis diperkenalkan oleh Mitsuru Matsui pada tahun 1993. Pada algoritma ini penyerang akan mempelajari fungsi linear yang merepresentasikan hubungan antara cipherteks dan plainteks untuk mendapatkan kunci. Algoritma berbasis XOR, termasuk ke dalam algortima enkripsi atau dekripsi yang tidak aman karena dapat dipecahkan menggunakan linear cryptanalysis.
2. Chosen-Plaintext Analysis Kriptanalis telah dapat menghasilkan plainteks dari cipherteks yang ada, namun kuncinya sendiri belum ditemukan. Pada serangan jenis ini kriptanalis dapat memilih plainteks tertentu untuk dienkripsikan, yaitu plainteks yang lebih mengarahkan penemuan kunci.
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
18
Kriptanalis berusaha untuk menemukan kunci pembangun cipherteks dengan membandingkan keseluruhan cipherteks dengan plainteks yang ada. Teknik enkripsi RSA (Rivest Shanir Adleman) telah terbukti dapat dipecahkan menggunakan teknik analisis ini. Differential Analysis adalah sebuah teknik yang dikembangkan oleh Eli Biham dan Adi Shamir. Teknik ini memberikan suatu cara untuk menemukan beberapa bit kunci dari plainteks dan cipherteks yang tersedia, dengan begitu jumlah kemungkinan kunci yang akan dicoba pada exhaustive key search atau brute force attack dapat berkurang drastis, mengurangi waktu kalkulasi. Differential Analysis secara garis besar membahas pola lengkap dari bit-bit mana saja yang berubah dan tidak berubah pada proses pengubahan input menjadi output.
3. Ciphertext-Only Analysis Pada teknik ini, kriptanalis hanya berbekal cipherteks saja, tanpa adanya pengetahuan mengenai plainteks. Teknik ini membutuhkan akurasi yang tinggi dalam melakukan penaksiran mengenai bagaimana sebuah pesan dapat disandikan. Teknik ini dapat bekerja lebih baik dengan dukungan adanya pengetahuan tambahan mengenai teks. Apabila plainteks ditulis dalam bahasa Inggris, maka kriptanalis
dapat
menghitung
frekuensi
huruf
dari
chiperteks
kemudian
membandingkannya dengan frekuensi rata-rata huruf pada teks berbahasa Inggris. Namun cara penghitungan frekuensi huruf seperti ini hanya bekerja untuk plainteks yang didekripsi menggunakan teknik substitusi satu ke satu. Algoritma kriptografi modern memiliki daya tahan yang lebih tinggi terhadap jenis serangan seperti ini.
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
19
4. Man-In-The-Middle Attack Penyerang, yang dalam hal ini adalah kriptanalis, masuk ke dalam saluran komunikasi antara ke dua pihak yang akan saling bertukar kunci mereka. Penyerang menempatkan dirinya sedemikian sehingga ke dua pihak tadi merasa bahwa mereka saling bertukar kunci, namun sebenarnya penyeranglah memberikan kunci-kunci yang nantinya digunakan oleh pihak-pihak tadi.
Gambar 2.5 Serangan kriptografi man-in-the middle Teknik ini dapat dipatahkan dengan menggunakan kombinasi fungsi hash dan algoritma kunci publik. B dapat memeriksa apakah kunci publik yang diterima benar, dengan cara memeriksa sidik jari (fingerprint). Sidik jari ini adalah suatu fungsi hash dari kunci publik tersebut yang diberikan melalui jalur yang berbeda dengan pengiriman kunci publik. Sidik jari digunakan karena ukurannya yang lebih kecil dibandingkan dengan kunci publik sehingga lebih mudah ditentukan nilai kebenarannya. Cara lain untuk mematahkan serangan tipe ini adalah dengan menyimpan kunci publik dalam suatu basis data online yang menjamin kebenaran dari kunci publik. Suatu CA (Certificate Authority) atau server kunci publik dapat memberikan keyakinan pada pengguna, pada saat mereka menyimpan kunci bahwa kunci tersebut bernilai benar.
5. Timing/Differential Power Analysis Sangat berguna digunakan melawan smartcard, yang menghitung perbedaan konsumsi elektrik dalam jangka waktu tertentu ketika microchip melakukan pengamanan informasi. Teknik ini dapat digunakan untuk memperoleh informasi
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
20
mengenai perhitungan pembangkitan kunci yang digunakan dalam algoritma enkripsi dan fungsi-fungsi pengamanan lainnya. Teknik ini dapat dicegah dengan menggunakan random noise ketika melakukan enkripsi, atau mengacak alur fungsi sehingga lebih sulit untuk melacak fluktuasi tenaga listrik yang terpakai. Tipe analisis ini dikembangkan oleh Paul Kocher dari Cryptography Research. Penyerangan seperti ini umumnya terlepas dari jenis algoritma kriptografi yang digunakan.
6. Correlation Saling terkaitnya antara kunci dengan hasil pengenkripsian merupakan sumber utama yang akan digunakan oleh kriptanalis. Pada kasus yang paling mudah, kunci justru secara tidak sengaja terbocorkan oleh sistem kriptografinya sendiri. Untuk kasus yang lebih kompleks, dicari keterhubungan antara informasi yang dapat diperoleh mengenai kriptosistem dan informasi mengenai perkiraan kunci. Ide mengenai keterhubungan merupakan ide dasar pada kriptosistem.
7. Kesalahan Dalam Kriptosistem Kesalahan dalam kriptosistem dapat digunakan dalam kriptanalisis dan bahkan dapat membocorkan kuncinya sendiri. Kesalahan tersebut dapat dimanfaatkan dalam kriptanalisis. Kesalahan disini dapat juga berupa kelemahan dari fungsi matematis yang digunakan oleh algoritma enkripsi dekripsi atau pemilihan kunci lemah. Algoritma RSA merupakan contoh algoritma yang memiliki kesalahan yang dapat diserang.
8. Rubber-Hose Cryptanalysis Serangan jenis ini dapat dikatakan sebagai serangan yang paling efektif dan dapat langsung memberikan hasil. Serangan ini berupa serangan langsung kepada pihak pengirim.
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
21
Rubber-hose attack didasarkan pada teori bahwa manusia yang berada di bawah tekanan akan menjadi lebih lemah. Di lain pihak, komputer tidak mengalami stress (di bawah tekanan) sehingga tidak akan terpengaruh dengan serangan semacam ini. Pada serangan ini, pihak ke tiga akan mengirimkan surat gelap, mengancam atau bahkan menyiksa hingga pihak pengirim mau memberikan kunci atau bahkan langsung memberikan plainteks yang besangkutan. Serangan jenis ini tidak memandang tipe algoritma enkripsi dekripsi, serangan ini bekerja untuk mematahkan seluruh algoritma enkripsi dekripsi. Karena alasan inilah rubber-hose attack disebut sebagai serangan paling efektif. Terdapat beberapa cara efektif untuk menghadapi serangan jenis ini, antara lain: 1. Tetap tenang dan gunakan steganografi. 2. Pindah di luar jangkauan pihak-pihak lawan, misalnya di luar negeri. 3. Tingkatkan ketahanan fisik. 4. Untuk menghindari serangan secara sosial. Menjauhlah dari orang-orang terdekat dan jangan bina hubungan dekat (teman) baru. 5. Gunakan multipart key yang membutuhkan lebih dari satu orang untuk melakukan enkripsi dekripsi terhadap informasi. 6. Gunakan One-Time Pad di mana tidak mungkin memecahkan cipherteks tanpa menggunakan kunci, karena sifatnya yang terlalu panjang (sama dengan plainteks).
9. Serangan Terhadap Atau Menggunakan Hardware Dari Cryptosystem Serangan jenis ini merupakan serangan jenis baru yang diprediksikan akan semakin sering muncul dengan semakin meluasnya penggunaan mobile crypto devices.
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
22
Serangan ini didasarkan kepada perhitungan rinci dari proses enkripsi yang dilakukan oleh suatu perangkat kripto. Dari informasi ini akan diperoleh informasi mengenai perhitungan kunci yang digunakan. Serangan jenis ini bersifat independen terhadap algoritma kriptografi yang digunakan oleh mobile crypto devices yang bersangkutan.
2.5 Algoritma Rijndael Algoritma Rijndael menggunakan substitusi, permutasi dan sejumlah putaran yang dikenakan pada tiap blok yang akan dienkripsi dekripsi. Untuk setiap putarannya, Rijndael menggunakan kunci yang berbeda. Kunci setiap putaran disebut round key. Rijndael beroperasi dalam orientasi byte sehingga memungkinkan untuk implementasi algoritma yang efisien ke dalam software dan hardware. Ukuran blok untuk algoritma Rijndael adalah 128 bit (16 byte). Rijndael mendukung panjang kunci 128 bit sampai 256 bit dengan step 32 bit. Panjang kunci dan ukuran blok dapat dipilih secara independen. Setiap blok dienkripsi dalam sejumlah putaran tertentu. Karena AES menetapkan panjang kunci adalah 128, 192, dan 256, maka dikenal AES 128, AES 192, dan AES 256. Tabel 2.3 Versi-versi AES Panjang Kunci
Ukuran blok
Jumlah Round
(Nk)
(Nb)
(Nr)
AES – 128
4
4
10
AES – 192
6
4
12
AES – 256
8
4
14
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
23
Algoritma Rijndael mempunyai 3 (tiga) parameter: 1. Plainteks adalah array yang berukuran 16-byte, yang berisi data masukan. 2. Cipherteks adalah array yang berukuran 16-byte, yang berisi hasil enkripsi. 3. Kunci adalah array yang berukuran 16-byte, yang berisi kunci cipher (disebut juga chiper key). Garis besar algoritma Rijndael yang beroperasi pada blok 128 bit dengan kunci 128 bit adalah sebagai berikut: 5.
AddRoundKey, melakukan XOR antara state awal (plainteks) dengan chiper key. Tahap ini disebut juga initial round.
6.
Putaran sebanyak Nr–1 kali. Proses yang dilakukan pada setiap putaran adalah: a. SubBytes adalah substitusi byte dengan menggunakan tabel substitusi (S-Box). b. ShiftRows adalah pergeseran baris-baris array state secara wrapping. c. MixColumns adalah mengacak data di masing-masing kolom array state. d. AddRoundKey adalah melakukan XOR antara state sekarang round key.
7.
Final round, proses untuk putaran terakhir: a. SubBytes b. ShiftRows c. AddRoundKey
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
24
Garis besar algoritma Rijndael diperlihatkan pada gambar diagram di bawah ini. Plain Text
Cipher Text
AddRoundKey
AddRoundKey InvShiftRows InvSubBytes
SubBytes ShiftRows MixColumns AddRoundKey
AddRoundKey InvMixColumns InvShiftRows InvSubBytes
SubBytes ShiftRows AddRoundKey
AddRoundKey
Cipher Text
Plain Text
Gambar 2.6 Diagram proses enkripsi dan proses dekripsi
1. Transformasi SubBytes Transformasi SubBytes memetakan setiap byte dari array state dengan menggunakan tabel substitusi S-Box. Tidak seperti DES yang mempunyai S-Box berbeda pada setiap putaran, Rijndael hanya mempunyai satu buah. Tabel yang digunakan adalah: Tabel 2.4 S-Box Rijndael
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
25
Cara pensubstitusian adalah sebagai berikut: jika setiap byte pada array state S[r,c]=xy, xy adalah digit heksadesimal dari nilai S[r,c], maka nilai substitusinya, dinyatakan dengan S’[r,c], adalah elemen di dalam
S-Box yang merupakan
perpotongan baris x dengan kolom y.
Gambar 2.7 Transformasi SubByte dengan S-Box
Gambar 2.8 Proses SubBytes
Gambar 2.9 Hasil SubBytes
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
26
2. Transformasi ShiftRows Transformasi ShiftRows melakukan pergeseran secara wrapping pada 3 (tiga) baris terakhir dari array state. Jumlah pergeseran bergantung pada nilai baris r. Baris r=1 digeser sejauh 1 byte, baris r=2 digeser sejauh 2 byte, dan baris r=3 digeser sejauh 3 byte. Baris r=0 tidak digeser.
Gambar 2.10 Transformasi Shiftrows Geser baris ke-1:
Hasil pergeseran baris ke-1 dan geser baris ke-2:
Hasil pergeseran baris ke-2 dan geser baris ke-3:
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
27
Hasil pergeseran baris ke-2 dan geser baris ke-3:
Gambar 2.11 Proses transformasi Shiftrows
3. Tranformasi MixColumns Transformasi MixColumns mengalikan setiap kolom dari array state dengan polinom a(x)mod(x4+1). Setiap kolom diperlakukan sebagai polinom 4-suku pada GF(28). Polinom a(x) yang ditetapkan adalah: a(x)={03}x3+{01}x2+{01}x+{02}
(2.6)
Transformasi ini dinyatakan sebagai perkalian matrik: s’(x)=a(x)⊗s(x) s 0' ,c 02 ' s1,c = 01 s ' 01 2' ,c s 3,c 03
03 01 01 s 0,c 02 03 01 s1,c 01 02 03 s 2,c 01 01 02 s 3,c
(2.7)
(2.8)
s0' ,c = ({02} • so,c ) ⊕ ({03} • s1,c ) ⊕ s2,c ⊕ s3,c s1' ,c = s0,c ⊕ ({02} • s1,c ) ⊕ ({03} • s2,c ) ⊕ s3,c s2' ,c = s0,c ⊕ s1,c ⊕ ({02} • s2,c ) ⊕ ({03} • s3,c ) s3' ,c = ({03} • s0,c ) ⊕ s1,c ⊕ s2,c ⊕ ({02} • s3,c )
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
(2.9)
28
Gambar 2.12 Hasil dari ShiftRows
Gambar 2.13 Operasi MixColumns
Gambar 2.14 Hasil keseluruhan MixColumns 4. Transformasi AddRoundKey Transformasi ini melakukan operasi XOR terhadap sebuah round key dengan array state, dan hasilnya disimpan di array state.
Gambar 2.15 Transformasi AddRoundKey
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
29
Gambar 2.16 Hasil AddRoundKey
5. Ekspansi Kunci Algoritma Rijndael melaksanakan cipher key dan membuat suatu ekspansi kunci untuk
menghasilkan
suatu
key
schedule.
Jika
ekspansi
kunci
yang
diperlukan Rijndael Nb(Nr+1) word, sehingga bisa digunakan AES 128 bit, maka 4(10+1)=40 word=44x32 bit=1408 bit subkey. Ekspansi dari 128 menjadi 1408 bit subkey, proses ini disebut dengan key schedule. Subkey ini diperlukan karena setiap round merupakan suatu inisial dari Nb word untuk Nr=0 dan Nb untuk Nr=1,3 untuk Nr= 2,....,11 Nb untuk Nr=10, dari operasi ini akan didapatkan schedule kunci yang berisi array linier 4 byte word (wi), 0=i(Nr+1).
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
30
Gambar 2.17 Proses ekspansi kunci
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
31
Contoh dari keseluruhan proses Algoritma Rijndael
Gambar 2.18 Proses algoritma Rijndael
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
32
2.6 Keamanan Rijndael Untuk Rijndael, tipe serangan square attacks cukup menjadi dikenal sebagai serangan terbaik terhadap Rijndael. Square attacks adalah serangan yang memanfaatkan struktur orientasi byte. Algoritma ini bekerja dengan baik pada square cipher yang bekerja dalam 6 putaran. Apabila Rijndael dengan kunci sepanjang 128 bit, maka serangan ini lebih cepat dari pada exhaustive search hingga 6 kali iterasi Rijndael. Namun, untuk AES jelas bahwa serangan ini tidak mungkin dipraktekkan karena jumlah putaran pada Rijndael, mengakibatkan batas keamanan untuk algoritma ini menjadi lebih besar. Pada tahun 2002 melalui suatu proses pengujian yang sifatnya teoritis ditemukan bahwa AES mungkin dapat dijebol atau dipecahkan. Metode attack ini dinamakan “XLS Attack“. Serangan ini pertama kali dipublikasikan oleh Nicolas Courtois dan Josep Pieprzyk dalam makalah mereka yang berjudul “Cryptanalysis of Block Ciphers with Overdefined Systems of Equations”. Teknik ini diklaim dapat memecahkan AES lebih cepat dari cara exhaustive search. XSL attack mengandalkan pada keberhasilan menganalisis subsistem internal dari cipher untuk menurunkan persamaan kuadrat secara simultan. Kumpulan persamaan ini umumnya sangat besar. Contohnya pada 128 bit AES terdapat 8000 persamaan dengan jumlah variabel 1600. Metode untuk memecahkan persamaan ini disebut XSL (eXtended Sparse Linearisation). Jika persamaan tersebut dapat dipecahkan, maka kunci dapat diperoleh. Jika Pemecahan persamaan tersebut menjadi masalah, maka ditemukan persamaan yang bersifat MQ(Multivariate quadratic). Persamaan MQ merupakan permasalahan yang bersifat NP-hard (Non Polinomial). XSL attack membutuhkan algoritma yang efisien untuk menyelesaikan MQ. Salah satu teknik untuk menyelesaikan sistem MQ adalah dengan linearisasi, yang mengubah setiap
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
33
persamaan kuadrat menjadi variabel yang independen yang akan menghasilkan persamaan linear dengan menggunakan algoritma seperti Gaussian elimination. Tahun 2000, Courtois mengajukan algoritma untuk MQ yang bernama XL(eXtended Linearisastion). Algoritma ini meningkatkan jumlah persamaan dengan mengalikan dengan monomial derajat tertentu. Algoritma ini akan menghasilkan suatu bentuk struktur yang disebut XSL. Algoritma XSL dibentuk dari algoritma XL dengan memilih monomial secara selektif.
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
34
BAB 3 PEMBAHASAN
3.1 Analisis Desain Rijndael Daemen dalam disertasinya, Rijndael didesain berdasarkan wide trail strategy. Strategi ini mengusulkan agar cipher terdiri dari tiga komponen utama: 1. Pencampuran kunci Bertujuan agar keamanan algoritma tidak terletak pada dirahasiakannya algoritma, melainkan pada kerahasiaan kunci. 2. Transformasi nonlinear Bertujuan agar bila diketahui keluaran, maka tidak dapat diketahui masukannya. Hal ini dapat dilakukan dengan kotak-S. 3. Transformasi linear Bertujuan agar sebanyak mungkin transformasi nonlinear yang aktif. Dengan memisahkan transformasi linear dengan non linear, diharapkan dapat mendesain transformasi nonlinear terbebas dari transformasi linear dan sebaliknya.
3.1.1 Kotak Substitusi (S-Box) S-Box pada Rijndael didesain dengan rumusan matematika untuk menghilangkan kecurigaan akan ditanamnya backdoor pada S-Box. Penggunaan inversi x-1 pada
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
35
GF(28) dikarenakan ketahanan operasi ini terhadap analisis sandi linear dan diferensial. Berikut ini adalah ringkasan kriteria S-Box: a. Invertibility (untuk dekripsi). b. Minimisasi korelasi antara kombinasi linear bit-bit masukan dan kombinasi linear bit-bit keluaran (menahan ASL). c. Minimisasi nilai terbesar pada tabel XOR (menahan ASD). d. Kompleksitas ekspresi aljabar pada GF(28) (diperoleh dengan tambahan L untuk menghalangi interpolation attack). e. Kesederhanaan deskripsi (mudah analisisnya).
3.1.2 Operasi MixColumns Bersama dengan operasi ShiftRows, MixColumns merupakan transformasi linear yang bertujuan untuk menyebarkan pengaruh transformasi nonlinear ke sebanyak mungkin komponen nonlinear di ronde selanjutnya. Apabila ShiftRows bertujuan menyebarkan pada arah baris, maka MixColumns bertujuan menyebarkan ke arah kolom. Dengan perpaduan dua operasi ini, diperolehlah difusi yang sangat baik.
3.1.3 Ekspansi Kunci Subkey pada tiap ronde dapat diperoleh dari rumus: W[i]=W[i-6] ⊕ W[i-1] W[6i]=W[6i-6] ⊕ f(W[6i-1])
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
36
F merupakan fungsi penggunaan kotak-S dan penambahan konstanta ronde. Penjadwalan kunci dapat diimplementasikan tanpa eksplisit menggunakan array W. Jika jumlah yang tersedia kecil, maka kunci per ronde dapat dihitung on-the-fly dan hanya membutuhkan buffer sebesar 64 byte. Ini berarti bahwa mengetahui 4 word (64 byte) berurutan dari kunci terekspansi akan dapat membangkitkan seluruh tabel subkey. Konstanta per ronde menghilangkan sifat simetri.
3.2 Implementasi Algoritma Rijndael Implementasi
Algoritma
Rijndael
dirancang
dalam
bahasa
pemrograman
Visual Basic 6.0. Berikut tahap implementasi algoritma Rijndael. 1. Pembentukan Kotak Substitusi (S-Box) 2. Proses MixColumns 3. Proses enkripsi 4. Proses dekripsi
3.2.1 Pembentukan Kotak Substitusi (S-Box) Kotak substitusi (untuk ByteSub) dibentuk dari fungsi inversi perkalian pada GF(28) dan kemudian ditambahkan operasi XOR terhadap fungsi affine (semacam fungsi linear). Berikut implementasi kotak substitusi ke dalam bahasa pemrograman. ltab(0) = 0 ltab(1) = 0 ltab(3) = 1 ptab(0) = 1 ptab(1) = 3 For i = 2 To 255 'ptab(i) = ptab(i - 1) Xor Xtime(ptab(i - 1)) If (ptab(i - 1) And &H80) Then ptab(i) = ptab(i - 1) Xor ((ptab(i - 1) And 127) * 2) Xor &H1B Else ptab(i) = ptab(i - 1) Xor (ptab(i - 1) * 2) End If ltab(ptab(i)) = i
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
37
Next i Te4(0) = &H63636363 Td4(&H63) = 0 For i = 1 To 255 y = ptab(255 - ltab(i)) 'multiplicative inverse ib = y If ib And &H80 Then ib = (ib And 127) * 2 Or 1 Else ib = ib * 2 y = y If ib y = y If ib y = y If ib y =
Xor ib And &H80 Xor ib And &H80 Xor ib And &H80 y Xor ib
Then ib = (ib And 127) * 2 Or 1 Else ib = ib * 2 Then ib = (ib And 127) * 2 Or 1 Else ib = ib * 2 Then ib = (ib And 127) * 2 Or 1 Else ib = ib * 2 Xor &H63
s(0) = y s(1) = s(0) s(2) = s(0) s(3) = s(0) CopyMemory Te4(i), s(0), 4& s(0) = i s(1) = s(0) s(2) = s(0) s(3) = s(0) CopyMemory Td4(y), s(0), 4& Next i y = 1 For i = 0 To UBound(rco) rco(i) = y If (y And &H80) Then 'y = Xtime(y) y = ((y And 127) * 2) Xor &H1B Else y = y * 2 End If Next i For i = 0 To 255 y = Te4(i) And &HFF& If (y And &H80) Then s(0) = ((y And 127) * 2) Xor &H1B s(3) = y Xor s(0) Else s(0) = y * 2 s(3) = y Xor s(0) End If s(2) = y s(1) = y CopyMemory s(4), s(0), 4& CopyMemory Te0(i), s(0), 4& CopyMemory Te1(i), s(3), 4& CopyMemory Te2(i), s(2), 4& CopyMemory Te3(i), s(1), 4& y = Td4(i) And &HFF&
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
38
If y = 0 Then s(3) = 0 s(2) = 0 s(1) = 0 s(0) = 0 Else s(3) = ptab((CLng(ltab(&HB)) s(2) = ptab((CLng(ltab(&HD)) s(1) = ptab((CLng(ltab(&H9)) s(0) = ptab((CLng(ltab(&HE)) End If CopyMemory s(4), s(0), 4& CopyMemory Td0(i), s(0), 4& CopyMemory Td1(i), s(3), 4& CopyMemory Td2(i), s(2), 4& CopyMemory Td3(i), s(1), 4& Next i
+ + + +
CLng(ltab(y))) CLng(ltab(y))) CLng(ltab(y))) CLng(ltab(y)))
Mod Mod Mod Mod
255) 255) 255) 255)
Implementasi S-Box kunci ekspansi dalam bahasa pemrograman. rco(0)=&H1&:rco(1)=&H2&:rco(2)=&H4&:rco(3)=&H8&:rco(4)=&H10& rco(5)=&H20&:rco(6)=&H40&:rco(7)=&H80&:rco(8)=&H1B&:rco(9) = &H36& #If SUPPORT_LEVEL Then rco(10)=&H6C&:rco(11)=&HD8&:rco(12)=&HAB&:rco(13)=&H4D&:rco(14)=&H9A& rco(15)=&H2F&:rco(16)=&H5E&:rco(17)=&HBC&:rco(18)=&H63&:rco(19)=&HC6& rco(20)=&H97&:rco(21)=&H35&:rco(22)=&H6A&:rco(23)=&HD4&:rco(24)=&HB3& rco(25)=&H7D&:rco(26)=&HFA&:rco(27)=&HEF&:rco(28)=&HC5& #End If
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
39
3.2.2 Proses MixColumns Operasi ini merupakan suatu operasi dari penambahan kunci dengan operasi XOR. Berikut implementasi operasi MixColumns ke dalam bahasa pemrograman. i = 4
CopyMemory fkey(0), pass(0), 4& * i For j = 0 To 9 CopyMemory s(0), fkey(i - 1), 4& fkey(i) = fkey(i - 4) Xor (Te4(s(0)) And &HFF000000) _ Xor (Te4(s(3)) And &HFF0000) _ Xor (Te4(s(2)) And &HFF00&) _ Xor (Te4(s(1)) And &HFF&) _ Xor rco(j) fkey(i + 1) = fkey(i - 3) Xor fkey(i) fkey(i + 2) = fkey(i - 2) Xor fkey(i + 1) fkey(i + 3) = fkey(i - 1) Xor fkey(i + 2) i = i + 4 Next j Nr = 10
3.2.3 Proses Enkripsi Dalam proses enkripsi ini terdapat proses enkripsi teks dan enkripsi file. 1. Proses enkripsi teks Public Sub BlockEncrypt(plaintext() As Byte, ciphertext() As Byte, p As Long, q As Long) Dim i As Long Dim k As Long Dim t0 As Long Dim t1 As Long Dim t2 As Long Dim t3 As Long Dim s(15) As Byte CopyMemory t0, plaintext(p CopyMemory t1, plaintext(p CopyMemory t2, plaintext(p CopyMemory t3, plaintext(p t0 = t0 Xor fkey(0) t1 = t1 Xor fkey(1) t2 = t2 Xor fkey(2) t3 = t3 Xor fkey(3) k = 4
+ + + +
0), 4& 4), 4& 8), 4& 12), 4&
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
40
For i = 1 To Nr - 1 'Nr is number of rounds CopyMemory s(0), t0, 4& CopyMemory s(4), t1, 4& CopyMemory s(8), t2, 4& CopyMemory s(12), t3, 4& t0 = Te0(s(0)) Xor Te1(s(5)) Xor Te2(s(10)) Xor fkey(k + 0) t1 = Te0(s(4)) Xor Te1(s(9)) Xor Te2(s(14)) fkey(k + 1) t2 = Te0(s(8)) Xor Te1(s(13)) Xor Te2(s(2)) fkey(k + 2) t3 = Te0(s(12)) Xor Te1(s(1)) Xor Te2(s(6)) Xor fkey(k + 3) k = k + 4 Next i
Xor Te3(s(15)) Xor Te3(s(3)) Xor Xor Te3(s(7)) Xor Xor Te3(s(11))
'Final round CopyMemory s(0), t0, 4& CopyMemory s(4), t1, 4& CopyMemory s(8), t2, 4& CopyMemory s(12), t3, 4& t0 = (Te4(s(0)) And &HFF&) Xor (Te4(s(5)) And &HFF00&) Xor (Te4(s(10)) And &HFF0000) Xor (Te4(s(15)) And &HFF000000) Xor fkey(k + 0) t1 = (Te4(s(4)) And &HFF&) Xor (Te4(s(9)) And &HFF00&) Xor (Te4(s(14)) And &HFF0000) Xor (Te4(s(3)) And &HFF000000) Xor fkey(k + 1) t2 = (Te4(s(8)) And &HFF&) Xor (Te4(s(13)) And &HFF00&) Xor (Te4(s(2)) And &HFF0000) Xor (Te4(s(7)) And &HFF000000) Xor fkey(k + 2) t3 = (Te4(s(12)) And &HFF&) Xor (Te4(s(1)) And &HFF00&) Xor (Te4(s(6)) And &HFF0000) Xor (Te4(s(11)) And &HFF000000) Xor fkey(k + 3) CopyMemory ciphertext(q + 0), t0, 4& CopyMemory ciphertext(q + 4), t1, 4& CopyMemory ciphertext(q + 8), t2, 4& CopyMemory ciphertext(q + 12), t3, 4& End Sub
2. Proses enkripsi file Public Function FileEncrypt(PlaintextFileName As String, CiphertextFileName As String, BlockBits As Long) As Long #Else Public Function FileEncrypt(PlaintextFileName As String, CiphertextFileName As String) As Long #End If Dim FileNum As Integer Dim FileNum2 As Integer Dim i As Long Dim m As Long 'ciphertext file size Dim n As Long 'plaintext file size Dim data() As Byte #If SUPPORT_LEVEL = 0 Then Const BlockSize As Long = 16 'bytes
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
41
Const MaxBlocks As Long = MaxFileChunkSize \ BlockSize #Else Dim BlockSize As Long Dim MaxBlocks As Long Select Case BlockBits Case 128: BlockSize = 16 Case 192: BlockSize = 24 Case 256: BlockSize = 32 #If SUPPORT_LEVEL = 2 Then Case 160: BlockSize = 20 Case 224: BlockSize = 28 #End If Case Else: Err.Raise 1, , "cRijndael.FileEncrypt - Illegal BlockBits value" End Select MaxBlocks = MaxFileChunkSize \ BlockSize #End If n = FileLen(PlaintextFileName) #If SUPPORT_LEVEL Then m = ((n + BlockSize) \ BlockSize) * BlockSize #Else m = (n + BlockSize) And (-BlockSize) 'BlockSize=16 specific #End If FileNum = FreeFile Open PlaintextFileName For Binary Access Read As FileNum FileNum2 = FreeFile Open CiphertextFileName For Binary Access Write As FileNum2 'For large files, encrypt in pieces no larger than MaxFileChunkSize If m > MaxBlocks * BlockSize Then ReDim data(MaxBlocks * BlockSize - 1) Do Get #FileNum, , data #If SUPPORT_LEVEL Then Select Case BlockBits Case 128 #End If For i = 0 To (MaxBlocks - 1) * BlockSize Step BlockEncrypt data, data, i, i Next i #If SUPPORT_LEVEL Then Case 192 For i = 0 To (MaxBlocks - 1) * BlockSize Step Block192Encrypt data, data, i, i Next i Case 256 For i = 0 To (MaxBlocks - 1) * BlockSize Step Block256Encrypt data, data, i, i Next i #If SUPPORT_LEVEL = 2 Then Case 160 For i = 0 To (MaxBlocks - 1) * BlockSize Step Block160Encrypt data, data, i, i Next i Case 224 For i = 0 To (MaxBlocks - 1) * BlockSize Step Block224Encrypt data, data, i, i
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
BlockSize
BlockSize
BlockSize
BlockSize
BlockSize
42
#End If #End If
Next i End Select
Put #FileNum2, , data m = m - MaxBlocks * BlockSize Loop While m > MaxBlocks * BlockSize End If
'Encrypt the last piece of the file ReDim data(m - 1) Get #FileNum, , data data(m - 1) = n Mod BlockSize #If SUPPORT_LEVEL Then Select Case BlockBits Case 128 #End If For i = 0 To m - BlockSize Step BlockSize BlockEncrypt data, data, i, i Next i #If SUPPORT_LEVEL Then Case 192 For i = 0 To m - BlockSize Step BlockSize Block192Encrypt data, data, i, i Next i Case 256 For i = 0 To m - BlockSize Step BlockSize Block256Encrypt data, data, i, i Next i #If SUPPORT_LEVEL = 2 Then Case 160 For i = 0 To m - BlockSize Step BlockSize Block160Encrypt data, data, i, i Next i Case 224 For i = 0 To m - BlockSize Step BlockSize Block224Encrypt data, data, i, i Next i #End If End Select #End If Put FileNum2, , data Close FileNum Close FileNum2 End Function
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
43
3.2.4 Proses Dekripsi Dalam proses dekripsi ini terdapat proses dekripsi teks dan dekripsi file. 1. Proses dekripsi teks Public Sub BlockDecrypt(plaintext() As Byte, ciphertext() As Byte, p As Long, q As Long) Dim i As Long Dim k As Long Dim t0 As Long Dim t1 As Long Dim t2 As Long Dim t3 As Long Dim s(15) As Byte CopyMemory t0, ciphertext(q CopyMemory t1, ciphertext(q CopyMemory t2, ciphertext(q CopyMemory t3, ciphertext(q t0 = t0 Xor rkey(0) t1 = t1 Xor rkey(1) t2 = t2 Xor rkey(2) t3 = t3 Xor rkey(3) k = 4
+ + + +
0), 4& 4), 4& 8), 4& 12), 4&
For i = 1 To Nr - 1 'Nr is number of rounds CopyMemory s(0), t0, 4& CopyMemory s(4), t1, 4& CopyMemory s(8), t2, 4& CopyMemory s(12), t3, 4& t0 = Td0(s(0)) Xor Td1(s(13)) Xor Td2(s(10)) Xor Td3(s(7)) Xor rkey(k + 0) t1 = Td0(s(4)) Xor Td1(s(1)) Xor Td2(s(14)) Xor Td3(s(11)) Xor rkey(k + 1) t2 = Td0(s(8)) Xor Td1(s(5)) Xor Td2(s(2)) Xor Td3(s(15)) Xor rkey(k + 2) t3 = Td0(s(12)) Xor Td1(s(9)) Xor Td2(s(6)) Xor Td3(s(3)) Xor rkey(k + 3) k = k + 4 Next i 'Final round CopyMemory s(0), t0, 4& CopyMemory s(4), t1, 4& CopyMemory s(8), t2, 4& CopyMemory s(12), t3, 4& t0 = (Td4(s(0)) And &HFF&) Xor (Td4(s(13)) And &HFF00&) Xor (Td4(s(10)) And &HFF0000) Xor (Td4(s(7)) And &HFF000000) Xor rkey(k + 0) t1 = (Td4(s(4)) And &HFF&) Xor (Td4(s(1)) And &HFF00&) Xor (Td4(s(14)) And &HFF0000) Xor (Td4(s(11)) And &HFF000000) Xor rkey(k + 1)
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
44
t2 = (Td4(s(8)) And &HFF&) Xor (Td4(s(5)) And &HFF00&) Xor (Td4(s(2)) And &HFF0000) Xor (Td4(s(15)) And &HFF000000) Xor rkey(k + 2) t3 = (Td4(s(12)) And &HFF&) Xor (Td4(s(9)) And &HFF00&) Xor (Td4(s(6)) And &HFF0000) Xor (Td4(s(3)) And &HFF000000) Xor rkey(k + 3) CopyMemory plaintext(p + 0), t0, 4& CopyMemory plaintext(p + 4), t1, 4& CopyMemory plaintext(p + 8), t2, 4& CopyMemory plaintext(p + 12), t3, 4& End Sub
2. Proses dekripsi file Public Function FileDecrypt(PlaintextFileName As String, CiphertextFileName As String, BlockBits As Long) As Long #Else Public Function FileDecrypt(PlaintextFileName As String, CiphertextFileName As String) As Long #End If Dim FileNum As Integer Dim FileNum2 As Integer Dim i As Long Dim m As Long 'ciphertext file size Dim n As Long 'plaintext file size Dim data() As Byte #If SUPPORT_LEVEL = 0 Then Const BlockSize As Long = 16 'bytes Const MaxBlocks As Long = MaxFileChunkSize \ BlockSize #Else Dim BlockSize As Long Dim MaxBlocks As Long Select Case BlockBits Case 128: BlockSize = 16 Case 192: BlockSize = 24 Case 256: BlockSize = 32 #If SUPPORT_LEVEL = 2 Then Case 160: BlockSize = 20 Case 224: BlockSize = 28 #End If Case Else: Err.Raise 1, , "cRijndael.FileDecrypt - Illegal BlockBits value" End Select MaxBlocks = MaxFileChunkSize \ BlockSize #End If m = FileLen(CiphertextFileName) #If SUPPORT_LEVEL Then If (m = 0) Or ((m Mod BlockSize) <> 0) Then #Else If (m = 0) Or ((m And (BlockSize - 1)) <> 0) Then 'BlockSize=16 specific #End If
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
45
MsgBox "File Size Error - ciphertext file not a multiple of block size" FileDecrypt = 1 Else FileNum = FreeFile Open CiphertextFileName For Binary Access Read As FileNum FileNum2 = FreeFile Open PlaintextFileName For Binary Access Write As FileNum2 'For large files, decrypt in pieces no larger than MaxFileChunkSize If m > MaxBlocks * BlockSize Then ReDim data(MaxBlocks * BlockSize - 1) Do Get #FileNum, , data #If SUPPORT_LEVEL Then Select Case BlockBits Case 128 #End If For i = 0 To (MaxBlocks - 1) * BlockSize Step BlockSize BlockDecrypt data, data, i, i Next i #If SUPPORT_LEVEL Then Case 192 For i = 0 To (MaxBlocks - 1) * BlockSize Step BlockSize Block192Decrypt data, data, i, i Next i Case 256 For i = 0 To (MaxBlocks - 1) * BlockSize Step BlockSize Block256Decrypt data, data, i, i Next i #If SUPPORT_LEVEL = 2 Then Case 160 For i = 0 To (MaxBlocks - 1) * BlockSize Step BlockSize Block160Decrypt data, data, i, i Next i Case 224 For i = 0 To (MaxBlocks - 1) * BlockSize Step BlockSize Block224Decrypt data, data, i, i Next i #End If End Select #End If Put #FileNum2, , data m = m - MaxBlocks * BlockSize Loop While m > MaxBlocks * BlockSize End If 'Decrypt the last piece of the file ReDim data(m - 1) Get #FileNum, , data #If SUPPORT_LEVEL Then Select Case BlockBits Case 128 #End If
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
46
For i = 0 To m - BlockSize Step BlockSize BlockDecrypt data, data, i, i Next i #If SUPPORT_LEVEL Then Case 192 For i = 0 To m - BlockSize Step BlockSize Block192Decrypt data, data, i, i Next i Case 256 For i = 0 To m - BlockSize Step BlockSize Block256Decrypt data, data, i, i Next i #If SUPPORT_LEVEL = 2 Then Case 160 For i = 0 To m - BlockSize Step BlockSize Block160Decrypt data, data, i, i Next i Case 224 For i = 0 To m - BlockSize Step BlockSize Block224Decrypt data, data, i, i Next i #End If End Select #End If 'Recover length field If data(m - 1) < BlockSize Then n = m - BlockSize + CLng(data(m - 1)) Else #If SUPPORT_LEVEL Then MsgBox "warning - incorrect length field in decrypted file." & vbCrLf & "Wrong key, keysize, or blocksize?" #Else MsgBox "warning - incorrect length field in decrypted file." & vbCrLf & "Wrong key or keysize?" #End If n = m End If If n > 0 Then ReDim Preserve data(n - 1) Put FileNum2, , data End If Close FileNum Close FileNum2 End If End Function
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
47
3.3 Flowchart Program Adapun flowchart dari aplikasi enkripsi dan dekripsi adalah sebagai berikut:
Mulai Tampilan Form Utama Pilih Proses Ya
File Tidak
Teks Input teks Masukan Kunci Pilih Ukuran Blok Pilih Panjang Kunci Ya
File Ya
Enkripsi
Ya
Tidak
Tidak
Enkripsi
Dekripsi Tidak
Dekripsi
Input file
Output teks/file
Proses
Stop
Gambar 3.1 Flowchart aplikasi enkripsi dan dekripsi algoritma Rijndael
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
48
3.4 Implementasi Implementasi algoritma Rijndael dibuat menggunakan Microsoft Visual Basic 6.0. Aplikasi terdiri enkripsi dekripsi teks dan enkripsi dekripsi file.
Gambar 3.2 Form utama Peletakan enkripsi dekripsi teks dan enkripsi dekripsi file diletakan bersama pada 1 (satu) form dan hanya dipisahkan menggunakan frame yang masing-masing didalamnya terdapat tombol encrypt dan decrypt. Sebelum melakukan enkripsi dan dekripsi baik itu teks atau file diharuskan melakukan pengisian key dan melakukan pilihan block size dan key size yang mana secara default nya berada pada posisi 128 bit.
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
49
Gambar 3.3 Hasil enkripsi teks
Gambar 3.4 Hasil dekripsi teks Pada enkripsi dekripsi teks telah disedia frame untuk pengisian plainteks yang diinginkan. Jika ingin melakukan enkripsi dekripsi teks yang baru, maka dapat dilakukan dengan penghapusan teks yang lama dengan menekan tombol clear.
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
50
Gambar 3.5 Enkripsi file
Gambar 3.6 Dekripsi file
Pada enkripsi dekripsi file, file yang dapat dienkripsi ialah file-file yang terdapat dalam sistem komputer seperti file yang ada pada Microsoft Office, file exe, file mp3, file gambar maupun file sistem yang ada di dalam sistem operasi. File yang
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
51
telah dienkripsi akan berekstensi aes dan untuk melihat hasil dari enkripsi file tersebut dapat dilihat menggunakan notepad.
Gambar 3.7 Hasil file enkripsi
Pada aplikasi hasil percobaan program yang dilakukan untuk lama proses enkripsi dengan ukuran file yang berbeda dan dilakukan perbandingan dengan algoritma 3DES. Percobaan aplikasi menggunakan komputer dengan spesifikasi sebagai berikut: 1. Pentium IV 1,8Ghz 2. Memori DDR 1024Mb 3. Hard disk 160Gb 4. Operating System Microsoft XP Pro Sp2
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
52
Tabel 3.1 Waktu Proses Enkripsi Algoritma Rijndael dan 3DES No.
Nama File
1 2 3 4 5 6 7 8 9 10 11 12
Ferarri.jpg Yamaha.jpg AES6.pdf Memory.pdf Cilok putih.exe Peanut.exe Landasan Matematika.ppt Slide proposal.ppt Anlsis.doc Bingkai.doc Cokelat, bendera.mp3 Peterpan – Kota mati.mp3
Ukuran File Sumber KiloByte 486 461 238 185 552 553 71 524 49 1170 3896 3600
Lama Proses (Detik) 3DES Rijndael 0,12 0,78 0,12 0,73 0,09 0,30 0,09 0,29 0,14 0,86 0,11 0,83 0,05 0,12 0,16 0,81 0,03 0,09 0,20 1,83 0,56 5,99 0,55 5,55
Waktu Proses Enkripsi Algoritma Rijndael dan 3DES 7 6
Detik
5 4 3
3Des
2
Rijndael
1 0 49
71
185
238
461
486
524
552
553 1170 3600 3896
Kilo Byte
Gambar 3.8 Grafik waktu proses enkripsi Rijndael dan 3DES
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
53
Tabel 3.2 Waktu Proses Dekripsi Algoritma Rijndael dan 3DES No.
Nama File
1 2 3 4 5 6 7 8 9 10 11 12
Ferarri.jpg Yamaha.jpg AES6.pdf Memory.pdf Cilok putih.exe Peanut.exe Landasan Matematika.ppt Slide proposal.ppt Anlsis.doc Bingkai.doc Cokelat, bendera.mp3 Peterpan – Kota mati.mp3
Ukuran File Sumber KiloByte 486 461 238 185 552 553 71 524 49 1170 3896 3600
Lama Proses (Detik) 3DES Rijndael 0,14 0,75 0,11 0,75 0,11 0,39 0,08 0,28 0,17 0,84 0,14 0,81 0,05 0,13 0,12 0,87 0,05 0,08 0,22 1,76 0,58 5,67 0,50 5,59
Waktu Proses Dekripsi Algoritma Rijndael dan 3DES 6 5 Detik
4 3
3Des
2
Rijndael
1 0 49
71
185
238
461
486
524
552
553 1170 3600 3896
Kilo Byte
Gambar 3.9 Grafik waktu proses dekripsi Rijndael dan 3DES
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
54
3.5 Rijndael Untuk Integritas Data Pada saat mengirimkan pesan dan agar pesan yang dikirimkan tersebut sampai di tujuan dengan aman serta tidak mengalami campur tangan pihak lain. Pesan tersebut akan melalui berbagai jenis komputer, router atau gateway dan melintasi berbagai macam media fisik komunikasi. Tujuannya adalah mencegah terjadinya perubahan pesan ketika sedang dalam proses transmisi data terhadap pesan yang dikirimkan maupun pesan yang diterima. Jika seorang penyadap melakukan perubahan data, maka penyadap tersebut akan memperoleh pesan-pesan yang terenkripsi saja sehingga tidak mencerminkan isi pesan yang sebenarnya. Jika menginginkan isi pesan tetap terjaga keasliannya (tidak diubah oleh orang yang tidak berhak), maka struktur Rijndael dapat mengakomendasikan banyak blok dan kunci dengan penukaran pada nomor putaran. Berikut contoh proses enkripsi dan dekripsi teks dengan melakukan perubahan pada kunci, cipherteks ataupun pada ke duanya. Contoh 1 Plainteks
: november
Kunci
: 123456
Cipherteks
: 0D62F43FAE816AC1392158D47F3EC911
Perubahan yang dilakukan dengan cara mengubah pada kunci. Cipherteks
: 0D62F43FAE816AC1392158D47F3EC911
Kunci
: 123455
Plainteks
:
ˆ GÊ®r'` t2 ÓL8
Perubahan yang dilakukan dengan cara mengubah pada cipherteks. Cipherteks
: 1D62F43FAE816AC1392158D47F3EC911
Kunci
: 123456
Plainteks
: æÝ{±Ú‚aƒL-—²A¿ f
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
55
Perubahan yang dilakukan dengan cara mengubah pada cipherteks dan kunci Cipherteks
: 1D62F43FAE816AC1392158D47F3EC911
Kunci
: 123457
Plainteks
:
Ÿz B ¸
Ÿâ-bþú|
Contoh 2 Plainteks
: universitas
Kunci
: abcd
Cipherteks
: 85BBC9CAE6EFC0B9D84E84A69AE1A76C
Setelah dilakukan perubahan dengan cara melakukan perubahan pada kunci. Cipherteks
: 85BBC9CAE6EFC0B9D84E84A69AE1A76C
Kunci
: abcde
Plainteks
: ÅRKM õåÿdQJ?Ü7üå
Perubahan yang dilakukan dengan cara mengubah pada cipherteks. Cipherteks
: 85BBC9CAE6EFC0B9D84E84A69AE1A76A
Kunci
: abcd
Plainteks
: × ^»¼Ü«‚š¨2ûµÀ><
Perubahan yang dilakukan dengan cara mengubah pada cipherteks dan kunci Cipherteks
: 85BBC9CAE6EFC0B9D84E84A69AE1A76A
Kunci
: abcc
Plainteks
: «.!o=ëGšók=jëñ³V
Contoh enkripsi dan enkripsi berupa file dengan melakukan perubahan pada kuncinya Contoh 1 File
: anlis.doc
Kunci
: 1234
Cipherteks
: anlis.doc.aes
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
56
anlsis.doc
anlsis.doc.aes
Setelah dilakukan perubahan dengan cara melakukan perubahan pada kunci. Cipherteks
: anlsis.doc.aes
Kunci
: 12345
Plainteks
: anlsis.doc
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
57
anlsis.doc.aes
anlsis.doc
Contoh 2 File
: Landasan Matematika Untuk Kriptografi.ppt
Kunci
: mipa
Cipherteks
: Landasan Matematika Untuk Kriptografi.ppt.aes
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
58
Landasan Matematika Untuk Kriptografi.ppt
Landasan Matematika Untuk Kriptografi.ppt.aes
Setelah dilakukan perubahan dengan cara melakukan perubahan pada kunci. Cipherteks
: Landasan Matematika Untuk Kriptografi.ppt.aes
Kunci
: usu
Plainteks
: Landasan Matematika Untuk Kriptografi.ppt
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
59
Landasan Matematika Untuk Kriptografi.ppt.aes
Untuk file yang berekstensi ppt atau file berbentuk Microsoft Power Point jika ada perubahan kunci, maka hasilnya tidak akan terbaca lagi oleh Microsoft Power Point dan dianggap file tersebut rusak. Jika terjadi perbedaan, maka disimpulkan ada modifikasi terhadap isi pesan. Aplikasi ini didasarkan pada kenyataan bahwa perubahan kunci akan menyebabkan perubahan data pada saat akan dikembalikan pada bentuk semula dan hasilnya akan berbeda dengan aslinya (plainteks). Dengan kata lain, Rijndael sangat peka terhadap perubahan sekecil apa pun pada data masukan.
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
60
BAB 4 KESIMPULAN DAN SARAN
4.1 Kesimpulan Dari analisa dan hasil implementasi algoritma Rijndael dapat diambil kesimpulan sebagai berikut: 1. Dari hasil uji coba yang dilakukan antara algoritma Rijndael dan algoritma 3DES, algoritma Rijndael memiliki waktu enkripsi dan dekripsi sedikit lebih lama. 2. Algoritma Rijndael sangat peka terhadap perubahan sekecil apapun pada data masukan, ini didasarkan pada kenyataan bahwa perubahan kunci akan menyebabkan perubahan data pada saat dikembalikan pada bentuk semula. 3. Algoritma Rijndael mempunyai panjang kunci paling sedikit 128 bit, ini menyebabkan algoritma Rijndael tahan terhadap serangan exhaustive key search. 4. Untuk setiap putarannya, Rijndael menggunakan kunci yang berbeda. Kunci setiap putaran disebut round key.
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
61
4.2 Saran Saran yang dapat penulis ambil adalah: 1. Pembaca yang ingin melakukan enkripsi dan dekripsi baik berupa file ataupun teks perlu mempertimbangkan faktor kelebihan maupun kekurang dari suatu algoritma yang akan digunakan agar file atau teks terjaga keamanan dan kerahasiaannya. 2. Diharapkan kepada Pembaca yang melakukan proses enkripsi dan dekripsi file ataupun teks untuk menggunakan kunci yang lebih panjang dan lebih variatif antara huruf dan angka ataupun kombinasi karakter berupa kode ASCII yang akan lebih menyulitkan pemecahan cipherteks oleh kriptanalis. 3. Dalam mengimplementasikan algoritma Rijndael ini hanya dalam cakupan kecil dan sangat mendasar yang menggunakan bahasa pemograman Microsoft Visual Basic 6. Penyusun berharap agar pembaca dapat mengembangkannya.
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
62
DAFTAR PUSTAKA
Ariyus, Dony. 2006. Kriptografi Keamanan Data dan Komunikasi. Yogyakarta: Graha Ilmu Andi, 2003. Memahami Model Enkripsi dan Security Data. Semarang: Andi Yogyakarta Munir, Rinaldi. 2006. Kriptografi. Bandung: Informatika Bandung Kurniawan, Yusuf. 2004. Kriptografi Keamanan Internet dan Jaringan Komputer. Bandung: Informatika. Joan Daemen & Vincent Rijmen. A Specification for Rijndael, the AES Algorithm. Federal Information Processing Standards Publication 197, 2001. “Announcing the ADVANCED ENCRYPTION STANDARD (AES)” hal. 1-51. K. Cartrysse and J.C.A. van der Lubbe, 2004. “Basic methods of cryptography and Basic methods of cryptography” hal. 1-20.
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
63
LAMPIRAN: LISTING PROGRAM Option Explicit #Const SUPPORT_LEVEL = 2 Private m_Rijndael As New cRijndael Public Property Let Status(TheStatus As String) If Len(TheStatus) = 0 Then Me.Caption = App.Title Else Me.Caption = App.Title & " - " & TheStatus End If Me.Refresh End Property Private Sub DisplayString(TheTextBox As TextBox, ByVal TheString As String) If Len(TheString) < 65536 Then TheTextBox.Text = TheString Else MsgBox "Can not assign a String larger than 64k " & vbCrLf & _ "to the Text property of a TextBox control." & vbCrLf & _ "If you need to support Strings longer than 64k," & vbCrLf & _ "you can use a RichTextBox control instead.", vbInformation End If End Sub Private String Dim Dim Dim Dim
Function HexDisplay(data() As Byte, n As Long, k As Long) As i As Long j As Long c As Long data2() As Byte
If LBound(data) = 0 Then ReDim data2(n * 4 - 1 + ((n - 1) \ k) * 4) j = 0 For i = 0 To n - 1 If i Mod k = 0 Then If i <> 0 Then data2(j) = 32 data2(j + 2) = 32 j = j + 4 End If End If c = data(i) \ 16& If c < 10 Then data2(j) = c + 48 ' "0"..."9" Else data2(j) = c + 55 ' "A"..."F"
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
64
End If c = data(i) And 15& If c < 10 Then data2(j + 2) = c + 48 ' "0"..."9" Else data2(j + 2) = c + 55 ' "A"..."F" End If j = j + 4 Next i Debug.Assert j = UBound(data2) + 1 HexDisplay = data2 End If End Function Private As Long Dim Dim Dim Dim Dim Dim
Function HexDisplayRev(TheString As String, data() As Byte) i As Long j As Long c As Long d As Long n As Long data2() As Byte
n = 2 * Len(TheString) data2 = TheString ReDim data(n \ 4 - 1) d = 0 i = 0 j = 0 Do While j < n c = data2(j) Select Case c Case 48 To 57 '"0" ... "9" If d = 0 Then 'high d = c Else 'low data(i) = (c - 48) Or ((d - 48) * 16&) i = i + 1 d = 0 End If Case 65 To 70 '"A" ... "F" If d = 0 Then 'high d = c - 7 Else 'low data(i) = (c - 55) Or ((d - 48) * 16&) i = i + 1 d = 0 End If Case 97 To 102 '"a" ... "f" If d = 0 Then 'high d = c - 39 Else 'low data(i) = (c - 87) Or ((d - 48) * 16&) i = i + 1 d = 0 End If
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
65
End Select j = j + 2 Loop n = i If n = 0 Then Erase data Else ReDim Preserve data(n - 1) End If HexDisplayRev = n End Function Private Function GetPassword() As Byte() Dim data() As Byte If Check1.Value = 0 Then data = StrConv(txtPassword.Text, vbFromUnicode) ReDim Preserve data(31) Else If HexDisplayRev(txtPassword.Text, data) <> (cboKeySize.ItemData(cboKeySize.ListIndex) \ 8) Then data = StrConv(txtPassword.Text, vbFromUnicode) ReDim Preserve data(31) End If End If GetPassword = data End Function Private Dim Dim Dim Dim Dim
Sub cmdEncrypt_Click() pass() As Byte plaintext() As Byte ciphertext() As Byte KeyBits As Long BlockBits As Long
If Len(Text1.Text) = 0 Then MsgBox "No Plaintext" Else If Len(txtPassword.Text) = 0 Then MsgBox "No Password" Else KeyBits = cboKeySize.ItemData(cboKeySize.ListIndex) BlockBits = cboBlockSize.ItemData(cboBlockSize.ListIndex) pass = GetPassword Status = "Converting Text" If Check1.Value = 0 Then plaintext = StrConv(Text1.Text, vbFromUnicode) Else If HexDisplayRev(Text1.Text, plaintext) = 0 Then MsgBox "Text not Hex data" Status = "" Exit Sub End If End If Status = "Encrypting Data"
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
66
#If SUPPORT_LEVEL Then m_Rijndael.SetCipherKey pass, KeyBits, BlockBits m_Rijndael.ArrayEncrypt plaintext, ciphertext, 0, BlockBits #Else m_Rijndael.SetCipherKey pass, KeyBits m_Rijndael.ArrayEncrypt plaintext, ciphertext, 0 #End If Status = "Converting Text" DisplayString Text1, HexDisplay(ciphertext, UBound(ciphertext) + 1, BlockBits \ 8) Status = "" End If End If End Sub Private Sub cmdDecrypt_Click() Dim pass() As Byte Dim plaintext() As Byte Dim ciphertext() As Byte Dim KeyBits As Long Dim BlockBits As Long If Len(Text1.Text) = 0 Then MsgBox "No Ciphertext" Else If Len(txtPassword.Text) = 0 Then MsgBox "No Password" Else KeyBits = cboKeySize.ItemData(cboKeySize.ListIndex) BlockBits = cboBlockSize.ItemData(cboBlockSize.ListIndex) pass = GetPassword Status = "Converting Text" If HexDisplayRev(Text1.Text, ciphertext) = 0 Then MsgBox "Text not Hex data" Status = "" Exit Sub End If Status = "Decrypting Data" #If SUPPORT_LEVEL Then m_Rijndael.SetCipherKey pass, KeyBits, BlockBits If m_Rijndael.ArrayDecrypt(plaintext, ciphertext, 0, BlockBits) <> 0 Then Status = "" Exit Sub End If #Else m_Rijndael.SetCipherKey pass, KeyBits If m_Rijndael.ArrayDecrypt(plaintext, ciphertext, 0) <> 0 Then Status = "" Exit Sub End If #End If Status = "Converting Text" If Check1.Value = 0 Then DisplayString Text1, StrConv(plaintext, vbUnicode) Else
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
67
DisplayString Text1, HexDisplay(plaintext, UBound(plaintext) + 1, BlockBits \ 8) End If Status = "" End If End If End Sub Private Dim Dim Dim Dim Dim
Sub cmdFileEncrypt_Click() FileName As String FileName2 As String pass() As Byte KeyBits As Long BlockBits As Long
Dim OldTimer As Single If Len(txtPassword.Text) = 0 Then MsgBox "No Password" Else FileName = FileDialog(Me, False, "File to Encrypt", "*.*|*.*") If Len(FileName) <> 0 Then FileName2 = FileDialog(Me, True, "Save Encrypted Data As ...", "*.aes|*.aes|*.*|*.*", FileName & ".aes") If Len(FileName2) <> 0 Then OldTimer = Timer RidFile FileName2 KeyBits = cboKeySize.ItemData(cboKeySize.ListIndex) BlockBits = cboBlockSize.ItemData(cboBlockSize.ListIndex) pass = GetPassword Status = "Encrypting File" #If SUPPORT_LEVEL Then m_Rijndael.SetCipherKey pass, KeyBits, BlockBits m_Rijndael.FileEncrypt FileName, FileName2, BlockBits #Else m_Rijndael.SetCipherKey pass, KeyBits m_Rijndael.FileEncrypt FileName, FileName2 #End If lblStatus.Caption = Timer - OldTimer & " seconds" MsgBox "complete" & vbCrLf & vbCrLf & "With time progress " & lblStatus.Caption Status = "" End If 'MsgBox " complete" & vbCrLf & vbCrLf & " With time progress " & lblStatus.Caption End If End If End Sub
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
68
Private Dim Dim Dim Dim Dim
Sub cmdFileDecrypt_Click() FileName As String FileName2 As String pass() As Byte KeyBits As Long BlockBits As Long
Dim OldTimer As Single If Len(txtPassword.Text) = 0 Then MsgBox "No Password" Else FileName = FileDialog(Me, False, "File to Decrypt", "*.aes|*.aes|*.*|*.*") If Len(FileName) <> 0 Then If InStrRev(FileName, ".aes") = Len(FileName) - 3 Then FileName2 = Left$(FileName, Len(FileName) - 4) FileName2 = FileDialog(Me, True, "Save Decrypted Data As ...", "*.*|*.*", FileName2) If Len(FileName2) <> 0 Then OldTimer = Timer RidFile FileName2 KeyBits = cboKeySize.ItemData(cboKeySize.ListIndex) BlockBits = cboBlockSize.ItemData(cboBlockSize.ListIndex) pass = GetPassword Status = "Decrypting File" #If SUPPORT_LEVEL Then m_Rijndael.SetCipherKey pass, KeyBits, BlockBits m_Rijndael.FileDecrypt FileName2, FileName, BlockBits #Else m_Rijndael.SetCipherKey pass, KeyBits m_Rijndael.FileDecrypt FileName2, FileName #End If lblStatus.Caption = Timer - OldTimer & " seconds" MsgBox "complete" & vbCrLf & vbCrLf & "With time progress " & lblStatus.Caption Status = "" End If End If End If End Sub Private Sub chkTerminal_Click() Static Text1FontName As String Static Text1FontBold As Boolean Static Text1FontSize As Long If chkTerminal.Value Text1.FontName = Text1.FontBold = Text1.FontSize = Else
= 0 Then Text1FontName Text1FontBold Text1FontSize
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
69
Text1FontName = Text1.FontName Text1FontBold = Text1.FontBold Text1FontSize = Text1.FontSize Text1.FontName = "Terminal" End If End Sub Private Sub Command1_Click() Text1.Text = "" chkTerminal.Value = 0 txtPassword.Text = "" End Sub Private Sub Form_Initialize() cboBlockSize.AddItem "128 Bit" cboBlockSize.ItemData(cboBlockSize.NewIndex) = #If SUPPORT_LEVEL = 0 Then cboBlockSize.Enabled = False #Else #If SUPPORT_LEVEL = 2 Then cboBlockSize.AddItem "160 Bit" cboBlockSize.ItemData(cboBlockSize.NewIndex) = cmdSizeTest.Visible = True #End If cboBlockSize.AddItem "192 Bit" cboBlockSize.ItemData(cboBlockSize.NewIndex) = #If SUPPORT_LEVEL = 2 Then cboBlockSize.AddItem "224 Bit" cboBlockSize.ItemData(cboBlockSize.NewIndex) = #End If cboBlockSize.AddItem "256 Bit" cboBlockSize.ItemData(cboBlockSize.NewIndex) = #End If cboKeySize.AddItem "128 Bit" cboKeySize.ItemData(cboKeySize.NewIndex) = 128 #If SUPPORT_LEVEL = 2 Then cboKeySize.AddItem "160 Bit" cboKeySize.ItemData(cboKeySize.NewIndex) = 160 #End If cboKeySize.AddItem "192 Bit" cboKeySize.ItemData(cboKeySize.NewIndex) = 192 #If SUPPORT_LEVEL = 2 Then cboKeySize.AddItem "224 Bit" cboKeySize.ItemData(cboKeySize.NewIndex) = 224 #End If cboKeySize.AddItem "256 Bit" cboKeySize.ItemData(cboKeySize.NewIndex) = 256 cboBlockSize.ListIndex = 0 cboKeySize.ListIndex = 0 txtPassword = "" Status = "" End Sub #If SUPPORT_LEVEL = 2 Then
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
128
160
192 224 256
70
Private Sub TestStuff(plaintext As String, passtext As String, ciphertext As String) Dim k As Long Dim p1() As Byte Dim c1() As Byte Dim cdata() As Byte Dim pdata() As Byte Dim pass() As Byte Dim Nk As Long Dim Nb As Long Dim n As Long k = HexDisplayRev(passtext, pass) Nk = k \ 4 If Nk * 4 <> k Or Nk < 4 Or Nk > 8 Then Exit Sub n = HexDisplayRev(plaintext, pdata) Nb = n \ 4 If Nb * 4 <> n Or Nb < 4 Or Nb > 8 Then Exit Sub If n <> HexDisplayRev(ciphertext, cdata) Then Exit Sub m_Rijndael.SetCipherKey pass, Nk * 32, Nb * 32 m_Rijndael.ArrayEncrypt pdata, c1, 0, Nb * 32 m_Rijndael.ArrayDecrypt p1, cdata, 0, Nb * 32 Text1.Text = Text1.Text & vbCrLf & "ENCRYPT TEST " & CStr(Nb * 4) & " byte block, " & CStr(Nk * 4) & " byte key" & vbCrLf Text1.Text = Text1.Text & "KEY: " & passtext & IIf(UCase$(passtext) = HexDisplay(pass, Nk * 4, Nk * 4), " = ", "<>") & vbCrLf & String(14, 32) & HexDisplay(pass, Nk * 4, Nk * 4) & vbCrLf Text1.Text = Text1.Text & "PLAINTEXT: " & plaintext & IIf(UCase$(plaintext) = HexDisplay(p1, Nb * 4, Nb * 4), " = ", "<>") & vbCrLf & String(14, 32) & HexDisplay(p1, Nb * 4, Nb * 4) & vbCrLf Text1.Text = Text1.Text & "CIPHERTEXT: " & ciphertext & IIf(UCase$(ciphertext) = HexDisplay(c1, Nb * 4, Nb * 4), " = ", "<>") & vbCrLf & String(14, 32) & HexDisplay(c1, Nb * 4, Nb * 4) & vbCrLf End Sub Private Sub cmdSizeTest_Click() Text1.Text = "" chkTerminal.Value = 1 TestStuff "3243f6a8885a308d313198a2e0370734", "2b7e151628aed2a6abf7158809cf4f3c", "3925841d02dc09fbdc118597196a0b32" TestStuff "3243f6a8885a308d313198a2e0370734", "2b7e151628aed2a6abf7158809cf4f3c762e7160", "231d844639b31b412211cfe93712b880" TestStuff "3243f6a8885a308d313198a2e0370734", "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da5", "f9fb29aefc384a250340d833b87ebc00" TestStuff "3243f6a8885a308d313198a2e0370734", "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d90", "8faa8fe4dee9eb17caa4797502fc9d3f" TestStuff "3243f6a8885a308d313198a2e0370734", "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d9045190cfe", "1a6e6c2c662e7da6501ffb62bc9e93f3"
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
71
TestStuff "3243f6a8885a308d313198a2e03707344a409382", "2b7e151628aed2a6abf7158809cf4f3c", "16e73aec921314c29df905432bc8968ab64b1f51" TestStuff "3243f6a8885a308d313198a2e03707344a409382", "2b7e151628aed2a6abf7158809cf4f3c762e7160", "0553eb691670dd8a5a5b5addf1aa7450f7a0e587" TestStuff "3243f6a8885a308d313198a2e03707344a409382", "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da5", "73cd6f3423036790463aa9e19cfcde894ea16623" TestStuff "3243f6a8885a308d313198a2e03707344a409382", "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d90", "601b5dcd1cf4ece954c740445340bf0afdc048df" TestStuff "3243f6a8885a308d313198a2e03707344a409382", "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d9045190cfe", "579e930b36c1529aa3e86628bacfe146942882cf" TestStuff "3243f6a8885a308d313198a2e03707344a4093822299f31d", "2b7e151628aed2a6abf7158809cf4f3c", "b24d275489e82bb8f7375e0d5fcdb1f481757c538b65148a" TestStuff "3243f6a8885a308d313198a2e03707344a4093822299f31d", "2b7e151628aed2a6abf7158809cf4f3c762e7160", "738dae25620d3d3beff4a037a04290d73eb33521a63ea568" TestStuff "3243f6a8885a308d313198a2e03707344a4093822299f31d", "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da5", "725ae43b5f3161de806a7c93e0bca93c967ec1ae1b71e1cf" TestStuff "3243f6a8885a308d313198a2e03707344a4093822299f31d", "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d90", "bbfc14180afbf6a36382a061843f0b63e769acdc98769130" TestStuff "3243f6a8885a308d313198a2e03707344a4093822299f31d", "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d9045190cfe", "0ebacf199e3315c2e34b24fcc7c46ef4388aa475d66c194c" TestStuff "3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa9", "2b7e151628aed2a6abf7158809cf4f3c", "b0a8f78f6b3c66213f792ffd2a61631f79331407a5e5c8d3793aceb1" TestStuff "3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa9", "2b7e151628aed2a6abf7158809cf4f3c762e7160", "08b99944edfce33a2acb131183ab0168446b2d15e958480010f545e3" TestStuff "3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa9", "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da5", "be4c597d8f7efe22a2f7e5b1938e2564d452a5bfe72399c7af1101e2" TestStuff "3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa9", "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d90", "ef529598ecbce297811b49bbed2c33bbe1241d6e1a833dbe119569e8" TestStuff "3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa9", "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d9045190cfe", "02fafc200176ed05deb8edb82a3555b0b10d47a388dfd59cab2f6c11" TestStuff "3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa98ec4e6c8", "2b7e151628aed2a6abf7158809cf4f3c", "7d15479076b69a46ffb3b3beae97ad8313f622f67fedb487de9f06b9ed9c8f19" TestStuff "3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa98ec4e6c8",
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009
72
"2b7e151628aed2a6abf7158809cf4f3c762e7160", "514f93fb296b5ad16aa7df8b577abcbd484decacccc7fb1f18dc567309ceeffd" TestStuff "3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa98ec4e6c8", "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da5", "5d7101727bb25781bf6715b0e6955282b9610e23a43c2eb062699f0ebf5887b2" TestStuff "3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa98ec4e6c8", "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d90", "d56c5a63627432579e1dd308b2c8f157b40a4bfb56fea1377b25d3ed3d6dbf80" TestStuff "3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa98ec4e6c8", "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d9045190cfe", "a49406115dfb30a40418aafa4869b7c6a886ff31602a7dd19c889dc64f7e4e7a" End Sub #End If
Eko Satria : Studi Algoritma RIJNDAEL Dalam Sistem Keamanan Data, 2009. USU Repository © 2009