Algoritma Knapsack Implementasi Algoritma Knapsack dan Algoritma Boldi-Vigna (ζ4) Pada Keamanan dan Kompresi File Teks

2. Algoritma Asimetris Kunci Publik Kriptografi asimetris asymmetric cryptography adalah algoritma yang menggunakan kunci yang berbeda untuk proses enkripsi dan dekripsi. Kunci enkripsi dapat disebarkan kepada umum yang dinamakan sebagai kunci publik public key, sedangkan kunci dekripsi disimpan untuk digunakan sendiri dan dinamakan sebagai kunci pribadi private key. Oleh karena itulah, kriptografi ini dikenal pula dengan nama kriptografi kunci publik public key cryptography. Pada kriptografi jenis ini, setiap orang yang berkomunikasi mempunyai sepasang kunci, yaitu kunci private dan kunci publik. Prosesnya, pengirim sender mengenkripsi pesan dengan menggunakan kunci publik sipenerima pesan receiver dan hanya si penerima pesanlah yang dapat mendekripsi pesan karena hanya ia yang mengetahui kunci private itu sendiri. Contoh algoritma yang termasuk algoritma kriptografi kunci publik diantaranya adalah RSA, Elgamal, DSA, Knapsack, dll Namira, 2013. Proses enkripsi dan dekripsi algoritma kunci asimetris dapat dilihat pada gambar 2.3 dibawah ini : Kunci Private,K1 Kunci Private,K2 Plaintext P Ciphertext C Plaintext P Gambar 2.3 Skema Kriptografi Asimetris

2.2 Algoritma Knapsack

Knapsack merupakan optimasi pengangkutan barang atau disebut juga optimasi kombinatoriol. Knapsack problem adalah salah satu masalah bagaimana cara menentukan pemilihan barang dari sekumpulan barang di mana setiap barang tersebut menmpunyai berat dan profit masing-masing, sehingga dari pemilihan barang tersebut didapatkan profit yang maksimum. Timothy, 2014 Tujuan Knapsack problem adalah agar dapat mendapatkan keuntungan yang maksimum dari pemilihan barang tanpa melebihi kapasitas daya tampung media Dekripsi � C = P Enkripsi � P = C Universitas Sumatera Utara transportasi tersebut. Dalam teori algoritma, persoalan Knapsack termasuk kedalam kelompok NP-complete. Persoalan yang termasuk NP-complete tidak dapat dipecahkan dalam orde waktu polynomial. Timothy, 2014 Jenis-jenis Knapsack adalah: 1. 01 Knapsack Problem Setiap barang hanya terdiri satu unit dan boleh diambil atau tidak sama sekali. 2. 0n Knapsack Problem Setiap barang terdiri dari n buat unit dan boleh diambil atau tidak sama sekali 3. Bounded Knapsack Problem Setiap barang tersedia n buah unit dan jumlahnya terbatas 4. Unbounded Knapsack Problem Setiap barang tersedia lebih dari satu unit dan jumlahnya tidak terbatas 5. Fractional Knapsack Problem Barang boleh diambil dalam bentuk pecahan atau sebahagian. Contohnya gula, garam, tepung dan lain-lain. Namira, 2013 Knapsack Problem: Diberikan bobot knapsack adalah M. Diketahui n buah objek yang masing-masing bobotnya adalah w1, w2, …, wn. Tentukan nilai bi sedemikian sehingga M = b1w1 + b2w2 + … + bnwn yang dalam hal ini, bi bernilai 0 atau 1. Jika bi = 1, berarti objek i dimasukkan kedalam knapsack, sebaliknya jika bi = 0, objek i tidak dimasukkan. Dalam teori algoritma, persoalan knapsack termasuk ke dalam kelompok NP-complete. Persoalan yang termasuk NP-complete tidak dapat dipecahkan dalam orde waktu polynomial. Algoritma Knapsack Sederhana Ide dasar dari algoritma kriptografi knapsack adalah mengkodekan pesan sebagai rangkaian solusi dari dari persoalan knapsack. Setiap bobot wi di dalam persoalan knapsack merupakan kunci private, sedangkan bit-bit plaintext menyatakan bi. Sayangnya, algoritma knapsack sederhana ini hanya dapat digunakan untuk enkripsi, tetapi tidak dirancang untuk dekripsi. Algoritma superincreasing Universitas Sumatera Utara Knapsack adalah algoritma yang lemah, karena ciphertext dapat didekripsi menjadi plainteksnya secara mudah dalam waktu lancar. Algoritma non-superincreasing Knapsack atau normal Knapsack adalah kelompok algoritma Knapsack yang sulit dari segi komputasi karena membutuhkan waktu dalam orde eksponensial untuk memecahkannya. Namun, superincreasing Knapsack dapat dimodifikasi menjadi non-superincreasing Knapsack dengan menggunakan kunci publik untuk enkripsi dan kunci rahasia untuk dekripsi. Kunci publik merupakan barisan non-superincreasing sedangkan kunci rahasia tetap merupakan barisan superincreasing. Modifikasi ini ditemukan oleh Martin Hellman dan Ralph Merkle. a. Cara membuat kunci publik dan kunci rahasia: 1. Tentukan barisan superincreasing. 2. Kalikan setiap elemen di dalam barisan tersebut dengan n modulo m. Modulus m seharusnya angka yang lebih besar daripada jumlah semua elemen di dalam barisan, sedangkan pengali n seharusnya tidak mempunyai faktor persekutuan dengan m. 3. Hasil perkalian akan menjadi kunci publik sedangkan barisan superincreasing semula menjadi kunci rahasia Namira, 2013. b. Enkripsi Algoritma Knapsack 1. Menggunakan kunci publik untuk melakukan enkripsi. 2. Plaintext dipecah menjadi blok bit yang panjangnya sama dengan kardinalitas barisan kunci publik. 3. Kalikan setiap bit didalam blok dengan elemen yang berkoresponden di dalam kunci publik. c. Dekripsi Algoritma Knapsack 1. Menggunakan kunci rahasia untuk melakukan dekripsi. 2. Menghitung nilai n -1 , yaitu kebalikan n modulo m, sedemikian sehingga n n -1 ≡ 1 mod m. Universitas Sumatera Utara 3. Mengalikan setiap kriptogram dengan n -1 mod m, lalu nyatakan hasil kalinya sebagai penjumlahan elemen-elemen kunci rahasia untuk memperoleh plaintext dengan menggunakan algoritma pencarian solusi superincreasing Timothy, 2014. Contoh : Misalkan barisan superincreasing adalah {2, 5, 9, 17, 25, 50}, m = 103, dan n = 31. Barisan non-superincreasing atau normal Knapsack dihitung sbb: 2 . 31 mod 103 = 62 5 . 31 mod 103 = 52 9 . 31 mod 103 = 73 17 . 31 mod 103 = 12 25 . 31 mod 103 = 54 50 . 31 mod 103 = 5 Jadi, kunci publik adalah {62, 52, 73, 12, 54, 5}, sedangkan kunci rahasia adalah {2,5, 9, 17, 25, 50}. Enkripsi dilakukan dengan cara yang sama seperti algoritma Knapsack sebelumnya. Mula-mula plaintext dipecah menjadi blok bit yang panjangnya sama dengan kardinalitas barisan kunci publik. Kemudian kalikan setiap bit di dalam blok dengan elemen yang berkoresponden di dalam kunci publik. Contoh : Misalkan Plaintext: 011001100000110110 dan kunci publik yang digunakan seperti pada Contoh sebelumnya. Plaintext dibagi menjadi blok yang panjangnya 6, kemudian setiap bit di dalam blok dikalikan dengan elemen yang berkorepsonden di dalam kunci publik: Blok plaintext ke-1 : 011001 Kunci publik : 62, 52, 73, 12, 54, 5 Kriptogram : 1 × 52 + 1 × 73+ 1 × 5 = 130 Blok plaintext ke-2 : 100000 Kunci publik : 62, 52, 73, 12, 54, 5 Kriptogram : 1 × 62 = 62 Universitas Sumatera Utara Blok plaintext ke-3 : 110110 Kunci publik : 62, 52, 73, 12, 54, 5 Kriptogram : 1 × 62 + 1 × 52 + 1 × 54 + 1 × 5 = 173 Jadi, ciphertext yang dihasilkan : 130, 62, 173 Dekripsi dilakukan dengan menggunakan kunci rahasia. Mula-mula penerima pesan menghitung n –1 , yaitu balikan n modulo m, sedemikian sehingga n . n –1 ≡ 1 mod m. Kekongruenan ini dapat dihitung dengan cara yang sederhana sebagai berikut disamping dengan cara yang sudah pernah diberikan pada Teori Bilangan Bulat: n . n –1 ≡ 1 mod m n . n –1 = 1 + km n –1 = 1 + kmn , k sembarang bilangan bulat Kalikan setiap kriptogram dengan n –1 mod m, lalu nyatakan hasil kalinya sebagai penjumlahan elemen-elemen kunci rahasia untuk memperoleh plaintext dengan menggunakan algoritma pencarian solusi superincreasing Knapsack. Contoh : Ciphertext dari 130, 62, 173 akan dideskripsikan dengan menggunakan kunci rahasia {2, 5, 9, 17, 25, 50}. Di sini, n = 31 dan m = 103. Nilai n –1 diperoleh sbb: n –1 = 1 + 103k31 Dengan mencoba k = 0, 1, 2, …, maka untuk k = 3 diperoleh n –1 bilangan bulat, yaitu: n –1 = 1 + 103 . 331 = 10 Ciphertext dari Contoh sebelumnya adalah 130, 62, 173 . Plaintext yang berkoresponden diperoleh kembali sebagai berikut: 130. 10 mod 103 = 64 = 5+ 9 + 50 , berkoresponden dengan 011001 62 . 10 mod 103 = 2 = 2 berkoresponden dengan 100000 173 . 10 mod 103 = 82 = 2 + 5 + 25 + 50 , berkoresponden dengan 110110 Jadi, plaintext yang dihasilkan kembali adalah: 011001 100000 110110 Universitas Sumatera Utara

2.3. Kompresi Data