ECB

Misc – 150 points

 

Soal

 

 ecb.zip – d9463e866066d577d217aab69eaefdd4

Solusi

 

Di dalam arsip ZIP ada dua file:

  • File ecb.py yang sepertinya script yang dipakai buat mengenkripsi data
  • bmp.encrypted, file flag yang terenkripsi

 

Script mengenkripsi flag dengan AES mode ECB. Di script disebutkan IV tapi itu sebenarnya tipuan karena mode enkripsi ECB tidak menggunakan IV.

 

from Crypto.Cipher import AES
import sys
import os
IV_SIZE = 16
BLOCK_SIZE = 16

key = sys.argv[1]

mode = AES.MODE_ECB
iv = os.urandom(IV_SIZE)
aes = AES.new(key, mode, iv)

with open(sys.argv[2], “rb”) as f:
data = f.read()

padding = BLOCK_SIZE – len(data) % BLOCK_SIZE

data += padding * “\x00

encrypted = aes.encrypt(data)

with open(sys.argv[2] + “.encrypted”, “wb”) as f:
f.write(encrypted)

Apa yang akan dilakukan? Key-nya tidak diketahui, tidak feasible juga di-bruteforce sepanjang 16 byte. Kita lirik file flagnya. File BMP yang terenkripsi. Seperti yang diketahui, file BMP tidak terkompresi. Kemudian, mode ECB memiliki kelemahan yaitu tidak menyembunyikan pola dari data asli, tapi hanya mengacak polanya saja. Artinya pola dari gambar flag aslinya seharusnya masih terlihat karena BMP.

 

Anda bisa melihat artikel Wikipedia ini, dengan contoh gambar pinguin ini, terlihat ECB tidak menyembunyikan pola:

 

Maka langsung saja kita buka gambar terenkripsi dengan GIMP sebagai raw bytes (diubah ekstensinya menjadi .data).

 

Di sini kita perlu mencoba-coba nilai width-nya supaya terlihat pola yang jelas. Ternyata pada width = 1200 didapatkan pola:

 

Setelah dibalik, terbaca suatu kalimat Flag meski agak tidak jelas:

 

Didapatkan flag yang valid:

 

Flag{Bad ECB Mode}

By IPB Security