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

Minggu, 31 Maret 2024

Ramadan Pertama di Perantauan

Halo!

Ini malam ke-22 Ramadan tahun ini (aku ikut mulai puasa tanggal 11 Maret 2024). Ramadan ini adalah Ramadan pertamaku di perantauan. Ini pertama kali aku memasuki bulan Ramadan jauh dari rumah.

Hal pertama yang kulakukan jelang bulan Ramadan adalah mencari masjid yang memulai Tarawih pada tanggal 10 Maret (malam 11 Maret). Di daerah sekitar UI, mayoritas masjid baru memulai Tarawih pada tanggal 11 Maret (malam 12 Maret) dan melakukan Tarawih sebanyak 23 rakaat (20 Tarawih + 3 Witir).

Pada tanggal 10 Maret sore, aku mencoba salat Magrib di Masjid Nurul Jannah yang kata warga sekitar melakukan Tarawih sebanyak 11 rakaat (8 Tarawih + 3 Witir). Tempatnya lebih jauh daripada tempat aku biasa salat wajib. Namun, karena keluargaku ikut mulai puasa tanggal 11 Maret 2024, aku pun mencoba ke sana dengan harapan masjid tersebut memulai Tarawih pada tanggal 10 Maret.

Aku pun ikut salat Magrib di Masjid Nurul Jannah. Setelah itu, aku pun memeriksa papan pengumuman masjid itu. Rupanya, telah tertempel jadwal imam Tarawih untuk Ramadan tahun ini. Alhamdulillah, jadwalnya dimulai pada tanggal 10 Maret! Malamnya, aku pun salat Tarawih di sana.

Setelah Tarawih, aku pergi ke warteg dekat masjid tempat aku biasa makan malam. Aku makan malam di sana, sekaligus membeli bekal untuk sahur besok paginya. Aku pun kembali ke kos. Beli makan di warteg untuk makan malam dan bekal sahur seperti ini kulakukan terus sampai hari ini, kecuali ketika wartegnya tutup.

Besok sorenya, aku pergi ke Masjid Nurul Jannah lagi untuk mencoba ikut buka bersama di masjid. Karena aku datang mepet, barisannya sudah penuh dan aku menyempil di ujung. Saat aku datang, ada dua pemuda yang juga baru datang dan mereka duduk bersebelahan denganku. Aku mencoba berkenalan dengan mereka. Rupanya, mereka sama-sama satu kos dan juga sama-sama mahasiswa Vokasi UI; salah satunya mengambil prodi Terapi Okupasi.

Hal baru yang kuketahui adalah bahwa program studi Terapi Okupasi baru ada dua di Indonesia, yaitu di UI dan di Poltekkes Surakarta.

Namun, aku tidak hanya Tarawih di Masjid Nurul Jannah. Aku juga mencoba Tarawih di tempat yang lebih dekat, yaitu Musholla Al-Ikhlas tempat aku biasa salat wajib. Di musala itu, Tarawih yang dilakukan sebanyak 23 rakaat, tetapi tidak ada kultum. Aku salat Tarawih bergantian di antara dua tempat itu.

Pada suatu malam, saat aku Tarawih di Masjid Nurul Jannah, ada kultum yang malah "kuliah tujuh (belas) menit". Aku pun jadi enggan lagi Tarawih di sana dan memutuskan untuk Tarawih di Musholla Al-Ikhlas untuk seterusnya, terlebih di Musholla Al-Ikhlas, ada pendingin ruangan (AC). He-he.

Tarawih 23 Rakaat

Aku baru pernah salat Tarawih 23 rakaat sekali sebelum ke Depok, yaitu saat mencoba Tarawih di Masjid Raya Sheikh Zayed di Surakarta. Itu pun hanya sekali. Jadi, ini pengalaman pertama bagiku untuk Tarawih 23 rakaat yang lebih dari semalam berturut-turut.

Hal yang baru bagiku adalah konsep seruan bilal (muazin) dalam rangkaian salat Tarawih. Hal ini belum pernah kualami sebelumnya, termasuk saat Tarawih di Masjid Sheikh Zayed.

Rangkaian Tarawih yang dilakukan sebanyak 23 rakaat dengan salam tiap 2 rakaat. Di antara salam, ada seruan bilal yang berisi permohonan kepada Allah Swt., selawat kepada Rasulullah saw., dan mengenang Khulafaur-Rasyidin. Setelah tiap seruan tersebut, ada balasan dari jemaah Tarawih.

Selain itu, ada juga baca doa bersama setelah Tarawih selesai (setelah rakaat ke-20) sebelum Witir dimulai serta ada baca doa dan niat puasa untuk besoknya setelah Witir selesai (setelah rakaat ke-23). Jadi, ada jeda lumayan untuk istirahat setelah salam sebelum salat berikutnya.

Tarawih memiliki akar kata yang sama dengan istirahat, yaitu ر و ح (ra-wa-ḥa).

Pada sepuluh malam terakhir, ada doa kunut (qunut) pada rakaat terakhir Witir (rakaat ke-23) setelah iktidal sebelum sujud pertama. Nah, ini yang hampir buatku terlupa dan hampir sujud.

Penutup

Aku tinggal beberapa hari lagi puasa Ramadan di Depok. Aku pulang kampung beberapa hari lagi insyaallah. Jadi, aku masih bisa mengikuti Tarawih versi masjid dekat rumahku.

Sepertinya itu saja yang terpikir untuk kutulis saat ini. Sampai jumpa!

Sabtu, 24 Februari 2024

Teorema De Morgan: Penyederhanaan Pernyataan Logika

Halo!

Pernahkah kalian menemui sebuah pernyataan logika yang tampak rumit dan sulit dipahami?

Misalnya, kita ingin mencari inversi pernyataan logika sederhana ini:

usia ≥ 18 atau punya izin khusus

Inversinya berikut ini:

tidak (usia ≥ 18 atau punya izin khusus)

Hmm, tidak memenuhi A atau B? Cukup rumit, ya. Bagaimana menyederhanakannya?

Dalam aljabar logika, terdapat sifat/identitas teorema De Morgan. Aku pertama kali tahu tentang teorema ini saat mengambil mata kuliah Sistem Digital (semester 1).

Teorema De Morgan menyatakan berikut:

  • ¬(A ∧ B) = ¬A ∨ ¬B
  • ¬(A ∨ B) = ¬A ∧ ¬B

Jadi, kita bisa menyederhanakan penyataan tadi sebagai berikut:

tidak (usia ≥ 18 atau punya izin khusus)
→ usia < 18 dan tidak punya izin khusus

Nah, setelah menggunakan sifat tadi, pernyataannya lebih mudah dipahami.

Semoga membantu dan selamat menerapkannya!