BAB III ANALISA DAN PERANCANGAN 1.1 Analisa Masalah Masalah yang ingin diselesaikan pada Tahap Akhir ini antara lain adalah menerapkan algoritma Message Digest 5 (MD5) agar bisa digunakan untuk enkripsi data teks pada sebuah aplikasi dengan menggunakan Microsoft Visual C++. Kekuatan dari metode-metode enkripsi adalah pada kunci (dari password yang dimasukkan) sehingga walaupun algoritma metode tersebut telah tersebar luas, orang tidak akan dapat membongkar data tanpa kunci yang tepat. Walaupun tentunya untuk menemukan metode tersebut diperlukan teori matematika yang cukup rumit. Tapi intinya adalah bagaimana mengimplemetasikan metode-metode yang telah dibuat tersebut ke dalam sebuah aplikasi sehingga dapat meningkatkan keamanan dari aplikasi yang dibuat. Program enkripsi yang baik adalah yang dapat mengenkripsi semua ukuran file, baik yang kecil atau yang besar. Dalam mengenkripsi diusahakan dapat dilakukan dalam waktu yang cukup singkat. 1.2 Strategi Pemecahan Masalah Algoritma Message Digest 5 (MD5) adalah algoritma enkripsi yang menggunakan metode fungsi hash satu arah. Fungsi hash satu arah adalah suatu fungsi dimana kita dengan mudah melakukan enkripsi untuk mendapatkan chipertext-nya tetapi sangat sulit untuk mendapatkan plaintext-nya (melakukan dekripsi). MD5 telah dimanfaatkan secara bermacam-macam pada aplikasi keamanan, MD5 juga umum digunakan untuk melakukan pengujian integritas sebuah file. Algoritma MD5 secara garis besar adalah mengambil pesan yang mempunyai panjang variabel diubah menjadi sidik jari atau intisari pesan yang mempunyai panjang tetap yaitu 128 bit. Sidik jari ini tidak dapat dibalik untuk
mendapatkan pesan, dengan kata lain tidak ada orang yang dapat melihat pesan dari sidik jari MD5. Perubahan satu bit saja akan mengubah hasil keluaran hash secara drastis. Fungsi hash biasanya digunakan untuk menjamin integritas dan digital signatue (tanda tangan digitial). Metode fungsi hash satu arah adalah berfungsi untuk melindungi data dari modifikasi. Dalam bab 3 ini akan diberikan analisa tentang algoritma enkripsi Message Digest 5 (MD5) seperti bagaimana algoritma ini mengolah kuncinya, enkripsi data, pengolahan datanya dan masih banyak lagi. 1.3 Pembahasan Algoritma Algoritma enkripsi Message Digest 5 (MD5) seperti halnya algoritma yang lain juga memiliki algoritma umum. Pada sub bab ini akan diberikan gambaran umum dari algoritma Message Digest 5 (MD5) dan penjelasan dari prosedurprosedur yang digunakan. 1.3.1 Gambaran Umum Algoritma Message Digest 5 (MD5) Pada suatu proses enkripsi pasti ada data atau berkas yang akan dienkripsi, dan hasil enkripsi yaitu data atau berkas chiper teks. Message Digest 5 (MD5) memproses teks masukan ke dalam blok-blok sebanyak 512 bit, kemudian dibagi ke dalam 32 bit sub blok sebanyak 16 buah. Keluaran dari Message Digest 5 (MD5) berupa empat buah blok yang biasa disebut nilai hash. Setiap pesan yang akan dienkripsi terlebih dahulu dicari berapa banyak bit yang terdapat pada pesan. Kita anggap sebanyak n bit. Dimana n adalah bit non negatif integer. Nilai n bisa saja nol dan tidak harus selalu kelipatan 8. Pesan dengan panjang n bit dapat digambarkan sebagai berikut : m0, m1,... m(n-1) Operasi-operasi dasar yang digunakan pada proses enkripsi Message Digest 5 (MD5) adalah sebagai berikut: 1. Operasi AND
Tabel 3.1 Tabel Operasi AND 2. Operasi NOT Tabel 3.2 Tabel Operasi NOT 3. Operasi OR Tabel 3.3 Tabel Operasi OR 4. Operasi XOR Tabel 3.4 Tabel Operasi XOR
5. Operasi pergeseran bit kearah kanan (ROTATE_RIGHT) Tabel 3.5 Tabel Operasi pergeseran bit ke kanan 6. Operasi pergeseran bit kearah kiri (ROTATE_KIRI) Tabel 3.6 Tabel Operasi pergeseran bit ke kiri 1.3.2 Algoritma Enkripsi Secara garis besar proses enkripsi Plain text atau text file dengan menggunakan MD5 dapat digambarkan sebagai berikut:
Gambar 3.1 Flowchart Enkripsi Data Menggunakan MD5 Penjelasan dari algoritma enkripsi dengan MD5 ini adalah misalnya kita akan mengenkripsi teks "Selamat datang di Universitas Mercu Buana" menjadi bentuk enkripsi MD5. Teks tersebut akan dienkripsi dengan teknik hash dari MD5
sehingga akan menghasilkan Chiper teks 9d164a4d1a0708c777110b8cdbaf7610. Inti dari enkripsi adalah algoritmanya, langkah-langkah yang dilakukan Message Digest 5 (MD5) adalah sebagai berikut: 1. Inisialisasi Message Digest 5 (MD5) yang utama beroperasi pada kondisi 128-bit, dibagi menjadi empat word 32-bit, yaitu A,B,C, dan D. Operasi tersebut diinisialisasi dan dijaga untuk tetap konstan. Register A, B, C dan D diinisialisasi dengan bilangan hexadecimal, yaitu: word A: 01 23 45 67 word B: 89 AB CD EF word C: FE DC BA 98 word D: 76 54 32 10 Pada tahap Inisialisasi ini adalah dimulainya proses operasi MD5. Siapkan sebuah konteks bertipe struktur (struct) yang didalamnya beranggotakan 3 variabel array yaitu variable state dengan nilai indexnya 4 yang akan digunakan untuk initialisasi nilai state ABCD dimana nilainya masing-masing adalah sebagai berikut: state[0] = 0x67452301; state[1] = 0xefcdab89; state[2] = 0x98badcfe; state[3] = 0x10325476; Variabel yang kedua adalah variabel array count yaitu sebagai jumlah bit dengan indexnya adalah 2, dan yang ketiga adalah variabel array buffer dengan indexnya 64 berfungsi sebagai buffer masukan. 2. Operasi mengupdate string teks masukan. Yaitu melakukan update blok MD5, melanjutkan operasi MD5, memproses blok pesan serta melakukan update pada konteks. a. Menghitung jumlah byte dengan sisa hasil baginya adalah 64. Siapkan sebuah variabel index untuk menentukan jumlah byte-nya. Dimana nilai index tersebut adalah alamat pertama dari count tersebut dilakukan operasi pergeseran bit kearah kanan sebanyak 3 kali serta dilakukan operasi AND dengan nilai Hexa 0x3f.
index = (unsigned int)((konteks->count[0] >> 3) & 0x3F); Melakukan update jumlah bit, dimana sudah diketahui teksnya dan panjang teksnya. Mengecek apakah jumlah (count) dari konteks pada index 0 ditambah panjang teks masukan digeser sebanyak 3 bit ke kiri masih lebih kecil dari teks masukan digeser sebanyak 3 bit ke kiri, jika iya maka jumlah (count) dari konteks index 1 ditambahkan satu. Jika tidak maka jumlah (count) dari konteks index 1 adalah jumlah (count) dari konteks index 1 ditambahkan dengan panjang teks masukan yang digeser ke kanan sebanyak 29 bit. Siapkan satu variabel untuk menampung panjang bagian (partlen), dimana nilainya adalah 64 dikurangi dengan index. if((konteks->count[0] += ((unsigned long int)inputlen << 3)) < ((unsigned long int)inputlen << 3) konteks->count[1]++; konteks->count[1] += ((unsigned long int)inputlen >> 29); partlen = 64 - index; b. Mengubah sesuai dengan jumlah kemungkinan yang ada. Cek apakah panjang masukan lebih besar atau sama dengan partlen, jika iya maka pindahkan isi masukan ke dalam index sesuai panjang PartLen. if (inputlen >= partlen) { MD5_memcpy((POINTER)&konteks->buffer[index], (POINTER)input, partlen); MD5Transform (konteks->state, konteks->buffer); for (i = 0; i < partlen; i++) konteks->buffer[i] = input[i]; index = 0; } Dimana output merupakan buffer index dan input adalah masukan.
Ubah konteks buffer ke dalam konteks state. Serta melakukan proses decoding dari masukan menjadi output dengan asumsi panjang adalah kelipatan empat. MD5Decode (unsigned long int *output, unsigned char *input, unsigned int len) { unsigned int i, j; for (i = 0, j = 0; j < len; i++, j += 4) output[i] = ((unsigned long int)input[j]) (((unsigned long int)input[j+1]) << 8) (((unsigned long int)input[j+2]) << 16) (((unsigned long int)input[j+3]) << 24); } Lakukan perulangan untuk merubah dari masukan input kedalam konteks- >state sebanyak panjang input. for (i = partlen; i + 63 < inputlen; i += 64) MD5Transform (konteks->state, &input[i]); Berikan nilai index menjadi nol index = 0; c. Pengisian buffer Mengisi nilai konteks buffer dari nilai masukan panjang sesuai panjang masukan dikurangi dengan i. MD5_memcpy((POINTER)&konteks->buffer[index], (POINTER)&input[i],inputLen-i); 3. Pembuatan Hash atau proses Finalisasi Yaitu tahap akhir proses MD5, dimana terjadi proses merubah pesan data konteks ke dalam hash buffer dan mengubah dari hash buffer menjadi string. Siapkan sebuah variabel buffer bertipe array dengan nomor indexnya adalah 16. a. Menyimpan dan mengenkode ke dalam bentuk bit-bit, sepanjang 8 bit dengan asumsi panjang adalah kelipatan 4. for (i = 0, j = 0; j < 8; i++, j += 4) { bits[j] = (unsigned char)( konteks->count [i] & 0xff);
bits[j+1] = (unsigned char)(( konteks->count [i] >> 8) & 0xff); bits[j+2] = (unsigned char)(( konteks->count [i] >> 16) & 0xff); bits[j+3] = (unsigned char)(( konteks->count [i] >> 24) & 0xff); } b. Padding kedalam 56 dengan sisa hasil bagi 64. Siapkan sebuah variabel index untuk menentukan jumlah bytenya. Dimana nilai index tersebut adalah alamat pertama dari count tersebut dilakukan operasi pergeseran bit kearah kanan sebanyak 3 kali serta dilakukan operasi AND dengan nilai Hexa 0x3f. index = (unsigned int)((konteks->count[0] >> 3) & 0x3F); Pemberian nilai panjang padding, jika panjang index kurang dari 56, maka panjang padding (padlen) sama dengan 56 index. Kalau tidak maka panjang padding sama dengan 120 index. padlen = (index < 56)? (56 - index) : (120 - index); Melakukan proses update padding kedalam konteks dengan panjang senilai padlen, dengan proses seperti yang dilakukan pada langkah no.2 diatas. MD5Update (konteks, PADDING, padlen); c. Penambahan panjang bit sebanyak 8, dengan proses seperti yang dilakukan pada langkah no.2 diatas. MD5Update (konteks, bits, 8); d. Menyimpan ke dalam digest (Inti). Dengan melakukan proses encoding dari konteks state ke dalam digest dengan panjang 16. for (i = 0, j = 0; j < 16; i++, j += 4) { digest[j] = (unsigned char)( konteks->state [i] & 0xff); digest[j+1] = (unsigned char)(( konteks->state [i] >> 8) & 0xff);
digest[j+2] = (unsigned char)(( konteks->state [i] >> 16) & 0xff); digest[j+3] = (unsigned char)(( konteks->state [i] >> 24) & 0xff); } Sehingga didapat hasil hash sebagai berikut:. e. Pengosongan buffer dengan len merupakan panjang konteks. for (i = 0; i < len; i++) ((char *)konteks)[i] = 0; f. Mengubah dari hash menjadi string. Mengkonversi hash bernilai numeric kedalam bentuk string dengan menggunakan fungsi KonversiString. CString KonversiString(unsigned char *bytes) { CString asciihash; CString s; for(int i=0; i<16; i++) { s.format(l"%02x",bytes[i]); asciihash += s; } return asciihash; } Sehingga setelah dikonvesi ke string data mentah yang tadinya adalah. dikonversi ke dalam format string menjadi 9d164a4d1a0708c777110b8cdbaf7610 1.4 Perancangan Applikasi Program implementasi dari algoritma Message Digest 5 (MD5) dibuat dengan menggunakan MS Visual C++, untuk mempermudah dalam pembuatan implementasi dan meningkatkan fleksibilitas maka penulis membagi program
dalam fungsi-fungsi. Kemudian di dalam program utama hanya digunakan sebagai program pemanggil saja. Sedangkan inti dari program ada dalam berkas-berkas (file) tersendiri. Setelah program selesai dibuat, program dikompile terlebih dahulu sehingga didapat berkas (file) executable yang berdiri sendiri. Alasan program dicompile terlebih dahulu adalah karena source program hanya bisa dijalankan dengan menggunakan program MS Visual C++ saja. Tanpa MS Visual C++, program tersebut tidak dapat dijalankan. Dan yang perlu diperhatikan adalah tidak semua orang yang punya MS Visual C++ untuk menjalankan program ini. Dengan mengubah file program ke file executable kita dapat peroleh beberapa keuntungan antara lain : 1. Proses program akan lebih cepat dikarenakan bahasanya telah dikonversi menjadi bahasa mesin. 2. Fleksibilitas tinggi sebab jika kita ingin mendistribusikan program yang kita buat cukup dibuatkan instalasi programnya 3. Source program yang kita buat akan aman, sebab yang kita distribusikan hanya file.exe nya saja. File exe hanya terdiri dari bahasa yang dimengerti oleh mesin dan tidak dapat dibaca oleh manusia. 1.5 Rancangan Tampilan Layar Rancangan layar yang ada dalam program ini menggunakan beberapa form yaitu sebagai berikut:
Gambar 3.2 Rancangan Tampilan Awal. Rancangan ini adalah tampilan yang akan muncul pertama kali jika program MD5 Enkripsi ini dijalankan. Tombol Lanjut jika di klik maka akan menampilkan program utama dan tombol Keluar digunakan untuk keluar dari program. Gambar 3.3 Rancangan Tampilan Form Utama. Pada tampilan utama ini ditampilkan text box untuk memasukkan teks atau yang akan dienkrip, dan juga text box untuk menentukan lokasi dan nama teks file yang akan dienkripsi dan kemudian akan menampilkan direktori aktif sesuai dengan drive yang kita pilih bersama dengan nama filenya. Terdapat juga tombol Reset untuk mengosongkan masing-masing text box, selain itu juga ada tombol Enkrip untuk melakukan proses enkripsi. Pada menu File terdapat pilihan Open untuk membuka file yang akan dienkrip serta pilihan Exit untuk keluar dari program utama. Sedangkan dalam menu Help terdapat pilihan About.
Gambar 3.4 Rancangan Tampilan Menu File. Gambar 3.5 Rancangan Tampilan About MD5. Pada rancangan ini ditampilkan informasi tentang pembuat program Enkripsi MD5, email dan ucapan terima kasih. 1.6 Pengukuran Tingkat Kecepatan Aplikasi Enkripsi MD5 Pengukuran dari tingkat kecepatan aplikasi enkripsi MD5 adalah suatu analisa yang digunakan untuk mengukur tingkat kecepatan dari proses enkripsi menggunakan aplikasi MD5 dengan menggunakan sintaks-sintak dari bahasa pemrograman Microsoft Visual C++ 2005. Rumus yang dipakai untuk menghitung kecepatannya adalah:
Jumlah panjang karakter (bytes) Kecepatan : Selisih Waktu (millisecond) Dengan demikian satuan dalam kecepatan enkripsi ini adalah bytes / millisecond.