2.1. Kriptografi
Kriptografi secara etimologi berasal dari bahasa Yunani kryptos yang artinya tersembunyi dan graphien yang artinya menulis, sehingga kriptografi merupakan metode pembelajaran untuk mengirimkan pesan secara rahasia. (Mollin, 2007).
Menurut Katz (2007), kriptografi adalah studi ilmiah atau teknik untuk mengamankan informasi digital, transaksi, dan komputasi yang terdistribusi.
Kriptografi memiliki beberapa istilah atau terminologi, antara lain (Schneier,1996) :
1. Pengirim dan Penerima
Misalkan seorang pengirim ingin mengirim pesan pada penerima. Kemudian, pengirim ingin mengirim pesan secara aman. Pengirim ingin menjamin bahwa penyadap tidak bisa membaca pesannya.
2. Pesan dan Enkripsi
Sebuah pesan disebut pesan murni (plaintext) atau pesan yang akan dikirim. Proses untuk menyamarkan pesan untuk menyembunyikan
maksudnya disebut enkripsi(encryption). Pesan yang dienkripsi disebut ciphertext. Proses untuk mengembalikan ciphertext menjadi plaintext disebut dekripsi(decryption).
3. Algoritma dan Kunci
4. Algoritma Simetris
Ada dua tipe algoritma yang berbasis kunci yaitu simetris dan asimetris. Algoritma simetris kadang-kadang disebut juga algoritma konvensional, adalah algoritma dimana kunci enkripsi dapat dihitung dari kunci dekripsi dan sebaliknya. Di kebanyakan algoritma simetris, kunci enkripsi dan dekripsi adalah sama. Algoritma ini juga disebut algoritma kunci rahasia, algoritma kunci tunggal, atau algoritma satu kunci, membutuhkan persetujuan antara pengirim dan penerima sebelum mereka bisa melakukan komunikasi secara aman. Proses Enkripsi dan Dekripsi algoritma simetris dapat dilihat pada Gambar 2.1.
Gambar 2.1. Proses Enkripsi dan Dekripsi Algoritma Simetris(Paar et all, 20010)
5. Algoritma Asimetris
Algoritma kunci publik didesain agar kunci yang digunakan untuk enkripsi berbeda dengan kunci yang digunakan untuk dekripsi. Algoritma ini dikatakan kunci publik karena kunci enkripsi dapat dibuat publik.
Seseorang yang tidak bersangkutan dapat menggunakan kunci enkripsi untuk melakukan enkripsi, tetapi hanya orang-orang tertentu saja yang
Gambar 2.2. Proses Enkripsi dan Dekripsi Algoritma Asimetris(Paar et all, 2010)
6. Kriptanalisis
Keseluruhan tujuan dari kriptografi adalah untuk menjaga plaintext dan kunci agar tidak diketahui oleh penyadap. Penyadap diasumsikan memiliki akses penuh untuk komunikasi antara pengirim dan penerima.
Kriptanalisis adalah ilmu untuk memulihkan plaintext dari sebuah pesan tanpa akses ke kunci. Kriptanalisis yang berhasil mampu memulihkan plaintext atau kuncinya. Dapat juga menemukan kelemahan dari sebuah kriptosistem.
7. Keamanan Algoritma
Algoritma yang berbeda dapat menawarkan tingkat keamanan yang berbeda, tergantung pada seberapa rumit untuk dipecahkan. Jika harga yang dibutuhkan untuk memecahkan algoritma lebih besar dari nilai data yang dienkripsi, maka kemungkinan pesan tersebut kemungkinan aman.
2.2. Keamanan Data
Menurut Schneier (1996) selain menyediakan kerahasiaan, kriptografi sering diminta untuk melakukan pekerjaan lain yaitu :
1. Autentikasi, pesan harus memungkinkan penerima untuk bisa memastikan asalnya.
2. Integritas, pesan harus memungkinkan penerima untuk memverifikasi pesan tersebut tidak dimodifikasi sewaktu proses pengiriman.
3. Non-repudiasi, pengirim tidak bisa menyangkal bahwa dia adalah pengirim pesan.
2.3. Bilangan Prima dan Komposit
Misalkan ada bilangan bulat positif 1, 2, 3, 4, ... Di antara bilangan tersebut ada bilangan prima dan bilangan komposit. Bilangan komposit adalah bilangan yang memiliki faktor ≠ 1, seperti 15 = 3,5; atau 16 = 2,8. Karakteristik bilangan prima adalah hanya memiliki faktor sebanyak 1 (Riesel, 2011).
2.4. Bilangan Prima Aman
Bilangan prima aman adalah bilangan prima berbentuk p = 2q + 1 dimana q adalah prima (Menezes et all, 1996). Langkah-langkah untuk menentukan suatu bilangan prima aman atau tidak adalah sebagai berikut :
1. Pilih bilangan prima p ≥ 5
2. Hitung q = �−
Contoh 1 :
1. Pilih bilangan prima p = 13
2. q = − = 6
3. q komposit, maka p = 13 bukan prima aman.
Contoh 2 :
1. Pilih bilangan prima p = 23
2. q = − = 11
3. q adalah prima, makan p = 23 adalah prima aman.
2.5. Faktor Persekutuan Terbesar (Greatest Common Divisor)
Bilangan bulat d yang tidak negatif adalah faktor persekutuan terbesar dari bilangan bulat a dan b, ditulis d = gcd(a,b), jika :
(i) d adalah faktor persekutuan dari a dan b dan (ii) jika c|a dan c|b, maka c|d.
Demikian dapat dinyatakan bahwa, gcd(a,b) adalah bilangan bulat positif terbesar yang membagi a dan b, dengan pengecualian gcd(0,0) = 0 (Menezes et all, 1996).
Contoh :
Faktor persekutuan dari 12 dan 18 adalah {1, 2, 3, 6}, maka gcd(12,18) adalah 6.
2.6. Relatif Prima
Dua angka a dan b dikatakan relatif prima jika angka-angka tersebut tidak memiliki
faktor persekutuan ( gcd(a, b) = 1 ) (Batten, 2013).
Contoh :
2.7. Kekongruenan
Jika a dan b adalah bilangan bulat, maka a dikatakan kongruen ke b modulo n, ditulis a ≡ b (mod n), jika n habis membagi (a – b). Bilangan bulat n disebut modulus kongruen (Menezes et all, 1996).
Contoh :
24 ≡ 4 (mod 5) karena 24 – 4 = 20 dan n = 5 habis membagi 20.
2.8. Fungsi Euler (�)
Untuk n ≥ 1, � adalah bilangan bulat < n yang relatif prima dengan n, dengan
ketentuan (Menezes et all, 1996) :
1. Jika p adalah bilangan prima, maka � = p – 1. 2. Jika gcd(m , n) = 1, maka � = � . �
3. Jika n = � , � , ... , �� adalah faktorisasi prima dari n, maka
� = n −
� −� ... −��
Contoh :
1. � = − =
2. � = � ∗ = ∗ =
3. � = � = − = =
2.9. Ordo Modulo
Jika gcd(a, n) = 1 maka ordo a modulo n adalah adalah bilangan bulat positif terkecil e sehingga �� = mod . Dalam hal ini ditulis e = � � � (Batten, 2013).
Contoh :
� :
= 9 mod , = mod , = mod , = mod .
2.10. Modulo Invers
Jika a dan m relatif prima dan m > 1, maka dapat ditemukan invers dari a modulo m. Invers dari a(mod m), disebut juga invers perkalian, yaitu bilangan bulat a-1 (Menezes et all, 1996).
Contoh :
1. Diberikan m ≡ 3-4 (mod 7). Tentukan invers modulonya.
2. m ≡ (3-1)4 (mod 7)
3. Tentukan invers modulo dari n ≡ (3-1) (mod 7)
n n . 3 (mod) 7
1 3
2 6
3 3
4 5
5 1
4. n adalah hasil iterasi yang menghasilkan nilai 1. Maka dari itu n = 5. m ≡ 54 (mod 7) = 2.
2.11. Akar Primitif (Primitive Roots)
Jika m merupakan elemen bilangan bulat, n merupakan elemen bilangan asli dan
ord� = � ,
maka m disebut akar primitif modulo n. Dengan kata lain, m adalah akar primitif jika m termasuk pada eksponen � modulo n.
Menurut algoritma Gauss, jika m merupakan elemen bilangan asli, 1 < m < p, hitung mt untuk t = 1,2,... hingga mt ≡1 (mod p). Dengan kata lain, hitung pangkat
hingga nilai ord� ditemukan. Jika t = ord� = p – 1, maka m adalah akar
primitif (Mollin, 2007).
Apakah 2 dan 4 merupakan akar primitif dari 5? Menurut Shoup (2008), terdapat cara menemukan akar primitif yang efisien dengan menggunakan faktor prima dari p – 1. Langkah-langkahnya adalah sebagai berikut :
1. Hitung fakor prima dari p-1 hingga setiap faktor memiliki nilai yang berbeda. 2. Untuk setiap faktor (f) hitung mp-1 / f mod p.
3. Jika tidak ada yang menghasilkan nilai 1, maka m adalah bilangan prima.
Contoh :
Menggunakan cara di atas, akan dicari apakah 5 merupakan akar primitif dari 37. 1. Hitung faktor prima dari 37
f = [2, 3]
2. Untuk setiap faktor prima, hitung mp-1 / f mod p f[2] = 536/2 mod 37 = 36
f[3] = 536/3 mod 37 = 10
Karena tidak ada yang menhasilkan nilai 1, maka 5 merupakan akar primitif dari 37.
2.12. Metode Pembangkit Bilangan Prima Lehmann
Menurut Scheiner(1996), berikut adalah langkah-langkah untuk menentukan apakah p adalah prima menggunakan pembangkit bilangan prima Lehmann :
= 216 mod 7 = 6
Karena kemungkinan p prima adalah 75%, p dapat dikatakan bilangan prima. Metode pembangkit bilangan prima Lehmann dipilih karen pada prosesnya hanya perlu melakukan perulangan sebanyak sepuluh kali untuk menentukan sebuah bilangan prima atau tidak.
2.13. Algoritma ElGamal
Algoritma ElGamal ditemukan oleh Taher ElGamal pada tahun 1984. Algoritma ini pada mulanya digunakan untuk digital signature, namun kemudian dimodifikasi sehingga juga bisa digunakan untuk enkripsi dan dekripsi. ElGamal digunakan di dalam perangkat lunak sekuriti yang dikembangkan oleh GNU, program PGP dan pada sistem keamanan lainnya, Keamanan algoritma ini terletak pada sulitnya menghitung logaritma diskrit (Munir, 2006).
Algoritma ini didasarkan pada masalah logaritma diskret dan terdiri dari tiga proses, yaitu proses pembentukan kunci, proses enkripsi, dan proses dekripsi. Algoritma ini merupakan cipher blok, yaitu melakukan proses enkripsi pada blok-blok palinteks dan menghasilkan blok-blok ciphertext yang kemudian dilakukan proses dekripsi, dan hasilnya digabungkan kembali menjadi pesan yang utuh dan dapat dimengerti. Untuk membentuk sistem kriptografi ElGamal, dibutuhkan bilangan prima p dan elemen primitif (Massandy, 2009).
2.14. Pembentukan Kunci
Kunci publik algoritma ElGamal berupa pasangan 3 bilangan, yaitu (� , �, p), dengan � mod
dimana a merupakan kunci rahasia (Batten, 2013).
2.15. Proses Pembentukan Kunci
Langkah-langkah dalam pembentukan kunci adalah sebagai berikut (Menezes et all, 1996):
1. Pilih bilangan prima besar (p > 255) dan elemen primitif � dari bilangan bulat mod p.
2. Pilih bilangan bulat a, dimana 1 ≤ a ≤ p – 2. 3. Hitung � mod .
4. Publikasikan nilai � , �, dan p, serta rahasiakan nilai a.
Pihak yang membuat kunci adalah pihak penerima. Penerima kemudian akan mengirimkan kunci publik yaitu � , �, dan p untuk digunakan pada proses enkripsi.
Misalkan Alice dan Bob ingin berkomunikasi. Dalam hal ini Bob akan
membuat kunci publik dan kunci privat. Bob memilih bilangan prima p = 257, � = 20, dan kunci privat a = 5.
� mod = 205 mod 257 = 93
Jadi kunci publik Bob adalah p = 257, � = 20, dan � = 93 dan kunci
privatnya adalah 5. Bob mengirimkan (257, 20, 93) pada Alice dan menyimpan kunci
privatnya.
2.16. Enkripsi
Pada proses enkripsi, pesan asli (plaintext) diubah menjadi pesan rahasia (ciphertext). Pada proses ini digunakan kunci publik (p, � � ). Dalam perhitungannya, algoritma ElGamal menggunakan bilangan bulat. Oleh karena itu digunakanlah kode
Setelah mendapatkan kunci publik, Alice memilih bilangan acak rahasia b ∈ {0,1,...,p-2}. Bilangan acak b sebaiknya berbeda untuk setiap plaintext menghindari serangan acak bilangan b yang dapat mempengaruhi plaintext lainnya (Sharma et all, 2012). Misalkan m adalah pesan yang akan dikirim. Selanjutnya m diubah ke dalam blok-blok karakter dan setiap karakter dikonversikan ke dalam kode ASCII, sehingga
diperoleh plaintext m1, m2 , m3, ... , mn dengan mi ∈ {1, 2,..., p-1} dan i =1, 2,..., n.
Enkripsi kemudian dilakukan dengan menghitung
� mod
dan
� mod
Algoritma enkripsi pesan :
1. Plaintext disusun menjadi blok-blok m1, m2, ... , mn sehingga setiap blok
merepresentasikan nilai di dalam rentang 0 sampai p – 1 (dengan mengubah nilai m menjadi kode ASCII).
2. Pilih bilangan acak b dengan rentang 0 < b < p – 1, sehingga b relatif prima dengan p – 1.
3. Setiap blok m dienkripsi dengan rumus � mod dan � mod . 4. Setelah dienkripsi, blok teks disusun menjadi = � , � ).
Tabel 2.1. Konversi Blok-blok Karakter Pesan ke Kode ASCII
i Karakter Plaintextmi ASCII
1 G m1 71
2 U m2 85
3 N m3 78
4 A m4 65
5 L m5 76
6 A m6 65
7 N m7 78
Dari Tabel 1, diperoleh banyaknya karakter pada pesan tersebut adalah n = 7. Proses selanjutnya adalah menentukan bilangan acak rahasia bi ∈ {0,1,....,257}.
Kemudian dihitung � mod dan � mod .
Tabel 2.2. Proses Enkripsi
i mi bi � � mod 257 � �mi mod 257
1 71 67 14 187
2 85 10 168 219
3 78 124 44 214
4 65 43 181 226
5 76 234 215 55
6 65 228 92 152
Berdasarkan Tabel 2.2. diperoleh ciphertext (� , � ), sebagai berikut :
(14, 187) (168,219) (44, 214)
(181, 226) (215, 55)
(92, 152) (202, 9)
Selanjutnya ciphertext dikirim ke Bob.
2.17. Dekripsi
Setelah ciphertext diterima, proses selanjutnya adalah mendekripsikan ciphertext menggunakan kunci publik (p, � � ) dan kunci privat a. (p, � � ) sebagai kunci publik dan a sebagai kunci privat, jika diberikan ciphertext (� , � ) maka dihitung :
� − ≡ � �− − mod
dan
� − � ≡�− � ≡ mod .
dengan m adalah plaintext.
Algoritma dekripsi pesan :
1. Hitung � �− − mod
Hitung �− � ≡ mod
2. Setelah plaintext m diperoleh, konversikan ke dalam karakter yang sesuai dengan kode ASCII, kemudian hasilnya digabungkan kembali.
Bob telah menerima ciphertext dari Alice, ciphertext yang diperoleh adalah sebagai berikut :
(14, 187) (168,219) (44, 214)
(181, 226) (215, 55)
Untuk itu Bob pertama kali menghitung p – 1 – a = 257 – 1 – 5 = 251. Kemudian menggunakan kunci publik p = 257 dan kunci privat a = 5, Bob melakukan perhitungan seperti pada tabel 2.3 :
Tabel 2.3. Proses Dekripsi
i � �� � 251
(mod 257) �� � 251(mod 257) m
1 14 187 10 71 G
2 168 219 248 85 U
3 44 214 46 78 N
4 181 226 172 65 A
5 215 55 221 76 L
6 92 152 134 65 A
7 202 9 180 78 N
Berdasarkan Tabel 2.3, Diketahui bahwa pesan tersebut adalah “GUNALAN”
2.18. Baby-step Giant-step
Keamanan ElGamal bergantung pada pemecahan masalah logaritma diskrit dengan modulo yang sangat besar (Sharma et all, 2012). Metode Baby-step Giant-step merupakan salah satu metode pencarian dengan mencocokkan dua daftar. Metode ini bertujuan untuk menemukan a dari � mod . Dalam hal ini a disebut logaritma diskrit.
Jika ingin menemukan a langkah pertama adalah memilih � ≈ √ − + 1 sehingga p –1 ≤ N2. Hal ini dilakukan karena perhitungan akan melakukan hasil yang sama jika melebihi √ . Kemudian dibuat dua dafta dimana daftar pertama
Daftar Baby-step : �j mod p untuk 0 ≤ j ≤ N. Daftar Giant-step : � �-Nk mod p untuk 0 ≤ k ≤ N.
Daftar Baby-step akan diproses sebanyak √ − modulo p dikarenakan �
adalah akar primitif.
Daftar Giant-step mungkin akan diproses sedikit lama dikarenakan proses berjalan sebanyak perkalian dengan � .
Jika ditemukan hasil yang sama di setiap daftar (akan memakan banyak waktu
jika p bernilai besar) dapat ditulis � ≡ � �−� mod sehingga � +� ≡
� mod , maka ditemukanlah � = + � .
Banyaknya langkah pada algoritma ini sekitar √ dan angka sebanyak N perlu
disimpan (Batten, 2013).
Diberikan 20a mod 257 = 93. a dapat dihitung dengan mengikuti langkah langkah berikut:
1. Pilih nilai � ≈ ⌈ √ − ⌉ + 1 .
N ≈⌈ √ − ⌉ + 1 = 17.
2. Hitung daftar Baby-step dengan rumus �j mod p untuk 0 ≤ j < N.
Tabel 2.4. Proses Baby-step
j �jmod 257
0 1
1 20
2 143
3 33
4 146
5 93
6 61
j �jmod 257
8 242
9 214
10 168
11 19
12 123
13 147
14 113
15 204
16 225
17 131
3. Hitung daftar Giant-step dengan rumus � �-Nk untuk 0 ≤ k < N hinga ditemukan hasil yang cocok pada daftar Baby-step.
Tabel 2.5. Proses Giant-step
k � ∗ �-17k
0 93
Perhitungan Giant-step dihentikan karena kecocokan yang ditemukan yaitu 205≡ 93 * 200 (mod p), jadi menurut rumus a = j + Nk, a = 5 + 0 = 5. Oleh karena itu diperoleh a = 5 yang memenuhi perhitungan 205 mod 257 = 93
2.19. Penelitian yang Relevan
2. Pada penelitian yang dilakukan oleh Anandia Zelvina (2012) yang berjudul ”Perancangan Aplikasi Pembelajaran Kriptografi Kunci Publik ElGamal untuk Mahasiswa” menyebutkan bahwa pada algoritma ElGamal suatu plaintext yang sama akan dienkripsi menjadi ciphertext yang berbeda-beda. Hal ini dikarenakan pemilihan bilangan k yang acak. Akan tetapi, walaupun ciphertext yang diperoleh berbeda beda, tetapi pada proses dekripsi akan diperoleh plaintext yang sama.
3 Pada penelitian yang dilakukan oleh Muhamad Zaki Riyanto (2007) yang berjudul ”Pengamanan Pesan Rahasia Menggunakan Algoritma Kriptografi ElGamal atas Grup Pergandaan Zp*” menyebutkan bahwa agar dapat
menentukan elemen primitif grup Zp*, maka penentuan bilangan prima p