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 110111010001000101000101 dibagi 3 blok 8-bit 11011101 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
ModeCipherteks A23A9
ECB23124
CBC27FDF
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 out

Tidak 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. Blok 1010 muncul dua kali dan selalu menjadi 0010.

Langkah per blok:

11010 (A)1010 ⊕ 1011 = 000100102
20010 (2)0010 ⊕ 1011 = 100100113
30011 (3)0011 ⊕ 1011 = 100000011
41010 (A)1010 ⊕ 1011 = 000100102
51001 (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 jadi 2B124. Hasil dekripsi: A63A9. Hanya yang rusak.

Kelemahan:

  1. Plainteks berulang (mis. spasi panjang) menghasilkan blok cipherteks berulang sehingga rentan analisis frekuensi.
  2. 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.5px

Plainteks di-XOR dengan cipherteks sebelumnya sebelum masuk ke . Garis oranye menunjukkan rantai XOR.

Contoh (plainteks A23A9, , ): (2), (7), (F), (D), (F) → CBC: 27FDF versus ECB: 23124.

Langkah per blok:

110101010 ⊕ 0000 = 101000010010 (2)
200100010 ⊕ 0010 = 000010110111 (7)
300110011 ⊕ 0111 = 010011111111 (F)
410101010 ⊕ 1111 = 010111101101 (D)
510011001 ⊕ 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 jadi 2FFDF. 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.5px

Plainteks 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
10000 (IV)(0000 ⊕ 1011) ⋘ 1 = 01111010 ⊕ 01111101 (D)
21101(1101 ⊕ 1011) ⋘ 1 = 11000010 ⊕ 11001110 (E)
31110(1110 ⊕ 1011) ⋘ 1 = 10100011 ⊕ 10101001 (9)
41001(1001 ⊕ 1011) ⋘ 1 = 01001010 ⊕ 01001110 (E)
51110(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 jadi D69E3. 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.5px

Beda dengan CFB hanya di titik ambil umpan balik (garis oranye): OFB mengambilnya sebelum XOR (), CFB sesudah XOR ().

Langkah per blok:

10000 (IV)(0000 ⊕ 1011) ⋘ 1 = 01111010 ⊕ 01111101 (D)
20111(0111 ⊕ 1011) ⋘ 1 = 10010010 ⊕ 10011011 (B)
31001(1001 ⊕ 1011) ⋘ 1 = 01000011 ⊕ 01000111 (7)
40100(0100 ⊕ 1011) ⋘ 1 = 11111010 ⊕ 11110101 (5)
51111(1111 ⊕ 1011) ⋘ 1 = 10001001 ⊕ 10000001 (1)

Hasil OFB: DB751. Keystream 7 9 4 F 8 bisa dihitung sebelum plainteks ada, karena hanya bergantung pada dan IV.

Uji error: bit teratas dibalik (B → 3), cipherteks jadi D3751. 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 out

Tidak ada garis umpan balik: tiap blok hanya butuh nilai counter-nya sendiri.

Langkah per blok (counter awal ):

10000(0000 ⊕ 1011) ⋘ 1 = 01111010 ⊕ 01111101 (D)
20001(0001 ⊕ 1011) ⋘ 1 = 01010010 ⊕ 01010111 (7)
30010(0010 ⊕ 1011) ⋘ 1 = 00110011 ⊕ 00110000 (0)
40011(0011 ⊕ 1011) ⋘ 1 = 00011010 ⊕ 00011011 (B)
50100(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 jadi DF0B6. 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.

ModeBlok independen?Paralel enkripsiPropagasi error dekripsiGaya
ECByayahanya blok itublok
CBCtidaktidak (dekripsi ya)blok itu + 1 bit di blok berikutblok
CFBtidaktidakblok itu + satu blok berikutstream
OFBtidak (keystream)tidaktidak menjalarstream
CTRya (keystream)yatidak menjalarstream

Summary

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, , ): ECB 23124, CBC 27FDF, CFB DE9E3, OFB DB751, CTR D70B6. Prinsip perancangan di balik dibahas di Confusion, Diffusion, dan Jaringan Feistel.