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!

Sabtu, 20 Januari 2024

Semester Pertama di UI, Depok

Halo!

Kalau disebut pos tahun baru, ini sudah terlambat 19 hari. Hanya saja, aku ingin menulis sesuatu bulan ini. Sepertinya, cerita tentang diri sendiri juga baik. Aku juga masih buntu dalam memikirkan topik tulisan tentang kode atau pemrograman.

Sudah satu semester berlalu dalam perjalanan studi magisterku di UI, Depok. Saat ini masih dalam masa liburan semester. Semester dua sebentar lagi akan dimulai. Banyak hal baru yang kualami selama berada di perantauan (kesannya jauh sekali, tetapi memang cukup jauh). Aku bertemu banyak teman baru, suasana baru, budaya baru, bahasa baru, dan teknologi baru selama berada di kawasan yang sekarang punya singkatan Jabodetabekpunjur.

Walau mungkin juga sudah mengalaminya waktu kuliah sarjana, pertemanan kali ini berbeda karena akulah yang merantau (dari jauh). Sebelumnya, aku jadi "tuan rumah" (dekat sekali jarak rumah ke kampus), sedangkan teman-temankulah yang dari jauh. Aku juga bertemu orang-orang dari berbagai usia: ada yang baru saja mendapat gelar sarjana, ada yang sudah bekerja, ada yang sudah punya anak, dan ada yang sudah berambut putih. Tiap-tiap dari mereka punya kisah hidup yang unik.

Tempat di sekitar perguruan tinggi "populer" merupakan pencampuran budaya dari berbagai daerah di Indonesia. Aku menemukan banyak pedagang dan pengusaha yang merantau ke sana untuk berdagang atau membuka usaha, seperti rumah makan dan toko kelontong. Beberapa di antaranya sudah berhasil dan sudah berdagang atau menjalankan usahanya selama bertahun-tahun.

Untuk hal makanan, aku belum terpikir untuk mencoba banyak jajanan yang dijual di sana (lebih karena memang malas pergi, memang mager parah), padahal wilayah di sekitar instansi pendidikan terkenal dengan banyak penjual makanan/jajanan. Sebagian makan besarku di warteg: pilihan makanannya aman buatku. Meski begitu, aku juga mencoba banyak rumah makan yang ada di sekitar kampus.

Mengembalikan alat makan ke tempat khusus di kantin memang sederhana, tetapi tidak semua kampus menerapkan budaya ini. Itu salah satu budaya baru yang kualami di UI. Untuk kasus spesifik tersebut, baru kantin FK yang menerapkannya di UNS setahuku. Di sisi akademik, setidaknya yang kutahu, mahasiswa bisa ikut masuk kursus mata kuliah di EMAS (atau Scele untuk Fasilkom) tanpa mengambil mata kuliah tersebut secara resmi. Jadi, mahasiswa bisa ikut belajar tanpa berdampak pada nilai. Namun, aku belum tahu apakah hal itu kebijakan kampus, fakultas, atau dosen.

"Lu-gue end!" mungkin jadi kalimat yang cukup terkenal di sinetron. Namun, kata ganti lu dan gue memang lazim digunakan remaja di sana. Aku yang bukan asli orang sana lebih memilih saya-Pak/Bu-Mas/Mbak/Kak. Kata-kata lu/gue kayaknya bakal wagu kalau kuucapkan. Selain itu, ada teman kos yang orang Sunda. Jadi, aku cukup terpapar dengan suara bahasa Sunda.

Momen terbesar bagiku adalah bahwa ini pertama kali aku tinggal mandiri jauh dari rumah (tidak bisa tiap saat pulang ke rumah) dan pertama kali pula mengekos. Alhamdulillah, kos yang kusewa nyaman untuk ditinggali. Seperti kisah orang-orang yang merantau pertama kali, aku juga kadang terpikir bahwa sulit untuk tiba-tiba pulang kalau terjadi apa-apa. Jadi, aku perlu survei hal-hal di sekitar untuk persiapan kalau-kalau ada masalah yang terjadi.

Sepertinya itu saja yang terpikir untuk kutulis saat ini. Ide untuk mengepos ini tiba-tiba muncul dan, karena sempat, langsung kutuliskan saja di sini daripada terlupakan. Sampai jumpa!