Tugas Akhir
Diajukan untuk Memenuhi Salah Satu Syarat Memperoleh Gelar Sarjana Teknik Program Studi Teknik Informatika
Disusun oleh:
T. DWIARSO BUDI ARIYANTO NIM : 995314092
PROGRAM STUDI TEKNIK INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS SANATA DHARMA
YOGYAKARTA
Final Project
Submitted as Partial Fulfillment of the Requirement For the Undergraduate Degree of Sarjana Teknik
In Informatics Engineering Department
Arranged by:
T. DWIARSO BUDI ARIYANTO Student Number : 995314092
INFORMATICS ENGINEERING STUDY PROGRAM
INFORMATICS ENGINEERING DEPARTMENT
ENGINEERING FACULTY
SANATA DHARMA UNIVERSITY
YOGYAKARTA
2006
Tugas Akhir
Diajukan untuk Memenuhi Salah Satu Syarat Memperoleh Gelar Sarjana Teknik Program Studi Teknik Informatika
Disusun oleh:
T. DWIARSO BUDI ARIYANTO NIM : 995314092
PROGRAM STUDI TEKNIK INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS SANATA DHARMA
YOGYAKARTA
2006
kehidupan, kekuatan dan bahagiaku…
U
Bunda Maria, kupersembahkan hidupku
bersama Engkau, Persembahan Termulia...
U
Malaikat Agung Mikael, yang memberi aku
kekuatan
U
Malaikat Agung Gabriel, yang membuka
pikiran dan hatiku
U
Malaikat Agung Rafael, yang telah memberi
aku kesehatan
U
Keluargaku khususnya Bapak, Ibu dan
Kakakku
U
Keluarga Siroto, terima kasih untuk
bimbingan dan doanya
U
My Sweety Angel (Mimith), akhirnya
kumenemukanmu…
DATANG BERSAMA-SAMA ADALAH SUATU
PERMULAAN,
TETAPI BERSAMA-SAMA ADALAH SUATU
KEMAJUAN
DAN BEKERJA BERSAMA-SAMA ADALAH SEBUAH
KESUKSESAN
(Orang bijak)
ARTI SEBUAH PERSAHABATAN ADALAH KESETIAAN DAN KEJUJURAN
(Dedicated to all my best friends)
INTI HIDUP SEJATI ADALAH SEDERHANA, MELAYANI, CINTA KASIH DAN PENGORBANAN
(St. Swidjayanto., S. Pd)
besar (32 bit ke atas dengan cache data yang besar).. Blowfish dikembangkan untuk memenuhi kriteria disain yang cepat, kompak, sederhana dan keamanan yang variable.
Blowfish dioptimasisasikan untuk aplikasi dimana kunci tidak sering
berubah.
Pada tugas akhir ini akan dibuat perangkat lunak untuk mengimplementasikan algoritma Blowfish untuk melakukan enkripsi dan dekripsi file. Jenis file hanya dibatasi untuk jenis file teks (*.txt).
Hasil implementasi program menunjukkan ciphertext tidak akan pernah sama walaupun dilakukan pada berkas yang sama dan menggunakan kunci yang sama.
compact simply, security and vairous designed.
Blowfish optimalized for the application where key often unchangeable, like communications band or automatic file encryption.
At this final assignment, it will be made a software for the implementation of Blowfish algorithm to conduct decryption and encryption file. The type of file is limited only for text file (*.txt).
The result of encryption never equal although it is conducted at a same file and using the same key.
Puji dan syukur kepada Tuhan Yang Maha Esa atas segala rahmat dan kasih-Nya sehingga penulis dapat menyelesaikan tugas akhir yang berjudul Enkripsi File dengan Metode Blowfish. Tugas akhir ini disusun guna memenuhi salah satu persyaratan untuk memperoleh gelar Sarjana Teknik di Jurusan Teknik Informatika, Universitas Sanata Dharma.
Penyusunan tugas akhir ini tidak terlepas dari bantuan, bimbingan serta dukungan dari berbagai pihak yang sangat bermanfaat bagi penulis. Maka pada kesempatan ini penulis mengucapkan terimakasih yang sebesar-besarnya kepada :
1. Bapak Albertus Agung Hadhiatma, S.T., M.Sc. selaku dosen pembimbing yang telah meluangkan waktu untuk memberikan bimbingan dan pengarahan selama penyusunan tugas akhir.
2. Para dosen Universitas Sanata Dharma khususnya dosen Program studi Teknik Informatika yang telah memberikan bekal pengetahuan kepada penulis.
3. Para dosen penguji yang telah memberikan saran dan masukan yang berguna bagi kesempurnaan tugas akhir ini.
4. Bapak Belle dan Mas Agus yang telah membantu kelancaran pada saat sidang, terimakasih banyak.
5. Para karyawan dan staff Fakultas Teknik (Mas Trie, Pak Jito, Mas Gito), khususnya Jurusan Teknik Informatika (mBak Marni, Mas Danang), terima kasih atas bantuannya, terutama buat pak Dar, terima kasih restunya
6. Bapak, Ibu, dan kakakku tersayang yang telah memberikan perhatian, kasih sayang dan dukungan yang sangat besar kepada penulis
DAFTAR ISI
Halaman
HALAMAN JUDUL INGGRIS ... i
HALAMAN JUDUL... ii
HALAMAN PERSETUJUAN PEMBIMBING ... iii
HALAMAN PENGESAHAN ... iv
HALAMAN PERSEMBAHAN ... v
HALAMAN MOTTO ... vi
INTISARI... vii
ABSTRACT...viii
PERNYATAAN KEASLIAN KARYA ... ix
KATA PENGANTAR ... x
DAFTAR ISI ... xii
DAFTAR TABEL ...xvii
DAFTAR GAMBAR ... xviii
BAB I PENDAHULUAN ... 1
1.1. Perumusan Masalah ... 1
1.2. Rumusan Masalah ... 2
1.3. Batasan Masalah ... 2
1.4. Tujuan Manfaat Penulisan ... 2
1.5. Sistematika Penulisan ... 3
BAB II LANDASAN TEORI ... 4
2.1. Penyandian (Cryptography)... 4
2.2. Enkripsi (Encryption) dan Dekripsi (Decryption)... 5
2.3. Algoritma Kriptografi ... 7
2.4. Kunci ... 11
2.5. Algoritma Blowfish... 12
2.5.1. Pengantar ... 12
2.5.2. Cara Kerja... 14
2.5.3. Keamanan Blowfish ... 16
2.6. Pengenalan Visual Basic ... 17
2.6.1 Struktur Aplikasi Visual Basic 6.0 ... 17
2.6.2 Dasar-dasar Pemrograman Visual Basic 6.0 ... 18
2.6.3 Variabel dan Konstanta ... 19
2.6.4 Operator dalam Visual Basic 6.0... 20
2.6.5 If then Else... 21
2.6.6 Select Case ... 22
2.6.7 For Next... 23
2.6.8 Do Loop... 24
BAB III ANALISA DAN PERANCANGAN ... 26
3.1 Analisa Sistem... 26
3.1.1 Analisa Kebutuhan Sistem Umum ... 26
3.1.2 Analisa Teknologi ... 26
3.1.3 Analisis Algoritma Blowfish...27
3.1.3.1 Algoritma Enkripsi... 27
3.1.3.2 Algoritma Dekripsi... 29
3.1.3.3 Fungsi F... 29
3.1.3.4 Variabel Kunci ... 31
3.1.3.5 Inisialisasi P-array...31
3.1.3.6 Inisialisasi Data ... 32
3.1.3.7 Perputaran Enkripsi ... 33
3.1.3.8 Perputaran Dekripsi... 33
3.2 Perancangan Sistem ... 34
3.2.1 Perancangan Antarmuka Pengguna... 34
3.3.1.1 Diagram Alir Sistem Enkripsi ... 35
3.3.1.2 Diagram Alir Sistem Dekripsi... 36
BAB IV IMPLEMENTASI ... 37
4.1 Enkripsi ... 38
4.1.1 Inisialisasi array P (P-array/subkey) dan kotak substitusi (S-box) ... 38
4.1.2 Inisialisasi kunci (perluasan kunci) ... 39
4.1.3 Baca data asli (Plaintext)... 39
4.1.4 Proses enkripsi... 39
4.1.5 Enkripsi kunci dan simpan di file... 40
4.1.6 Tulis data terenkripsi ... 40
4.2. Dekripsi ... 40
4.2.1 Inisialisasi array P dan kotak substituís... 40
4.2.2 Inisialisasi kunci (perluasan kunci) ... 41
4.2.3 Baca kunci enkripsi yang tersimpan di dalam berkas terenkripsi ... 41
4.2.4 Pengembalian kunci terenkripsi ... 41
4.2.5 Mengambil kunci inisialisasi 56 byte dan mengenkripsinya 42 4.2.6 Hapus kunci yang tersimpan pada berkas terdekripsi ... 42
4.2.7 Dekripsi data dari berkas... 42
4.2.8 Dekripsi kunci ... 43
4.2.9 Dekripsi byte...43
4.2.10 Dekripsi blok ... 44
4.2.11 Tulis data terdekripsi ... 45
4.3. Fungsi-fungsi pendukung program ... 45
4.3.1 Hapus file asal ... 45
4.3.2 Cek file sudah ada atau belem ... 45
4.4.3 Meng-XOR-kan kunci dengan data berkas ... 46
4.4 Implementasi User Interface ... 46
4.4.1 Form Utama (frmMain) ... 47
4.4.2 Form Enkripsi (frmEncrypt)... 47
4.4.3 Form Dekripsi (frmDecrypt) ... 49
4.4.4 Form Phrase (frmPhrase) ... 50
4.5 Help ... 51
4.5.1 Form Help (frmHelp)... 51
4.5.2 Form About (frmAbout)... 52
BAB V ANALISA HASIL ... 53
5.1 Analisa Hasil Perangkat Lunak ... 53
5.1.2 Kekurangan ... 53
5.1.2 Kelebihan... 53
5.2 Analisa Piranti Pengembang (Visual Basic 6.0)... 54
BAB VI KESIMPULAN DAN SARAN ... 55
6.1 Kesimpulan ... 55
6.2 Saran ... 56
DAFTAR PUSTAKA ... 57 LAMPIRAN
DAFTAR TABEL
Halaman
Tabel 2.1 Tipe-tipe Variabel dan Konstanta pada Visual Basic 6.0... 19
Tabel 2.2 Operator Umum pada Visual Basic 6.0... 21
Tabel 2.3 Prioritas Operator Umum pada Visual Basic... 21
Tabel 2.4 Operator Perbandingan pada Visual Basic... 22
Tabel 2.5 Operator Logika pada Visual Basic... 22
DAFTAR GAMBAR
Halaman
Gambar 2.1 Proses Enkripsi/Dekripsi Sederhana... 5
Gambar 2.2 Proses Enkripsi/Dekripsi Kunci Simetris ... 9
Gambar 2.3 Proses Enkripsi/Dekripsi Kunci Publik ... 11
Gambar 3.1 Diagram Alir Enkripsi ... 28
Gambar 3.2 Diagram Alir Dekripsi... 30
Gambar 3.3 Diagram Alir Fungsi F... 31
Gambar 3.4 Form Utama... 34
Gambar 3.5 Form About ... 35
Gambar 3.6 Diagram Alir Sistem Enkripsi ... 35
Gambar 3.7 Diagram Alir Sistem Dekripsi ... 36
Gambar 4.1 Diagram Alir Sistem... 37
Gambar 4.2. Form Utama (frmMain) ... 48
Gambar 4.3 Form Enkripsi (frmEncrypt) ... 49
Gambar 4.4 Pesan pemberitahuan bahwa proses enkripsi telah selesai ... 49
Gambar 4.5 Form Dekripsi (frmDecrypt)... 50
Gambar 4.6 Pesan pemberitahuan bahwa proses dekripsi telah selesai ... 50
Gambar 4.7 Form Phrase (frmPhrase) tanpa input kunci ... 51
Gambar 4.8 Form Phrase (frmPhrase) dengan input kunci dan input konfirmasi sama...51
Gambar 4.9 Pesan kesalahan jumlah masukan kunci ... 52
Gambar 4.10 Pesan masukan kunci yang salah... 52
Gambar 4.11 Form Help Topics (frmHelp)... 53
Gambar 4.12 Form About (frmAbout)... 53
1.1Latar Belakang Masalah
Seiring dengan perkembangan jaman yang diikuti dengan perkembangan teknologi, informasi semakin mudah didapat, diakses dan didistribusikan oleh siapa saja. Terlepas dari fungsi dan tujuan informasi tersebut, keamanan dan keakuratan informasi menjadi hal yang utama dan harus diperhatikan, baik itu oleh perseorangan, terlebih lagi bagi instansi atau intitusi yang tentunya memiliki informasi-informasi yang sifatnya rahasia dan hanya boleh diakses oleh pihak-pihak yang merupakan bagian dari instansi atau intitusi tersebut. Hal ini tentu saja dilakukan untuk mencegah adanya penyalahgunaan informasi yang bisa berupa pemalsuan, pencurian ataupun perubahan informasi.
Untuk mengatasi permasalahan tersebut sebenarnya ada beberapa tindakan yang bisa dilakukan, salah satu diantaranya adalah dengan melakukan teknik penyandian atau cryptography.
Penyandian merupakan teknik untuk menyamarkan atau menyandikan informasi, data atau pesan agar tidak bisa dengan mudah diakses oleh pihak-pihak yang tidak berkepentingan. Bagian dari penyandian itu sendiri sebenarnya ada dua macam, yaitu enkripsi dan dekripsi. Enkripsi adalah proses transformasi informasi atau data ke dalam bentuk yang tidak dapat dibaca orang lain tanpa adanya suatu kunci, sedangkan dekripsi adalah proses tranformasi dari bentuk yang tidak dapat dibaca ke dalam bentuk yang semula.
Dari berbagai metode penyandian yang ada hingga saat ini, salah satunya adalah metode cryptography Blowfish. Metode ini pertama kali ditemukan oleh Bruce Schneier. Blowfish dioptimasikan untuk aplikasi dimana kunci tidak berubah, seperti jalur komunikasi atau enkripsi file otomatis. Blowfish merupakan blok cipher 64-bit dengan panjang kunci variabel. Terdiri dari dua bagian, yaitu key expansion dan enkripsi data. Key expansion merubah kunci yang panjangnya dapat mencapai 448 bit menjadi beberapa array subkunci (subkey) dengan total 4168 byte. Enkripsi data terdiri dari fungsi sederhana yang diiterasikan sebanyak 16 kali. Semua operasi yang terjadi adalah penambahan dan XOR pada variabel 32-bit.
1.2Rumusan Masalah
Dari uraian tersebut di atas, rumusan masalah pada tugas akhir ini adalah “Bagaimana membuat perangkat lunak untuk mengimplementasikan enkripsi dan dekripsi file dengan metode Blowfish?”
1.3 Batasan Masalah
Mengingat banyaknya permasalahan yang berhubungan dengan enkripsi dan deskripsi data, maka penulis membuat batasan masalah sebagai berikut: a. Program dibuat untuk pemakaian single user.
b. Uji coba hanya pada berkas dokumen teks berekstensi *.txt. 1.4Tujuan dan Manfaat Penulisan
1.5Sistematika Penulisan
Pembahasan keseluruhan tugas akhir ini dibagi menjadi lima bab, yaitu:
BAB I PENDAHULUAN
Berisi pendahuluan, latar belakang masalah, rumusan masalah, batasan masalah, tujuan, manfaat, dan sistematika penulisan. BAB II LANDASAN TEORI
Berisi landasan teori yang dipakai untuk pembahasan penulisan tugas akhir.
BAB III PERANCANGAN
Membahas tentang gambaran perancangan sistem aplikasi yang dibuat dan bagaimana pengujian serta validasi model dilakukan sebelum implementasi dan pada saat implementasi.
BAB IV IMPLEMENTASI
Berisi implementasi dari rancangan sistem yang dibuat pada bab sebelumnya serta implementasi desain ke dalam bahasa pemrograman yang sesungguhnya.
BAB V ANALISA HASIL
Berisi analisis kerja program yang telah dibangun, kelebihan dan kekurangannya.
BAB VI KESIMPULAN DAN SARAN
2.1Penyandian (Cryptography)
Kriptografi berasal dari bahasa Yunani crypto dan graphia yang berarti penulisan rahasia. Kriptografi salah satu cabang dari kriptologi, ilmu yang mempelajari tentang keamanan komunikasi, yang menggunakan persamaan matematis dalam prosesnya. Tujuannya untuk menjaga kerahasiaan (confidentially) dan keaslian (authentication) informasi.
Dalam menjaga kerahasiaan data, kriptografi mentransformasikan data jelas (plaintext) ke dalam bentuk data sandi (ciphertext) yang tidak dapat dikenali.
Ciphertext inilah yang kemudian dikirimkan oleh pengirim (sender) kepada
penerima (receiver). Setelah sampai pada penerima, ciphertext tersebut ditransformasikan kembali ke dalam bentuk plaintext agar dapat dikenali.
Beberapa terminologi dasar dari kriptografi serta hal-hal yang berkaitan dengan terminologi-terminologi tersebut, yaitu:
1. Kriptografi dapat digunakan untuk meningkatkan keamanan komunikasi meskipun komunikasi tersebut dilakukan melalui media komunikasi yang sangat tidak aman (misalnya Internet). Kita juga dapat menggunakan kriptografi untuk melakukan enkripsi file-file sensitif kita, sehingga orang lain tidak dapat mengartikan data-data yang ada.
2. Kriptografi dapat digunakan untuk memberikan jaminan integritas data serta menjaga kerahasiaan.
3. Dengan menggunakan kriptografi, maka sangat mungkin untuk me-verifikasi asal data dan pesan.
4. Pada saat menggunakan metoda kriptografi, hanya kunci sesi yang harus tetap dijaga kerahasiaannya, sedangkan algoritma, ukuran kunci dan format file dapat dibaca oleh siapapun tanpa mempengaruhi keamanan.
Dua operasi dasar kriptografi adalah enkripsi (dekripsi sebagai proses kebalikannya) dan signing (verifikasi signature sebagai proses kebalikannya). 2.2 Enkripsi (Encryption) dan Dekripsi (Decryption)
Proses tranformasi dari plaintext menjadi ciphertext disebut proses encipherment atau enkripsi (encryption), sedangkan proses mentransformasikan kembali ciphertext menjadi plaintext disebut proses dekripsi (decryption). Untuk mengenkripsi dan mendekripsi data kriptografi menggunakan suatu algoritma (cipher) dan kunci (key).
Secara sederhana istilah-istilah di atas dapat digambarkan sebagai berikut :
Gambar 2.1 Proses Enkripsi/Dekripsi Sederhana
Enkripsi Dekripsi
Plaintext Plaintext Plaintext
Cryptographer merupakan pelaku yang melakukan pengamanan terhadap
suatu pesan; sedangkan cryptanalysis adalah suatu ilmu dan seni membuka (breaking) ciphertext dan orang yang melakukannya disebut cryptanalyst.
disebut suatu set kunci. Proses enkripsi dan dekripsi diatur oleh satu atau beberapa kunci kriptografi. Secara umum, kunci-kunci yang digunakan untuk proses pengenkripsian dan pendekripsian tidak perlu identik, tergantung pada sistem yang digunakan.
Terdapat beberapa alasan penggunaan kriptografi dalam sistem komunikasi, yaitu sebagai berikut::
1. Confidentiality
Merupakan suatu layanan yang digunakan untuk memberikan kerahasiaan pesan dan menyimpan data dengan menyembunyikan informasi dengan teknik-teknik enkripsi.
2. Message Integrity
Adalah sebuah layanan yang memberi jaminan bahwa pesan tidak akan mengalami perubahan dari saat pesan tersebut dibuat sampai pada saat data tersebut dibuka. Untuk menjamin integritas data, diperlukan mekanisme untuk mencegah adanya manipulasi data oleh pihak yang tidak berhak. Hal-hal yang termasuk ke dalam manipulasi data adalah penyisipan, penghapusan dan perubahan data.
3. Non Repudiation
Sebaliknya si penerima pesan juga dapat membuktikan bahwa pesan yang diterima merupakan pesan yang dikirim oleh si pengirim pesan.
4. Authentication
Merupakan suatu proses untuk membuktikan dan menguji suatu informasi tertentu. Juga digunakan untuk memeriksa suatu dokumen, memeriksa identitas dari seorang pengirim pesan, memeriksa tanggal dan waktu kapan suatu data dikirim, serta untuk memeriksa identitas pengguna sebuah komputer dan sebagainya.
Tiga syarat utama yang harus dipenuhi oleh suatu cryptosystem yang baik, yaitu:
1. Proses enkripsi dan dekripsi harus efisien untuk semua penggunaan kunci. 2. Penggunaan kriptosistem tersebut harus mudah.
3. Keamanan dari suatu kriptosistem tergantung pada keamanan dari kunci yang dipakai, bukannya dari algoritma yang digunakan untuk enkripsi atau dekripsi (Purba, 2001).
2.3 Algoritma Kriptografi
Cipher adalah fungsi matematika yang digunakan untuk mengenkripsi
dan mendekripsi. Sedangkan kunci merupakan sederetan bit yang diperlukan untuk mengenkripsi dan mendekripsi data.
paling mendasar. Dengan kunci itulah seseorang dapat melakukan proses enkripsi dan dekripsi.
Algoritma kriptografi terdiri dari algoritma enkripsi (E) dan algoritma dekripsi (D). Algoritma enkripsi menggunakan kunci enkripsi (KE), sedangkan algoritma dekripsi menggunakan kunci dekripsi (KD). Secara umum operasi enkripsi dan dekripsi dapat diterangkan secara matematis sebagai berikut :
KE (M) = C (Proses Enkripsi) KD (C) = M (Proses Dekripsi)
Pada saat proses enkripsi kita menyandikan pesan M dengan suatu kunci K lalu dihasilkan pesan C. Sedangkan pada proses dekripsi, pesan C tersebut diuraikan dengan menggunakan kunci K sehingga dihasilkan pesan M yang sama seperti pesan sebelumnya.
Dengan demikian keamanan suatu pesan tergantung pada kunci ataupun kunci-kunci yang digunakan, dan tidak tergantung pada algoritma yang digunakan. Sehingga algoritma-algoritma yang digunakan tersebut dapat dipublikasikan dan dianalisis, serta produk-produk yang menggunakan algoritma tersebut dapat diproduksi massal. Tidaklah menjadi masalah apabila seseorang mengetahui algoritma yang kita gunakan. Selama ia tidak mengetahui kunci yang dipakai, ia tetap tidak dapat membaca pesan.
a. Symmetric Algorithms
Algoritma kriptografi simetris atau disebut juga algoritma kriptografi konvensional merupakan algoritma yang menggunakan kunci untuk proses enkripsi sama dengan kunci untuk proses dekripsi. Algoritma ini merupakan algoritma yang paling umum dan paling tua.
Kunci yang dipakai sering berubah-ubah, oleh sebab itu kunci yang dipakai sering disebut sebagai session key, yaitu kunci yang dipakai hanya pada satu sesi proses enkripsi. Algoritma ini termasuk sangat cepat bila dibandingkan dengan algoritma kunci publik/asimetrik sehingga sangat cocok dipakai untuk melakukan enkripsi data yang sangat besar.
Algoritma kriptografi simetris dibagi menjadi 2 kategori yaitu algoritma aliran (Stream Ciphers) dan algoritma blok (Block Ciphers). Pada algoritma aliran, proses penyandiannya berorientasi pada satu bit atau satu byte data. Sedang pada algoritma blok, proses penyandiannya berorientasi pada sekumpulan bit atau byte data (per blok). Algoritma kunci simetris yang terkenal adalah RC4 dan DES (Data Encryption Standard).
Enkripsi Dekripsi
Plaintext Plaintext Plaintext
Kunci Kunci
Gambar 2.2 Proses Enkripsi/Dekripsi Kunci Simetris b. Asymmetric Algorithms
juga algoritma kunci umum (public key algorithm) karena kunci untuk enkripsi dibuat umum (public key) atau dapat diketahui oleh setiap orang, tapi kunci untuk dekripsi hanya diketahui oleh orang yang berwenang mengetahui data yang disandikan atau sering disebut kunci pribadi (private key). Algoritma ini bekerja berdasarkan fungsi satu arah, dengan fungsi yang mudah untuk dikalkulasi akan tetapi sangat sulit untuk dibalik/invers atau reverse tanpa adanya informasi yang detil. Algoritma ini menggunakan fungsi-fungsi asimetrik untuk membuat fungsi satu arah, yaitu suatu kunci dimana dapat dengan mudah dilakukan satu operasi (enkripsi atau verifikasi tanda/sign) akan tetapi sangat sulit untuk menginvers operasi (dekripsi atau membuat tanda/sign) tanpa adanya informasi yang selengkap-lengkapnya.
Algoritma kunci publik dilakukan dengan menggabungkan secara kriptografi dua buah kunci yang berhubungan yang disebut sebagai pasangan kunci publik dan kunci privat. Kedua kunci tersebut dibuat pada waktu yang bersamaan dan berhubungan secara matematis. Secara matematis, kunci privat dibutuhkan untuk melakukan operasi invers terhadap kunci publik dan kunci publik dibutuhkan untuk melakukan operasi invers terhadap operasi yang dilakukan oleh kunci publik.
juga diperoleh fungsi dari satu ke banyak, yaitu pada saat orang yang memegang kunci privat melakukan operasi enkripsi maka semua orang yang memiliki kunci publik dapat melakukan invers terhadap data hasil enkripsi tersebut. Contoh algoritma terkenal yang menggunakan kunci asimetris adalah RSA dan ECC.
Gambar 2. 3 Proses Enkripsi/Dekripsi Kunci Publik
Enkripsi Dekripsi
Plaintext Plaintext
Kunci Umum Kunci Pribadi
Plaintext
2.4 Kunci (key)
Kunci merupakan nilai yang sangat spesifik dan bekerja dengan algoritma kriptografi untuk menghasilkan teks terenkripsi yang spesifik pula. Kunci merupakan bagian terkecil yang paling mendasar. Ukuran kunci diwujudkan dalam bentuk bit. Dengan kunci itulah seseorang dapat melakukan proses enkripsi dan dekripsi.
Dalam konsep kriptografi kunci publik, semakin besar nilai kunci tersebut, semakin aman pula teks terenkripsi. Tetapi dengan syarat, perbandingannya dengan algoritma yang sama, karena algoritma konvensional dan kunci publik memiliki algoritma yang benar-benar berbeda.
2.5Algoritma Blowfish 2.5.1 Pengantar
Blowfish merupakan metode yang mirip dengan DES (DES-like cipher) dan diciptakan oleh Bruce Schneier pada tahun 1993 yang ditujukan untuk mikroposesor besar (32 bits ke atas dengan cache data yang besar).
Blowfish menggantikan DES dengan ukuran 64 bits blok dengan panjang kunci yang variabel yaitu sampai 448 bytes (Scheneier, 1994). Walupun sama dengan DES dalam hal ukuran bloknya, yaitu 64 bits, tetapi Blowfish memiliki kunci variabel 8 bits, dari 40 sampai dengan 448 bits (56 bytes). Selama proses inisialisasi, dengan mengabaikan panjang data, suatu kunci akan bekerja penuh pada struktur internal dari 4.168 bytes. Nilai setup mahal, karena memiliki sel iterasi dari enkripsi untuk menghasilkan suatu penjadwalan kunci. Tapi kunci itu sendiri tidak berpengaruh pada kinerja Blowfish itu sendiri. Dengan kata lain, kecepatan pada kunci 448 bit adalah sama dengan kunci 56 bit. Hal ini memungkinkan kunci untuk disimpan dalam media penyimpanan yang benar-benar aman, dan dibutuhkan suatu protokol khusus dalam kinerjanya. Inisialisasi kunci dapat dihindari dengan menspesifikasikan kunci secara langsung setelah kunci tersebut terbentuk (tentunya dengan menyimpan kunci 4168 bytes dari paling banyak 56 bytes harus disimpan).
Struktur secara keseluruhan tidak jauh berbeda dengan DES. Array subkunci delapan belas 32-bit subkunci (DES enam belas 48-bit subkunci). Ada 4 S-boxes, yang masing-masing panjangnya 256 entry (DES 4 S-boxes dengan 64
entry). Perbedaan mendasar adalah, pada Blowfish secara dinamis membentuk
Dalam Blowfish, semua data adalah rangkaian angka 32 dan 8 bits, yang dirancang untuk bisa bekerja pada sistem dengan jumlah dan pertukaran bit eksternal yang minimal. Hal ini menjadikan Blowfish sebagai algoritma kriptografi yang cepat. Blowfish dianggap algoritma yang paling kuat dan diterima saat ini. Algoritma ini bisa dimasuki lusinan produk-produk bebas dan terbatas. Belum ada kesalahan yang cukup berarti dari algoritma ini. Dengan pengurangan putaran (standarnya adalah 16 putaran), secara harafiah 1 kunci dari214 sangatlah lemah (Vav, 1996). Kelemahan ini memungkinkan pihak-pihak penyerang mengetahui apakah suatu kunci lemah tersebut terpakai atau tidak, tetapi tidak akan diketahui kunci tersebut secara spesifik(and it also allows some other more
abstract attacks). Kunci lemah muncul karena secara dinamis Blowfish
membentuk S-boxes yang pada beberapa kasus Blowfish akan menghasilkan beberapa perilaku buruk ketika beberapa nilaiS-boxes digandakan. Tidak ada cara untuk mengetahui kunci mana yang lemah, selain dilakukan suatu iterasi dan kemudian melihat nilai dari S-boxes untuk dapat mengetahuinya. Hingga saat ini, belum ditemukan kunci lemah pada proses dengan 16 putaran penuh.
Blowfish dioptimasikan untuk aplikasi dimana kunci tidak sering
2.5.2 Cara Kerja
Blowfish merupakan blok cipher 64-bits dengan panjang kunci variabel. Algoritma ini terdiri dari dua bagian: key expansion dan enkripsi data. Key expansion merubah kunci yang dapat mencapai 448 bits menjadi beberapa array subkunci (subkey) dengan total 4168 bytes.
Enkripsi data terdiri dari iterasi fungsi sederhana sebanyak 16 kali. Setiap putaran terdiri dari permutasi kunci-dependent dan substitusi kunci dan
data-dependent. Semua operasi adalah penambahan dan XOR pada variable 32-bits.
Tambahan operasi lainnya hanyalah empat penelusuran tabel (table lookup) array berindeks untuk setiap putaran.
Blowfish menggunakan subkunci yang besar. Kunci ini harus dihitung sebelum enkripsi atau dekripsi data.
Array P terdiri dari delapan belas 32-bits subkunci: P1, P2, . . . , P18
Empat 32-bits S-box masing-masing mempunyai 256 entri: S1, 0, S1, 1, . . . , S1, 255
S2, 0, S1, 1, . . . , S2, 255 S3, 0, S1, 1, . . . , S3, 255 S4, 0, S1, 1, . . . , S4, 255
Algoritma untuk mengenkrip:
Langkah 0 : bagi X menjadi dua 32-bits: XL XR Langkah 1 : untuk i = 1 sampai 16
XL = XL xor Pi
XR = F(XL) xor XR
tukar XL dan XR
Langkah 2 : tukar XL dan XR (batalkan penukaran terakhir) Langkah 3 : XR = XR xor P17
Langkah 4 : XL = XL xor P18
Langkah 5 : kombinasikan kembali XL dan XR
Fungsi F adalah: bagi XL menjadi empat bagian 8-bits: a, b, c dan d F(XL) = ((S1, a + S2, b mod 232) xor S3, c) + S4,c mod 232
Dekripsi sama persis dengan enkripsi, kecuali P1, P2, . . . , P18 digunakan pada urutan yang terbalik.
Subkunci dihitung dengan menggunakan algoritma Blowfish, metodenya adalah sebagai berikut:
1. Pertama-tama inisialisasi P-array dan kemudian empat S-box secara berurutan dengan string yang tetap. String ini terdiri digit heksadesimal dari Pi.
2. XOR P1 dengan 32 bits pertama kunci, XOR P2 dengan 32 bits kedua dari kunci dan seterusnya untuk setiap bit dari kunci (sampai P18). Ulangi terhadap
bit kunci sampai seluruh P-array di XOR dengan bit kunci.
4. Ganti P1 dan P2 dengan keluaran dari langkah (3).
5. Enkrip keluaran dari langkah (3) dengan algoritma Blowfish dengan subkunci yang sudah dimodifikasi.
6. Ganti P3 dan P4 dengan keluaran dari langkah (5).
7. Lanjutkan proses tersebut, ganti seluruh elemen dari P-array, dan kemudian keempat S-box secara berurutan, dengan keluaran yang berubah secara kontinyu dari algoritma Blowfish.
Total diperlukan 521 iterasi untuk menghasilkan semua subkunci yang dibutuhkan. Aplikasi kemudian dapat menyimpan subkunci ini dan tidak dibutuhkan langkah-langkah proses penurunan ini berulang kali, kecuali kunci yang digunakan berubah.
2.5.3 Keamanan Blowfish
Tidak ada kelemahan yang berarti dari algoritma Blowfish yang dapat ditemukan sampai saat ini, kecuali ada weak key, dimana dua entri dari S-box mempunyai nilai yang sama. Tidak ada cara untuk mencek weak key sebelum melakukan key expansion. Bila dikuatirkan hal ini dapat mengurangi keamanannya maka dapat dibuat rutin untuk mengecek entri S-box, walaupun hal ini tidak perlu.
2.6 Pengenalan Visual Basic 6.0
Visual Basic merupakan bahasa pemrograman visual berbasis grafis
(GUI-Graphical User Interface). Visual Basic 6.0 merupakan pemrograman
event-drivenprogramming yang berarti program menunggu respon dari pengguna
yang dapat berupa kejadian (event) tertentu, seperti penekanan tombol mouse, pemilihan menu, dan lain sebagainya. Ketika suatu event terdeteksi, kode yang berhubungan dengan event (event procedure) tersebut akan dipanggil dan dijalankan. Visual Basic 6.0 juga termasuk bahasa pemrograman Object Oriented
Programming (OOP) atau bahasa pemrograman yang berorientasi obyek.
Penulisan kode program dalam Visual Basic 6.0 tidak tergantung pada penggunaan huruf besar maupun huruf kecil.
2.6.1 Struktur Aplikasi Visual Basic 6.0
Aplikasi pada Visual Basic 6.0 terdiri atas bagian-bagian ini:
a. Form, yaitu sebuah bidang untuk mendisain dan meletakkan objek-objek rangkaian perintah-perintah/user interface yang akan dikerjakan oleh aplikasi. b. Control, tampilan grafis pada form untuk interaksi dengan pemakai (text box,
label box, scroll bar, command button).
c. Properties, variabel atau predikat yang dimiliki sebuah obyek Visual Basic (Form dan Control). Contoh: Name, Caption, Size, Color, Position dan Text.
d. Method, serangkaian perintah yang tersedia pada suatu objek untuk
mengerjakan tugas khusus sesuai dengan tujuan method.
e. Event Procedure, kode yang berhubungan obyek. Kode ini akan dieksekusi
f. General Procedure, kode-kode yang tidak berhubungan langsung dengan obyek.
g. Modules, kumpulan dari prosedur-prosedur umum (general procedure),
deklarasi variabel dan definisi konstanta yang digunakan oleh aplikasi. i. Project (.vbp, .mak)
2.6.2 Dasar-dasar Pemrograman Visual Basic 6.0 2.6.2.1 Variabel dan Konstanta
Tabel 2.1 Tipe-tipe Variabel dan Konstanta pada Visual Basic 6.0
Tipe Data Ukuran Kisaran/Batasan Akhiran
Byte 1 byte 0 sampai 255 Tidak Ada
floating point) 4 bytes
3.402823E38 sampai -1.401298E-45 (untuk nilai
negatif ); 1.401298E-45 sampai 3.402823E38 (untuk nilai
positif)
!
Double-precision 8 bytes
-1.79769313486232D308 string ( variable-length); sepanjang string (fixed-length)
0 sampai dua milyar (untuk variable-length); 1 sampai 65.400 (untuk
fixed-length)
$
Date 8 bytes
1 January 100 sampai 31 December 9999
Tidak ada
Object 4 bytes Semua referensi objek Tidak ada
Variant
Setiap elemen sama batasannya dengan jenis
datanya
Tidak ada
Syarat-syarat atau aturan pemberian nama suatu variabel dan konstanta dalam Visual Basic adalah:
b. Terdiri atas huruf, angka dan underscore ( _ ). c. Karakter pertama harus sebuah huruf.
d. Tidak boleh memakai kata-kata yang sudah didefinisikan oleh Visual Basic atau reserved word.
Deklarasi variabel pada Visual Basic 6.0 dapat digantikan dengan menambahkan suatu karakter tertentu di akhir nama variabelnya. Sehingga pendeklarasian tipe data seuatu variabel di bawah iniadalah sama:
• Dim I as integer
• Dim I%
Pada Visual Basic 6.0 dimungkinkan pengguna untuk membuat sendiri suatu tipe data. Hal ini berguna dalam pengelompokkan data-data yang terbagi menjadi beberapa kategori. Untuk pembuatan tipe data tersebut digunakan perintah “Type”.
Contoh pemakaian perintah ”Type” dalam suatu penulisan program: Type Employee
Name As String
DateOfBirth As Date
HireDate As Date
End Type
Type data yang berkelompok tersebut digunakan dengan cara: Dim ProductManager As Employee
ProductManager.Name = “Erick Cody” ProductManager.DateOfBirth = #3-6-1970# ProductManager.HireDate = #8-1-2001#
diubah selama program berjalan. Contoh pendeklarasian konstanta adalah sebagai berikut:
• Const Dim I As Integer
• Const I = 100
2.6.2.2 Operator dalam Visual Basic 6.0
Operator umum yang tersedia dalam Visual Basic 6.0 adalah:
Operator Kegunaan Contoh
+ Penambahan 10 + 8 = 18
- Pengurangan 10 – 8 = 2
* Perkalian 10 * 8 = 80
/ Pembagian 10 / 8 = 1.25
\ Pembagian integer (angka bulat) 10 \ 8 = 1
mod Sisa pembagian 10 mod 8 = 2
^ Pangkat 10 ^ 2 = 100
& Menggabungkan string “Hello” & “World” = “Hello Word”
Tabel 2.2 Operator Umum pada Visual Basic 6.0
Dalam penulisan operator matematis, urutan dalam penulisannya harus diperhatikan, terutama pada saat harus menggunakan banyak operator matematis pada sebuah baris perintah. Urutan-urutan penulisan dan eksekusi dari operator-operator tersebut dapat dilihat pada tabel di bawah ini.
Prioritas Operator
1 ( )
2 ^ 3 -
4 * dan /
5 \ 6 mod
7 + dan -
Tabel 2.3 Prioritas Operator Umum pada Visual Basic
Operator-operator lain yang juga dipakai pada pemrograman Visual Basic adalah operator perbandingan (Tabel 2.4) dan operator logika (Tabel 2.5).
Operator Arti Contoh
= Sama dengan 10 = 10 adalah True
<> Tidak sama dengan 10 <> 10 adalah False > Lebih kecil dari 10 > 10 adalah False < Lebih besar dari 10 < 10 adalah False >= Lebih besar dari atau sama dengan 10 >= 10 adalah True <= Lebih kecil dari atau sama dengan 10 <= 10 adalah True
Tabel 2.4 Operator Perbandingan pada Visual Basic
Operator Keterangan
AND
Jika kedua ekspresi bernilai True, hasilnya adalah True. Jika salah satu tidak bernilai True, hasilnya adalah False.
OR Jika salah satu atau kedua ekspresi bernilai True, hasilnya adalah True.
NOT Merupakan negasi/kebalikan dari
operator sebelumnya.
XOR
Jika salah satu bernilai True, maka hasilnya adalah True. Jika kedua ekspresi bernilai True atau False semua maka hasilnya adalah False Tabel 2.5 Operator Logika pada Visual Basic
Operator-operator tersebut memiliki otoritas pada saat digunakan secara bersamaan pada suatu ekspresi yang cukup kompleks. Visual Basic akan menguji tiap-tiap operator matematis terlebih dahulu, kemudian baru menguji operator perbandingan, setelah itu baru operator logika pada urutan yang paling akhir. 2.6.2.3 If then Else
Kondisi yang diperlukan oleh perintah ini adalah kondisi benar (True) atau kondisi salah (False). Dan untuk memperoleh kondisi tersebut adalah dengan memakai operator-operator perbandingan, dan untuk menggabungkan beberapa kondisi sekaligus dalam suatu percabangan dengan menggunakan operator logika. Format dasar penulisan perintah ini adalah;
If (condition) then (statement1) Else
(statement2) End If
Condition adalah bagian yang menentukan pengambilan keputusan.
Jika Condition bernilai True maka statement1 akan dijalankan, dan sebaliknya bila condition bernilai False maka statement2 yang akan dieksekusi.
Perintah Else tidak harus mengikuti perintah If. Perintah Else digunakan bila ada statement dengan condition yang bernilai False.
Contoh penggunaan struktur If-Else adalah: Dim X As Integer
X = 1000
If X > 100 Then
Print “X lebih dari 100” Else
Print “X kurang dari atau sama dengan 100”
End If
2.6.2.4 Select Case
Perintah ini digunakan untuk percabangan dalam pemrograman. Percabangan dengan perintah ini sedikit berbeda dengan perintah If. Dengan
tidak dapat melakukan pemeriksaan terhadap banyak kondisi yang berbeda sekaligus karena perintah ini hanya memeriksa kondisi sebuah ekspresi.
2.6.2.5 For Next
Struktur ini digunakan untuk mengulang blok perintah dalam jumlah yang sudah ditentukan. Pada struktur ini, yang perlu dituliskan adalah nilai awal dan akhir variabel penghitung. Nilai variabel penghitung ini akan secara otomatis bertambah atau berkurang setiap kali suatu perulangan dikerjakan. Format perintah ini adalah:
For counter = awal To akhir Step pertambahan (statemen yang ingin diulang)
next counter
Proses pengulangan diwakili dengan suatu variabel awal dan akhir. Awal adalah nilai suatu variabel integer untuk menentukan harga awal suatu
perulangan. Akhir adalah nilai suatu variabel integer untuk menentukan harga
akhir suatu perulangan. Pertambahan adalah besarnya nilai perubahan dari nilai awal sampai nilai akhir, sedangkan ekspresi merupakan suatu blok perintah yang akan dikerjakan jika kondisi dari proses perulangan memenuhi syarat.
2.6.2.6 Do Loop
Perintah ini juga dapat untuk membuat suatu perulangan dalam program. Namun perintah ini menggunakan suatu pemeriksaan terhadap suatu kondisi untuk menentukan suatu perulangan dihentikan.
Atau
Do
(Statemen yang ingin diulang) Loop [While/Until] (Condition)
Perintah while/until dapat diletakkan di akhir perintah atau di awal
perintah. Jika while/until diletakkan di awal, maka sebelum melakukan perulangan yang pertama, program akan melakukan pemeriksaan kondisi terlebih dahulu. Jika kondisi terpenuhi, maka perulangan dapat dilakukan. Kemudian dilakukan pemeriksaan lagi sebelum melakukan perulangan berikutnya. Dengan cara ini dimungkinkan untuk tidak terjadi perulangan sama sekali karena kondisinya tidak terpenuhi pada pemeriksaan pertamanya.
Namun jika perintah while/until diletakkan di akhir perintah, maka perulangan akan dilakukan terlebih dahulu sebelum pemeriksaan dilakukan. Sehingga paling tidak akan terjadi sebuah perulangan. Perulangan berikutnya akan dilakukan bila kondisinya terpenuhi.
3.1 Analisa Sistem
3.1.1 Analisa Kebutuhan Sistem Umum
Dalam sistem enkripsi berkas dengan metode Blowfish fasilitas yang dibutuhkan oleh user untuk dapat berinteraksi dengan sistem adalah:
- Input BoxKunci : untuk memasukkan kata kunci untuk
melakukan enkripsi maupun dekripsi.
- Input Box Konfirmasi kunci : untuk memasukkan kembali kunci yang sama
untuk memastikan kunci yang dimasukkan sama.
- Tombol Enkripsi : tombol untuk melakukan proses enkripsi berkas terpilih yang bukan merupakan berkas terenkripsi.
- Tombol Dekripsi : tombol untuk melakukan proses dekripsi berkas terpilih yang telah terenkripsi.
- Tombol Browse : tombol untuk membuka kotak dialog Open untuk mencari berkas.
3.1.2 Analisa Teknologi
Perangkat keras (hardware) dan perangkat lunak (software) yang dipakai dalam pengembangan sistem ini adalah:
a. Hardware
- Prosessor : Pentium IV 1,6 GHz
- Harddisk : 80 GB
- Memory : 128 MB
b. Software
- Bahasa Pemrograman : Microsoft Visual Basic 6.0
- Sistem Operasi : Microsoft Windows® XP Professional service pack 2
3.1.3 Analisis Algoritma Blowfish
3.1.3.1 Algoritma Enkripsi
Blowfish merupakan algoritma yang terdiri dari 16 putaran. Kunci yang dimasukkan terdiri dari 64 bit. Kunci ini akan dibagi menjadi 32 bit blok kiri dan 32 bit blok kanan. Untuk setiap putaran, 32 bit kunci blok kiri akan di-XOR-kan dengan elemen pertama dari P-array (P1 sampai dengan P18). Hasil adalah P’, dan akan dikenakan fungsi F yang selanjutnya akan di-XOR-kan dengan 32 bit kunci blok kanan, disebut F’. Selanjutnya 32 bit blok kiri yang telah di-XOR-kan dengan P’ ditukar dengan 32 bit blok kanan yang telah di-XOR-kan dengan P’ yang telah dikenakan fungsi F (F’), proses ini akan dilakukan sampai pada P-array yang ke-16. P16’ akan di-XOR dengan P17 sedangkan P16’ akan di-XOR dengan P18, kemudian hasilnya akan digabung kembali sehingga menghasilkan
ciphertext 64 bit.
Mulai
Inisialisasi array P
Inisialisasi Data
Masukkan data Plaintext (x)
Masukkan Kunci (k)
Ya Tidak
xL = xL XOR Pi xR = F(xL) XOR xR
Tukar xL dengan xR i = i + 1
i = 16 xL = x(1:32) xR = x(33:64)
i = 1
Tukar xLdengan xR
xL= xL XORP18 xL= xR XOR P17
Selesai Ciphertext =xL, xR
3.1.3.2 Algoritma Dekripsi
Untuk algoritma dekripsi aturan yang digunakan sama seperti enkripsi hanya saja P1, P2, …, P18 digunakan secara terbalik. 64 bit ciphertext dibagi menjadi 2 bagian yang terdiri dari 31 bit blok kiri dan 32 bit blok kanan. 32 bit kiri akan di-XOR dengan P18 dan mengahasilkan 32 bit P18’. P18’ akan dikenakan fungsi F dan akan di-XOR-kan dengan 32 bit blok kanan. Pengulangan ini akan terus dilakukan sebanyak 16 kali. Setelah 16 kali perulangan tersebut akan dilanjutkan proses dimana P3 akan di-XOR-kan dengan 32 bit blok kanan dengan hasil P3’. P3’ dikenakan fungsi F dan kemudian di-XOR-kan dengan 32 bit kiri . Hasil dari proses ini adalah F’. P3’ akan di-XOR dengan P1 yang mengahasilkan P1’, sedangkan F’ akan di-XOR dengan P2 dengan hasil P2’. Selanjutnya P1’ dan P2’ digabung dan menghasilkan 64 bitplaintext. Diagram alirnya dapat dijabarkan pada gambar 3.2.
3.1.3.3 Fungsi F
Blowfish menggunakan fungsi F, yaitu fungsi yang dikenakan pada saat
menghitung nilai XR. Dalam fungsi F terdapat 4 buah S-boxes dimana setiap
S-boxes mempunyai 256 masukan yang berukuran 32 bit. Cara menghitung fungsi F menggunakan persamaan:
F(XL) = ((S1, a + S2, b mod 232) XOR S3, c ) + S4, d mod 232
Mulai
Inisialisasi P array
Inisialisasi Data
Masukkan data Ciphertext (x)
Masukkan Kunci (k)
xL = x(1:32) xR =x(33:64)
i = 16
Ya Tidak
xL = xL XOR Pi xR = F(xL) XOR xR
Tukar xL dengan xR i = i - 1
i = 3
Tukar xLdengan xR
xL= xL XORP2 xR= xR XOR P1
Selesai Ciphertext = xL, xR
F(xL) = ((S1, a + S2, b mod 232) XOR S3, c) + S4, d mod 232)) a = xL (1:8)
b = xL (9:16) c = xL (17:24) d = xL (25:32)
Mulai
Selesai
Gambar 3.3 Diagram Alir Fungsi F 3.1.3.4 Variabel Kunci
Blowfish menggunakan kunci yang bertipe string yang panjangnya bisa mencapai 56 karakter yang disimpan ke dalam suatu variabel kunci (K). Variabel kunci tersebut disebarkan ke dalam array dari K1 sampai dengan K14. Masing-masing dari K tersebut merupakan data berjumlah 32 bit. Variabel kunci ini selanjutnya akan digunakan pada saat inisialisasi P-array.
3.1.3.5 Inisialisasi P-array
Algoritma Blowfish menggunakan konstanta P-array dan S-boxes. Konstanta P-array ini berjumlah sebanyak 18 yang masing-masing berukuruan 32 bit. Kemudian terdapat 4 buah konstanta S-boxes yang terdiri dari 256 masukan dimana tiap masukan berukuran 32 bit. Konstanta P-array ini digunakan untuk memperkuat keamnan dari data dengan cara operasi XOR dengan kunci.
P-array diinisialisasi dengan cara 18 konstanta P-array dikenakan
berukuran 32 bit. Proses XOR akan dilakukan pada 14 P-array yang pertama dengan 14 kunci. Dimulai dari P1 di-XOR dengan K1 dan seterusnya sampai P14 di-XOR dengan K14 seperti algoritma berikut:
P1 = P1 XOR K1
P2 = P2 XOR K2
.
.
.
P14 = P14 XOR K14
Proses selanjutnya adalah, P-array dari P15 dikenakan operasi XOR dengan K1 kembali. Proses ini dapat dilihat pada algoritma dibawah.
P15 = P15 XOR K1
.
.
.
P18 = P18 XOR K4
3.1.3.6 Inisialisasi Data
3.1.3.7 Perputaran Enkripsi
Pada enkripsi blowfish, data yang sudah dimasukkan, dalam hal ini adalah data yang ada dalam suatu berkas, akan dibagi ke dalam blok-blok yang masing-masing bernilai 64 bit. Selanjutnya blok tersebut dibagi ke dalam XL dan
XR. XL dan XR tersebut akan diproses dimana XL di-XOR-kan dengan P1
menghasilkan XL1 dan XR di-XOR-kan dengan XL1 yang telah dikenakan fungsi F
dan menghasilkan XR1. Langkah ini dilakukan sampai pada XL dan XR ke-16.
Selanjutnya XL16 di-XOR-kan dengan P18 dan XR16 di-XOR-kan dengan P17.
for i = 1 to 16 do
XL[i] = XL[i] XOR P[i]
XR[i] = F(XL[i]) XOR XR[i]
XL[16} = XL[16] XOR P[18]
XR[16] = XR[16] XOR P[17]
3.1.3.8 Perputaran Dekripsi
Untuk dekripsi blowfish, sama seperti pada enkripsi hanya langkahnya dibalik. Untuk XL1 di-XOR-kan dengan P18 dan XR1 dikenakan operasi XOR
dengan XL yang sudah dikenakan fungsi F. Langkah ini dilakukan sampai pada XL
dan XR ke-16. Selanjutnya XL16 di-XOR-kan dengan P1 dan XR16 di-XOR-kan
dengan P2.
for i = 1 to 16 do
XL[i] = XL[i] XOR P[19-i]
XR[i] = F(XL[i]) XOR XR[i]
XL[17} = XL[16] XOR P[1]
3.2 Perancangan Sistem
3.2.1 Perancangan Antarmuka Pengguna a Perancangan Tampilan Utama
Form ini akan terbuka saat program aplikasi ini dijalankan. Segala operasi sistem terdapat di dalamnya. Apabila pada saat pencarian file yang kemudian dipilih adalah file yang belum terenkripsi, maka tombol untuk melakukan Tombol Enkripsi akan aktif dan Tombol Dekripsi tidka aktif. Demikian pula sebaliknya, apabila file yang dipilih adalah file terdekripsi, maka Tombol Enkripsi tidak aktif dan sebaliknya Tombol Dekripsi yang aktif.
Blowfish
Blowfish ?
File
Kunci
Konfirmasi
Hapus file asli
Simpan di direktori yang sama
Enkripsi Dekripsi
A
Gambar 3.4 Form Utama b Perancangan Tampilan Form Bantu
c Perancangan Tampilan Form About
Form ini akan terbuka saat pengguna menekan tombol A. Form ini berisi
informasi mengenai tujuan pembuatan program, identitas pembuat dan ucapan terima kasih.
Gambar 3.5 Form About
3.3.1.1 Diagram Alir Sistem Enkripsi
Gambar 3.6 Diagram Alir Sistem Enkripsi
Mulai Masukkan
kunci
Proses Enkripsi
Selesai Cari Berkas
Asli
3.3.1.2 Diagram Alir Sistem Dekripsi
Masukkan kunci
Proses Dekripsi Cari Berkas
Terenkripsi
Plaintext Mulai
Selesai
Dari hasil perancangan yang telah dilakukan dapat digambarkan langkah-langkah yang terjadi dalam proses enkripsi dan dekripsi dalam suatu diagram alir sebagai berikut:
Start
Enkripsi Dekripsi
T
Y Y
T kunci > 4 AND
kunci < 56 Input kunci Input/cari file
Enkripsi / Dekripsi?
Input kunci
input = kunci enkripsi Input/cari file
A B
Gambar 4.1 Diagram Alir Sistem
4.1 Enkripsi
Langkah-langkah yang terjadi selama proses enkripsi dapat dijelaskan pada bagian di bawah ini.
4.1.1 Inisialisasi array P (P-array/subkey) dan kotak substitusi (S-box)
Pertama kali dikerjakan sistem pada awal program yaitu fungsi untuk membangkitkan subkunci (subkey) dan S-box. Subkunci akan digunakan untuk proses enkripsi. Sedangkan S-box dipakai dalam fungsi F, dimana S-box adalah suatu konstanta. Berikut baris perintah untuk membangkitkan P-array dan S-box.
Private Sub Class_Initialize() On Local Error Resume Next
m_RunningCompiled = ((2147483647 + 1) < 0) m_pBox(0) = &H243F6A88
m_pBox(1) = &H85A308D3 m_pBox(2) = &H13198A2E m_pBox(3) = &H3707344 m_pBox(4) = &HA4093822 m_pBox(5) = &H299F31D0 .
. .
m_pBox(12) = &HC0AC29B7 m_pBox(13) = &HC97C50DD m_pBox(14) = &H3F84D5B5 m_pBox(15) = &HB5470917 m_pBox(16) = &H9216D5D9 m_pBox(17) = &H8979FB1B m_sBox(0, 0) = &HD1310BA6
4.1.2 Inisialisasi kunci (perluasan kunci)
Kunci yang diinputkan sebagai kunci enkripsi dan dekripsi terlebih dahulu akan diperluas menjadi karakter acak sebanyak 56 byte. Kunci acak 56
byte tersimpan dalam variabel v. Adapun program lengkapnya adalah sebagai berikut:
Public Function RandomString(ByVal L As Integer) Dim t As Integer, v As String, X As Currency For X = 1 To L 'panjang kunci maks
Randomize
t = Int((3 * Rnd) + 1)
If t = 1 Then v = v & Chr(Int((26 * Rnd) + 1) + 96) If t = 2 Then v = v & Chr(Int((26 * Rnd) + 1) + 64) If t = 3 Then v = v & Chr(Int((9 * Rnd) + 1) + 48) Next
RandomString = v End Function
4.1.3 Baca data asli (Plaintext)
Program di bawah ini untuk membaca data dari suatu berkas yang akan dienkripsi. Data terlebih dahulu akan dibaca baru kemudian dilakukan enkripsi dengan fungsi EncryptString() dan disimpan dalam variabel DataBuffer.
Dim DataBuffer As String Open InPath For Binary As #1 DataBuffer = Space$(LOF(1)) Get #1, , DataBuffer
Close #1
DataBuffer = EncryptString(DataBuffer, Key, InHex)
4.1.4 Proses enkripsi
dengan Xl1 yang telah dikenakan fungsi F, menghasilkan Xr1. Langkah ini dilakukan sampai dengan Xl dan Xr ke-16. Selanjutnya Xl16 di-XOR-kan dengan P18, dan Xr16 di-XOR-kan dengan P17. Program lengkapnya sebagai berikut.
Private Static Sub EncryptBlock(Xl As Long, Xr As Long)
Xr = Xl Xor m_pBox(Rounds)
Xl = Temp Xor m_pBox(Rounds + 1) End Sub
4.1.5 Enkripsi kunci dan simpan di file
Program di bawah ini adalah program untuk melakukan konversi kunci ke dalam format ASCII dan menyimpan dalam satu berkas yang sama dengan berkas yang akan digunakan untuk menyimpan hasil enkripsi. Kunci ini akan digunakan pada saat mencocokkan kunci pada saat melakukan dekripsi.
Public Function Encrypt(EncryptString As String, Key As Integer, Optional Decrypt As Boolean = False) Dim str1, Result As String, i As Integer
str1 = EncryptString For i = 1 To Len(str1)
4.1.6 Tulis data terenkripsi
Data hasil enkripsi akan ditulis ke dalam berkas dengan baris program sebagai berikut:
Put #F1, , str Close #F1
Open sFile For Binary As #F1 Put #F1, Len(str) + 1, Buffer() Close #F1
End Function
4.2. Dekripsi
Langkah-langkah yang terjadi selama proses dekripsi dapat dijelaskan pada bagian di bawah ini.
4.2.1 Inisialisasi array P dan kotak substitusi
Pada langkah inisialisasi P-array dan S-box sama dengan langkah inisialisasi pada proses enkripsi.
4.2.2 Inisialisasi kunci (perluasan kunci)
Baris program untuk inisialisasi kunci ini sama dengan baris program inisialisasi kunci pada proses enkripsi.
4.2.3 Baca kunci enkripsi yang tersimpan di dalam berkas terenkripsi
Program berikut digunakan untuk mengambil kunci yang enkripsi yang tersimpan dalam berkas cipher yang akan dicocokkan dengan kunci yang diinputkan pada saat melakukan dekripsi.
Public Function GetPhrase(ByVal sFile As String) Dim F1 As Integer, str As String, str1 As String Dim L As Integer, Ph As String
F1 = FreeFile
Open sFile For Binary As #F1 L = Val(Input(2, F1))
str = Input(L, F1) Close #F1
Ph = Encrypt(str, 127, True) GetPhrase = Ph
4.2.4 Pengembalian kunci terenkripsi
Kunci yang telah diubah ke dlam bentuk ASCII akan dikembalikan lagi ke dalam bentuk awalnya untuk dicocokkan kesamaannya dengan kunci enkripsi.
4.2.5 Mengambil kunci inisialisasi 56 byte dan mengenkripsinya
Public Function Encrypt(EncryptString As String, Key As Integer, Optional Decrypt As Boolean = False) Dim str1, Result As String, i As Integer
str1 = EncryptString For i = 1 To Len(str1)
Encrypt = Result End Function
Kunci inisialisasi yang sudah diperluas sebelumnya akan diambil untuk kemudian dienkripsi sebelum proses dekripsi data dijalankan. Pengambilan dilakukan dari berkas terenkripsi (cipher). Program selengkapnya untuk proses tersebut di atas adalah sebagai berikut;
Public Function GetKey(ByVal sFile As String) DoEvents
Dim F1 As Integer, str As String, strKey As String F1 = FreeFile
Open sFile For Binary Access Read As #F1 str = Input(Len(Phrase) + 2 + 56, F1) Close #F1
str = Mid(str, 3 + Len(Phrase), Len(str)) str = Encrypt(str, 127, True)
GetKey = str Reset
4.2.6 Hapus kunci yang tersimpan pada berkas terdekripsi
Proses berikutnya adalah menghapus kunci yang sebelumnya tersimpan dalam berkas. Jadi, apabila suatu berkas sudah pernah dilakukan dekripsi, untuk selanjutnya tidak akan dapat dilakukan dekripsi lagi dikarenakan beberapa data yang dibutuhkan untuk proses dekripsi akan terhapus.
Public Function RemovePhraseKey(ByVal sFile As String)
DoEvents
Dim str As String, F1 As Byte, L As String, Buffer() As Byte
L = Len(GetPhrase(sFile)) + 58 F1 = FreeFile
Open sFile For Binary As #F1 ReDim Buffer(LOF(F1) - 1 - L) Get #F1, L + 1, Buffer()
Close #F1 Kill sFile F1 = FreeFile
Open sFile For Binary As #F1 Put #F1, , Buffer()
Close #F1 End Function
4.2.7 Dekripsi data dari berkas
Program berikut digunakan untuk melakukan dekripsi data yang diambil dari berkas cipher.
Dim DataBuffer As String Open InPath For Binary As #1 DataBuffer = Space$(LOF(1)) Get #1, , DataBuffer
Close #1
DataBuffer = DecryptString(DataBuffer, Key, InHex) Open OutPath For Output As #1
Print #1, DataBuffer Close #1
4.2.8 Dekripsi kunci
Public Function DecryptString(Text As String,
Optional Key As String, Optional InHex As Boolean) As String
On Error GoTo errorhandler GoSub begin
errorhandler: Exit Function
begin:
Dim byteArray() As Byte
If InHex = True Then Text = DeHex(Text) byteArray() = StrConv(Text, vbFromUnicode) Call DecryptByte(byteArray(), Key)
DecryptString = StrConv(byteArray(), vbUnicode) End Function
4.2.9 Dekripsi byte
Dim Offset As Long, OrigLen As Long, LeftWord As Long, RightWord As Long, CipherLen As Long,
CipherLeft As Long, CipherRight As Long, CurrPercent As Long, NextPercent As Long
If (Len(Key) > 0) Then Me.Key = Key CipherLen = UBound(byteArray) + 1
For Offset = 0 To (CipherLen - 1) Step 8
Call GetWord(LeftWord, byteArray(), Offset)
Call GetWord(RightWord, byteArray(), Offset + 4) Call DecryptBlock(LeftWord, RightWord)
LeftWord = LeftWord Xor CipherLeft RightWord = RightWord Xor CipherRight
Call GetWord(CipherLeft, byteArray(), Offset) Call GetWord(CipherRight, byteArray(), Offset + 4)
Call PutWord(LeftWord, byteArray(), Offset)
Call PutWord(RightWord, byteArray(), Offset + 4) If (Offset >= NextPercent) Then
NextPercent = (CipherLen * ((CurrPercent + 1) / 100)) + 1
RaiseEvent Progress(CurrPercent) End If
Next
Call CopyMem(OrigLen, byteArray(8), 4)
If (CipherLen - OrigLen > 19) Or (CipherLen -
OrigLen < 12) Then Call Err.Raise(vbObjectError, , "Incorrect size descriptor in Blowfish decryption") Call CopyMem(byteArray(0), byteArray(12), OrigLen) ReDim Preserve byteArray(OrigLen - 1)
If (CurrPercent <> 100) Then RaiseEvent Progress(100)
End Sub
4.2.10 Dekripsi blok
Proses dekripsi pada prinsipnya sama dengan proses enkripsi, hanya saja untuk P1 s.d P18 digunakan dalam urutan terbalik. Xl1 di-XOR-kan dengan P18 dan Xr1 di-XOR-kan dengan Xl yang sudah dikenakan fungsi F. Langkah ini dilakukan sampai Xl dan Xr ke-16, selanjutnya Xl16 dikenakan operasi XOR dengan P1 dan Xr16 di-XOR-kan dengan P2.
Private Static Sub DecryptBlock(Xl As Long, Xr As Long)
On Error GoTo errorhandler GoSub begin Xl = k Xor m_pBox(Rounds)
4.2.11 Tulis data terdekripsi j = j - 2 Next
End Sub
Fungsi dibawah ini digunakan untuk menuliskan hasil dekripsi ke dalam suatu berkas yang kemudian akan disimpan dalam dalam suatu berkas.
Open OutPath For Output As #1 Print #1, DataBuffer
Close #1
DecryptFile = True End Function
4.3. Fungsi-fungsi pendukung program 4.3.1 Hapus file asal
Fungsi berikut akan dikerjakan apabila pengguna memilih untuk menghapus file sumber, baik itu file asli ataupun file hasil dekripsi.
Public Sub WipeFile(sFile As String) Dim FF As Byte, i As Long
Randomize FF = FreeFile
Open sFile For Binary As #FF For i = 1 To LOF(FF)
Put #FF, , Chr$(0) Next
Reset
Kill sFile End Sub
4.3.2 Cek file sudah ada atau belum
Private Function FileExist(FilePath As String) As Boolean
On Error GoTo errorhandler GoSub begin
errorhandler: FileExist = False Exit Function
begin:
Open FilePath For Input As #1 Close #1
FileExist = True End Function
4.4Implementasi User Interface
Dalam program enkripsi dan dekripsi ini terdiri dari tiga form yang akan digunakan sebagai antarmuka antara pengguna dan sistem, yaitu Form Utama (frmMain), Form Enkripsi (frmEncrypt), serta Form Dekripsi (frmDecrypt). Hal ini berbeda dari perancangan yang sebelumnya dilakukan yang hanya memiliki satu form utama saja yang menjadi pusat terjadinya semua proses.
4.4.1 Form Utama (frmMain)
Form utama akan muncul pertama kali dan digunakan untuk memanggil Form Enkripsi (frmEncrypt) atau Form Dekripsi (frmDecrypt). Untuk melakukan enkripsi, pengguna dapat memilih menu Blowfish Æ Encrypt dan selanjutnya akan ditampilkan form Enkripsi File (frmEncrypt).
Gambar 4. 2. Form Utama (frmMain) 4.4.2 Form Enkripsi (frmEncrypt)
Form ini digunakan untuk melakukan proses enkripsi file. Dalam form ini terdapat 2 textbox. Pertama, digunakan untuk menampilkan nama dan direktori file asal yang akan dienkripsi. Dan yang kedua, digunakan untuk menampilkan nama dan direkstori file hasil enkripsi dengan ekstensi *.blf.
Nama dan direktori file tersebut dapat ditulis secara manual dengan catatan nama dan direktorinya benar atau dengan menekan tombol cari (tombol
) yang ada disebelah kanan dari masing-masing textbox.
Setelah itu pengguna dapat menekan tombol Encrypt File untuk melakukan operasi enkripsi. Tombol Encrypt File akan aktif begitu ada perubahan pada textbox, baik itu textbox pertama ataupun textbox kedua.
Gambar 4.3 Form Enkripsi (frmEncrypt)
Bila proses telah selesai akan muncul message box yang memberitahukan kepada pengguna bahwa proses telah selesai.
Gambar 4.4 Pesan pemberitahuan bahwa proses enkripsi telah selesai 4.4.3 F orm Dekripsi (frmDecrypt)
Pada prinsipnya form ini hampir sama seperti pada form Enkripsi, hanya saja proses pada form ini adalah proses kebalikan dari enkripsi, yaitu dekripsi.
File yang akan didekripsi (berekstensi *.blf) dituliskan pada textbox pertama atau akan ditampilkan secara langsung setelah melakukan pencarian
Gambar 4.5 Form Dekripsi (frmDecrypt)
Sama seperti pada form Enkripsi, terdapat optionbutton untuk melakukan pilihan apakah akan menghapus file asli atau tidak.
Setelah proses dekripsi selesai akan muncul messagebox yang memberitahukan bahwa proses dekripsi telah selesai.
Gambar 4.6 Pesan pemberitahuan bahwa proses dekripsi telah selesai 4.4.4 Form Phrase (frmPhrase)
pengguna belum memasukkan kunci ke dalam textbox seperti ditunjukkan pada gambar berikut:
Gambar 4.7 Form Phrase (frmPhrase) tanpa input kunci
Pertama kali pengguna harus memasukkan kunci untuk proses enkripsi maupun dekripsi berupa karakter bebas. Kemudian memasukkan konfirmasi kunci untuk memastikan bahwa kunci yang dimasukkan benar. Apabila kunci berbeda dengan kunci konfirmasi, maka tombol eksekusi tidak akan aktif, sehingga pengguna tidak bisa melanjutkan ke proses selanjutnya.
Gambar 4.8 Form Phrase (frmPhrase) dengan input kunci dan input konfirmasi sama
Gambar 4.9 Pesan kesalahan jumlah masukan kunci
Dan apabila pengguna melakukan kesalahan dalam memasukkan kunci enkripsi maupun dekripsi, akan ditampilkan pesan kesalahan seperti pada gambar.
Gambar 4.10 Pesan masukan kunci yang salah 4.5 Help
4.5.1 Form Help (frmHelp)
Form Bantu menampilkan penjelasan mengenai petunjuk singkat cara-cara penggunaan program. Baik itu untuk proses dekripsi maupun enkripsi. Juga dijelaskan mengenai ketentuan-ketentuan yang berhubungan langsung dengan program enkripsi dan dekripsi. Diantaranya adalah mengenai format file yang bisa dikenai proses enkripsi dan dekripsi, kunci dekripsi harus sama dengan kunci enkripsi, format file dari file hasil enkripsi dan penjelasan mengenai lokasi penyimpan dari file hasil enkripsi.
Gambar 4.11 Form Help Topics (frmHelp) 4.5.2 Form About (frmAbout)
Form About berisi tentang profil dari program enkripsi dan dekripsi file dengan metode Blowfish.
5.1 Analisa Hasil Perangkat Lunak
Setelah dilakukan uji coba, secara umum program enkripsi berkas dengan metode Blowfish dapat berjalan dengan baik. Program enkripsi dan dekripsi file ini dapat melakukan enkripsi dan dekripsi berkas berekstensi *.txt dan menyimpan hasil enkripsi dalam berkas dengan ekstensi *.blf, sedangkan hasil dekripsi kembali akan tersimpan dalam format berkas *.txt.
Adapun kelebihan dan kekurangan program ini adalah sebagai berikut: 5.1.1Kelebihan
1. Hasil enkripsi akan selalu berbeda-beda walaupun berkas yang dienkripsi adalah berkas yang sama dan mengggunakan kunci yang sama.
2. Dengan hasil yang berbeda-beda untuk setiap hasil enkripsi, akan semakin menyulitkan dalam pemecahan ciphertext tanpa mengetahui kunci enkripsi dan dekripsinya.
5.1.2 Kekurangan
1. Tampilan masih sederhana dan kurang menarik.
2. Tidak disertai fasilitas untuk melakukan enkripsi pada teks yang dimasukkan pada suatu textbox.
3. Program tidak dapat mendeteksi apakah berkas yang akan di dekripsi sudah pernah di dekripsi sebelumnya atau belum karena setiap kali suatu berkas di dekripsi, maka kunci yang tersimpan akan secara otomatis terhapus.
5.2 Analisa Piranti Pengembang (Visual Basic 6.0)
Visual Basic walaupun sebenarnya tidak begitu cocok untuk aplikasi
6.1Kesimpulan
Kriptografi merupakan proses menulis pesan secara rahasia yang terdiri dari dua proses, yaitu enkripsi dan dekripsi.
Enkripsi merupakan proses untuk merubah pesan asli (plaintext)ke dalam pesan acak (ciphertext). Sedangkan Dekripsi merupakan proses perubahan kembali dari ciphertext ke dalam plaintext.
Terdapat banyak metode kriptografi. Salah satunya adalah Blowfish, yang merupakan algoritma simetris yang menggunakan jaringan Feistel.
Berdasarkan hasil dari implementasi dan analisa dari proses enkripsi dan dekripsi dengan metode Blowfish, dapat disimpulkan antara lain:
1. Algoritma Blowfish dapat melakukan enkripsi dan dekripsi berkas dengan baik seperti yang dikemukan dalam landasan teori.
2. Secara umum program enkripsi dan dekripsi ini dapat berjalan dengan baik sesuai, sehingga dapat membantu pengguna dalam melakukan enkripsi dan dekripsi berkas.
3. Program dapat melakukan enkripsi berkas dengan ukuran tidak terbatas. 4. Program juga dapat melakukan dekripsi dari berkas yang sudah dienkripsi
sebelumnya.