Anda di halaman 1dari 9

Algoritma Knapsack

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

Anda mungkin juga menyukai