[Imaginary CTF Round 12] – CaesarTart

Kita diberikan sebuah source code python yang digunakan untuk mengenkripsi sebuah pesan yang di dalamnya terdapat flag seperti petunjuk soal.

Penjelasan Code:

kita bisa melihat fungsi bernama Caesar, yang di mana sebuah karakter akan di-shift sesuai key yang dimasukkan dan hasilnya akan berbentuk kapital (uppercase).

Lalu kita juga memiliki list Keys yang terdiri dari 5 – 10 butir key (ditentukan secara random) yang tiap digitnya bernilai kisaran 0 – 25 (yang juga ditentukan secara random). Dari penentuan key yang seperti ini saya rasa akan sangat lama untuk melakukan brute force manual karena:

  1. Kita tidak tahu jumlah key pastinya berapa, sehingga mau tidak mau harus melakukan bruteforce lengthnya juga
  2. Kisaran nilai setiap keynya cukup besar, sehingga minimal ada 11881376 kombinasi jika Panjang keynya 5 (265) dan maksimal 141167095653376 kombinasi jika Panjang keynya 10 (2610)

Lalu pada bagian “for i, c in enumerate(msg):” akan mengubah setiap karakter yang ada di pesan awal menggunakan fungsi Caesar tadi sesuai urutan key yang sudah ditentukan.

Dan yang terakhir, kita diberikan ciphertext hasil enkripsinya yang seluruh karakternya adalah huruf kapital. Dari petunjuk soal (ALLCAPSNOUNDERSCORE) menjelaskan kalau plaintextnya juga terdiri dari huruf kapital, sehingga kita tahu charset/alphabet yang digunakan semuanya kapital.

Dari petunjuk soal kita diberitahu bahwa temanya adalah Caesar Cipher yang men-shift tiap karakter dengan key tertentu. Namun metode yang digunakan di soal berbeda, setiap karakter bisa dishift dengan nilai yang berbeda-beda tergantung set key yang digunakan. Oleh karena itu, proses enkripsi soal ini tidak menggunakan Caesar cipher biasa, namun menggunakan Vigenere Cipher yang merupakan perkembangan dari Caesar cipher itu sendiri.

Kita bisa menggunakan tools online yang mampu menebak key yang digunakan dengan metode frequency analysis. Yang saya gunakan adalah https://www.dcode.fr/vigenere-cipher, dengan parameter language English dan alphabetnya cukup masukkan setiap huruf kapital. Hasilnya:

Keys = [‘E’, ‘I’, ‘C’, ‘H’, ‘Q’, ‘O’, ‘S’] atau [4, 8, 2, 7, 16, 14, 18]

Decrypted: HEYIFYOUREREADINGTHISMESSAGEISUPPOSETHISMEANSYOUVESUCCESSFULLYDECRYPTEDITEHNEATTODAYIWANNATALKABOUTAPPLETARTSDIDYOUKNOWAPPLETARTSWEREMADEOUTOFAPPLESBONKERSRIGHTIHEARDPEOPLEEVENPUTSUGARINTOITSUGARTHISISREALLYCRAZYANYWAYEVENTHOUGHTHEREAREAPPLESINAPPLETARTSTHEYARESTILLDELICIOUSENOUGHTHISMADEMEHUNGRYIWANNAEATONENOWTHINKABOUTTHESMELLTHATWAFTSTHROUGHTHEAIRINTOYOURNOSEIMAGINETHEDELIGHTFULGOLDENCOLORATIONOFTHETARTIMSERIOUSLYRUNNINGOUTOFTHINGSTOTELLINHERESOIGUESSWITHOUTFURTHERADOHERESYOURFLAGICTFMORELIKEVIGENERETART

Flag = ictf{MORELIKEVIGENERETART}

Leave a Reply

Your email address will not be published. Required fields are marked *