# Memecahkan AES ECB → Blok demi Blok
AES (Advanced Encryption Standard) adalah algoritma enkripsi simetris yang digunakan secara luas dan dapat beroperasi dalam berbagai mode. ECB (Electronic Codebook) adalah salah satu mode operasi paling sederhana untuk AES.
Dalam mode ECB, setiap blok plaintext (teks asli) dienkripsi secara terpisah dengan kunci yang sama, dan tidak ada mekanisme umpan balik (feedback mechanism) antar blok.
## Alur Kerja Enkripsi AES ECB
Memilih kunci enkripsi rahasia dengan panjang tetap (128, 192, atau 256 bit sesuai varian AES yang dipakai).
Jika panjang plaintext bukan kelipatan ukuran blok AES (16 byte), dilakukan pengisian padding (standar PKCS#7) agar pas tepat kelipatan 16 byte.
Plaintext dibagi menjadi blok-blok tetap berukuran 16 byte. Setiap blok dienkripsi secara independen menggunakan algoritma AES dengan kunci yang sama, menghasilkan blok ciphertext.
Seluruh blok ciphertext yang dihasilkan digabungkan berurutan untuk membentuk ciphertext akhir utuh.
## Implementasi Python (`pycryptodome`)
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from Crypto.Util.Padding import pad, unpad
# Kunci rahasia (16, 24, atau 32 byte untuk AES-128, AES-192, atau AES-256)
key = get_random_bytes(16)
# Buat objek cipher AES ECB
cipher = AES.new(key, AES.MODE_ECB)
# Plaintext Anda (harus kelipatan 16 byte dalam mode ECB)
plaintext = b'aditya rahman'
# padding ke kelipatan 16 byte
padded_plaintext = pad(plaintext, AES.block_size)
# Enkripsi plaintext
ciphertext = cipher.encrypt(padded_plaintext)
# Cetak ciphertext
print("Ciphertext:", ciphertext)## Logika Enkripsi & Analogi Nyata
Konsep: Kunci untuk mengunci (enkripsi) dan membuka kembali (dekripsi) adalah kunci yang sama persis.
Konsep: Data yang panjang tidak diproses sekaligus dalam satu tarikan nafas, melainkan dipotong-potong menjadi kotak-kotak kecil berukuran tetap (blok).
Aturan Emas AES: Ukuran potongan (blok) selalu 16 byte (tetap, tidak bisa ditawar).
Angka 128, 192, atau 256 adalah ukuran kunci (kompleksitas keamanan kunci), bukan ukuran potongan datanya.
Mode operasi ibarat cara kita menyusun dan mengacak potongan-potongan tadi:
Setiap potongan diacak sendiri-sendiri tanpa peduli temannya.
Kelemahan Fatal: Kalau ada dua potongan isinya sama (misal: "AAAA"), hasil acakannya juga pasti identik. Pola data masih terbaca jelas (seperti fenomena ECB Penguin). Tidak aman untuk data terstruktur.
Saling menyambung. Hasil acakan potongan pertama dipakai untuk mengacak potongan kedua, dan seterusnya.
Kelebihan: Walaupun ada potongan yang isinya sama ("AAAA"), hasil akhirnya akan beda total karena efek berantai ini. Jauh lebih aman.
Konsep: Karena CBC bekerja secara berantai, potongan pertama butuh "lawan main" untuk memulai rantai (karena belum ada potongan sebelumnya).
Fungsi: Angka acak (random) yang ditambahkan di awal supaya hasil enkripsi selalu unik, meskipun pesan yang dienkripsi dan kuncinya sama persis.
Konsep: Enkripsi modern bukan sekadar operasi aritmatika linier seperti 1 + 1 = 2.