WU3 - The Last Dance

Bill Elim, Jayson Adrian S


Diberikan sebuah script python beserta outputnya

out.txt

Nah sebelumnya kita harus belajar dulu mengenai stream cipher


Stream Cipher

Stream cipher adalah enkripsi dengan perbandingan key dan text 1:1, artinya, tiap karakter di enkripsi secara independen, jadi mengubah salah satu karakter pada text tidak akan mengubah keseluruhan ciphertext

Mari kita lihat bentuk stream cipher yang paling sederhana, xor cipher

Seperti yang kita tahu mengubah satu karakter tidak akan mengubah ciphertext secara drastis karena enkripsi nya satu banding satu

Tapi apa yang terjadi kalau plaintextnya lebih panjang dari key nya? Maka keynya akan diulang

Nah tentunya ini kurang aman, apalagi kalau nge encrypt text yang cukup panjang dengan key yang pendek, jadi apa yang perlu kita lakukan??

Salah satu ide stream cipher adalah menggunakan key original sebagai seed saja untuk meng-generate random bytes yang lebih banyak, konsep nya mirip dengan seed minecraft. Bytes baru ini lah yang bakal digunakan untuk mengenkripsi, bytes baru ini disebut dengan keystream. Berikut implementasi sederhananya


Known plaintext attack

Sekarang gimana caranya kita menyerang sebuah stream cipher? Salah satu caranya adalah merecover keystream apabila sudah mengetahui sepasang plaintext dan ciphertext

Biar simpel kita pake XOR Cipher aja ya lagi

Seperti yang dilihat kita bisa merecover keystream karena identitas utama XOR yang bisa dibolak balik

Nah dari sini kita udah dapet key sehingga kita bisa mendekripsi semua ciphertext yang ada

Back to soal

Nah sekarang dengan ilmu known plaintext yang sudah kita pelajari, kita bisa melihat dengan jelas cara menyelesaikan soal ini.

Disini diberikan sebuah message (known) yang di enkripsi, serta flag yang di enkripsi menggunakan key yang sama. Enkripsinya ini menggunakan ChaCha20, yang merupakan sebuah stream cipher.

Jadi tinggal recover keystream lalu di xor sama encrypted flag saja :)



Flag: HTB{und3r57AnD1n9_57R3aM_C1PH3R5_15_51mPl3_a5_7Ha7}

Note: ini ada garbage value di belakang karena messagenya lebih panjang dari flagnya jadinya keystreamnya juga lebih panjang meskipun ga kepake wkwk.

Note-Note: ChaCha20 ini adalah algoritma untuk generasi keystream aja, enkripsinya sendiri tetap di xor biasa makanya bisa kita recover seperti XOR cipher.

Note-Note-Note: iv dan nonce dan lain-lain itu ada pengertiannya sendiri, tapi karena ini dipakainya sama semua jadi kita tidak perlu terlalu deepdive dengan itu, anggap aja bagian dari key.


Thank you for reading!