Implementasi Algoritma Blowfish pada Basis Data Honorarium Mengajar Dosen Tidak Tetap FTI UKSW Artikel Ilmiah Peneliti : Wilnic Izaac Maraunuela (672007118) M. A. Ineke Pakereng, M.Kom. Program Studi Teknik Informatika Fakultas Teknologi Informasi Universitas Kristen Satya Wacana Salatiga Mei 2013 Implementasi Algoritma Blowfish pada Basis Data Honorarium Mengajar Dosen Tidak Tetap FTI UKSW Artikel Ilmiah Diajukan kepada Fakultas Teknologi Informasi untuk memperoleh Gelar Sarjana Komputer Peneliti : Wilnic Izaac Maraunuela (672007118) M. A. Ineke Pakereng, M.Kom. Program Studi Teknik Informatika Fakultas Teknologi Informasi Universitas Kristen Satya Wacana Salatiga Mei 2013 Implementasi Algoritma Blowfish pada Basis Data Honorarium Mengajar Dosen Tidak Tetap FTI UKSW Wilnic Izaac Maraunuela 1, M. A. Ineke Pakereng 2 Fakultas Teknologi Informasi Universitas Kristen Satya Wacana Jl. Diponegoro 52-60, Salatiga 50711, Indonesia E-mail: [email protected], [email protected] Abstract Information systems cannot be separated from the use of the database as information storage media. A database system in general has been equipped with the authentication process to gain access to the stored information. But not necessarily those who have the right to access the database also have the right to read the information in it, as for example is the data honorarium. In this study designed a cryptosystem to encrypt records stored in an honorarium database. Encryption process is done by using the blowfish cipher. The results showed that the cryptosystem capable of storing the data into the database in the form of cipher text, and able to return to the form of plain text in the reading process. Keywords: Cryptography, Blowfish, Database Abstrak Sistem informasi tidak dapat dipisahkan dengan penggunaan database sebagai media penyimpanan informasi. Suatu sistem database pada umumnya telah dilengkapi dengan proses otentikasi untuk dapat mengakses informasi yang tersimpan. Namun belum tentu pihak yang memiliki hak untuk mengakses database, juga memiliki hak untuk membaca informasi di dalamnya, sebagai contohnya adalah data honorarium. Pada penelitian ini dirancang suatu kriptosistem, untuk menyandikan record yang tersimpan pada database honorarium mengajar dosen tidak tetap FTI UKSW. Proses enkripsi dilakukan dengan menggunakan blowfish cipher. Hasil penelitian menunjukkan bahwa aplikasi kriptosistem yang dirancang dapat menyimpan data ke dalam database dalam bentuk cipher text, dan dapat mengembalikan ke dalam bentuk plaintext pada proses pembacaan. Kata Kunci : Kriptografi, Blowfish, Basis Data 1 Mahasiswa Program Studi Teknik Informatika, Fakultas Teknologi Informasi, Universitas Kristen Satya Wacana Salatiga 2 Staf Pengajar Fakultas Teknologi Informasi Universitas Kristen Satya Wacana Salatiga 1. Pendahuluan Database merupakan bagian penting dari suatu sistem informasi. Data yang diolah dan disajikan oleh sistem informasi, disimpan dan diorganisasi oleh sistem database. Pada umumnya sistem database telah dilengkapi dengan proses otentikasi untuk membatasi akses ke dalamnya. Hal ini berarti hanya pihak-pihak tertentu yang mengetahui account database, yang dapat login ke dalam sistem database. Masalah yang muncul adalah ketika database diakses oleh pihak yang memiliki otorisasi untuk mengakses, namun tidak memiliki hak untuk membaca informasi di dalamnya. Sebagai contoh adalah administrator database, yang memiliki hak akses ke dalam sistem database. Namun informasi rahasia yang tersimpan di dalamnya belum tentu berhak dilihat oleh administrator database tersebut. Untuk mengamankan informasi yang tersimpan, dapat dilakukan dengan cara menyandikan informasi tersebut, sebelum kemudian disimpan di database. Proses penyandian berlangsung pada level sistem informasi, yaitu aplikasi yang menggunakan database. Sebelum data disimpan, oleh aplikasi data tersebut disandikan terlebih dahulu. Ketika akan digunakan, data dibaca dari database, kemudian dilakukan proses dekripsi untuk dapat menjadi informasi yang dimengerti. Proses penyandian data dapat dilakukan dengan algortima enkripsi. Salah satu algoritma enkripsi yang terkenal cepat adalah Blowfish [1]. Algoritma Blowfish memiliki performa yang baik. Block yang digunakan memiliki ukuran 64-bit (8 byte), hal ini memberi keuntungan yaitu proses padding yang dilakukan berkisar antara satu byte sampai dengan tujuh byte. Berdasarkan latar belakang masalah tersebut, maka pada penelitian ini diimplementasikan suatu kriptosistem yang berfungsi untuk menyandikan record pada database. Database yang digunakan adalah database honorarium mengajar dosen tidak tetap Fakultas Teknologi Informasi Universitas Kristen Satya Wacana. 2. Tinjauan Pustaka Pada penelitian yang berjudul “Enkripsi Field Tabel Database dengan PGP”, dibahas mengenai bagaimana mengamankan isi dari tabel database. Hal ini dilakukan untuk menghindari pencurian data ketika akses ilegal dilakukan ke dalam database. Informasi disandikan dengan metode PGP. Hasil enkripsi/dekripsi ditampung sementara ke dalam file, untuk kemudian disimpan ke dalam tabel atau ditampilkan lewat aplikasi. Kesimpulan yang diperoleh adalah hasil enkripsi yang besar sehingga membutuhkan media penyimpanan lebih besar dan waktu proses yang lebih lama karena adanya proses penyimpanan ke file sementara [2]. Pada penelitian berjudul “DES, AES and Blowfish: Symetric Key Cryptography Algorithms Simulation Based Performance Analysis”, dibahas mengenai perbandingan performa tiga algoritma enkripsi, yaitu DES, AES, dan 1 Blowfish. Pada penelitian tersebut disimpulkan bahwa Blowfish memiliki performa yang sedikit lebih baik dari dua algoritma yang lain [3]. Berdasarkan beberapa penelitian yang pernah dilakukan tersebut, maka dilakukan penelitian yang menghasilkan sebuah aplikasi kriptosistem, yang bekerja untuk menyandikan informasi yang tersimpan di database. Proses enkripsi tidak dilakukan melalui file perantara, namun dilakukan di memory, sehingga lebih cepat. Algoritma yang dipilih untuk proses penyandian adalah Blowfish, karena memiliki performa yang baik, dan memiliki block cipher yang kecil yaitu 64-bit. Pada penelitian ini, penerapan kriptosistem dilakukan pada database honorarium mengajar dosen tidak tetap FTI UKSW. Pengujian dilakukan untuk melihat kecepatan proses menyimpan dan membaca, dan juga proses pencarian record di database. Penelitian yang dilakukan membahas tentang penerapan teknik kriptografi pada database dalam sistem informasi penggajian, dalam hal ini honorarium. Sistem informasi merupakan kumpulan komponen yang saling berhubungan untuk mengolah input (data) menjadi output (informasi) sehingga dapat memenuhi kebutuhan pemakai. Komponen-komponen utama dalam suatu sistem informasi berbasiskan komputer terdiri dari: 1) Database, 2) Database software, 3) Aplikasi software, 4) Hardware komputer termasuk media penyimpanan, dan 5) Personal yang menggunakan dan mengembangkan sistem [4]. Pada sistem informasi penggajian, yang menjadi komponen input adalah data karyawan dan data jam kerja, sedangkan komponen output adalah laporan kehadiran karyawan dan slip gaji. Komponen input dan output tersebut dapat berkembang sesuai dengan kebutuhan pengguna sistem. Pada sistem informasi penggajian/honorarium terdapat database yang saling berelasi, yang menampung data-data yang diolah menjadi informasi, dikenal sebagai relational database management system (RDBMS). RDBMS adalah kumpulan dari relasi yang telah mengalami proses normalisasi dan memiliki nama relasi yang berbeda [5]. Sistem Informasi penggajian/honorarium berisi data-data tentang honorarium yang diterima oleh seorang karyawan atau pekerja, dimana tidak semua orang mempunyai hak untuk mengetahui informasi dalam sistem tersebut. Oleh karena itu dilakukan penyandian data menggunakan Algoritma Blowfish. Blowfish dirancang pada tahun 1993 oleh Bruce Schneier sebagai algoritma yang cepat, dan alternatif yang dapat diakses secara umum, untuk algoritma enkripsi yang telah ada saat itu. Blowfish tidak dipatenkan dan bebas lisensi, dan tersedia untuk semua penggunaan. Meskipun rawan dengan masalah weak keys, tidak ada serangan diketahui berhasil membobol algoritma ini [1] [6]. Blowfish termasuk dalam enkripsi block cipher 64-bit dangan panjang kunci yang bervariasi antara 32-bit sampai 448-bit. Algoritma Blowfish terdiri atas dua bagian : 1) Key-Expansion, berfungsi merubah kunci (Minimum 32-bit, Maksimum 448-bit) menjadi beberapa array subkunci (subkey) dengan total 4168 byte; 2) Enkripsi Data, terdiri dari iterasi fungsi sederhana (Feistel Network) sebanyak 16 kali putaran. Setiap putaran terdiri dari permutasi key-dependent dan key-subtition dan data-dependent. Semua operasi adalah penambahan (addition) 2 dan exclusive-OR pada variabel 32-bit. Operasi tambahan lainnya hanyalah empat penelusuran tabel (table lookup) array berindeks untuk setiap putaran. Gambar 1 Proses Enkripsi Algoritma Blowfish [7] Proses enkripsi algoritma Blowfish pada Gambar 1, dijelaskan sebagai berikut : [7] Bentuk inisial P-array sebanyak 18 buah (P1, P2, .............. P18) masing1. masing bernilai 32-bit. Array P terdiri dari delapan belas kunci 32-bit subkunci : P1,P2,.......,P18 2. Bentuk S-box sebanyak 4 buah masing-masing bernilai 32-bit yang memiliki masukan 256. Empat 32-bit S-box masing-masing mempunyai 256 entri : S1,0,S1,1,....................,S1,255 S2,0,S2,1,....................,S2,255 S3,0,S3,1,....................,S3,255 S4,0,S4,1,....................,S4,255 3. Plaintext yang akan dienkripsi diasumsikan sebagai masukan, Plaintext tersebut diambil sebanyak 64-bit, dan apabila kurang dari 64-bit, maka ditambahkan bit-nya, supaya dalam operasi nanti sesuai dengan datanya. 3 Hasil pengambilan pada langkah 3 dibagi 2, 32-bit pertama disebut XL, 32bit yang kedua disebut XR. Selanjutnya lakukan operasi XL = XL xor Pi dan XR = F(XL) xor XR 5. 6. Hasil dari operasi pada langkah 4 ditukar, XL menjadi XR, dan XR menjadi XL. 7. Lakukan sebanyak 16 kali, perulangan yang ke-16 lakukan lagi proses penukaran XL dan XR. 8. Pada proses ke-17 lakukan operasi untuk XR = XR xor P17, dan XL = XL xor P18. 9. Proses terakhir satukan kembali XL dan XR sehingga menjadi 64-bit Salah satu operator logika utama yang digunakan pada proses enkripsi algoritma Blowfish adalah operator Exclusive-OR (XOR). Exclusive-OR (XOR) adalah operasi logika pada dua nilai. Hasil operasi akan bernilai BENAR jika tepat salah satu dari kedua variabel bernilai BENAR. Jika tidak, akan memberikan hasil SALAH. Hal ini juga berarti bahwa hasil dari operasi 'XOR' akan bernilai BENAR hanya jika kedua variabel masukan memiliki nilai yang berbeda. Nilai yang sama akan menghasilkan nilai SALAH [8]. Tabel 1 merupakan tabel kebenaran operasi XOR. 4. Tabel 1 Tabel Kebenaran XOR [8] p q ⊕ F F T T F T F T F T T F Pada proses enkripsi yang terdapat pada sistem yang dikembangkan ini, semua karakter pesan diubah ke dalam nilai ASCII sebelum dilakukan proses enkripsi. ASCII merupakan singkatan dari American Standard Code for Information Interchange. Komputer hanya dapat memahami nomor, sehingga kode ASCII digunakan sebagai representasi numerik dari karakter seperti 'a' atau '@' atau suatu perintah tertentu [9]. Pada Gambar 2 ditampilkan daftar karakter ASCII termasuk penjelasan dari 32 karakter pertama yang merupakan karakter non-cetak. . 4 Gambar 2 ASCII Table [9] 3. Metode dan Perancangan Sistem Penelitian yang dilakukan, diselesaikan melalui tahapan penelitian yang terbagi dalam empat tahapan, yaitu: (1) Identifikasi Masalah, (2) Perancangan sistem, (3) Implementasi sistem, dan (4) Pengujian sistem dan analisis hasil pengujian. Identifikasi Masalah, dan Pengumpulan Data Perancangan Sistem meliputi Perancangan Proses Enkripsi, dan Proses Dekripsi pada Database Implementasi Sistem Pengujian Sistem dan Analisis Hasil Pengujian Gambar 3 Tahapan Penelitian [10] Tahapan penelitian pada Gambar 3, dapat dijelaskan sebagai berikut. Tahap pertama: identifikasi masalah, yaitu mengidentifikasi masalah-masalah yang akan dibahas terkait database honorarium dosen tidak tetap FTI UKSW. Masalah yang ditemukan berupa data honorarium, data yang didapat peneliti bersumber dari salah satu dosen tetap FTI UKSW yaitu ibu M. A. Ineke Pakereng, M.Kom. Data honorarium merupakan data yang bersifat rahasia, karena hanya yang memiliki hak akses yang dapat mengetahuinya, sehingga untuk menyimpannya diperlukan pengamanan data. Solusi yang dikemukakan pada penelitian ini adalah dengan 5 menyandikan isi dari database honorarium. Detil latar belakang masalah telah dijabarkan pada bagian Pendahuluan. Kemudian mendapatkan data dan literatur yang terkait dengan proses penyandian data yaitu dengan menggunakan teknik kriptografi, yaitu algoritma blowfish. Algoritma blowfish dipilih karena berdasarkan penelitian terdahulu, blowfish memiliki performa yang lebih baik dari algoritma enkripsi yang lain; Tahap kedua: perancangan sistem yang meliputi perancangan database, proses enkripsi pada tabel, dan proses dekripsi pada tabel menggunakan teknik kriptografi blowfish, pada database dalam sistem yang dibangun. Perancangan database termasuk di dalamnya perancangan relasi antar tabel; Tahap ketiga: implementasi sistem, yaitu membuat aplikasi sesuai perancangan proses pada tahap kedua, yaitu misalnya bagaimana aplikasi/program berjalan saat database dienkripsi dan didekripsi kembali; dan Tahap keempat: pengujian sistem dan analisis hasil pengujian, yaitu dilakukan pengujian terhadap kriptosistem yang dibangun, dengan tujuan untuk mengetahui pengaruh enkripsi pada proses yang berjalan di sistem, yaitu waktu yang diperlukan untuk menyimpan dan membaca data, dan juga proses pencarian record di database. Selain itu pengujian juga dilakukan untuk mengetahui pengaruh enkripsi terhadap database, yaitu ukuran field, yang juga berarti ukuran database dan pengaruh terhadap relasi antar tabel. Perancangan kriptosistem yang dibangun dijelaskan sebagai berikut. Use case diagram digunakan untuk menjelaskan fungsi-fungsi yang bersentuhan langsung dengan pengguna, sedangkan flowchart digunakan untuk menjelaskan proses-proses yang berlangsung dibaliknya. Gambar 4 Use Case Diagram Sistem 6 Gambar 4 menunjukkan use case diagram sistem, dijelaskan sebagai berikut. Aktor yang menggunakan sistem adalah Operator. Operator berperan untuk mengatur data pada sistem, yaitu data Dosen, data Matakuliah, data Mengajar, dan data Kehadiran Dosen. Keempat use case ini merupakan input untuk sistem. Pada use case pengaturan data Dosen, terdapat extended use case Cetak Laporan Honorarium. Use case ini merupakan output dari sistem. Rancangan Database dalam sistem informasi honorarium yang dibangun, yang digunakan untuk menyimpan data honorarium memiliki relasi seperti ditampilkan pada Gambar 5. Database honorarium memiliki empat tabel, yaitu tabel dosen menyimpan data dosen tidak tetap, tabel mk menyimpan data matakuliah, tabel mengajar menyimpan data informasi pengajaran tiap dosen, seorang dosen mengampu matakuliah apa saja. Kemudian yang terakhir adalah tabel kehadiran, berfungsi untuk menyimpan informasi kehadiran dosen untuk tiap matakuliah yang diampu oleh dosen. Tabel kehadiran menjadi dasar perhitungan honorarium untuk tiap dosen tidak tetap. Gambar 5 Relasi Antar Tabel Rumus perhitungan honor dosen tidak tetap untuk tiap matakuliah, didefinisikan sebagai berikut: Honor Bruto Honor Netto = (beban tugas x jumlah hadir x Rp. 1,4850,000)/ (12*4) + biaya transport = Honor Bruto – pph = Honor Bruto – (Honor Bruto*5%) Beberapa proses yang terdapat dalam perancangan kriptosistem dijelaskan lebih lanjut sebagai berikut. Proses Menyimpan Data (proses enkripsi database), dijelaskan sebagai berikut. Input sistem adalah data Dosen, Matakuliah, Mengajar dan Kehadiran Dosen. Untuk setiap use case, penyimpanan data dilakukan melalui tiga langkah, yaitu: 1) Mengubah plain data ke byte array; 2) Melakukan proses enkripsi 7 dengan kunci yang tersimpan di aplikasi, 3) Menyimpan cipher data dalam bentuk varbinary ke dalam database. Proses menyimpan data (proses enkripsi database) dalam bentuk flowchart, dapat dilihat pada Gambar 6. Start Start PLAIN=nilai field KEY=kunci rahasia INFOPADDING=0 CIPHER=nilai field KEY=kunci rahasia INFOPADDING=0 Ubah PLAIN ke BYTE_ARRAY Gunakan 8 byte pertama sebagai nilai INFOPADDING (nilai padding) Pecah PLAIN ke dalam blok berukuran masing-masing 8 byte Jika blok terakhir panjangnya kurang dari 8 byte True False i=0 Tambahkan padding dibagian belakang, pada blok tersebut INFOPADDING = banyaknya padding yang ditambahkan Pecah CIPHER ke dalam blok berukuran masingmasing 8 byte i=0 Jika i kurang dari banyaknya blok Jika i kurang dari banyaknya blok True PLAIN = DEKRIPSI(KEY, BLOK ke i) True CIPHER = Enkripsi(KEY, BLOK ke i) False False i=i+1 i=i+1 Gabung kembali semua blok yang telah terenkripsi Gabung kembali semua blok PLAIN Letakkan nilai INFOPADDING dibagian paling depan dari gabungan blok Hapus Padding sesuai jumlah INFOPADDING Simpan ke database Ubah gabungan PLAIN ke bentuk String End End Gambar 6 Proses Enkripsi Database Gambar 7 Proses Dekripsi Database Proses Menampilkan Data (proses dekripsi database), dijelaskan sebagai berikut. Langkah untuk menampilkan data dari database adalah: 1) Menggunakan perintah SELECT untuk membaca data dari database; 2) Melakukan proses dekripsi dengan kunci yang tersimpan di aplikasi; 3) Hasil dekripsi yang berupa byte array diubah ke dalam bentuk teks. Proses menampilkan data (proses dekripsi database), dalam bentuk flowchart, dapat dilihat pada Gambar 7. Proses Padding Data, dijelaskan sebagai berikut. Blowfish merupakan block cipher dengan ukuran block 64-bit. Hal ini berarti tiap plain data dibagi ke dalam blok-blok dengan ukuran tiap blok adalah 8 byte. Masalah yang timbul adalah ketika blok terakhir berukuran kurang dari 8 byte. Untuk mengatasinya, maka ditambahkan padding pada bagian paling belakang blok tersebut. Informasi tentang banyaknya padding yang ditambahkan, diletakkan pada bagian paling depan dari cipher data. Proses padding data dalam bentuk diagram, dapat dilihat pada Gambar 8. 8 blok blok blok blok 1 2 3 4 f a t i a g m k e u k i i s l t n o n f \0 \0 padding a s l o o r \0 \0 4 byte Gambar 8 Contoh Padding Data Pada Gambar 8, plain text yang digunakan sebagai contoh adalah “fakultas teknologi informasi”. Plain text tersebut dipecah ke dalam 4 blok. Pada blok terakhir ditambahkan padding 4 byte. Proses enkripsi data dan proses menyimpan data, dijelaskan pada Contoh 1. Contoh 1: Proses Enkripsi dan Proses Menyimpan Data Pada Contoh 1 ini dibahas bagaimana data dari bentuk plain text dienkripsi menjadi cipher text, kemudian disimpan ke dalam database. Pembahasan tidak meliputi proses di balik algoritma blowfish. Plain text (9 byte): plain text m a g d a l e n a ASCII byte value 109 97 103 100 97 108 101 110 97 Proses Enkripsi: plain data blok 1 109 97 103 100 97 108 101 110 blok 2 97 0 0 0 0 0 0 0 PROSES ENKRIPSI BLOWFISH cipher data blok 1 6D 7B 12 D0 82 CE 78 96 blok 2 9C 3E 63 5C 36 82 AE CE Proses Penambahan Informasi data Padding, dijelaskan sebagai berikut. Informasi data padding adalah angka yang menunjukkan banyaknya padding yang ditambahkan pada block terakhir enkripsi. Angka ini berkisar antara 0 sampai dengan 7. 0 berarti tidak ada padding, blok terakhir tepat 8 byte. 7 berarti 7 padding ditambahkan pada blok terakhir, karena blok terakhir hanya berjumlah 1 byte. Pada Contoh 1, blok terakhir hanya berisi 1 byte yaitu byte bernilai 97 (karakter „a‟). Sehingga jumlah padding yang ditambahkan adalah 7 byte, bernilai 0. Padding = 7. Hasil akhir enkripsi = padding + cipher data 07 6D 7B 12 D0 82 CE 78 96 9C 3E 63 5C 36 82 AE CE Proses Menyimpan Data pada Tabel di Database, dijelaskan sebagai berikut. Perintah untuk menyimpan record baru ke dalam tabel pada database ditunjukkan melalui pseudocode pada Kode Program 1. 9 Kode Program 1: Pseudocode untuk Proses Menyimpan Data 1. 2. 3. 4. Inisialisi KONEKSI Set CIPHER = hasil enkripsi Set SQL = “INSERT INTO dosen (nama) VALUE (cipher)” Eksekusi SQL menggunakan KONEKSI Disimpan dalam database dengan nilai: 076D7B12D082CE78969C3E635C3682AECE 17 byte Selisih dengan plain data adalah : 17 – 9 = 8 byte. Proses dekripsi data dan proses membaca data, dijelaskan pada Contoh 2. Contoh 2: Proses Membaca dan Proses Dekripsi Data Untuk menampilkan data, maka langkah yang dilakukan adalah membaca data dari tabel, membaca satu byte pertama sebagai nilai banyaknya padding, melakukan dekripsi byte-byte sisanya, dan terakhir menghilangkan padding. Proses Membaca Data Dari Database : Perintah untuk membaca isi tabel dilakukan melalui pseudocode pada Kode Program 2. Kode Program 2: Pseudocode untuk Proses Membaca Data 1. 2. 3. 4. 5. Inisialisi KONEKSI Set CIPHER = “” Set SQL = “SELECT nama FROM dosen” Set RESULT = hasil eksekusi SQL menggunakan KONEKSI Set CIPHER = baca RESULT kolom “nama” Proses Membaca byte pertama: Byte pertama merupakan infomasi banyaknya padding yang ditambahkan. Hasil proses membaca data dari database, diperoleh cipher data sebagai berikut: 07 6D 7B 12 D0 82 CE 78 96 9C 3E 63 5C 36 82 AE CE Byte pertama = 07 yang artinya terdapat 7 padding. Proses Dekripsi: cipher data blok 1 6D 7B 12 D0 82 CE 78 96 blok 2 9C 3E 63 5C 36 82 AE CE PROSES DEKRIPSI BLOWFISH plain data blok 1 109 97 103 100 97 108 101 110 blok 2 97 0 0 0 0 0 0 0 Proses Menghilangkan Padding: Dari plain data, dihapus 7 byte paling belakang, sehingga dihasilkan: 109 97 103 100 97 108 101 110 97 Dari kode ASCII ini diterjemahkan ke dalam karakter ASCII ASCII byte value 109 97 103 100 97 108 101 110 97 plain text m a g d a l e n a 10 4. Hasil dan Pembahasan Hasil implementasi sistem berdasarkan rancangan sistem, dijelaskan sebagai berikut. Gambar 9 Form Input Data Dosen Data dosen dimasukkan dengan menggunakan form seperti ditunjukkan pada Gambar 9. Pada bagian kanan form, terdapat informasi data dosen dalam bentuk cipher text. Data terenkripsi inilah yang akan disimpan dalam database. Hasil penyimpanan dapat dilihat pada Gambar 10. Kotak berwarna merah menunjukkan cipher data, lingkaran berwarna merah menunjukkan panjangnya cipher data. Cipher data diawali dengan “0x” yang oleh MySQL digunakan untuk menunjukkan data dengan format heksadesimal. Gambar 10 Data Cipher yang Tersimpan pada Database Kode Program 3 Perintah Untuk Menyimpan Data Dosen Terenkripsi ke Database 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. byte[] key = Encoding.Default.GetBytes(Koneksi.Kunci); conn.Open(); MySqlCommand command = new MySqlCommand(); command.Connection = conn; command.CommandText = "INSERT INTO dosen VALUES (@k, @n, @a);"; command.Parameters.Add("@n", MySqlDbType.VarBinary, 128).Value = BlowfishCipher.Encrypt( Encoding.Default.GetBytes(p.Nama), key); ... 12. command.ExecuteNonQuery(); Kode Program 3 merupakan perintah yang digunakan untuk menyimpan data ke dalam database. Sebelum data disimpan, dilakukan proses enkripsi 11 terlebih dahulu (perintah pada baris 9). Kemudian perintah pada baris ke 12, perintah INSERT dieksekusi oleh aplikasi, sehingga data tersimpan ke database. Data kehadiran merupakan inti dari sistem honorarium yang dibuat pada penelitian ini. Pada Gambar 11, ditunjukkan tampilan dari form input data kehadiran dosen. Pada form ini pengguna aplikasi dapat memilih dosen dan matakuliah, kemudian menentukan tanggal-tanggal kehadiran dosen untuk matakuliah yang dipilih. Tampilan Laporan Kehadiran Dosen dan Perhitungan Honorarium, ditunjukkan pada Gambar 12. Gambar 11 Form Input Data Kehadiran Gambar 12 Form Laporan Kehadiran Dosen dan Perhitungan Honorarium Kode Program 4 merupakan perintah yang digunakan untuk membaca data dari tabel di database. Perintah pada baris 5 merupakan perintah SQL untuk mengambil data. Kemudian proses dekripsi terhadap data yang diperoleh dijalankan (perintah pada baris 9-14). Untuk dapat dibaca sebagai data teks, hasil dekripsi yang berupa byte array harus diubah dengan menggunakan fungsi GetString pada class Encoding (perintah pada baris 17-19). 12 Kode Program 4 Perintah Untuk Membaca Data dari Database 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. byte[] key = Encoding.Default.GetBytes(Koneksi.Kunci); conn.Open(); MySqlCommand command = new MySqlCommand(); command.Connection = conn; command.CommandText = "SELECT * FROM dosen;"; MySqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { var k = BlowfishCipher.Decrypt( (byte[])reader["kode"], key); var n = BlowfishCipher.Decrypt( (byte[])reader["nama"], key); var a = BlowfishCipher.Decrypt( (byte[])reader["asal"], key); list.Add(new Dosen() { Kode = Encoding.Default.GetString(k), Nama = Encoding.Default.GetString(n), Alamat = Encoding.Default.GetString(a) }); 21. } Pengujian yang dilakukan terdiri dari pengujian kecepatan proses simpan, pengujian kecepatan proses membaca data, pengujian kecepatan pencarian data, dan pengujian ukuran data. Pengujian dilakukan pada komputer dengan spesifikasi sebagai berikut: Sistem Operasi : Windows 8 Prosesor : Intel® Core ™ i5-2410M CPU @2.30GHz 230GHz RAM Kecepatan harddisk : : 8 GB 7200rpm Pengujian dan analisis hasil pengujian terhadap sistem yang dibangun, dijelaskan sebagai berikut. Pengujian Kecepatan Proses Simpan dilakukan dengan tujuan untuk mengetahui pengaruh enkripsi terhadap kecepatan proses penyimpanan data ke database. Pengujian dilakukan dengan cara mencatat selisih waktu dari proses membaca input, enkripsi, kemudian menyimpan ke database. Hasil pengujian kecepatan proses simpan dapat dilihat pada Tabel 2. Selisih dari waktu Tanpa Enkripsi dan waktu Dengan Enkripsi dicatat pada kolom Perbedaan Waktu Proses. Perbedaan Waktu Proses dengan kata lain merupakan waktu proses enkripsi. Tabel 2 Hasil Pengujian Kecepatan Proses Simpan No Jumlah Record Tanpa Enkripsi (detik) Dengan Enkripsi (detik) Selisih Waktu Proses (detik) Selisih Waktu Proses Per Record (detik/record) 1. 2. 3. 4. 5. Ratarata 10 20 30 40 50 0,47 0,94 1,12 1,57 1,88 0,72 1,39 1,89 2,59 3,16 0,25 0,45 0,77 1,02 1,28 0,025 0,023 0,026 0,026 0,026 30 1,196 1,95 0,754 0,0249 13 Analisis hasil pengujian kecepatan proses simpan, dijelaskan sebagai berikut. Seperti dijelaskan pada proses enkripsi database (Gambar 6), pada proses penyimpanan record terjadi proses enkripsi terlebih dahulu dan kemudian proses INSERT. Sehingga waktu total = waktu enkripsi+waktu INSERT. Pada Tabel 2, perbedaan waktu proses diperoleh dari selisih antara waktu proses penyimpanan “tanpa enkripsi” dan “dengan enkripsi”. Rata-rata selisih waktu tiap record adalah 0,0249 detik. Angka ini merupakan waktu yang diperlukan untuk proses enkripsi satu data record. Banyaknya record yang dapat disimpan untuk database tanpa enkripsi adalah 30 / 1,196 = 25,08 record per detik, dan untuk data terenkripsi adalah 30 / 1,95 = 15,38 record per detik. Kesimpulan yang diperoleh adalah adanya enkripsi, menambah waktu proses sebesar 0,0249 detik untuk tiap record. Hasil pengujian kecepatan proses simpan terkait perbedaan waktu simpan untuk record tanpa enkripsi dan record terenkripsi dalam bentuk grafik ditunjukkan pada Gambar 13. Gambar 13 Grafik Perbedaan Waktu Simpan Pengujian Kecepatan Proses Membaca dilakukan dengan tujuan untuk mengetahui pengaruh enkripsi terhadap kecepatan proses membaca data dari database. Pengujian dilakukan dengan cara mencatat selisih waktu dari proses query, dekripsi, kemudian menampilkan pada aplikasi. Hasil pengujian kecepatan proses membaca dapat dilihat pada Tabel 3. Kesimpulan dari hasil pengujian adalah proses enkripsi memberikan tambahan waktu proses. Dimana tambahan waktu proses ini berbanding lurus dengan jumlah record, yang artinya semakin banyak record yang diproses, semakin lama waktu proses dekripsi. No 1. 2. 3. 4. 5. Ratarata Tabel 3 Hasil Pengujian Kecepatan Proses Membaca Record dari Database Jumlah Tanpa Dengan Selisih Selisih Waktu Record Dekripsi Dekripsi Waktu Proses Per (detik) (detik) Proses Record (detik) (detik/record) 10 0,63 0,84 0,21 0,021 20 0,76 1,18 0,42 0,021 30 0,88 1,58 0,7 0,023 40 1,05 1,98 0,93 0,023 50 1,19 2,41 1,22 0,024 30 0,902 1,598 0,696 0,023 Analisis hasil pengujian kecepatan proses membaca, dijelaskan sebagai berikut. Pada proses dekripsi database (Gambar 7), proses menampilkan data terdiri dari proses SELECT dari database kemudian proses dekripsi, sehingga 14 rumus perhitungan total waktu = waktu SELECT + waktu dekripsi. Pada Tabel 3, perbedaan waktu proses diperoleh dari selisih antara waktu proses pembacaan data “tanpa dekripsi” dan “dengan enkripsi”. Rata-rata selisih waktu tiap record adalah 0,023 detik. Angka ini merupakan waktu yang diperlukan untuk proses dekripsi satu data record. Banyaknya record yang dapat dibaca untuk database tanpa enkripsi adalah 30 / 0,902 = 33,25 record per detik, dan untuk database terenkripsi adalah 30 / 1,598 = 18,77 record per detik. Kesimpulan yang diperoleh adalah adanya enkripsi, menambah waktu proses sebesar 0,023 detik untuk menampilkan (membaca) tiap record. Hasil pengujian kecepatan proses membaca terkait perbedaan waktu baca untuk record tanpa enkripsi dan record terenkripsi dalam bentuk grafik ditunjukkan pada Gambar 14. Gambar 14 Grafik Perbedaan Waktu Baca Pengujian Ukuran Data dilakukan dengan tujuan untuk mengetahui pengaruh enkripsi terhadap ukuran data. Pengujian dilakukan dengan cara mencatat selisih ukuran plain text dengan cipher text. Hasil pengujian terhadap ukuran data dapat dilihat pada Tabel 4. Tabel 4 Hasil Pengujian Ukuran Data Panjang Plain text (karakter/byte) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Selisih Cipher Text Jumlah Padding 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 Panjang InfoPadding Jumlah Block Total 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 9 9 9 9 9 9 9 9 17 17 17 17 17 17 17 17 15 7 6 5 4 3 2 1 8 7 6 5 4 3 2 1 8 17 18 19 20 1 1 1 2 7 6 5 4 3 3 3 3 25 25 25 26 7 6 6 0 Analisis pengujian terhadap ukuran data, dijelaskan sebagai berikut. Panjang padding dihitung dengan rumus Padding=8-(panjang_plain MOD 8). Khusus untuk panjang data dengan kelipatan 8 (sebagai contoh 16), maka tidak ditambahkan padding, karena angka tersebut habis dibagi 8, dan blok paling akhir tepat berukuran 8 byte. Variabel InfoPadding digunakan untuk menyimpan angka yang menunjukkan banyaknya padding (bukan menyimpan padding). Variabel InfoPadding ini memiliki ukuran satu byte. Kesimpulan dari pengujian terhadap ukuran data adalah ukuran cipher text lebih besar dari plain text dengan perbedaan antara satu byte sampai dengan tujuh byte. Hubungan antara ukuran plain text dengan jumlah padding ditunjukkan dalam bentuk grafik pada Gambar 15. Gambar 15 Grafik Hubungan Panjang Plain data dengan Jumlah Padding Analisis juga dilakukan terhadap relasi antar tabel pada database, dengan tujuan untuk mengetahui apakah pengaruh enkripsi terhadap konsistensi dan relasi tabel. Konsistensi dapat dicapai dengan menggunakan foreign key, yang artinya perubahan pada tabel utama akan diteruskan ke tabel yang berelasi terhadap tabel utama tersebut. Relasi antar tabel pada sistem ini dapat dilihat pada Gambar 16. Contoh foreign key adalah relasi antara tabel dosen dan tabel mengajar, dengan hubungan one to many, yang artinya satu dosen dapat memiliki banyak data mengajar, namun satu data mengajar hanya boleh memiliki tepat satu dosen. Konsistensi berlaku ketika atribut kode pada tabel dosen berubah, maka kode dosen pada tabel mengajar juga ikut berubah. Pada sistem yang dibuat, enkripsi dilakukan pada semua field pada setiap tabel. Dengan pengecualian field id pada tabel mengajar_kehadiran. Field id ini merupakan primary key dan nilai defaultnya adalah auto-incremental. Kesimpulan dari analisis terkait relasi antar tabel adalah relasi tabel dapat dipertahankan, demikian juga konsistensi data, dengan cara, enkripsi diterapkan pada semua tabel yang terelasi. Karena hasil enkripsi adalah byte array, maka tipe data yang digunakan untuk menyimpan cipher data adalah varbinary. 16 Gambar 16 Relasi Antar Tabel Database Terenkripsi Selain analisis relasi antar tabel, juga dilakukan analisis proses pencarian data. Analisis ini dilakukan untuk mengetahui pengaruh enkripsi terhadap perintah pencarian SQL. Secara garis besar perintah pencarian SQL adalah sebagai berikut SELECT [nama field 1, nama field 2, dst] FROM [nama tabel] WHERE [kriteria pencarian] Contoh 3: SELECT kode, nama, asal FROM dosen WHERE asal=’Salatiga’ Karena isi dari semua field adalah cipher data, maka perintah pada Contoh 3, tidak dapat dilakukan terhadap database terenkripsi. 5. Simpulan Berdasarkan penelitian, pengujian dan analisis terhadap sistem, maka dapat diambil kesimpulan sebagai berikut: (1) Database untuk sebuah sistem informasi dapat ditingkatkan keamanannya dengan cara menyandikan isi dari field pada database tersebut; (2) Algoritma Blowfish dapat digunakan untuk menyandikan isi field dengan pengaruh kecepatan proses simpan dan membaca database menjadi bertambah; (3) Data cipher lebih panjang dari data plain dengan selisih antara satu byte sampai dengan tujuh byte; (4) Konsistensi data berdasarkan relasi antar tabel dapat dipertahankan dengan cara proses enkripsi diterapkan pada semua tabel yang terelasi, tidak hanya sebagian tabel. (5) Proses pencarian menggunakan perintah query WHERE tidak dapat dilakukan karena data yang tersimpan bukan data plain text. (6) Penggunaan enkripsi pada database memberikan kelebihan yaitu tingkat keamanan yang bertambah. Ukuran data yang tujuh byte lebih besar tidak memberikan pengaruh yang signifikan. Kekurangan yang ditemukan adalah perintah pencarian SQL menjadi terbatas mengingat isi 17 dari tabel merupakan data cipher. Saran pengembangan yang dapat diberikan untuk penelitian lebih lanjut adalah sebagai berikut: (1) Pada penelitian ini, proses enkripsi dilakukan pada level aplikasi, artinya proses enkripsi dilakukan oleh sistem yang menggunakan database, bukan oleh database itu sendiri. Saran yang dapat diberikan adalah, proses enkripsi dilakukan pada level database, karena pada sistem database sudah ada beberapa fungsi enkripsi seperti AES dan DES [11]; (2) Untuk memperkecil ukuran data, dapat ditambahkan proses kompresi pada data yang akan disimpan pada database. 6. Daftar Pustaka [1] Schneier, B., Kelsey, J., Whiting, D., Wagner, D., Hall C. and Ferguson N. 1999. Performance Comparison of the AES Submissions. NIST: 15-34. Didik, M., Wahyudi, R., 2009. Enkripsi Field Tabel Database dengan PGP, Yogyakarta: AKPRIND. Thakur, J., Kumar, N., , 2011. DES, AES and Blowfish: Symetric Key Cryptography Algorithms Simulation Based Performance Analysis. International Journal of Emerging Technology and Advanced Engineering 1(2): 6-12. Abdillah, L., 2006. Perancangan Basisdata Sistem Informasi Penggajian (Studi Kasus pada Universitas ‟XYZ‟). Jurnal Ilmiah MATRIK 8 (2): 135152. Begg, Carolyn, 2005. Database Systems: A Practical Approach to Design, Implementation, and Management, 4th Edition, Essex: Pearson Education Limited. Nadeem, Aamer; "A Performance Comparison of Data Encryption Algorithms", IEEE 2005. Schneier, B. 1994. Description of a New Variable-Length Key, 64-Bit Block Cipher (Blowfish). Springer-Verlag: 191-204. Davies, Robert. 2002. Exclusive OR And Hardware Random Number Generator, www.robertnz.net/pdf/xor2.pdf. Diakses Tanggal 26 Mei 2013. www.lookuptables.com. Diakses Tanggal 26 Mei 2013 Hasibuan, Zainal, A., 2007, Metodologi Penelitian Pada Bidang Ilmu Komputer Dan Teknologi Informasi : Konsep, Teknik, dan Aplikasi, Jakarta: Ilmu Komputer Universitas Indonesia. MySQL, 2012. MySQL 5.5 Reference Manual: 12.13. Encryption and Compression Functions. https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html. Diakses tanggal 16 Februari 2013. [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] 18