BAB 2 LANDASAN TEORI
2.1
Kriptografi
2.1.1
Pengertian kriptografi
Kriptografi merupakan metode untuk mengirimkan pesan rahasia sehingga hanya penerima pesan yang dimaksud dapat menghapus, menyamarkan atau membaca pesan tersebut. Kriptografi berasal dari kata bahasa Yunani yaitu kryptos yang berarti tersembunyi dan grapein yang berarti menulis. Pesan asli disebut plainteks dan pesan yang telah disandikan disebut cipherteks. Pesan yang telah dienkapsulasi dan dikirim disebut kriptogram. Proses mengubah plainteks menjadi cipherteks disebut enkripsi. Membalikkan proses cipherteks menjadi plainteks disebut dekripsi. Siapapun yang terlibat dalam kriptografi disebut kriptografer. Pada sisi lain, studi tentang teknik matematika karena berusaha untuk mengalahkan metode kriptografi disebut pembacaan sandi. Cryptanalysts adalah orang-orang berlatih pembacaan sandi [7] Plainteks
Key
Enciphering
Cipherteks
Cipherteks
Key
Deciphering
Plainteks
Gambar 2.1. Proses Enchiphering dan Deciphering [5]
Universitas Sumatera Utara
2.1.2
Enkripsi dan Dekripsi
Proses
menyandikan
plainteks
menjadi
cipherteks
disebut
enkripsi
(encryption) atau disebut juga enciphering. Sedangkan proses mengembalikan cipherteks menjadi plainteks disebut dekripsi (decryption) atau dechipering. Enkripsi dan dekripsi dapat diterapkan pada pesan yang dikirim ataupun pesan yang disimpan. Istilah encryption of data in motion mengacu pada enkripsi data yang ditransmisikan melalui saluran komunikasi, sedangkan istilah decryption of data at rest mengacu pada enkripsi data yang ada didalam storage. [8]
Enkripsi data yang sering digunakan adalah Fast Block dan Strem Cipher. Kedua teknik ini adalah contoh dari algoritma simetris. Kekurangan dari algoritma simetris adalah tingkat kesulitan dalam menentukan kunci rahasia (private key) untuk didistribusikan . Oleh karena itu kita harus mengetahui teknik dari algoritma kriptografi yang kita gunakan untuk membuat sebuah data enkripsi.
Untuk mengembalikan plainteks yang telah dienkripsi, membutuhkan teknik dekripsi. Dekripsi adalah teknik yang digunakan untuk menguraikan data rahasia atau pesan yang telah dienkripsi kembali kebentuk semula atau bentuk aslinya dan menjadi pesan yang dapt dibaca dan dimengerti maksudnya. Adapun rumus untuk proses enkripsi dan dekripsi adalah sebagai berikut: c = ek (m)…………………………………2.1[11] dimana: -
m adalah plainteks
-
e adalah fungsi penyamaran
-
k adalah kunci rahasia
-
c adalah cipherteks
dan untuk proses dekripsi dapat digunakan persamaan sebagai berikut: m = dk (c)…………………………………2.2[11] dimana : -
m adalah plainteks
Universitas Sumatera Utara
-
d adalah fungsi dekripsi
-
k adalah kunci
-
c adalah cipherteks
kedua persamaan ini adalah teknik enkripsi dan dekripsi yang menggunakan kuncipada proses permutasinya. [11]
2.1.3
Jenis kriptografi
2.1.2.1 Algoritma simetris
Adalah algoritma dimana kunci untuk enkripsi bisa dihitung dari kunci dekripsi, dan sebaliknya. Algoritma simetris kadang disebut juga algoritma konvensional. Sebagian besar algoritma simetris menggunakan kunci enkripsi dan kunci dekripsi yang sama. Algoritma simetris sering juga disebut sebagai algoritma kunci rahasia, algoritma kunci tunggal atau algoritma satu kunci. Pengirim dan penerima harus menyetujui suatu kunci tertentu sebelum mereka dapat berkomunikasi dengan aman. Keamanan algoritma simetris tergantung pada kunci, membocorkan kunci berarti bahwa orang lain dapat mengenkripsi dan mendekripsi pesan. Agar komunikasi tetap aman, kunci harus tetap dirahasiakan. Yang termasuk algoritma kunci simetris adalah OTP, DES, RC2, RC4, RC5, IDEA, Twofish, Magenta, FEAL, SAFER, LOKI, CAST, Rijndael (AES), Blowfish, GOST, A5, Kasumi dan lain-lainnya [9].
plainteks (P)
Enkripsi
Dekripsi
c = 𝑒𝑘 (m)
𝑚 = 𝑑𝑘 (𝑐)
plainteks (P)
cipherteks (C)
Gambar 2.2 Kriptografi Simetris
Keterangan : -
m adalah plainteks
Universitas Sumatera Utara
-
e adalah fungsi enkripsi
-
d adalah fungsi dekripsi
-
k adalah kunci
-
c adalah cipherteks
2.1.2.2 Algoritma Kunci Publik
Sering juga disebut sebagai algoritma asimetris. Merupakan algoritma dimana kunci untuk mengenkripsi pesan berbeda dengan kunci yang digunakan untuk mendekripsi. Bahkan kunci untuk mendekripsi tidak bisa dihitung dari kunci untuk mengekripsi.
Dinamakan kunci publik, sebab kunci untuk enkripsi tidak rahasia dan dapat diketahui oleh siapapun (diumumkan ke publik), sementara kunci untuk dekripsi hanya diketahui oleh penerima pesan. Pada kriptografi jenis ini, setiap orang yang berkomunikasi mempunyai sepasang kunci, yaitu kunci privat dan kunci publik.
Pengirim mengenkripsi pesan dengan menggunakan kunci publik si penerima pesan. Hanya penerima pesan yang dapat mendekripsikan pesan karena hanya dia yang mengetahui kunci privatnya sendiri [9].
plainteks (P)
Enkripsi
Dekripsi
c = 𝑒𝐸 (m)
𝑚 = 𝑑𝐷 (𝑐)
plainteks (P)
cipherteks (C)
Gambar 2.3 Kriptografi Kunci Publik Keterangan
:
-
m adalah plainteks
-
e adalah fungsi enkripsi
-
E adalah kunci publik
-
d adalah fungsi dekripsi
Universitas Sumatera Utara
-
D adalah kunci rahasia
-
c adalah cipherteks
2.1.4
Algoritma Knapsack
Algoritma Knapsack juga adalah algoritma kriptografi kunci-publik. Keamanan algoritma ini terletak pada sulitnya memecahkan persoalan knapsack (Knapsack Problem). Knapsack artinya karung/kantung. Karung mempunyai kapasitas muat terbatas. Barang-barang dimasukkan ke dalam karung hanya sampai batas kapasitas maksimum karung saja [8].
Jenis-jenis Knapsack adalah: 1. 0/1 Knapsack Problem Setiap barang hanya terdiri satu unit dan boleh diambil atau tidak sama sekali [4] 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 tersediah 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 [2].
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
(2.1)[8]
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.
Universitas Sumatera Utara
Dalam teori algoritma, persoalan knapsack termasuk ke dalam kelompok NPcomplete. Persoalan yang termasuk NP-complete tidak dapat dipecahkan dalam orde waktu polynomial [8].
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 privat, sedangkan bit-bit plainteks menyatakan bi. Sayangnya, algoritma knapsack sederhana ini hanya dapat digunakan untuk enkripsi, tetapi tidak dirancang untuk dekripsi.
Algoritma superincreasing Knapsack adalah algoritma yang lemah, karena cipherteks dapat didekripsi menjadi plainteksnya secara mudah dalam waktu lanjar. 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 [8].
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.
Contoh : Misalkan barisan superincreasing adalah {2, 5, 9, 17, 25, 50), m = 103, dan n = 31.
Universitas Sumatera Utara
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 plainteks 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 Plainteks: 011001100000110110 dan kunci publik yang digunakan seperti pada Contoh sebelumnya. Plainteks dibagi menjadi blok yang panjangnya 6, kemudian setiap bit di dalam blok dikalikan dengan elemen yang berkorepsonden di dalam kunci publik:
Blok plainteks ke-1
: 011001
Kunci publik
: 62, 52, 73, 12, 54, 5
Kriptogram
: (1 × 52) + (1 × 73)+ (1 × 5) = 130
Blok plainteks ke-2
: 100000
Kunci publik
: 62, 52, 73, 12, 54, 5
Kriptogram
: (1 × 62) = 62
Blok plainteks ke-3
: 110110
Kunci publik
: 62, 52, 73, 12, 54, 5
Universitas Sumatera Utara
Kriptogram
: (1 × 62) + (1 × 52) + (1 × 54) + (1 × 5) = 173
Jadi, cipherteks 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 plainteks
dengan menggunakan algoritma pencarian solusi superincreasing Knapsack.
Contoh : Cipherteks 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
Cipherteks dari Contoh sebelumnya adalah 130, 62, 173
. Plainteks yang
berkoresponden diperoleh kembali sebagai berikut: 130 ⋅ 10 mod 103 = 64 = 5+ 9 + 50 , berkoresponden dengan 011001
Universitas Sumatera Utara
62 ⋅ 10 mod 103 = 2 = 2 berkoresponden dengan 100000
173 ⋅ 10 mod 103 = 82 = 2 + 5 + 25 + 50 , berkoresponden dengan 110110
Jadi, plainteks yang dihasilkan kembali adalah: 011001 100000 110110
2.2
Teori Dasar Kompresi
2.2.1
Kompresi data
Kompresi ialah proses pengubahan sekumpulan data menjadi suatu bentuk kode untuk menghemat kebutuhan tempat penyimpanan dan waktu untuk transmisi data . Saat ini terdapat berbagai tipe algoritma kompresi , antara lain: Huffman, IFO, LZHUF, LZ77 dan variannya (LZ78, LZW, GZIP), Dynamic Markov Compression (DMC), BlockSorting Lossless, Run-Length, Shannon-Fano, Arithmetic, PPM (Prediction by Partial Matching), Burrows-Wheeler Block Sorting, dan Half Byte. Berdasarkan tipe peta kode yang digunakan untuk mengubah pesan awal (isi file input) menjadi sekumpulan codeword, metode kompresi terbagi menjadi dua kelompok, yaitu : 1. Metode statik : menggunakan peta kode yang selalu sama. Metode ini membutuhkan dua fase (two-pass): fase pertama untuk menghitung probabilitas kemunculan tiap simbol/karakter dan menentukan peta kodenya, dan fase kedua untuk mengubah pesan menjadi kumpulan kode yang akan ditransmisikan. Contoh: algoritma Huffman statik. 2. Metode dinamik (adaptif) : menggunakan peta kode yang dapat berubah dari waktu ke waktu. Metode ini disebut adaptif karena peta kode mampu beradaptasi terhadap perubahan karakteristik isi file selama proses kompresi berlangsung. Metode ini bersifat onepass, karena hanya diperlukan satu kali pembacaan terhadap isi file. Contoh: algoritma LZW dan DMC.
Universitas Sumatera Utara
Berdasarkan teknik pengkodean/pengubahan simbol yang digunakan, metode kompresi dapat dibagi ke dalam tiga kategori, yaitu : 1. Metode symbolwise : menghitung peluang kemunculan dari tiap symbol dalam file input, lalu mengkodekan satu simbol dalam satu waktu, dimana simbol yang lebih sering muncul diberi kode lebih pendek dibandingkan simbol yang lebih jarang muncul, contoh: algoritma Huffman. 2. Metode dictionary : menggantikan karakter/fragmen dalam file input dengan indeks lokasi dari karakter/fragmen tersebut dalam sebuah kamus (dictionary), contoh:algoritma LZW. 3. Metode predictive : menggunakan model finite-context atau finite-state untuk memprediksi distribusi probabilitas dari simbol-simbol selanjutnya; contoh: algoritma DMC.
Ada beberapa faktor yang sering menjadi pertimbangan dalam memilih suatu metode kompresi yang tepat, yaitu kecepatan kompresi, sumber daya yang dibutuhkan (memori, kecepatan PC), ukuran file hasil kompresi, besarnya redundansi, dan kompleksitas algoritma.
Tidak ada metode kompresi yang paling efektif untuk semua jenis file. Dalam penelitian ini algoritma yang digunakan hanya Run-Length Encoding. Karena Algoritma tersebut cepat dan mudah untuk mengeksekusi [6].
2.2.2
Dekompresi data
Dekompresi adalah kebalikan dari proses kompresi. Setiap proses kompresi data tentu saja membutuhkan proses dekompresi kembali untuk mendapatkan data yang sesungguhnya.
Universitas Sumatera Utara
Pada praktek kasusnta, dekompresi yang baik atau dapat dikatakan efisien jika algoritma dekompresinya sesuai dengan algoritma kompresi pasa 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:
Input Source File
Input Compressed File
Compression Algorithm
Decompression Algorithm
Output Compressed File
Output Decompressed File
Gambar 2.4 Compression dan Decompression [10]
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. [10]
Proses transmisi antara sebuah coder dan decoder dapat kita lihat pada gambar dibawah ini:
Universitas Sumatera Utara
Source (Original Message)
Coder
Coded Message
Transmission Chanel
Decoder
Destination (Decoded Message)
Gambar 2.5 Coder dan Decoder [10]
2.2.3
Run Length Encoding (RLE)
Mengurangi ukuran karakter string yang berulang [1]. Berulang ini biasa disebut Run. Biasanya RLE mengkodekan run dari simbol menjadi dua byte, jumlah dan simbol. RLE dapat memampatkan semua jenis data terlepas dari isi informasi, tetapi isi dari( data yang akan dikompresi mempengaruhi rasio kompresi. RLE tidak dapat mencapai rasio kompresi yang tinggi dibandingkan dengan metode kompresi lainnya, tapi. mudah untuk menerapkan dan cepat untuk mengeksekusi. RLE didukung oleh sebagian besar format file bitmap seperti tiff, BMP, PCX. Contoh: S= 11111111111111100000000000000000001111
Ini dapat direpresentasikan sebagai 1 sebanyak Lima Belas, 0 sebanyak sembilan belas, dan empat buat 1, yaitu (15,1), (19,0), (4,1). karena pengulangan jumlah maksimum adalah 19, yang dapat direpresentasikan dengan 5 bit, dapat dikodekan sebagai bit stream (01111,1), (10011,0), (00100,1) [1].
Contoh dari lain algoritma RLE: 1. KKKKKKK Adalah perulangan karakter “K” sebanyak 7 kali, ini dapat dikatakan sebagai run length karena mengulangi karakter yang sebanyak 7 kali. 2. ABCDEFG
Universitas Sumatera Utara
Adalah contoh yang tidak akurat, karena tidak mengalami perulangan pada setiap karakternya. Ketujuh karakter diatas merupakan tujuh karakter yang berbeda-beda. Karakter ini tidak dapat dikatakan sebagai Run Length. 3. ABABBBC Dari karakter contoh tiga, terdapat perulangan karakter “B” sebanyak 3 kali, karakter ini sudah dpat dikatakan run length
Teknik dari algoritma run length encoding adalah untuk mempersingkat penulisan dari sebuah code, untuk penyelesaian dari contoh 1 adalah kita dapat menuliskan “KKKKKKK” menjadi (‘r’,’7’,’K’) untuk lebih singkat ditulis dengan “r7k” dengan ketentuan bahwa angka 7 didapatkan karena symbol karaker “k” mengalami perlangan sebanyak 7 kali.
Penyelesaian untuk contoh dua yaitu ABCDEFG, pada simbol ini tidak dapat perulangan
karakter
sehingga
penulisannya
dapat
kita
ubah
menjadi
(‘n’’7’,”ABCDEFG”) dan lebih singkatnya n7ABCDEFG [10].
Universitas Sumatera Utara