Tampilkan postingan dengan label Kriptografi. Tampilkan semua postingan
Tampilkan postingan dengan label Kriptografi. Tampilkan semua postingan

Rabu, 28 Agustus 2024

Jaringan Substitusi-Permutasi

Pada pembahasan kali ini, kita beralih dari penyandian teks menjadi penyandian untaian bita secara umum. Karena komputer melihat data sebagai untaian bita-bita, penyandian untaian bita secara umum memampukan kita untuk melakukan penyandian data apa pun, seperti gambar, suara, video, dan dokumen jenis apa pun.

Sandi substitusi dan sandi transposisi (khususnya permutasi) dapat digabungkan menjadi suatu jaringan yang disebut sebagai jaringan substitusi-permutasi (SP). Jaringan SP terdiri atas operasi substitusi (biasa disebut sebagai kotak-S) dan operasi permutasi (kotak-P) yang disusun secara bergantian dan diulang beberapa kali. Jumlah pengulangan SP biasa disebut sebagai jumlah ronde.

Seperti penyandian pada umumnya, jaringan SP mengubah teks pesan menjadi teks tersandi dengan kunci yang diberikan. Untuk mengembalikan teks pesan, teks tersandi dimasukkan ke dalam inversi jaringan SP, yaitu sama dengan jaringan SP, tetapi urutan operasinya dibalik. Sebagai contoh, jaringan K-S-P-K-S-P-K memiliki inversi sebagai berikut: K-P-S-K-P-S-K. K adalah operasi penambahan kunci ke dalam teks.

Komponen Jaringan SP

Kotak-S berisi daftar konversi dari satu bita ke bita lain atau satu untaian bit ke untaian bit lain. Hal ini seperti konversi A menjadi B, lalu B menjadi K, dan seterusnya. Hal ini menyebabkan nilai-nilai bita hasil konversi tidak lagi memiliki hubungan linear terhadap nilai-nilai bita masukan.

Kotak-P berisi cara memetakan suatu bit dalam suatu bita ke bit lain dalam bita lain. Sebagai contoh, dari masukan 8 bita, bit ke-5 dalam bita ke-2 dipetakan ke bit ke-7 dalam bita ke-5. Hal ini menyebabkan susunan bit tidak lagi sama dengan sebelumnya sehingga relasi antara teks pesan dan teks tersandi menjadi sulit dimengerti.

Sebelum, setelah, dan di antara operasi substitusi dan permutasi, terdapat operasi penambahan kunci ke dalam teks. Namun, kunci yang digunakan berbeda-beda untuk tiap ronde, padahal hanya ada satu kunci yang diberikan. Caranya adalah penjadwalan kunci.

Penjadwalan kunci adalah cara untuk mendapatkan nilai kunci yang berbeda-beda untuk tiap ronde berdasarkan satu kunci yang diberikan. Terdapat beberapa cara untuk melakukannya, misalnya TEA membagi kunci 128 bit menjadi empat kunci 32 bit yang digunakan bergantian atau AES memiliki prosedur yang lebih kompleks untuk menjadwalkan kunci.

Contoh Kasus

Sebagai contoh, kita akan menyandikan pesan C5 37 2B 9F dengan menggunakan struktur K-S-P-K-S-P-K dan ukuran masukan empat bita. Selain itu, kunci yang diberikan juga empat bita: 58 65 9F DD.

Spesifikasi Jaringan SP

Berikut adalah nilai kotak-S yang digunakan dalam AES:

_0_1_2_3_4_5_6_7_8_9_A_B_C_D_E_F
0_637C777BF26B6FC53001672BFED7AB76
1_CA82C97DFA5947F0ADD4A2AF9CA472C0
2_B7FD9326363FF7CC34A5E5F171D83115
3_04C723C31896059A071280E2EB27B275
4_09832C1A1B6E5AA0523BD6B329E32F84
5_53D100ED20FCB15B6ACBBE394A4C58CF
6_D0EFAAFB434D338545F9027F503C9FA8
7_51A3408F929D38F5BCB6DA2110FFF3D2
8_CD0C13EC5F974417C4A77E3D645D1973
9_60814FDC222A908846EEB814DE5E0BDB
A_E0323A0A4906245CC2D3AC629195E479
B_E7C8376D8DD54EA96C56F4EA657AAE08
C_BA78252E1CA6B4C6E8DD741F4BBD8B8A
D_703EB5664803F60E613557B986C11D9E
E_E1F8981169D98E949B1E87E9CE5528DF
F_8CA1890DBFE6426841992D0FB054BB16

Untuk kasus ini, kita bisa membuat kotak-P agar menukar satu bita dengan bita sebelahnya. Sebagai contoh, empat bit pertama dari bita ke-1 ditukar dengan empat bit kedua dari bita ke-2, empat bit pertama dari bita ke-3 ditukar dengan empat bit kedua dari bita ke-4, dan seterusnya.

Operasi penambahan kunci hanya melakukan XOR dengan kunci. Selain itu, penjadwalan kunci yang akan kita gunakan sederhana, yaitu hanya melakukan geseran melingkar ke kiri (<<<) sebanyak satu bita untuk tiap ronde.

Perhitungan

Perhitungan dari kasus di atas ditunjukkan dalam tabel berikut:

OperasiTeksKunci
Keadaan awalC5372B9F58659FDD
Penambahan kunci9D52B44258659FDD
Substitusi5E008D2C<<<
Permutasi0E05CD28
Penambahan kunci6B9A1070659FDD58
Substitusi7FB8CA51<<<
Permutasi8FB71A5C
Penambahan kunci106A42399FDD5865

Hasil penyandiannya adalah 10 6A 42 39.

Bonus: Program C
Program C
#include <stdio.h>
#include <stdint.h>

#define UKURAN 4

void penambahanKunci(uint8_t *A, const uint8_t *kunci) { // K
	for (int i = 0; i < UKURAN; i ++)
		A[i] ^= kunci[i];
}

void substitusi(uint8_t *A, const uint8_t *kotakS) { // S
	for (int i = 0; i < UKURAN; i ++)
		A[i] = kotakS[A[i]];
}

void permutasi(uint8_t *A) { // P
	for (int i = 0; i < UKURAN; i += 2) {
		uint8_t lawas1 = A[i + 0];
		uint8_t lawas2 = A[i + 1];
		A[i + 0] = lawas1 & 0x0F | (lawas2 << 4) & 0xF0;
		A[i + 1] = lawas2 & 0xF0 | (lawas1 >> 4);
	}
}

void geserKunci(uint8_t *kunci) { // <<<
	uint8_t k = kunci[0];
	for (int i = 0; i < UKURAN - 1; i ++)
		kunci[i] = kunci[i + 1];
	kunci[UKURAN - 1] = k;
}

void jaringanSP(uint8_t *pesan, uint8_t *kunci, const uint8_t *kotakS) {
	penambahanKunci(pesan, kunci); // K
	substitusi(pesan, kotakS);     // S
	permutasi(pesan);              // P
	geserKunci(kunci);             // <<<
	penambahanKunci(pesan, kunci); // K
	substitusi(pesan, kotakS);     // S
	permutasi(pesan);              // P
	geserKunci(kunci);             // <<<
	penambahanKunci(pesan, kunci); // K
}

int main() {
	uint8_t pesan[] = {0xC5, 0x37, 0x2B, 0x9F};
	uint8_t kunci[] = {0x58, 0x65, 0x9F, 0xDD};
	uint8_t kotakS[256] = {};
	// https://id.wikipedia.org/wiki/Kotak-S_Rijndael
	initialize_aes_sbox(kotakS);
	jaringanSP(pesan, kunci, kotakS);
	printf("%X %X %X %X\n", pesan[0], pesan[1], pesan[2], pesan[3]);
	return 0;
}

Prinsip Shannon

Jaringan SP memenuhi prinsip pengacakan dan penghamburan Shannon.

  • Pengacakan: Bila salah satu bit teks pesan diubah, hasil dari kotak-S akan jauh berbeda yang kemudian akan makin tersebar oleh kotak-P. Hal ini berulang dalam beberapa ronde. Hasilnya adalah teks tersandi sulit untuk ditebak hanya dengan perubahan kecil.
  • Penghamburan: Bila salah satu bit kunci diubah, kunci ronde disebar ke seluruh/potongan teks sehingga perubahan teks tersandi sulit dilacak.

Penutup

Sekian dahulu tulisanku kali ini. Aku sudah ingin membahas ini sejak lama, terutama bagian menulis kode programnya, tetapi menunggu tulisan pembahasan sandi substitusi dan sandi transposisi selesai agar pembahasannya runtut. Semoga bermanfaat!

Minggu, 28 Juli 2024

Sandi Transposisi: Scytale, Sandi Pagar, dan Transposisi Kolom

Selain sandi substitusi, bentuk dasar penyandian adalah sandi transposisi.

Sandi transposisi adalah penyandian yang mengubah susunan pesan sesuai aturan tertentu. Pengubahan susunan ini bisa diterapkan dengan cara yang sama untuk keseluruhan pesan atau berbeda-beda untuk tiap bagian/potongan pesan. Yang dimaksud potongan pesan adalah unit terkecil yang diperhatikan oleh sandi tertentu. Sebagai contoh, untuk pesan berupa teks, unit terkecilnya bisa berupa huruf/karakter/bita.

Sebagai contoh, pesan AKU​LELAKI​YANG​KEREN​BANGET disandikan menjadi UKGNE​KANEG​EYEAX​LIKBT​ALARN. Untuk membuka sandi, penyerang bisa mencoba kata atau frasa yang memiliki huruf-huruf yang sama, seperti GAYA, LAKU, dan LELANG, tetapi memerlukan waktu karena terdapat banyak kombinasi huruf dan kata. Sebaliknya, pihak yang memiliki kunci dapat membuka sandi dengan mudah.

Pada praktiknya, pesan sependek dan semudah diprediksi itu akan dipecahkan dalam waktu singkat. Namun, dalam keadaan yang tepat, seperti pesan yang cukup panjang (lebih dari 200 huruf), isi pesan yang tidak mudah diprediksi, dan kunci yang berbeda untuk tiap pesan, menebak kata yang tepat akan sangat sulit tanpa informasi lebih lanjut mengenai isi pesan.

Scytale

Scytale adalah salah satu alat untuk melakukan sandi transposisi. Scytale tersusun dari silinder dengan lembaran panjang yang melilitinya secara menyamping. Pesan ditulis secara menurun pada silinder, lalu lilitan lembaran dibuka. Hasilnya adalah teks tersandi.

Contohnya pesan MEREKAPUNYAPEMANAH dengan jumlah kolom = 3 berikut.

    | M | E | R | E | K | A |   |
 ___| P | U | N | Y | A | P |___|
|   | E | M | A | N | A | H |

Setelah lilitan lembaran dibuka, akan terbaca MPEEUM RNAEYN KAAAPH.

Sandi Pagar

Sandi rel pagar (rail fence) dinamai demikian karena cara penyusunannya yang naik-turun secara diagonal melintasi "rel". Setelah itu, teks dibaca per baris atau per "rel". Sandi rel pagar adalah pengembangan dari scytale.

Contohnya pesan KABAR​GEMBIRA​UNTUK​KITA​SEMUA dan jumlah rel = 3 berikut.

K-------R-------B-------U-------K-------A-------U--
--A---A---G---M---I---A---N---U---K---T---S---M---A
----B-------E-------R-------T-------I-------E------

Kemudian, baca per baris menjadi KRBUKAU, AAGMIANUKTSMA, dan BERTIE. Dengan pemisahan per empat huruf, teks tersandi menjadi KRBU KAUA AGMI ANUK TSMA BERT IE.

Transposisi Kolom

Transposisi kolom memerlukan sebuah kunci yang kemudian digunakan sebagai acuan dalam menyusun pesan, misalnya dengan mengurutkan kunci sesuai urutan alfabet. Bila panjang pesan bukan kelipatan panjang kunci, pesan diberi bantalan agar jumlahnya sesuai.

Contohnya pesan AKU​LELAKI​YANG​KEREN​BANGET dengan kunci RIFQI berikut.

R I F Q I    Kunci
5 2 1 4 3    Urutan sesuai alfabet
A K U L E    Teks yang disusun
L A K I Y    mendatar selebar
A N G K E    panjang kunci
R E N B A
N G E T X    Bantalan

Huruf yang sama diurutkan berdasarkan kemunculannya.

Kemudian, tulis secara menurun sesuai urutan kolom, yaitu (1) UKGNE, (2) KANEG, (3) EYEAX, (4) LIKBT, dan (5) ALARN. Setelah itu, gabungkan seluruhnya menjadi UKGNE​KANEG​EYEAX​LIKBT​ALARN. Biasanya, penulisan teks tesandi dipisah beberapa huruf agar mudah dibaca, misal UKGNE KANEG EYEAX LIKBT ALARN.

Penutup

Sekian dahulu yang bisa kutulis. Masih ada beberapa penyandian lain yang termasuk sandi transposisi. Namun, intinya tetap sama, yaitu mengubah susunan/urutan pesan. Semoga bermanfaat!

Minggu, 30 Juni 2024

Sandi Substitusi: Sandi Geser, Tabel Substitusi, dan Sandi Vigenère

Sebelumnya, aku menulis tentang sandi geser. Namun, sandi geser hanyalah salah satu sandi dari kelompok sandi substitusi.

Sandi substitusi adalah penyandian yang mengganti (substitusi) satu nilai dengan nilai lain berdasarkan aturan tertentu. Penggantian ini bisa diterapkan dengan cara yang sama untuk keseluruhan pesan atau berbeda-beda untuk tiap bagian/potongan pesan. Yang dimaksud potongan pesan adalah unit terkecil yang diperhatikan oleh sandi tertentu. Sebagai contoh, untuk pesan berupa teks, unit terkecilnya bisa berupa huruf/karakter.

Sandi Geser

Sandi geser/sandi Caesar adalah penyandian yang dilakukan dengan cara "menggeser" nilai tiap potongan pesan. Penggeseran ini dilakukan ke arah tertentu dan sejumlah tertentu pula. Ini yang dipakai dalam contoh soal pada tulisanku sebelumnya. Sandi ini cukup kuno dan biasanya hanya untuk pembelajaran dan pesan yang diterapkan berbentuk teks.

Sebagai contoh, sandi geser dengan arah geser ke kiri (positif) dan jumlah geser 7 mengubah 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

Secara matematis, fungsi sandi geser didefinisikan sebagai berikut:
Misalkan potongan pesan dan potongan teks tersandi adalah gelanggang 26,
eK(x) = (x+K)mod26 dan
dK(y) = (yK)mod26 dengan x,y26.

Tabel Substitusi

Tabel substitusi adalah tabel yang berisi pemetaan dari suatu nilai ke nilai lain. Tabel substitusi digunakan dalam oleh substitusi untuk mengubah tiap potongan pesan menjadi nilai tertentu. Sandi geser adalah kasus khusus dari tabel substitusi (yang disusun agar nilai teks tersandi hanya berjarak sekian dari nilai teks asli).

Sebagai contoh, tabel substitusi berikut:

Nilai teks asli Nilai teks tersandi
AX
BY
CZ

mengubah teks asli BACA menjadi teks tersandi YXZX.

Secara matematis, fungsi sandi substitusi didefinisikan sebagai berikut:
eπ(x) = π(x) dan
dπ(y) = π-1(y) dengan π adalah tabel substitusi dan π-1 adalah inversi tabel substitusi.

Sandi Vigenère

Bila sandi-sandi sebelumnya diterapkan dengan cara yang sama untuk tiap potongan pesan, sandi Vigenère menerapkan penyandian dengan cara yang berbeda-beda untuk tiap potongan pesan. Sandi Vigenère merupakan pengembangan dari sandi Caesar.

Sebagai contoh, untuk nilai geser (1, 2, 3), teks asli ABC disandikan menjadi BDF. Huruf A digeser sekali (A menjadi B); huruf B digeser dua kali (B menjadi D); huruf C digeser tiga kali (C menjadi F).

Secara matematis, sandi Vigenère didefinisikan sebagai berikut:
Misalkan potongan pesan dan potongan teks tersandi adalah (26)m,
eK(x1,x2,...,xm) = (x1+k1,x2+k2,...,xm+km) dan
dK(y1,y2,...,ym) = (y1k1,y2k2,...,ymkm) dengan keseluruhan perhitungan dilakukan dalam gelanggang 26.

Penutup

Sekian dahulu yang bisa kutulis. Tulisan ini bisa dibilang cukup spontan. Jadi, tulisannya agak berantakan. Namun, isinya masih menarik buatku. Semoga bermanfaat!

Jumat, 24 Mei 2024

Enkripsi Ujung-ke-Ujung, Protokol Signal, dan WhatsApp

Beberapa waktu lalu, aku membaca twit yang terkesan seperti penggaung (buzzer) aplikasi Telegram. Twitnya merendahkan orang-orang yang masih menggunakan WhatsApp. Apakah WhatsApp serendah itu jika dibandingkan dengan Telegram?

Kalau kita lihat dari sisi fitur yang disediakan, fitur yang ada di Telegram memang jauh lebih banyak: kapasitas grupnya lebih besar; dukungan botnya lebih bagus; kita bisa menyembunyikan nomor telepon (diganti nama pengguna); dan lain-lain. Namun, bagaimana kalau kita lihat dari sisi keamanan data?

Salah satu keuntungan WhatsApp adalah enkripsi ujung-ke-ujung (end-to-end encryption/E2EE) yang berlaku untuk seluruh pesan. Pada Telegram, fitur ini hanya berlaku jika menggunakan Secret Chat.

Enkripsi ujung-ke-ujung

Enkripsi ujung-ke-ujung berarti pesan yang dikirim sudah dikunci/disandi sebelum meninggalkan perangkat yang dipakai dan hanya bisa dibuka oleh perangkat penerima. Dampaknya, server yang menjadi perantara pun tidak tahu isi pesan yang dikirim.

WhatsApp menggunakan protokol Signal, protokol buatan Open Whisper Systems (OWS) yang juga digunakan oleh aplikasi Signal dan beberapa lainnya. Telegram menggunakan protokol MTProto (versi 2.0 sejak Telegram versi 4.6, Desember 2017). Aku kurang tahu tentang tingkat keamanan MTProto, tetapi (katanya) MTProto 2.0 lebih bagus dan lebih aman daripada versi 1.0-nya.

Protokol Signal menggunakan algoritma-algoritma kriptografi, seperti pertukaran kunci X3DH (Extended Triple Diffie-Hellman) untuk menentukan kunci bersama antara dua pihak serta Double Ratchet (krek ganda) untuk memastikan forward secrecy walau perangkat penerima sedang luring.

Metadata dan Meta

Meski demikian, protokol Signal tidak membatasi server perantara untuk mengumpulkan metadata pesan seperti identitas pengirim, identitas penerima, dan waktu pengiriman pesan. Hal ini menjadi bermasalah ketika WhatsApp diakuisisi oleh Meta dan mulai mengumpulkan metadata pesan. Banyak penolakan terhadap keputusan ini, tetapi Meta tetap lanjut dengan keputusannya.

Meski demikian, alternatif yang ada adalah aplikasi Signal itu sendiri yang (sejauh ini) tidak menyimpan metadata pesan. Aplikasi perpesanan lain seperti Telegram (kecuali Secret Chat), LINE, dan Facebook Messenger menyimpan pesan asli di server mereka. SMS juga sama tidak amannya (karenanya, WhatsApp juga menyediakan fitur verifikasi dua langkah).

Penggunaan WhatsApp memang lazim di Indonesia. Setidaknya, keamanan isi pesan sudah lebih bagus daripada alternatif yang ada walau ada kurang-kurangnya dikit, tetapi tidak fatal. Kalau mau yang (sedikit) lebih aman, orang-orang bisa pakai Signal atau Matrix.

Penutup

Jadi, siapa yang menang dari WhatsApp vs. Telegram? Itu kembali kepada prioritas tiap orang.

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