Back to IF4020 Kriptografi

Confusion, Diffusion, dan Jaringan Feistel

Questions/Cues

  • Apa itu prinsip confusion dan diffusion menurut Shannon?
  • Bagaimana S-box dan P-box merealisasikan keduanya?
  • Apa itu iterated cipher, round function, dan round key?
  • Bagaimana jaringan Feistel bekerja dan mengapa dekripsinya mudah?
  • Bagaimana kunci putaran dibangkitkan (key schedule)?
  • Apa pengaruh ukuran blok dan ukuran kunci?

Reference Points

  • IF4020 Kriptografi — Block Cipher Bagian 1 (Slides 50-72)

Confusion dan Diffusion

Claude Shannon (1949, Communication Theory of Secrecy Systems) memperkenalkan dua prinsip untuk mempersulit serangan statistik; keduanya memandu perancangan stream maupun block cipher.

Legenda warna diagram dan tabel:

  • ■ Ungu: substitusi / S-box (confusion)
  • ■ Teal: permutasi / pergeseran (diffusion)
  • ■ Biru: fungsi putaran
  • ■ Oranye: XOR (⊕) dan jalur silang antarbagian
  • ■ Abu-abu putus-putus: kunci dan kunci putaran
  • ■ Hijau: keluaran (cipherteks / hasil putaran)
  • ■ Merah: bit yang berubah

1. Confusion menyembunyikan hubungan statistik antara plainteks, cipherteks, dan kunci, sehingga kriptanalis tidak menemukan pola statistik. Direalisasikan lewat substitusi non-linier, biasanya dengan lookup table (S-box).

  • DES S-box: masukan 6 bit, luaran 4 bit. Contoh masukan 110100: baris = bit ke-1 dan ke-6 = 10 (baris 2); kolom = bit ke-2 sampai 5 = 1010 (kolom 10). Pada kotak-S6 DES, entri baris 2 kolom 10 bernilai 4 (0100).
  • AES S-box: masukan 23 (hex) → baris 2, kolom 3 → luaran 26.
S-boxMasukanBarisKolomLuaran
DES S6 (6→4)11010010 = 21010 = 104 = 0100
AES (8→8)232326

Pada tabel ini saja: oranye = bit/digit penentu baris, biru = penentu kolom, ungu = isi S-box.

2. Diffusion menyebarkan pengaruh satu bit plainteks atau kunci ke sebanyak mungkin bit cipherteks. Perubahan kecil (1-2 bit) harus menghasilkan perubahan cipherteks yang tak terprediksi. Contoh: 1111111111111111 → 0110110000101001; bila bit pertama diubah (0111111111111111) cipherteks menjadi 1011001011101111, berbeda pada 10 dari 16 bit. Direalisasikan dengan permutasi/transposisi berulang.

PlainteksCipherteks
Asli11111111111111110110110000101001
Bit ke-1 diubah01111111111111111011001011101111
Bit berbeda1 bit10 bit

Satu bit merah di plainteks menyebar menjadi sepuluh bit merah di cipherteks, tersebar di seluruh blok.

Permutasi mengacak susunan bit dalam blok. Bentuknya: P-box (matriks permutasi; entri = posisi bit asal, mis. P-box DES: bit ke-58 pindah ke posisi 1, bit ke-50 ke posisi 2, dst; sebagian juga kompresi atau ekspansi) atau pergeseran siklik bit (mis. ShiftRows pada AES).

Cipher Berulang (Iterated Cipher)

Agar kuat, enkripsi dilakukan berulang sebanyak putaran dengan fungsi transformasi (round function) dan kunci putaran (round key / subkey) :

Plainteks dinyatakan dan cipherteks . DES: ; AES-128/192/256: . Semakin banyak putaran, diffusion makin besar, tetapi komputasi makin tak efisien, jadi jumlah putaran menyeimbangkan keamanan dan efisiensi.

Tiap putaran memuat substitusi (confusion) lalu permutasi (diffusion), dengan kunci putaran berbeda tiap putaran. Ini adalah bentuk modern dari super-enkripsi klasik (Cipher Transposisi - Columnar dan Rail Fence): substitusi + transposisi berlapis.

flowchart TD
    K["Kunci K"] --> KS["Key schedule"]
    KS --> K1["K1"]
    KS --> K2["K2"]
    KS --> Kr["Kr"]
    P["Plainteks P"] --> R1["Putaran 1<br/>f(., K1)"] --> R2["Putaran 2<br/>f(., K2)"] --> RD["..."] --> Rr["Putaran r<br/>f(., Kr)"] --> C["Cipherteks C"]
    K1 -.-> R1
    K2 -.-> R2
    Kr -.-> Rr
    classDef plain fill:#ffffff,stroke:#7a8699,color:#15202e
    classDef key fill:#eef0f4,stroke:#7a8699,stroke-dasharray:4 3,color:#15202e
    classDef rnd fill:#e3e8fb,stroke:#4f6bed,stroke-width:2px,color:#15202e
    classDef out fill:#dff3e8,stroke:#2f9e63,stroke-width:2px,color:#15202e
    class P,RD plain
    class K,KS,K1,K2,Kr key
    class R1,R2,Rr rnd
    class C out

Abu-abu putus-putus: jalur kunci. Biru: putaran yang sama diulang kali, tiap kali dengan kunci putaran berbeda.

flowchart TD
    IN["Blok masuk"] --> S["Substitusi<br/>(S-box)"] --> PB["Permutasi<br/>(P-box / geser)"] --> X(("⊕")) --> OUT["Blok keluar"]
    KI["Kunci putaran Ki"] -.-> X
    classDef plain fill:#ffffff,stroke:#7a8699,color:#15202e
    classDef sub fill:#efe7fb,stroke:#8a4fd6,stroke-width:2px,color:#15202e
    classDef perm fill:#dcf1f3,stroke:#1f8fa3,stroke-width:2px,color:#15202e
    classDef xor fill:#fbeadb,stroke:#d9731a,stroke-width:2px,color:#b4570f
    classDef key fill:#eef0f4,stroke:#7a8699,stroke-dasharray:4 3,color:#15202e
    classDef out fill:#dff3e8,stroke:#2f9e63,stroke-width:2px,color:#15202e
    class IN plain
    class S sub
    class PB perm
    class X xor
    class KI key
    class OUT out

Isi satu putaran generik: ungu memberi confusion, teal memberi diffusion, lalu kunci putaran dicampur dengan XOR.

Jaringan Feistel

Dipakai DES, GOST, FEAL, Lucifer, RC5, RC6, dan lain-lain. Blok plainteks dibagi dua bagian dan (masing-masing bit), lalu tiap putaran:

Dekripsi adalah enkripsi yang dijalankan dari “bawah” ke “atas” (kunci dipakai berurutan terbalik). Sifat reversible ini tidak bergantung pada fungsi , karena

Jadi perancang bebas membuat serumit mungkin (tak perlu invertibel) dan tak perlu algoritma baru untuk dekripsi.

flowchart TD
    L0["L(i-1)"] --> X(("⊕"))
    R0["R(i-1)"] --> F["f(., Ki)"]
    Ki["Kunci putaran Ki"] -.-> F
    F --> X
    R0 --> L1["Li = R(i-1)"]
    X --> R1["Ri = L(i-1) ⊕ f(R(i-1), Ki)"]
    classDef plain fill:#ffffff,stroke:#7a8699,color:#15202e
    classDef key fill:#eef0f4,stroke:#7a8699,stroke-dasharray:4 3,color:#15202e
    classDef rnd 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 L0,R0 plain
    class Ki key
    class F rnd
    class X xor
    class L1,R1 out
    linkStyle 4 stroke:#d9731a,stroke-width:2.5px

Garis oranye: menyeberang tanpa diubah menjadi . Hanya separuh kiri yang berubah tiap putaran; separuh kanan dipakai sebagai masukan .

Contoh cipher Feistel mainan (blok 8 bit, dan 4 bit, seperti pada Konsep Cipher Blok dan Mode Operasi, 3 putaran). Kunci ; key schedule sederhana sehingga , , . Plainteks A2 → , .

Enkripsi:

1101000101011(0010 ⊕ 1011) ⋘ 1 = 001100101010 ⊕ 0011 = 1001
2001010010111(1001 ⊕ 0111) ⋘ 1 = 110110010010 ⊕ 1101 = 1111
3100111111110(1111 ⊕ 1110) ⋘ 1 = 001011111011

Cipherteks = 1111 1011 = FB.

Dekripsi (kunci terbalik ; , ):

311111011111000101011 ⊕ 0010 = 10011111
210011111011111011111 ⊕ 1101 = 00101001
1001010011011001110100010

Hasil 1010 0010 = A2 ✓. Kolom pada dekripsi persis sama dengan kolom pada enkripsi (dibaca dari bawah): nilai dihitung ulang dari separuh yang tidak berubah, lalu XOR membatalkan dirinya. Dekripsi tidak pernah menghitung .

Pembangkitan Kunci Putaran

Setiap putaran memakai kunci internal (round key) yang dibangkitkan dari kunci eksternal lewat key expansion / key scheduling, dengan komputasi kompleks agar tiap kunci putaran berbeda. Panjang kunci putaran tidak selalu sama dengan kunci eksternal (mis. DES: kunci 64 bit 56 bit dua bagian 28 bit kunci putaran 48 bit).

Ukuran Blok dan Kunci

  • Ukuran blok selalu tetap (DES: 64; AES: 128/192/256 pada Rijndael). Makin besar blok, diffusion makin besar.
  • Ukuran kunci bisa sama atau beda (DES: 56; AES: 128/192/256). Makin besar kunci, confusion lebih besar dan lebih tahan brute force.

Summary

Shannon (1949) mengajukan dua prinsip: confusion (menyembunyikan hubungan statistik plainteks-cipherteks-kunci, lewat substitusi non-linier / S-box, mis. DES 6→4 bit dan AES 8→8 bit) dan diffusion (menyebarkan pengaruh satu bit ke banyak bit cipherteks, lewat permutasi/P-box atau pergeseran siklik). Cipher blok modern adalah iterated cipher: selama putaran (DES 16; AES 10/12/14) dengan kunci putaran dari key schedule. Jaringan Feistel membagi blok menjadi dan : , ; ia reversible independen dari , sehingga dekripsi cukup membalik urutan kunci dan boleh serumit mungkin. Ukuran blok besar menambah diffusion, ukuran kunci besar menambah confusion dan ketahanan brute force. Penerapannya dibahas di DES dan Triple DES dan AES Rijndael.