Introduction
Beberapa abad yang silam, di jaman kebesaran Romawi, seorang Kaisar pernah mengirimkan perintah kepada sang Jendral yang sedang berada dimedan pertempuran dengan menggunakan sebuah pesan acak. Pesan/dokumen tersebut merupakan perintah langsung dari sang Kaisar yang isinya hanya dapat dibaca oleh sang kaisar dan sang Jendral yang bersangkutan, sehingga baik kurir yang ditugasi untuk menyampaikan pesan tersebut ataupun orang lain yang berhasil mencuri dokumen rahasia tersebut tidak ada yang dapat membaca isi pesan Kaisar kepada sang Jendral. Teknik yang digunakan oleh Kaisar ini dinamakan teknik Kriptografi, dan sang Kaisar jenius itu sendiri bernama Julius Caesar.
Julius Caesar memang tercatat dalam sejarah sebagai seorang yang pertama kali menggunakan teknik kriptografi untuk mengirimkan pesan. Meskipun demikian, penggunaan kriptografi sendiri dipercaya telah hadir sekitar 4000 tahun yang lalu dan digunakan oleh bangsa Mesir pada ukiran makam seorang bangsawan besar yang bernama KHNUMHOTEP II. Ide dari kriptografi yang digunakan oleh Julius Caesar telah sebelumnya ditulis oleh seorang pujangga Yunani yang bernama Polyibus.
Hingga saat ini, teknik kriptografi masih digunakan dengan tujuan yang tidak berbeda dari yang ingin dicapai oleh sang Kaisar, yaitu: Sebuah pesan yang hanya dapat dibaca oleh orang yang dikehendaki. Teknik dan algoritma kriptografi ini terus berkembang hingga sekarang dan tentu saja semakin canggih dari yang digunakan oleh kaisar besar Romawi tersebut.
Dalam artikel ini akan dibahas ide dasar dari teknik kriptografi.
Definisi dan Konsep
Saya terus terang tidak dapat mendefinisikan apa itu kriptografi selain dari teknik untuk menyamarkan pesan. Tentu saja definisi tersebut sangat ambigu terutama terhadap teknik-teknik lainnya seperti steganografi, dan lain sebagainya. Namun, Kaufman et. al. (2002) menjelaskan bahwa kata Kriptografi berasal dari bahasa Yunani dan memiliki makna seni dalam menulis pesan rahasia (The art of secret writing), dimana kriptografi terdiri dari 2 kata yaitu κρυπτό yang berarti rahasia atau tersembunyi dan γραφή yang berarti tulisan.
Pada prinsipnya, Kriptografi memiliki 4 komponen utama yaitu:
- Plaintext, yaitu pesan yang dapat dibaca
- Ciphertext, yaitu pesan acak yang tidka dapat dibaca
- Key, yaitu kunci untuk melakukan teknik kriptografi
- Algorithm, yaitu metode untuk melakukan enkrispi dan dekripsi
Kemudian, proses yang akan dibahas dalam artikel ini meliputi 2 proses dasar pada Kriptografi yaitu:
- Enkripsi (Encryption)
- Dekripsi (Decryption)
dengan key yang digunakan sama untuk kedua proses diatas. Penggunakan key yang sama untuk kedua proses enkripsi dan dekripsi ini disebut juga dengan Secret Key, Shared Keyatau Symetric Key Cryptosystems.
Berikut adalah ilustrasi 4 komponen dan 2 proses yang digunakan dalam teknik kriptografi.
Enkripsi
Enkripsi (Encryption) adalah sebuah proses menjadikan pesan yang dapat dibaca (plaintext) menjadi pesan acak yang tidak dapat dibaca (ciphertext). Berikut adalah contoh enkripsi yang digunakan oleh Julius Caesar, yaitu dengan mengganti masing-masing huruf dengan 3 huruf selanjutnya (disebut juga Additive/Substitution Cipher):
Plaintext | Ciphertext |
---|---|
hello | khoos |
bye | ebh |
freelynx | iuhhobqa |
dst… |
dalam melakukan proses untuk meng-enkripsi diperlukan sebuah algoritma dan key. Pada contoh diatas, algoritma yang digunakan adalah:
- Konversikan huruf menjadi angka
- Masing-masing angka yang diperoleh jumlahkan dengan $n
- konversikan angka yang diperoleh kembali menjadi huruf
dengan:
- $n adalah Key yang dapat ditentukan sendiri.
Jika key yang kita gunakan adalah 1, algortima tersebut akan mengubah huruf:
- A menjadi B
- B menjadi C
- D menjadi E
- s menjadi t
- dlsb
Dekripsi
Dekripsi merupakan proses kebalikan dari enkripsi dimana proses ini akan mengubah ciphertext menjadi plaintext dengan menggunakan algortima ‘pembalik’ dan key yang sama. Contoh:
Ciphertext | Plaintext |
---|---|
khoos | hello |
ebh | bye |
iuhhobqa | freelynx |
dst… |
Untuk melakukan dekripsi ini, algoritma yang digunakan tentu saja berbeda dengan algortima enkripsi, namun pada dasarnya adalah “membalik” algoritma enkripsi. Perhatikan contoh algortima dekripsi berikut yang diambil dari algoritma enkripsi diatas:
- Konversikan huruf menjadi angka
- Masing-masing angka yang diperoleh kurangkan dengan $n
- Konversikan angka yang diperoleh kembali menjadi huruf
dengan
- $n adalah key yang sama dengan yang digunakan dalam proses enkripsi.
Jika diperhatikan, baik algoritma enkripsi maupun dekripsi tidak jauh berbeda, yang berbeda hanyalah ketika memasukkan unsur key kedalam algoritma tersebut, dimana enkripsi menggunakan proses penjumlahan sedangkan dekripsi menggunakan pengurangan.
Masih menggunakan contoh yang sama dengan enkripsi, apabila kita gunakan key sama dengan 1, algoritma dekripsi diatas akan mengubah huruf:
- B menjadi A
- C menjadi B
- Z menjadi Y
- A menjadi Z
- dst
Sintaks Pemrograman
Berbicara mengenai algoritma dan key memang tampaknya sangat abstrak sekali. Namun akan lebih jelas beda kedua komponen ini jika dituliskan dalam sintaks pemrograman dimana, secara sederhana, algoritma adalah semua yang berada didalam blok
function
dan key adalah parameter
dari fungsi tersebut.function encrypt($key) {* algoritma ditulis disini *//}
function decrypt($key) {* algoritma 'pembalik' ditulis disini *//}
Security Consideration
“There are no such things as perfect systems”. Hal ini berlaku pula dengan algoritma kriptografi. Dalam prakteknya, tidak sembarang algoritma bisa dipercaya 100% aman dalam melakukan proses enkripsi. Salah satu pertimbangannya adalah algoritma enkripsi tidak boleh digunakan untuk proses dekripsi. Jika algoritma enkripsi dapat juga digunakan untuk mendekripsi ciphertext maka algortima tersebut sebaiknya tidak digunakan sebelum diperbaiki vulnerability yang ter-ekspose tersebut.
Kalau kita lihat contoh yang digunakan diatas, ciphertext
ebh
jika di enkripsi dengan menggunakan key 23 akan menghasilkan text ‘bye’. Serupa dengan jika kita dekrip cipertext tersebut dengan menggunakan key 3. Itulah sebabnya cara yang dilakukan oleh Julius Caesar ini tidak lagi digunakan dalam praktek kriptografi saat ini. Selain karena terlalu simple, teknik ini banyak kelemahan didalamnya.
Inilah yang menyebabkan tidak sembarang orang dapat membuat pasangan algortima enkripsi dan dekripsi yang tangguh dan aman. Beberapa algoritma yang dikenal luas dan masih digunakan hingga sekarang antara lain:
- CBC (Cipher Block Chaining)
- DES (Data Encryption Standard)
- AES (Advanced Encryption Standard)
- Diffie-Hellman
- RSA (Rivest, Shamir, Adleman)
- dll.