Minggu, 28 April 2024

Pengantar Kriptografi dan Sandi Geser

Beberapa waktu lalu, aku menemukan twit-twit pertanyaan tentang cara mengerjakan salah satu jenis soal UTBK SBMPTN (SNBT sejak 2023). Jenis soal yang dimaksud adalah soal dengan kalimat pertanyaan dan jawaban tersandi beserta kuncinya (k).

(k = 7)
ILYHWHRHO UPSHP KHYP APNH WHUNRHA KBH?
- APNH
- LTWHA
- KLSHWHU
- ZLTIPSHU
- ZLWBSBO

Hal tersebut mengingatkanku tentang mata kuliah pilihan yang kuambil saat mengambil S-1, yaitu mata kuliah Kriptografi.

Apa itu kriptografi?

Kriptografi adalah metode menulis pesan rahasia. Yang dimaksud dengan pesan dalam hal ini bisa bermacam-macam (misal tulisan, gambar, suara) selama bisa dikodekan secara matematis. Yang dimaksud dengan rahasia dalam hal ini adalah bahwa pesan yang sudah disandikan tidak bisa dibaca oleh pihak lain. Dengan kata lain, pesan tersandi tampak seperti data/tulisan acak.

Secara umum, berikut alur kerja kriptografi:

  1. Pengirim menulis pesan.
  2. Pengirim menyandikan pesan.
  3. Pesan tersandi dikirim melalui saluran komunikasi terbuka/publik. Siapa pun yang menemukan pesan ini hanya melihatnya sebagai data/tulisan acak.
  4. Penerima membuka sandi pesan.
  5. Penerima membuka pesan.
Diagram alur kerja kriptografi: Pengirim memberikan pesan x dan Kunci kepada Penyandi Pesan dalam ruang privat. Penyandi Pesan mengubah pesan x menjadi y dengan Kunci tersebut. Pesan y dikirimkan melalui ruang publik. Pembuka Sandi mengubah pesan tersandi y menjadi pesan x menggunakan Kunci yang diberikan oleh Penerima dalam ruang privat. Penerima menerima pesan x dari Pembuka Sandi dalam ruang privat.
Diagram alur kerja kriptografi

Ada berbagai macam kriptografi. Menurut kunci yang digunakan, kriptografi dapat dibagi menjadi (a) kriptografi kunci-simetris dan (b) kriptografi kunci-publik (asimetris). Selain itu, menurut cara penerapannya, kriptografi dapat dibagi menjadi (a) penyandian aliran dan (b) penyandian blok.

Kriptografi kunci-simetris adalah metode penyandian yang menggunakan kunci yang sama untuk menyandikan dan membuka sandi (simetris). Metode ini hanya menggunakan satu kunci. Contohnya beragam dari yang klasik, seperti sandi geser/sandi Caesar dan sandi Vigenère, sampai yang modern, seperti Standar Enkripsi Lanjutan (AES) dan sandi ChaCha. Metode kriptografi kunci-simetris klasik, seperti sandi substitusi, sudah ada sejak sekitar 1900 SM.

Kriptografi kunci-publik adalah metode penyandian yang menggunakan dua kunci yang berbeda untuk (1) menyandikan dan (2) membuka sandi. Metode ini menggunakan dua kunci: salah satunya bersifat publik dan satu yang lain lagi bersifat privat. Metode ini cukup baru. Artikel pertama yang menjelaskan tentang metode ini baru terbit pada tahun 1970-an.

Bagaimana contohnya di kehidupan nyata?

Di dunia nyata, baik kunci-simetris maupun kunci-publik digunakan bersamaan. Karena operasi kriptografi kunci-publik lebih lambat daripada kriptografi kunci-simetris, yang biasa dilakukan adalah sebagai berikut:

  1. Kedua belah pihak (pengirim dan penerima) menyepakati kunci bersama melalui saluran komunikasi terbuka/publik (misal pertukaran kunci Diffie–Hellman). Ini salah satu metode kriptografi kunci-publik.
  2. Pengirim menggunakan kunci bersama untuk menyandikan pesan. Ini metode kriptografi kunci-simetris.
  3. Pesan tersandi dikirim melalui saluran komunikasi terbuka/publik.
  4. Penerima membuka sandi dengan kunci bersama.

Bagaimana cara kedua belah pihak bisa menyepakati kunci bersama? Tentang itu, kita bahas lain kali, ya.

Sepertinya itu saja untuk kali ini.

Oi, oi, bagaimana cara membaca contoh soal di atas?

Oh, iya. Contoh soal di atas menggunakan sandi geser/sandi Caesar. Kita sudah diberi tahu tentang jumlah gesernya, yaitu 7. Kita tinggal "menggeser" huruf-huruf dalam alfabet untuk membuka sandinya.

Permasalahannya adalah bahwa tidak ada keterangan tentang arah gesernya sehingga kita perlu memeriksa dua kasus: (1) ke kanan (dikurangi) dan (2) ke kiri (ditambah). Kalau gesernya ke kanan (dikurangi), deretan ABCDE menjadi TUVWX. Kalau gesernya ke kiri (ditambah), deretan ABCDE menjadi HIJKL.

Diagram pergeseran huruf-huruf dalam alfabet. Baris pertama adalah hasil geser kiri 7 kali dan berisi ABCDEFGHIJKLMN. Baris kedua adalah deret sebelum digeser dan berisi TUVWXYZABCDEFG. Baris ketiga adalah hasil geser kanan 7 kali dan berisi MNOPQRSTUVWXYZ.
Diagram pergeseran huruf-huruf dalam alfabet
Operasi Hasil
Teks asli ILYHWHRHO UPSHP KHYP APNH WHUNRHA KBH? APNH, LTWHA, KLSHWHU, ZLTIPSHU, ZLWBSBO
Geser ke kanan (dikurangi) 7 kali BERAPAKAH NILAI DARI TIGA PANGKAT DUA? TIGA, EMPAT, DELAPAN, SEMBILAN, SEPULUH
Geser ke kiri (ditambah) 7 kali PSFODOYOV BWZOW ROFW HWUO DOBUYOH RIO? HWUO, SADOH, RSZODOB, GSAPWZOB, GSDIZIV

Untuk membuka sandi, ternyata yang diperlukan adalah geser ke kanan (dikurangi). Jadi, jawabannya adalah ZLTIPSHU (SEMBILAN).

Sudah, ya. Sampai jumpa!

Bonus: Program Python

alfabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
teks = "ILYHWHRHO UPSHP KHYP APNH WHUNRHA KBH? APNH, LTWHA, KLSHWHU, ZLTIPSHU, ZLWBSBO"
k = 7
hasil = ""
for h in teks:
	j = alfabet.find(h)
	if j == -1: # bukan karakter yang bisa digeser
		hasil += h
	else:
		hasil += alfabet[(j - k) % len(alfabet)] # geser ke kanan
print(hasil) # BERAPAKAH NILAI DARI TIGA PANGKAT DUA? TIGA, EMPAT, DELAPAN, SEMBILAN, SEPULUH