Back to IF4020 Kriptografi
Konsep Cipher Blok dan Mode Operasi
Questions/Cues
- Bagaimana cipher blok bekerja dan apa beda ukuran blok dan ukuran kunci?
- Apa itu mode operasi dan apa lima modenya?
- Mengapa ECB tidak aman walau algoritmanya kuat?
- Bagaimana CBC mengatasi kelemahan ECB, dan apa peran IV?
- Bagaimana CFB, OFB, dan Counter mengubah cipher blok menjadi stream cipher?
- Bagaimana penjalaran kesalahan pada tiap mode?
Reference Points
- IF4020 Kriptografi — Block Cipher Bagian 1 (Slides 2-49)
Cipher Blok
Berbeda dengan stream cipher (Stream Cipher dan LFSR), cipher blok membagi plainteks menjadi blok-blok bit berpanjang sama (umum 64, 128, 256 bit). Panjang blok cipherteks = panjang blok plainteks. Kunci eksternal tidak harus sama panjang dengan blok (mis. DES: blok 64, kunci 56; AES: blok 128, kunci 128/192/256).
Contoh fungsi sederhana (lemah): (XOR dengan kunci lalu geser wrapping 1 bit ke kiri); . Plainteks
110111010001000101000101dibagi 3 blok 8-bit11011101 00010001 01000101, kunci : blok 1: , geser kiri ; dekripsi: geser kanan , XOR . Cipher blok modern membuat dan jauh lebih rumit (substitusi, permutasi, shifting, kompresi, ekspansi) dan mengulangnya dalam banyak putaran.Daftar sebagian cipher blok: Lucifer, DES, GOST, 3DES, RC2, RC5, Blowfish, AES, IDEA, LOKI, FEAL, CAST-128, SAFER, Twofish, Serpent, RC6, Camellia, Skipjack, TEA, XTEA, SEED, MARS, CRYPTON, LEA, dan lain-lain.
Mode Operasi
Mode operasi menyangkut cara blok pesan dioperasikan sebelum dienkripsi/didekripsi oleh dan . Ada lima: ECB, CBC, CFB, OFB, Counter.
flowchart LR M["Mode operasi cipher blok"] M --> ECB["ECB<br/>blok independen"] M --> CBC["CBC<br/>chaining blok sebelumnya"] M --> CFB["CFB<br/>umpan balik cipherteks<br/>(gaya stream)"] M --> OFB["OFB<br/>umpan balik keluaran E<br/>(gaya stream)"] M --> CTR["Counter<br/>counter dienkripsi<br/>(gaya stream)"] classDef root fill:#eef0f4,stroke:#7a8699,color:#15202e classDef blok fill:#e3e8fb,stroke:#4f6bed,stroke-width:2px,color:#15202e classDef stream fill:#fbeadb,stroke:#d9731a,stroke-width:2px,color:#15202e class M root class ECB,CBC blok class CFB,OFB,CTR stream■ Biru = gaya blok, ■ oranye = gaya stream.
Contoh yang dipakai di semua mode: blok 4 bit, , , , plainteks
A23A9=1010 0010 0011 1010 1001(5 blok).Legenda warna diagram dan tabel:
- ■ Biru: fungsi enkripsi
- ■ Oranye: XOR (⊕), keystream, dan garis umpan balik ke blok berikutnya
- ■ Hijau: cipherteks hasil
- ■ Abu-abu putus-putus: IV atau counter
- ■ Merah: blok yang rusak pada uji error
Mode Cipherteks A23A9ECB 23124 CBC 27FDF CFB () DE9E3 OFB () DB751 CTR () D70B6 1. ECB (Electronic Code Book)
Tiap blok dienkripsi individual dan independen: , .
flowchart TB P1["Pᵢ"] --> E1["Eₖ"] --> C1["Cᵢ"] P2["Pᵢ₊₁"] --> E2["Eₖ"] --> C2["Cᵢ₊₁"] classDef plain fill:#ffffff,stroke:#7a8699,color:#15202e classDef enc fill:#e3e8fb,stroke:#4f6bed,stroke-width:2px,color:#15202e classDef out fill:#dff3e8,stroke:#2f9e63,stroke-width:2px,color:#15202e class P1,P2 plain class E1,E2 enc class C1,C2 outTidak ada garis antarblok: blok dan blok tidak saling memengaruhi.
Contoh (blok 4-bit, , ): plainteks
A23A9=1010 0010 0011 1010 1001→ XOR →0001 1001 1000 0001 0010→ geser kiri →0010 0011 0001 0010 0100=23124. Blok1010muncul dua kali dan selalu menjadi0010.Langkah per blok:
1 1010(A)1010 ⊕ 1011 = 000100102 2 0010(2)0010 ⊕ 1011 = 100100113 3 0011(3)0011 ⊕ 1011 = 100000011 4 1010(A)1010 ⊕ 1011 = 000100102 5 1001(9)1001 ⊕ 1011 = 001001004 Baris yang disorot: plainteks sama → cipherteks sama. Inilah pola yang bocor pada ECB.
Cek dekripsi blok 2: ✓.
Karena blok sama selalu menghasilkan cipherteks sama, secara teori dapat dibuat buku kode (code book) plainteks-cipherteks, satu per kunci. Untuk blok bit ada entri; blok 64 bit berarti entri, terlalu besar disimpan. Bila panjang plainteks bukan kelipatan blok, blok terakhir diberi padding (bit 0, bit 1, atau berselang-seling).
Kelebihan: blok independen sehingga bisa dienkripsi tidak berurutan (cocok untuk arsip yang diakses acak, mis. record basisdata); kesalahan bit pada satu blok cipherteks hanya memengaruhi blok itu saat dekripsi.
Uji error: bit teratas dibalik (
3→B), cipherteks jadi2B124. Hasil dekripsi: A63A9. Hanya yang rusak.Kelemahan:
- Plainteks berulang (mis. spasi panjang) menghasilkan blok cipherteks berulang sehingga rentan analisis frekuensi.
- Lawan dapat memanipulasi cipherteks. Contoh: pesan “Uang ditransfer lima satu juta rupiah” (blok 2 karakter, C1..C16). Bila kriptanalis tahu blok nominal (C8 dan C9) dan membuang keduanya, penerima mendekripsi menjadi “Uang ditransfer satu juta rupiah” (bermakna) dan menyimpulkan nominal salah.
Solusinya: enkripsi tiap blok bergantung pada blok-blok sebelumnya (prinsip CBC).
2. CBC (Cipher Block Chaining)
Tiap blok cipherteks bergantung pada blok plainteksnya dan seluruh blok sebelumnya: hasil enkripsi blok sebelumnya diumpan-balikkan. Blok pertama memerlukan blok semu IV (initialization vector), diberikan pengguna atau dibangkitkan acak.
flowchart TB IV["Cᵢ₋₁<br/>(blok pertama: IV)"] --> X1(("⊕")) P1["Pᵢ"] --> X1 --> E1["Eₖ"] --> C1["Cᵢ"] C1 -. umpan balik .-> X2(("⊕")) P2["Pᵢ₊₁"] --> X2 --> E2["Eₖ"] --> C2["Cᵢ₊₁"] classDef plain fill:#ffffff,stroke:#7a8699,color:#15202e classDef iv fill:#eef0f4,stroke:#7a8699,stroke-dasharray:4 3,color:#15202e classDef enc fill:#e3e8fb,stroke:#4f6bed,stroke-width:2px,color:#15202e classDef xor fill:#fbeadb,stroke:#d9731a,stroke-width:2px,color:#b4570f classDef out fill:#dff3e8,stroke:#2f9e63,stroke-width:2px,color:#15202e class P1,P2 plain class IV iv class E1,E2 enc class X1,X2 xor class C1,C2 out linkStyle 0,4 stroke:#d9731a,stroke-width:2.5pxPlainteks di-XOR dengan cipherteks sebelumnya sebelum masuk ke . Garis oranye menunjukkan rantai XOR.
Contoh (plainteks
A23A9, , ): (2), (7), (F), (D), (F) → CBC:27FDFversus ECB:23124.Langkah per blok:
1 10101010 ⊕ 0000 = 101000010010(2)2 00100010 ⊕ 0010 = 000010110111(7)3 00110011 ⊕ 0111 = 010011111111(F)4 10101010 ⊕ 1111 = 010111101101(D)5 10011001 ⊕ 1101 = 010011111111(F)Blok 1 dan 4 sama-sama
A, tetapi cipherteksnya berbeda (2 dan D), karena yang dicampurkan berbeda.Cek dekripsi blok 2: , lalu ✓.
Kelebihan: blok plainteks sama tidak menghasilkan blok cipherteks sama, sehingga kriptanalisis lebih sulit (alasan utama memakai CBC).
Kelemahan/karakter kesalahan: kesalahan 1 bit pada blok plainteks merambat ke blok cipherteks itu dan semua berikutnya. Sebaliknya saat dekripsi, kesalahan 1 bit pada blok cipherteks hanya memengaruhi blok plainteks yang bersangkutan dan 1 bit yang berkoresponden pada blok plainteks berikutnya.
Uji error: bit teratas dibalik (
7→F), cipherteks jadi2FFDF. Hasil dekripsi: A6BA9. rusak (2→6) dan salah tepat 1 bit (3→B, bit teratas), sisanya benar.3. CFB (Cipher Feedback)
Mengatasi kekurangan CBC pada data yang belum mencapai satu blok. Data dienkripsi dalam unit bit (, = ukuran blok): 1, 2, 4, 8 bit, dst. CFB 8-bit mengenkripsi satu karakter tiap kali. CFB memperlakukan cipher blok seperti stream cipher. Butuh antrian (shift register) bit, diinisialisasi dengan IV.
flowchart TB Q1["Antrian = Cᵢ₋₁<br/>(awal: IV)"] --> E1["Eₖ"] --> X1(("⊕")) P1["Pᵢ"] --> X1 --> C1["Cᵢ"] C1 -. umpan balik .-> E2["Eₖ"] --> X2(("⊕")) P2["Pᵢ₊₁"] --> X2 --> C2["Cᵢ₊₁"] classDef plain fill:#ffffff,stroke:#7a8699,color:#15202e classDef iv fill:#eef0f4,stroke:#7a8699,stroke-dasharray:4 3,color:#15202e classDef enc fill:#e3e8fb,stroke:#4f6bed,stroke-width:2px,color:#15202e classDef xor fill:#fbeadb,stroke:#d9731a,stroke-width:2px,color:#b4570f classDef out fill:#dff3e8,stroke:#2f9e63,stroke-width:2px,color:#15202e class P1,P2 plain class Q1 iv class E1,E2 enc class X1,X2 xor class C1,C2 out linkStyle 4 stroke:#d9731a,stroke-width:2.5pxPlainteks tidak masuk ke . Yang dienkripsi adalah antrian; hasilnya dipakai sebagai keystream untuk di-XOR dengan plainteks. Garis oranye: cipherteks yang keluar menjadi isi antrian berikutnya.
Dekripsi: dengan pembaruan antrian sama. Untuk : , . Kesalahan 1 bit plainteks merambat ke yang bersangkutan dan seterusnya; pada dekripsi, kesalahan 1 bit cipherteks memengaruhi blok plainteks itu dan satu blok berikutnya.
Langkah per blok (, sehingga antrian berikutnya = ):
Antrian 1 0000(IV)(0000 ⊕ 1011) ⋘ 1 = 01111010 ⊕ 01111101(D)2 1101(1101 ⊕ 1011) ⋘ 1 = 11000010 ⊕ 11001110(E)3 1110(1110 ⊕ 1011) ⋘ 1 = 10100011 ⊕ 10101001(9)4 1001(1001 ⊕ 1011) ⋘ 1 = 01001010 ⊕ 01001110(E)5 1110(1110 ⊕ 1011) ⋘ 1 = 10101001 ⊕ 10100011(3)Hasil CFB:
DE9E3. Kolom “Antrian” di baris selalu sama dengan di baris . Cek dekripsi blok 2: ✓. Perhatikan dekripsi juga memakai , bukan .Uji error: bit teratas dibalik (
E→6), cipherteks jadiD69E3. Hasil dekripsi: AA2A9. salah 1 bit (karena XOR langsung), lalu ikut rusak karena yang salah masuk ke antrian. dan benar lagi.4. OFB (Output Feedback)
Mirip CFB, kecuali bit hasil enkripsi antrian (bukan cipherteks) disalin ke posisi paling kanan antrian. Akibatnya keystream tidak bergantung pada plainteks/cipherteks. Kesalahan 1 bit plainteks hanya memengaruhi blok cipherteks yang bersangkutan (dan sebaliknya saat dekripsi): tidak ada penjalaran kesalahan, cocok untuk transmisi analog terdigitisasi (suara, video) yang menoleransi kesalahan 1 bit.
flowchart TB Q1["Antrian = Oᵢ₋₁<br/>(awal: IV)"] --> E1["Eₖ"] --> O1["Oᵢ (keystream)"] --> X1(("⊕")) P1["Pᵢ"] --> X1 --> C1["Cᵢ"] O1 -. umpan balik .-> E2["Eₖ"] --> O2["Oᵢ₊₁"] --> X2(("⊕")) P2["Pᵢ₊₁"] --> X2 --> C2["Cᵢ₊₁"] classDef plain fill:#ffffff,stroke:#7a8699,color:#15202e classDef iv fill:#eef0f4,stroke:#7a8699,stroke-dasharray:4 3,color:#15202e classDef enc fill:#e3e8fb,stroke:#4f6bed,stroke-width:2px,color:#15202e classDef ks fill:#fff6ee,stroke:#d9731a,color:#15202e classDef xor fill:#fbeadb,stroke:#d9731a,stroke-width:2px,color:#b4570f classDef out fill:#dff3e8,stroke:#2f9e63,stroke-width:2px,color:#15202e class P1,P2 plain class Q1 iv class E1,E2 enc class O1,O2 ks class X1,X2 xor class C1,C2 out linkStyle 5 stroke:#d9731a,stroke-width:2.5pxBeda dengan CFB hanya di titik ambil umpan balik (garis oranye): OFB mengambilnya sebelum XOR (), CFB sesudah XOR ().
Langkah per blok:
1 0000(IV)(0000 ⊕ 1011) ⋘ 1 = 01111010 ⊕ 01111101(D)2 0111(0111 ⊕ 1011) ⋘ 1 = 10010010 ⊕ 10011011(B)3 1001(1001 ⊕ 1011) ⋘ 1 = 01000011 ⊕ 01000111(7)4 0100(0100 ⊕ 1011) ⋘ 1 = 11111010 ⊕ 11110101(5)5 1111(1111 ⊕ 1011) ⋘ 1 = 10001001 ⊕ 10000001(1)Hasil OFB:
DB751. Keystream7 9 4 F 8bisa dihitung sebelum plainteks ada, karena hanya bergantung pada dan IV.Uji error: bit teratas dibalik (
B→3), cipherteks jadiD3751. Hasil dekripsi: AA3A9. Hanya yang salah, tepat 1 bit. Tidak ada penjalaran.5. Counter Mode (CTR)
Tanpa chaining. Counter berukuran sama dengan blok; nilainya berbeda untuk tiap blok (awal diinisialisasi, lalu +1 tiap blok). Cipherteks: .
flowchart TB T1["Tᵢ"] --> E1["Eₖ"] --> X1(("⊕")) P1["Pᵢ"] --> X1 --> C1["Cᵢ"] T2["Tᵢ₊₁ = Tᵢ + 1"] --> E2["Eₖ"] --> X2(("⊕")) P2["Pᵢ₊₁"] --> X2 --> C2["Cᵢ₊₁"] classDef plain fill:#ffffff,stroke:#7a8699,color:#15202e classDef iv fill:#eef0f4,stroke:#7a8699,stroke-dasharray:4 3,color:#15202e classDef enc fill:#e3e8fb,stroke:#4f6bed,stroke-width:2px,color:#15202e classDef xor fill:#fbeadb,stroke:#d9731a,stroke-width:2px,color:#b4570f classDef out fill:#dff3e8,stroke:#2f9e63,stroke-width:2px,color:#15202e class P1,P2 plain class T1,T2 iv class E1,E2 enc class X1,X2 xor class C1,C2 outTidak ada garis umpan balik: tiap blok hanya butuh nilai counter-nya sendiri.
Langkah per blok (counter awal ):
1 0000(0000 ⊕ 1011) ⋘ 1 = 01111010 ⊕ 01111101(D)2 0001(0001 ⊕ 1011) ⋘ 1 = 01010010 ⊕ 01010111(7)3 0010(0010 ⊕ 1011) ⋘ 1 = 00110011 ⊕ 00110000(0)4 0011(0011 ⊕ 1011) ⋘ 1 = 00011010 ⊕ 00011011(B)5 0100(0100 ⊕ 1011) ⋘ 1 = 11111001 ⊕ 11110110(6)Hasil CTR:
D70B6. Blok ke-4 bisa langsung dihitung dari tanpa menunggu blok 1–3, sehingga paralel dan akses acak.Uji error: bit teratas dibalik (
7→F), cipherteks jadiDF0B6. Hasil dekripsi: AA3A9. Hanya salah 1 bit, sama seperti OFB.Kelebihan: hanya butuh algoritma enkripsi ; dapat mengenkripsi blok secara acak (tak harus berurutan); blok dapat diproses paralel; sederhana dan cepat. Syarat: counter tidak diketahui/tidak dapat diprediksi dan tak boleh berulang untuk kunci yang sama.
Mode Blok independen? Paralel enkripsi Propagasi error dekripsi Gaya ECB ya ya hanya blok itu blok CBC tidak tidak (dekripsi ya) blok itu + 1 bit di blok berikut blok CFB tidak tidak blok itu + satu blok berikut stream OFB tidak (keystream) tidak tidak menjalar stream CTR ya (keystream) ya tidak menjalar stream
Cipher blok mengenkripsi blok bit berpanjang tetap (, ), dengan fungsi yang rumit dan berputar berulang. Mode operasi mengatur cara blok diproses: ECB (independen, ; blok sama menghasilkan cipherteks sama sehingga rentan analisis pola dan manipulasi/penghapusan blok), CBC ( dengan IV; menghilangkan pola tetapi error menjalar), CFB dan OFB (mengubah cipher blok menjadi stream cipher dengan antrian; OFB tanpa penjalaran error), serta Counter (mengenkripsi counter unik; paralel dan akses acak). Pada contoh sama (
A23A9, , ): ECB23124, CBC27FDF, CFBDE9E3, OFBDB751, CTRD70B6. Prinsip perancangan di balik dibahas di Confusion, Diffusion, dan Jaringan Feistel.
Additional Information
Efek Penguin ECB
Mengenkripsi gambar bitmap dengan ECB tetap memperlihatkan siluet gambar (blok warna sama menjadi cipherteks sama). Demonstrasi klasik logo Tux menunjukkan mengapa ECB tidak boleh dipakai untuk data terstruktur, walau cipher-nya AES.
Mode Modern: AEAD
Pada praktik, hindari mode “polos”: pakai AES-GCM atau ChaCha20-Poly1305 (CTR + otentikasi) agar terlindung dari bit-flipping. CBC tanpa MAC rentan padding oracle attack (Vaudenay 2002). Aturan IV: CBC butuh IV tak terprediksi; CTR/GCM butuh nonce unik, jangan berulang.
Ciphertext Stealing dan Padding
Alih-alih padding, ciphertext stealing membuat panjang cipherteks = panjang plainteks. Padding standar PKCS#7 menambahkan byte bernilai (
pad/unpaddi pustaka Python).Proyek Eksplorasi Mandiri
- Implementasikan cipher toy dan kelima mode; verifikasi angka
23124(ECB) dan27FDF(CBC) pada contoh di atas.- Enkripsi gambar PNG dengan AES-ECB vs AES-CBC dan bandingkan hasilnya secara visual; lalu demonstrasikan serangan penghapusan blok pada ECB.
Bacaan Lanjutan
- NIST SP 800-38A, Recommendation for Block Cipher Modes of Operation.
- William Stallings, Cryptography and Network Security, Bab 6-7.