Algoritma ini didasarkan pada persoalan 1/0 Knapsack
Problem yang berbunyi: Diberikan bobot knapsack adalah M. Diketahui n buah objek yang masing-masing bobotnya adalah w 1 , w 2 , , w n . Tentukan nilai b i sedemikian sehingga M = b 1 w 1 + b 2 w 2 + + b n w n (1 yang dalam hal ini, b i bernilai ! atau 1. "ika b i # 1, berarti objek i dimasukkan ke dalam knapsack, sebaliknya jika b i # !, objek i tidak dimasukkan. Dalam teori algoritma, persoalan knapsack termasuk ke dalam kelompok NP-complete. $ersoalan yang termasuk NP- complete tidak dapat dipe%ahkan dalam orde &aktu polinomial. 'de dasar dari algoritma knapsack adalah mengkodekan pesan sebagai rangkaian solusi dari dari persoalan knapsack. (etiap bobot w i di dalam persoalan knapsack merupakan kun%i rahasia, sedangkan bit-bit plainteks menyatakan b i . Contoh 1: )isalkan n # * dan w 1 # 1, w 2 # +, w , # *, w - # 11, w + # 1-, dan w * # 2!. $lainteks: 111!!1!1!11!!!!!!!!11!!! $lainteks dibagi menjadi blok yang panjangnya n, kemudian setiap bit di dalam blok dikalikan dengan w i yang berkorepsonden sesuai dengan persamaan (1: IF5054 Kriptora!i/"loritma Knapsack/#inal$i M%nir/IF-I&' 1 .lok plainteks ke-1 : 111!!1 Knapsack : 1, +, *, 11, 1-, 2! /riptogram : (1 1 0 (1 + 0 (1 * 0 (1 2! # ,2 .lok plainteks ke-2 : !1!11! Knapsack : 1, +, *, 11, 1-, 2! /riptogram : (1 + 0 (1 11 0 (1 1- # ,! .lok plainteks ke-, : !!!!!! Knapsack : 1, +, *, 11, 1-, 2! /riptogram : ! .lok plainteks ke-- : !11!!! Knapsack : 1, +, *, 11, 1-, 2! /riptogram : (1 + 0 (1 * # 11 "adi, %ipherteks yang dihasilkan: ,2 ,! ! 11
(ayangnya, algoritma knapsack sederhana di atas hanya dapat digunakan untuk enkripsi, tetapi tidak diran%ang untuk dekripsi. )isalnya, jika diberikan kriptogram # ,2, maka tentukan b 1 , b 2 , , b * sedemikian sehingga ,2= b 1 + +b 2 + *b , 0 11b - 0 1-b + 0 2!b * (2 (olusi persamaan (2 ini tidak dapat dipe%ahkan dalam orde &aktu polinomial dengan semakin besarnya n (dengan %atatan barisan bobot tidak dalam urutan menaik. 1amun, hal inilah yang dijadikan sebagai kekuatan algoritma knapsack. IF5054 Kriptora!i/"loritma Knapsack/#inal$i M%nir/IF-I&' 2 Superincreasing Knapsack
(%perincreasin knapsack adalah persoalan knapsack yang dapat dipe%ahkan dalam orde )(n (jadi, polinomial. 'ni adalah persoalan knapsack yang mudah sehingga tidak disukai untuk dijadikan sebagai algoritma kriptogra2i yang kuat. "ika senarai bobot disebut barisan s%perincreasin, maka kita dapat membentuk s%perincreasin knapsack. .arisan s%perincreasin adalah suatu barisan di mana setiap nilai di dalam barisan lebih besar daripada jumlah semua nilai sebelumnya. )isalnya 31, ,, *, 1,, 24, +25 adalah barisan s%perincreasin* tetapi 31, ,, -, 6, 1+, 2+5 bukan. (olusi dari s%perincreasin knapsack (yaitu b 1 , b 2 , , b n
mudah di%ari sebagai berikut (berarti sama dengan mendekripsikan %ipherteks mnejadi plainteks semula: 1. "umlahkan semua bobot di dalam barisan. 2. .andingkan bobot total dengan bobot terbesar di dalam barisan. "ika bobot terbesar lebih ke%il atau sama dengan bobot total, maka ia dimasukkan ke dalam knapsack, jika tidak, maka ia tidak dimasukkan. ,. /urangi bobot total dengan bobot yang telah dimasukkan, kemudian bandingkan bobot total sekarang dengan bobot terbesar selanjutnya. Demikian seterusnya sampai seluruh bobot di dalam barisan selesai dibandingkan. -. "ika bobot total menjadi nol, maka terdapat solusi persoalan s%perincreasin knapsack , tetapi jika tidak nol, maka tidak ada solusinya. IF5054 Kriptora!i/"loritma Knapsack/#inal$i M%nir/IF-I&' ,
Contoh 2: )isalkan bobot-bobot yang membentuk barisan s%perincreasin adalah 32, ,, *, 1,, 24, +25, dan diketahui bobot knapsack (M # 4!. /ita akan men%ari b 1 , b 2 , , b * sedemikian sehingga 4!= 2b 1 + ,b 2 + *b , 0 1,b - 0 24b + 0 +2b * 7aranya sebagai berikut: (i .andingkan 4! dengan bobot terbesar, yaitu +2. /arena +2 4!, maka +2 dimasukkan ke dalam knapsack. (ii .obot total sekarang menjadi 4! 8 +2 # 19. .andingkan 19 dengan bobot terbesar kedua, yaitu 24. /arena 24 : 19, maka 24 tidak dimasukkan ke dalam knapsack. (iii .andingkan 19 dengan bobot terbesar berikutnya, yaitu 1,. /arena 1, 19, maka 1, dimasukkan ke dalam knapsack. (i; .obot total sekarang menjadi 19 8 1, # +. (; .andingkan + dengan bobot terbesar kedua, yaitu *. /arena * : +, maka * tidak dimasukkan ke dalam knapsack. (;i .andingkan + dengan bobot terbesar berikutnya, yaitu ,. /arena , +, maka , dimasukkan ke dalam knapsack. (;ii .obot total sekarang menjadi + 8 , # 2. (;iii .andingkan 2 dengan bobot terbesar berikutnya, yaitu 2. /arena 2 2, maka 2 dimasukkan ke dalam knapsa%k. (i< .obot total sekarang menjadi 2 8 2 # !. /arena bobot total tersisa # !, maka solusi persoalan s%perincreasin knapsack ditemukan. .arisan bobot yang dimasukkan ke dalam knapsack adalah 32, ,, 8 , 1,, 8 , +25 sehingga IF5054 Kriptora!i/"loritma Knapsack/#inal$i M%nir/IF-I&' - 4! # (1 2 0 (1 , 0 (! * 0 (1 1, 0 (! 24 0 (1 +2 Dengan kata lain, plainteks dari kriptogram 4! adalah 11!1!1. Algoritma Knapsack Kunci-Publik Algoritma s%perincreasin knapsack adalah algoritma yang lemah, karena %ipherteks dapat didekripsi menjadi plainteksnya se%ara mudah dalam &aktu lanjar. Algoritma non-s%perincreasin knapsack atau normal knapsack adalah kelompok algoritma knapsack yang sulit (dari segi komputasi karena membutuhkan &aktu dalam orde eksponensial untuk meme%ahkannya. 1amun, s%perincreasin knapsack dapat dimodi2ikasi menjadi non-s%perincreasin knapsack dengan menggunakan kun%i publik (untuk enkripsi dan kun%i rahasia (untuk dekripsi. /un%i publik merupakan barisan non- s%perincreasin sedangkan kun%i rahasia tetap merupakan barisan s%perincreasin. )odi2ikasi ini ditemukan oleh )artin =ellman dan >alph )erkle. 7ara membuat kun%i publik dan kun%i rahasia: 1. Tentukan barisan s%perincreasin. 2. /alikan setiap elemen di dalam barisan tersebut dengan n modulo m. )odulus m seharusnya angka yang lebih besar daripada jumlah semua elemen di dalam barisan, sedangkan pengali n seharusnya tidak mempunyai 2aktor persekutuan dengan m. IF5054 Kriptora!i/"loritma Knapsack/#inal$i M%nir/IF-I&' + 2. =asil perkalian akan menjadi kun%i publik sedangkan barisan s%perincreasin semula menjadi kun%i rahasia. Contoh 3: )isalkan barisan s%perincreasin adalah 32, ,, *, 1,, 24, +2, m # 1!+, dan n # ,1. .arisan non-s%perincreasin (atau normal knapsack dihitung sbb: 2 ,1 mod 1!+ # *2 , ,1 mod 1!+ # 6, * ,1 mod 1!+ # 91 1, ,1 mod 1!+ # 99 24 ,1 mod 1!+ # 1!2 +2 ,1 mod 1!+ # ,4 "adi, kun%i publik adalah 3*2, 6,, 91, 99, 1!2, ,45, sedangkan kun%i rahasia adalah 32, ,, *, 1,, 24, +25. Enkripsi ?nkripsi dilakukan dengan %ara yang sama seperti algoritma knapsack sebelumnya. )ula-mula plainteks dipe%ah menjadi blok bit yang panjangnya sama dengan kardinalitas barisan kun%i publik. /alikan setiap bit di dalam blok dengan elemen yang berkoresponden di dalam kun%i publik. Contoh 4: )isalkan IF5054 Kriptora!i/"loritma Knapsack/#inal$i M%nir/IF-I&' * $lainteks: !11!!!11!1!11!111! dan kun%i publik yang digunakan seperti pada 7ontoh ,. $lainteks dibagi menjadi blok yang panjangnya *, kemudian setiap bit di dalam blok dikalikan dengan elemen yang berkorepsonden di dalam kun%i publik: .lok plainteks ke-1 : !11!!! /un%i publik : *2, 6,, 91, 99, 1!2, ,4 /riptogram : (1 6, 0 (1 91 # 14- .lok plainteks ke-2 : 11!1!1 /un%i publik : *2, 6,, 91, 99, 1!2, ,4 /riptogram : (1 *2 0 (1 6, 0 (1 99 0 (1 ,4 # 29! .lok plainteks ke-, : 1!111! /un%i publik : *2, 6,, 91, 99, 1!2, ,4 /riptogram : (1 *2 0 (1 91 0 (1 99 0 (1 1!2 # ,,, "adi, %ipherteks yang dihasilkan : 14-, 29!, ,,,
Dekripsi Dekripsi dilakukan dengan menggunakan kun%i rahasia. )ula-mula penerima pesan menghitung n 81 , yaitu balikan n modulo m, sedemikian sehingga n n 81 1 (mod m. /ekongruenan ini dapat dihitung dengan %ara yang sederhana sebagai berikut (disamping dengan %ara yang sudah pernah diberikan pada Teori .ilangan .ulat: IF5054 Kriptora!i/"loritma Knapsack/#inal$i M%nir/IF-I&' 4 n n 81 1 (mod m n n 81 # 1 0 km n 81 # (1 0 km@n , k sembarang bilangan bulat /alikan setiap kriptogram dengan n 81 mod m, lalu nyatakan hasil kalinya sebagai penjumlahan elemen-elemen kun%i rahasia untuk memperoleh plainteks dengan menggunakan algoritma pen%arian solusi s%perincreasin knapsack. Contoh 5: /ita akan mendekripsikan %ipherteks dari 7ontoh - dengan menggunakan kun%i rahasia 32, ,, *, 1,, 24, +25. Di sini, n # ,1 dan m # 1!+. 1ilai n 81
diperoleh sbb: n 81 # (1 0 1!+k@,1 Dengan men%oba k # !, 1, 2, , maka untuk k # 19 diperoleh n 81
bilangan bulat, yaitu n 81 # (1 0 1!+ 19@,1 # *1 7ipherteks dari 7ontoh - adalah 14-, 29!, 222. $lainteks yang berkoresponden diperoleh kembali sebagai berikut: 14- *1 mod 1!+ # 6 # , 0 *, berkoresponden dengan !11!!! 29! *1 mod 1!+ # 4! # 2 0 , 0 1, 0 +2, berkoresponden dengan !11!!! ,,, *1 mod 1!+ # -9 # 2 0 * 0 1, 0 24, berkoresponden dengan 1!111! IF5054 Kriptora!i/"loritma Knapsack/#inal$i M%nir/IF-I&' 9 "adi, plainteks yang dihasilkan kembali adalah: !11!!! !11!!! 1!111! Implementasi Knapsack Akuran %ipherteks yang dihasilkan lebih besar daripada plainteksnya, karena enkripsi dapat menghasilkan kriptogram yang nilai desimalnya lebih besar daripada nilai desimal blok plainteks yang dienkripsikan. Antuk menambah kekuatan algoritma knapsack, kun%i publik maupun kun%i rahasia seharusnya paling sedikit 2+! elemen, nilai setiap elemen antara 2!! sampai -!! bit panjangnya, nilai modulus antara 1!! sampai 2!! bit. Dengan nilai-nilai knapsack sepanjang itu, dibutuhkan 1! -*
tahun untuk menemukan kun%i se%ara br%te !orce, dengan asumsi satu juta per%obaan setiap detik. Keamanan Knapsack (ayangnya, algoritma knapsa%k dinyatakan sudah tidak aman, karena knapsack dapat dipe%ahkan oleh pasangan kriptogra2er (hamir dan Bippel. )ereka merumuskan trans2ormasi yang memungkinkan mereka merekonstruksi s%perincreasin knapsack dari normal knapsack. IF5054 Kriptora!i/"loritma Knapsack/#inal$i M%nir/IF-I&' 6