2.1 Kriptogafi
Kriptografi merupakan bidang ilmu yang mempelajari tentang metode untuk mengirim pesan secara rahasia (yaitu di enkripsi atau disamarkan) sehingga hanya penerima pesan yang dituju yang dapat menghapus penyamaran dan membaca pesan (atau memahaminya). Secara etimologi kriptografi berasal dari bahasa yunani, cryptos yang berarti tersembunyi, dan graphein yang berarti menulis. Dalam kriptografi pesan yang akan dirahasiakan disebut plainteks dan pesan yang sudah dirahasiakan disebut cipherteks. Proses pengubahan plainteks menjadi cipherteks disebut enkripsi, sebaliknya proses pengubahan cipherteks menjadi plainteks yang dilakukan oleh penerima pesan disebut dekripsi (Mollin, R.A. 2007). Skema rangkaian proses enkripsi dan dekripsi secara umum ditunjukkan pada Gambar 2.1.
Gambar 2.1. Skema Proses Enkripsi dan Dekripsi
2.1.1 Tujuan Kriptografi
Ada empat tujuan mendasar dari kriptografi yang juga merupakan aspek keamanan informasi yaitu:
1) Privacy/Confidentiality yaitu usaha menjaga informasi dari orang yang tidak berhak mengakses.
Enkripsi
Plainteks Cipherteks
2) Integrity yaitu usaha untuk menjaga data atau sistem tidak bisa diubah oleh pihak yang tidak berhak.
3) Authentication usaha atau metode untuk mengetahui keaslian dari informasi, misalnya apakah informasi yang dikirim dibuka oleh orang yang benar atau layanan dari server yang diberikan benar dari server yang dimaksud.
4) Availability yaitu berhubungan dengan ketersediaan sistem dan data ketika data dibutuhkan.
2.1.2 Jenis-Jenis Algoritma Kriptografi
Ada dua jenis algoritma kriptografi yaitu algoritma simetris dan algoritma asimetris. Pada kriptografi simetris maupun kriptografi asimetris tidak ada keamanan yang bisa terjamin tanpa syarat. Suatu metode enkripsi tidak ada yang praktis. Maka, untuk semua protokol pada kriptografi, keamanan bergantung pada asumsi perhitungan (Pointcheval. David. 2002).
1) Kriptografi Simetris
Algoritma klasik (sebutan untuk algoritma simetris) merupakan algoritma yang menggunakan kunci yang sama untuk proses enkripsi dan dekripsi. Algoritma simetris juga sering disebut one key/ private key/ single key karena memiliki kunci yang sama untuk proses enkripsi dan dekripsi (Sembiring, Dira Fahrendy 2013). Kemanan algoritma simetris berada pada kunci, agar komunikasi tetap aman maka kunci harus tetap dirahasiakan. Contoh algoritma simetris One Time Pad, ADFGVX Cipher, Affine Cipher, dan lainnya. Proses enkripsi dan dekripsi
algoritma simetris dapat dilihat pada Gambar 2.2.
Gambar 2.2. Skema Algoritma Simetris (Hayanti, Disa 2013)
2) Kriptografi Asimatris
Enkripsi Dekripsi
Plainteks Cipherteks Plainteks
Algoritma asimetris (public key) merupakan algoritma kriptografi yang menggunakan sepasang kunci dalam melakukan enkripsi dan dekripsi, yaitu kunci publik (public key) dan kunci privat (private key). Dalam algoritma simetris kunci publik bisa disebar-luaskan sedangkan kunci privat harus tetap dirahasiakan (Kromodimoeljo, S. 2010). Kunci publik digunakan untuk proses enkripsi plainteks, dan kunci privat digunakan untuk proses dekripsi. algoritma yang digunakan untuk kriptografi public key berdasarkan pada relasi matematika (Sachdeva, Komal. 2013).
Hampir semua skema kunci publik hanya digunakan untuk mengenkripsi pesan yang singkat, seperti mengenkripsi kunci. Hal tersebut dikarenakan skema dari kunci publik kurang efisien jika digunakan untuk mengenkripsi data dalam jumlah yang besar. Kemudian data dalam jumlah besar dienkripsi dengan menggunakan algoritma simetris. Pendekatan seperti ini disebut dengan skema enkripsi hybrid (Smart, N.P. 2016). Contoh algoritma asimetris yaitu Rivest-Shamir-Adlenan (RSA), El-gamal, Knapsack, Rabin dan lainnya. Proses enkripsi dan dekripsi dari algoritma asimetris dapat dilihat pada Gambar 2.3.
Gambar 2.3. Skema Algorima Asimetris
2.2 ADFGVX Cipher
Algoritma ADFGVX Cipher ini merupakan algoritma yang ditemukan oleh seorang petugas radio tentara Jerman yang bernama Fritz Nebel (1891-1967) (Sihotang, Rajab. 2014). untuk menggunakan ADFGVX Cipher, dimulai dengan sebuah matriks 6x6. Matriks tersebut diisi dengan alphabet dan nomor 0-9 yang disusun secara acak. ADFGVX chiper dipertimbangkan sebagai algoritma yang cukup aman karena algoritma ini mengkombinasikan dua kelebihan rata-rata algoritma kriptografi, yaitu substitusi yang baik dan transposisi yang unggul dalam sebuah sistem (Manoharan,
Enkripsi Dekripsi
Plainteks Cipherteks Plainteks
karena refresentatif huruf-huruf tersebut sangatlah berbeda dalam sandi morse (Mollin, R.A. 2007).
2.2.1 Enkripsi ADFGVX Cipher
Berikut adalah langkah-langkah dalam melakukan enkripsi dengan menggunakan algoritma ADFGVX Cipher:
1) Tentukan kata yang akan dienkripsi (plainteks) yang terdiri dari angka dan
hurup misal “HARAHAP289”
2) Buat sebuah tabel 6x6 yang berisi 26 huruf dan 10 angka, seperti pada Tabel
2.1.
Tabel 2.1. Tabel ADFGVX Cipher
A D F G V X
A F E D C B A
D G H I J K L
F R Q P O N M
G S T U V W X
V 3 2 1 0 Z Y
X 4 5 6 7 8 9
3) Setiap huruf dalam plainteks disubstitusi menjadi dua huruf berdasarkan baris dan kolom, misal huruf K menjadi DV. Jika plainteks-nya adalah
“HARAHAP289” maka hasil substitusinya adalah DD AX FA AX DD AX FF
VD XV XX.
4) Tentukan kata kunci yang terdiri dari huruf saja. Kunci ini akan digunakan pada proses tranposisi. Misal kunci yang digunakan adalah ILKOM. Maka buatlah sebuah tabel baru dan tuliskan kata kunci di baris pertama. Kemudian tulis hasil substitusi plainteks dibawahnya berurutan dari kanan kemudian kebawah jika ada sisa maka diisi dengan huruf x atau sesuai dengan kesepakatan, seperti pada Tabel 2.2.
Tabel 2.2 Tabel Kunci Enkripsi ADFGVX Cipher
1 2 3 4 5
D D A X F
D D X A A
A X F F V
X X V X D
5) Selanjutnya urutkan kolom pada kata kunci berdasarkan alphabet. Maka ILKOM menjadi IKLMO sehingga menjadi seperti pada Tabel 2.3.
Tabel 2.3. Perubahan Posisi Kunci ADFGVX Cipher
I K L M O
1 3 2 5 4
D A D F X
D X D A A
A F X V F
X V X D X
6) Cipherteksnya adalah huruf-huruf yang berada dikolom pertama dan seterusnya. Maka cipherteks dari HARAHAP289 adalah DDAXAXFVDDXX FAVDXAFX.
2.2.2 Dekripsi ADFGVX Cipher
1) Lakukan pemisahan cipherteks dengan cara membagi jumlah huruf yang ada pada cipherteks dengan jumlah huruf yang ada pada kunci. Kita memiliki pesan cipherteks DDAXAXFVDDXXFAVDXAFX dan misalkan kita memiliki kunci ILKOM. Maka kita dapat membagi tiap kelompok terdiri dari 20/5= 4 huruf, menjadi DDAX AXFV DDXX FAVD XAFX
2) Selanjutnya, urutkan kunci sesuai alphabet, maka ILKOM menjadi IKLMO, seperti pada Tabel 2.4.
Tabel 2.4 Tabel Kunci Dekripsi ADFGVX Cipher
1 3 2 5 4
D A D F X
D X D A A
A F X V F
X V X D X
3) Urutkan kolom-kolom yang ada pada tabel 2.4 menjadi kata kunci yang kita miliki, seperti pada Tabel 2.5.
Tabel 2.5 Tabel Kunci Dekripsi ADFGVX Cipher sesuai Urutan
I L K O M
1 2 3 4 5
D D A X F
D D X A A
A X F F V
X X V X D
4) Lakukan pembacaan secara berurutan kekanan kemudian kebawah DDAXFAAXDDAXFFVDXVXX.
5) Langkah terakhir adalah mencari padanan karakter dari dua huruf yang kita dapatkan dengan tabel ADFGVX, seperti pada Tabel 2.6.
Tabel 2.6. Tabel ADFGVX Cipher
A D F G V X
A F E D C B A
D G H I J K L
F R Q P O N M
G S T U V W X
X 4 5 6 7 8 9
6) Dengan mencari padanan karakter pada Tabel 2.6 maka kita dapatkan pesan HARAHAP289.
2.3 Algoritma Knapsack
Algoritma knapsack merupakan algoritma kunci publik (asimetris) yang keamanannya terletak pada sulitnya memecahkan persoalan knapsack (knapsack problem). Knapsack problem merupakan permasalahan bagaimana cara mengisi knapsack (ransel) yang mempunyai kapasitas tertentu dengan sekumpulan benda yang berbeda-beda ukurannya sehingga knapsack terisi penuh sesuai dengan kapasitas (Kromodimoeljo, S. 2010). Masing-masing benda memiliki nilai dan berat yang sudah diasosiasikan di dalamnya. Jadi, nilai pada seluruh item dapat dimaksimalkan dan beratnya tidak menambah kapasitas total pada knapsack (Agarwal, Ashish. 2011).
2.3.1 knapsack problem
Jika m adalah bobot knapsack dan n adalah banyaknya objek yang masing-masing mempunyai bobot W1, W2, …, Wn. tentukan nilai bi untuk i = 1, 2, 3, …, n sedemikian sehingga
M = b1W1 + b2W2 + …. + bnWn……… (Pers 1)
Yang dalam hal ini bi hanya bernilai 0 dan 1. Jika b = 1 maka objek i dimasukkan kedalam knapsack, sebaliknya jika b = 0, maka tidak dimasukkan ke dalam knapsack (Sembiring, Dira Fahrendy. 2013). Ada dua jenis algoritma knapsack, yaitu:
a) Algoritma knapsack sederhana
Ide dasar dari knapsack ini adalah mengkodekan pesan sebagai rangkaian solusi dari persoalan knapsack. Setiap bobot W1 dalam persoalan knapsack merupakan kunci privat sedangkan bit-bit plainteks merupakan b1.
Algoritma yang digunakan untuk membangkitkan kunci publik dan kunci privat dalam Superincreasing knapsack:
1) Tentukan barisan superincreasing dimana setiap nilai di dalam barisan lebih besar daripada jumlah semua nilai sebelumnya.
2) Jumlahkan semua nilai di dalam barisan, kemudian bandingkan total nilai dengan nilai terbesar di dalam barisan. Jika nilai terbesar lebih kecil atau sama dengan total nilai maka ia dimasukkan ke dalam knapsack, jika tidak maka ia tidak dimasukkan.
3) Kurangi total nilai dengan nilai terbesar yang telah dimasukkan. Kemudian bandingkan total nilai sekarang dengan nilai terbesar selanjutnya, demikian seterusnya sampai semua nilai dalam barisan selesai dibandingkan.
4) Jika bobot total sama dengan nol maka terdapat solusi persoalan superincreasing knapsack. sebaliknya jika bobot total tidak sama dengan nol
maka tidak ada solusinya.
2.3.2 Enkripsi superincreasing knapsack
Mula-mula plainteks dipecah menjadi blok bit yang panjangnya sama dengan kardinalitas barisan kunci publik. Kalikan setiap bit di dalam blok dengan elemen yang berkoresponden dengan nilai di dalam kunci publik.
Contoh:
Kita gunakan kunci ADFGVX cipher diatas sebagai barisan plainteks yaitu : ILKOM Misal A = 0, B = 1, …. Z = 25, maka:
Sehingga didapatkan plainteks: 0100001011010100111001100 yang akan di enkripsi menggunakan kunci privat sebagai berikut:
Barisan superincreasing (w) ={1, 2, 4, 8, 16} m = 75
n = 14
Sehingga:
(1 x 14) mod 75 = 14 (2 x 14) mod 75 = 28 (4 x 14) mod 75 = 56 (8 x 14) mod 75 = 37 (16 x 14) mod 75 = 74
Maka kunci publik yang didapatkan adalah {14, 28, 56, 37, 74}.
Kemudian plainteks dibagi menjadi blok dengan panjang 5 (panjang kunci publik), kemudian setiap bit di dalam blok dikalikan dengan elemen yang berkoresponden dengan kunci publik, sebagai berikut:
Blok plainteks 1: 01000 Kriptogram: (1 x 28) = 28 Blok plainteks 2: 01011
Kriptogram: (1 x 28) + (1 x 37) + (1 x 74) = 139 Blok plainteks 3: 01010
Kriptogram: (1 x 28) + (1 x 37) = 65 Blok plainteks 4: 01110
Kriptogram: (1 x 28) + (1 x 56) + (1 x 37) = 121 Blok plainteks 5: 01100
Kriptogram: (1 x 28) + (1 x 56) = 84
Jadi, cipherteks yang dihasilkan: 28, 139, 65, 121, 84
2.3.3 Dekripsi superincreasing knapsack
Tabel 2.7. Perhitungan Inversi n modulo m
n-1 n.n-1 (mod m) 1 14.1 (mod 75) = 14 2 14.2 (mod 75) =24 3 14.3 (mod 75) = 42 4 14.4 (mod 75) = 56
. . . .
59 14.59 (mod 75) = 1
Dapatlah n-1 yaitu 59. Maka plainteks yang berkoresponden dengan {1, 2, 4, 8, 16} diperoleh kembali dengan cara menggunakan algoritma superincreasing sebagai berikut:
Temp : (cipherteks x n-1) mod m
(28 x 59) mod 75 = 2 = 2, berkoresponden dengan 01000
(139 x 59) mod 75 = 26 = 16 + 8 + 2, berkoresponden dengan 01011 (65 x 59) mod 75 = 10 = 8 + 2, berkoresponden dengan 01010 (121 x 59) mod 75 = 14 = 8 + 4 + 2, berkoresponden dengan 01110 (84 x 59) mod 75 = 6 = 4 + 2, berkoresponden dengan 01100
Sehingga painteks yang dihasilkan adalah 0100001011010100111001100, dimana
01000 = 8, berkoresponden dengan huruf “I” 01011 = 11, berkoresponden dengan huruf “L” 01010 = 10, berkoresponden dengan huruf “K”
01110 = 14, berkoresponden dengan huruf “O”