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

5

BAB 2
LANDASAN TEORI

2.1 Kriptografi
2.1.1 Pengertian Kriptografi

Kriptografi pada awalnya dijabarkan sebagai ilmu yang mempelajari bagaimana
menyembunyikan pesan. Pada kriptografi klasik umumnya merupakan teknik
penyandian dengan kunci simetrik dan menyembunyikan pesan yang memiliki arti ke
sebuah pesan yang nampaknya tidak memiliki arti dengan metode subsitusi
(pergantian huruf) dan/atau transposisi (pertukaran tempat). (Sadikin, 2012).
Namun pada pengertian modern kriptografi adalah ilmu yang bersandarkan pada
teknik matematika untuk berurusan dengan keamanan informasi seperti kerahasian,
keutuhan data dan otentikasi entitas. Jadi pengertian kriptografi modern adalah tidak
saja berurusan hanya dengan penyembunyian pesan namun lebih pada sekumpulan
teknik yang menyediakan keamanan informasi (Sadikin, 2012).

2.1.2 Sistem Kriptografi


Sistem kriptografi terdiri dari 5 bagian yaitu, (Stinson, 2002) :
1. Plaintext
Plaintext yaitu pesan atau data dalam bentuk aslinya yang dapat terbaca. Plaintext

adalah masukan bagi algoritma enkripsi. Untuk selanjutnya digunakan istilah teks
asli sebagai pedanan kata plaintext.
2. Secret Key
Secret key yang juga merupakan masukan bagi algoritma enkripsi merupakan nilai

yang bebas terhadap teks asli dan menentukan hasil keluaran algoritma enkripsi.
Untuk selanjutnya digunakan istilah kunci rahasia sebagai padanan kata secret key.

Universitas Sumatera Utara

6

3. Ciphertext
Ciphertext adalah keluaran algoritma enkripsi. Ciphertext dapat dianggap sebagai

pesan dalam bentuk tersembunyi.

4. Algoritma Enkripsi

Algoritma enkripsi memiliki 2 masukan teks asli dan kunci rahasia. Algoritma
enkripsi melakukan transformasi terhadap teks asli sehingga menghasilkan teks
sandi.
5. Algoritma Dekripsi

Algoritma dekripsi memiliki 2 masukan yaitu teks sandi dan kunci rahasia.
Algoritma dekripsi memulihkan kembali teks sandi menjadi teks asli bila kunci
rahasia yang dipakai algoritma dekripsi sama dengan rahasia yang dipakai
algoritma enkripsi.
Contoh sistem kriptografi konvensional dapat dilihat pada gambar 2.1.
Eve
Alice
M

Bob

Algoritma


Algoritma

C

Enkripsi

Saluran publik

M

Dekripsi

K

Sumber
kunci

Saluran Aman
(Sumber: Sadikin, Rifki. 2012)


Gambar 2.1 Sistem Kriptografi Konvensional

Sistem enkripsi harus memenuhi kaidah correctness yaitu untuk memenuhi setiap
K ∈ κ adalah himpunan kunci dan terdapat teks sandi hasil enkripsi teks asli m, c =
� (m)

maka harus berlaku

� (c)

= m untuk semua kemungkinan teks asli.

Pada gambar 1 kunci rahasia dibangkitkan oleh pembangkit kunci dan dikirim
melalui saluran aman ke pihak penyandian (encryptor) maupun penyulih sandi
(decryptor). Teks sandi dikirim melalui saluran umum sehingga ada pihak ketiga

yang dapat membaca teks sandi itu (Sadikin, 2012).

Universitas Sumatera Utara


7

2.1.3 Jenis Kriptografi

Berdasarkan jenis kuncinya algoritma kriptografi terdiri dari dua jenis yaitu:
1. Algoritma Simetris (Konvensional)
Algoritma simetris (symmetric cryptography) adalah algoritma yang menggunakan
kunci enkripsi yang sama dengan kunci dekripsinya, sehingga algoritma ini disebut
juga sebagai single key algorithm. Algoritma ini disebut juga konvensional karena
algoritma jenis ini biasa digunakan sejak berabad-abad yang lalu. Sebelum
melakukan komunikasi, pengirim dan penerima pesan harus menyetujui suatu
kunci tertentu yang sama untuk dipakai secara bersama. Keamanan sistem
kriptografi simetri tergantung pada kerahasiaan kunci karena membocorkan kunci
berarti orang lain bisa mengenkripsi dan mendekripsi pesan. Agar komunikasi tetap
aman, maka keberadaan kunci harus tetap dirahasiakan dari pihak yang tidak
berkepentingan dengan cara pengirim harus memastikan bahwa jalur yang
digunakan dalam pendistribusian kunci adalah jalur yang aman atau memastikan
bahwa pihak yang ditunjuk membawa kunci untuk pertukaran data adalah pihak
yang dapat dipercaya. Algoritma-algoritma yang termasuk dalam kriptografi
simetris adalah semua algoritma kriptografi klasik seperti hill cipher, vigenere

cipher, playfair cipher, dll. Beberapa algoritma kriptografi modern juga termasuk

kriptografi simetris, diantaranya adalah IDEA, DES (Data Encryption Standard),
Blowfish, Twofish, Tripel DES, Serpent, AES (Advanced Encryption Standard),
RC2, RC4, RC5, RC6, dll (Namira, 2013).

Proses enkripsi-dekripsi algoritma kunci simetris dapat dilihat pada gambar 2.2.

Kunci Private, K

Plaintext (P)

Enkripsi
� (P)

=C

Kunci Private, K

Ciphertext (C) Dekripsi

� (C)

Plaintext (P)

=P

Gambar 2.2 Skema Kriptografi Simetris

Universitas Sumatera Utara

8

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

Plaintext (P)

Enkripsi


Ciphertext (C)

(P) = C

Kunci Private,K2

Dekripsi


Plaintext (P)


(C) = 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

Universitas Sumatera Utara

9

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. 0/1 Knapsack Problem

Setiap barang hanya terdiri satu unit dan boleh diambil atau tidak sama sekali.
2. 0/n 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

10

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

11

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

12

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 + km)/n , 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 + 103k)/31
Dengan mencoba k = 0, 1, 2, …, maka untuk k = 3 diperoleh n–1 bilangan bulat, yaitu:
n–1 = (1 + 103 . 3)/31 = 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

13

2.3. Kompresi Data
Kompresi data merupakan suatu upaya untuk mengurangi jumlah bit yang
digunakan untuk menyimpan atau mentransmisikan data. kompresi data meliputi
berbagai teknik kompresi yang diterapkan dalam bentuk perangkat lunak (Software)
maupun perangkat keras (Hardware). Bila ditinjau dari penggunaannya, kompresi
data dapat bersifat umum untuk segala keperluan atau bersifat khusus untuk keperluan
tertentu. Keuntungan data yang terkompresi antara lain: penyimpanan data lebih
hemat ruang, mempersulit pembacaan data oleh pihak yang tidak berkepentingan dan
memudahkan distribusi data dengan media removable seperti flashdisk, CD, DVD, dll
(Tjatur, 2011).
Saat ini terdapat berbagai tipe algoritma kompresi, antara lain: Huffman, IFO,
LZHUF, LZ77 dan variannya (LZ78, LZW, GZIP), Dynamic Markov Compression
(DMC), Block-Sorting Lossless, Run-Length, Shannon-Fano, Arithmetic, PPM
(Prediction by Partial Matching), Burrows-Wheeler Block Sorting, dan Half Byte.
(Namira, 2013).

2.3.1. Klasifikasi tipe kompresi data

Secara umum, kompresi data dapat diklasifikasikan ke dalam 2 macam, yaitu (Arief,
2006):

1. Kompresi Lossy
Teknik kompresi dimana data yang sudah dikompresi tidak dapat dikembalikan
seperti data semula, dinamakan lossy atau distortive atau noise-incurring.
Kompresi seperti ini digunakan untuk gambar dan suara dimana kehilangan (loss)
data dapat diijinkan dalam kasus tertentu. Contoh data adalah adalah JPEG dan
GIF untuk gambar, MPEG untuk video dan MP3 (MPEG Layer-3) untuk format
suara.
Contoh: metode kompresi lossy adalah Transform Coding, Wavelet, dan lain-lain.

2. Kompresi Lossless
Kompresi lossless adalah teknik kompresi untuk data seperti file program, file
dokumen dan record basis data dimana sama sekali tidak diijinkan perbedaan

Universitas Sumatera Utara

14

antara data awal (sebelum kompresi) dan data setelah dilakukan dekompresi.
Contoh program kompresi lossless seperti winzip, winrar , dan pkzip. Contoh
metode lossless adalah Boldi-Vigna, Shannon-Fano Coding, Huffman Coding,
Arithmetic Coding, Run Length Encoding dan lain sebagainya (Rachmat, 2015).

2.3.2

Dekompresi Data

Dekompresi adalah kebalikan dari proses kompresi. Setiap proses kompresi data
tentu saja membutuhkan proses dekompresi kembali untuk mendapatkan data
yang sesungguhnya. Pada praktek kasusnya, dekompresi yang baik atau dapat
dikatakan efisien jika algoritma dekompresinya sesuai dengan algoritma kompresi
pada kasus itu sendiri. Audio, Video, dan Foto adalah contoh data yang sangat
sering dilakukan proses kompresi dan dekompresi tentu saja menggunakan
dengan algoritma yang sama. Adapun hubungan antara kompresi dan dekompresi
dapat dilihat pada gambar dibawah ini (Namira, 2013) :

Output

Compression
Input Source File

Compression

Algorithm

File

Decompression

Input

Output

Algorithm

Compression File

decompresion
File

Gambar 2.4 Compression Dan Decompression
Aplikasi

dekompresi

data

sering

juga

disebut

dengan

dekompresor

(decompresor ). Bagaimanapun dekompresi adalah salah satu solusi terbaik untuk
mengembalikan data yang telah mengalami proses kompresi (compressed Files).
Kompresor dan dekompresor dapat dikatakan sebagai dua proses yang saling
berkaitan baik pada sumber dan tujuan masing-masing proses. Pada kasusnya,
source disebut dengan coder dan destinasi pesan disebut dengan decoder .

Universitas Sumatera Utara

15

2.4 Algoritma Boldi-Vigna (ζ4)
Zeta (ζ) kode juga dikenal sebagai Boldi-Vigna code, diperkenalkan oleh Paolo Boldi
dan Sebastiano Vigna sebagai keluarga Variable-Length Code yang merupakan
pilihan terbaik untuk kompresi. Dimulai dengan hukum Zipf, seorang kuasa hukum
empiris [Zipf 07] diperkenalkan oleh Linguis George K. Zipf. Menyatakan bahwa
frekuensi setiap kata dalam bahasa alami kira-kira berbanding terbalik dengan
posisinya dalam tabel frekuensi.
Boldi-Vigna kode zeta dimulai dengan bilangan bulat k positif yang menjadi

menyusut oleh Faktor kode. Himpunan semua bilangan bulat positif dibagi menjadi
[20, 2k - 1], [2k, 22k - 1], [22k, 23k - 1], dan secara umum [2hk, 2

(h + 1) k

- 1]. Panjang

setiap interval adalah 2 (h + 1) k - 2hk (Salomon, 2007).
Diberikan interval [0, z-1] dan sebuah integer x di interval ini, pertama kita
hitung s =[ log2 z]. Jika x