BAB II TINJAUAN PUSTAKA
2.1
Kriptografi Kriptografi (cryptography) berasal dari Bahasa Yunani: “cryptós” artinya secret” (rahasia), sedangkan “gráphein” artinya “writing” (tulisan), jadi kriptografi berarti “secret writing” (tulisan rahasia). Definisi kriptografi ada beberapa yang telah dikemukakan di dalam berbagai literatur. Definisi yang dipakai di dalam buku-buku yang lama (sebelum tahun 1980-an) menyatakan bahwa kriptografi adalah ilmu dan seni untuk menjaga kerahasian pesan dengan cara menyandikannya ke dalam bentuk yang tidak dapat dimengerti lagi maknanya. Definisi ini mungkin cocok pada masa lalu di mana kriptografi digunakan untuk keamanan komunikasi penting seperti komunikasi di kalangan militer, diplomat, dan mata-mata. Namun saat ini kriptografi lebih dari sekadar privacy, tetapi juga untuk tujuan data integrity, authentication, dan non-repudiation (Mollin ,2006). Kriptografi merupakan ilmu sekaligus seni untuk menjaga keamanan pesan, selain itu ada pengertian tentang kriptografi yaitu kriptografi merupakan ilmu yang mempelajari teknik-teknik matematika yang
7
berhubungan dengan aspek keamanan informasi seperti kerahasiaan, integritas data, serta otentikasi. Kata “seni” di dalam definisi di atas maksudnya adalah mempunyai cara yang unik untuk merahasiakan pesan. Kata “graphy” di dalam “cryptography” itu sendiri sudah menyiratkan suatu seni (Munir, 2006). Adapun istilah-istilah yang digunakan dalam kriptografi dalam melakukan proses kerjanya adalah sebagai berikut: a. Plaintext Plaintext merupakan pesan asli yang belum disandikan atau informasi yang ingin dikirimkan atau dijaga keamanannya. b. Ciphertext Ciphertext merupakan pesan yang telah disandikan (dikodekan) sehingga siap untuk dikirimkan. c. Enkripsi Enkripsi merupakan proses yang dilakukan untuk menyandikan plaintext menjadi ciphertext dengan tujuan pesan tersebut tidak dapat dibaca oleh pihak yang tidak berwenang. d. Dekripsi Dekripsi merupakan proses yang dilakukan untuk memperoleh kembali plaintext dari ciphertext. e. Kunci Kunci yang dimaksud disini adalah kunci yang dipakai untuk melakukan dekripsi dan enkripsi. Kunci terbagi menjadi dua bagian, kunci pribadi (private key) dan kunci umum (public key).
8
f. Kriptosistem Kriptosistem merupakan sistem yang dirancang untuk mengamankan suatu sistem informasi dengan memanfaatkan kriptografi. g. Kriptanalasis Kriptanalasis merupakan suatu ilmu untuk mendapatkan plainteks tanpa harus mengetahui kunci secara wajar (Munir, 2006).
2.2
Tujuan Kriptografi Empat tujuan mendasar dari ilmu kriptografi yang juga merupakan aspek keamanan informasi, yaitu : a. Kerahasiaan (confidentiality) Kerahasiaan berarti data tersebut hanya bisa diakses oleh pihak-pihak tertentu saja. b. Otentikasi (authentication) Pada saat mengirim atau menerima informasi, kedua belah pihak perlu mengetahui bahwa pengirim dari pesan tersebut adalah orang yang sebenarnya. c. Integritas data (integrity) Tuntutan integritas data ini berhubungan dengan jaminan setiap pesan yang dikirim pasti sampai pada penerimanya tanpa ada bagian dari pesan tersebut yang diganti, diduplikasi, dirusak, diubah urutannya dan ditambahkan.
9
d. Ketiadaan penyangkalan (nonrepudiation) Nonrepudiation mencegah pengirim maupun penerima mengingkari bahwa
mereka
telah
mengirimkan
atau
menerima
suatu
pesan/informasi (Munir, 2006).
2.3
Algoritma Kriptografi Algoritma kriptografi atau sering disebut dengan cipher adalah suatu fungsi matematis yang digunakan untuk melakukan enkripsi dan dekripsi (Schneier, 1996). Algoritma kriptografi ada dua macam, yaitu algoritma simetris (symmetric algorithms) dan algoritma asimetris (asymmetric algorithms). 2.3.1
Algoritma Simetris Algoritma simetris atau disebut juga algoritma konvensional adalah algoritma yang menggunakan kunci yang sama pada proses enkripsi dan dekripsi. Algoritma ini mengharuskan pengirim dan penerima
menyetujui
berkomunikasi tergantung
secara
pada
satu
kunci
aman.
rahasia
tertentu
Keamanan
kunci.
sebelum
algoritma
Pemecahan
kunci
dapat simetri berarti
memungkinkan setiap orang dapat mengenkripsi dan mendekripsi pesan dengan mudah.
10
Gambar 1. Skema Algoritma Simetris 2.3.2
Algoritma Asimetris Algoritma Asimetris adalah pasangan kunci kriptografi yang salah satunya digunakan untuk proses enkripsi dan satu lagi deskripsi. Semua
orang
yang
mendapatkan
kunci
publik
dapat
menggunakannya untuk mengenkripsi suatu pesan, sedangkan hanya satu orang saja yang memiliki rahasia itu, yang dalam hal ini kunci rahasia, untuk melakukan pembongkaran terhadap kode yang dikirim untuknya.
Gambar 2. Skema Algoritma Asimetris 2.4
Sistem Kriptografi Menurut Stinson (1995), sistem kriptografi (cryptosystem) adalah suatu 5- tuple ( P, C, K, E, D ) yang memenuhi kondisi sebagai berikut : 1. P adalah himpunan plaintext,
11
2. C adalah himpunan ciphertext, 3. K atau ruang kunci (keyspace), adalah himpunan kunci, 4. E adalah himpunan fungsi enkripsi ek : P → C , 5. D adalah himpunan fungsi dekripsi dk : C → P , 6. Untuk setiap k ∈ K terdapat ek ∈ E dan dk ∈ D. Setiap ek : P → C dan dk : C → P merupakan fungsi sedemikian hingga dk(ek(x) ) = x, untuk setiap plaintext x ∈ P . Sistem kriptografi terdiri dari sebuah algoritma, seluruh kemungkinan plaintext, ciphertext dan kunci-kuncinya. Sistem kriptografi merupakan suatu fasilitas untuk mengkonversikan plaintext menjadi ciphertext, dan sebaliknya. 2.5
Algoritma ElGamal Algoritma ElGamal merupakan algoritma kriptografi asimetris yang pertama kali dipublikasikan oleh Taher ElGamal pada tahun 1985. Algoritma ini didasarkan atas masalah logaritma diskrit pada grup bilangan prima. Kekuatan algoritma ElGamal terletak pada kesulitan penghitungan logaritma diskret pada bilangan modulo prima yang besar sehingga upaya untuk menyelesaikan masalah logaritma ini menjadi sangat sukar. Algoritma ElGamal tidak dipatenkan, tetapi algoritma ini didasarkan pada algoritma Diffie – Hellman, sehingga hak paten algoritma Diffie – Hellman juga mencakup algoritma ElGamal. Karena hak paten algoritma Diffie – Hellman berakhir pada bulan April 1997, maka algoritma
12
ElGamal dapat diimplementasikan untuk aplikasi komersil. Algoritma ElGamal 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 plainteks dan menghasilkan blok-blok cipherteks yang kemudian dilakukan proses dekripsi, dan hasilnya digabungkan kembali menjadi pesan yang utuh dan dapat dimengerti. Bilangan prima p dibutuhkan
untuk membentuk sistem
kriptografi ElGamal (Mulya, 2013). 2.6
Algoritma Massey-Omura Massey-Omura Cryptosystem adalah salah satu cryptosystem kunci publik yang berdasarkan pada logaritma diskrit. Diusulkan oleh James Massey dan Jim K. Omura pada tahun 1982 sebagai pengembangan atas Three Pass Protocol oleh Shamir pada tahun 1980, dimana pengirim dan penerima tidak bertukar kunci namun protocol ini memerlukan pengirim dan penerima yang memiliki dua kunci untuk mengenkripsi dan mendekripsi pesan (Yan, 2013).
2.7
Running Time Running time merupakan waktu yang dibutuhkan untuk mengeksekusi setiap instruksi di dalam program sampai selesai. Didalam program terdapat beberapa operasi yaitu penambahan (+), pengurangan (-), perkalian (*), pembagian (/), return (pengembalian nilai dari fungsi), inisialisasi, dan perbandingan dimana setiap operasi ini running time masing-masing 1 unit (Weiss, 2007).
13
2.8
Kompleksitas Algoritma Kompleksitas dari suatu algoritma merupakan ukuran seberapa banyak komputasi yang dibutuhkan algoritma tersebut untuk menyelesaikan masalah. Secara informal, algoritma yang dapat menyelesaikan suatu permasalahan dalam waktu yang singkat memiliki kompleksitas yang rendah, sementara algoritma yang membutuhkan waktu lama untuk menyelesaikan masalahnya mempunyai kompleksitas yang tinggi. Untuk n cukup besar, bahkan tidak terbatas, dilakukan analisis efisiensi dari suatu algoritma untuk menentukan kompleksitas waktu yang sesuai atau disebut juga kompleksitas waktu asimptotik dengan melihat waktu tempuh (running time). Kompleksitas waktu asimptotik terdiri dari tiga macam. Pertama, keadaan terbaik (best case) dinotasikan dengan Ω (g(n)) (BigOmega), keadaan rata-rata (average case) dinotasikan dengan Θ (g(n)) (Big-Theta) dan keadaan terburuk (worst case) dinotasikan dengan O(g(n)) (Big-O). Kompleksitas waktu algoritma dihitung dengan menggunakan notasi O(f(n)), dibaca ”Big-O dari f(n)” (Weiss, 2007). Notasi O menyatakan running time dari suatu algoritma untuk memungkinkan kasus terburuk. Notasi O memiliki beberapa bentuk : 1. O(1), merupakan algoritma konstan yang artinya running time algoritma tersebut tetap, tidak bergantung pada n. 2. O(n), disebut algoritma linier yang artinya bila n menjadi 2n maka running time algoritma tersebut akan menjadi dua kali semula.
14
3. O(n2), disebut algoritma kuadratik yang biasanya hanya digunakan untuk kasus dengan n yang berukuran kecil. Sebab, bila n dinaikkan menjadi dua kali semula, maka running time algoritma akan menjadi empat kali semula. 4. O(n3), disebut algoritma kubik dimana bila n dinaikkan menjadi dua kali semula, maka running time algoritma akan menjadi delapan kali semula. 5. O(2n), disebut algoritma eksponensial dimana bila n dinaikkan menjadi dua kali semula, maka running time algoritma akan menjadi kuadrat kali semula. 6. O(log n), disebut algoritma logaritmik dimana laju pertumbuhan waktu lebih lambat dari pada pertumbuhan n. Algoritma yang termasuk algoritma logaritmik adalah algoritma yang memecahkan persoalan besar dengan mentransformasikannya menjadi beberapa persoalan yang lebih kecil dengan ukuran sama. Basis algoritma tidak terlalu penting, sebab bila misalkan n dinaikkan menjadi dua kali semula, log n meningkat sebesar jumlah tetapan. 7. O(n log n), terdapat pada algoritma yang membagi persoalan menjadi beberapa persoalan yang lebih kecil, menyelesaikan setiap persoalan secara independen, kemudian menggabungkan solusi masing-masing persoalan. 8. O(n!), disebut algoritma faktorial dimana algoritma jenis ini akan memproses setiap masukan dan menghubungkannya dengan n-1
15
masukan lainnya. Bila n menjadi dua kali semula, maka running time algoritma akan menjadi faktorial dari 2n. Jadi, analisis kompleksitas waktu algoritma dihitung dengan menggunakan notasi O(f(n)) dimana Notasi O menyatakan running time (T(n)) dari suatu algoritma untuk memungkinkan kasus terburuk (worst case) (Weiss, 2007).