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 → luaran26.
S-box Masukan Baris Kolom Luaran DES S6 (6→4) 11010010 = 2 1010 = 10 4 = 0100AES (8→8) 232 3 26 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 menjadi1011001011101111, berbeda pada 10 dari 16 bit. Direalisasikan dengan permutasi/transposisi berulang.
Plainteks Cipherteks Asli 11111111111111110110110000101001Bit ke-1 diubah 01111111111111111011001011101111Bit berbeda 1 bit 10 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 outAbu-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 outIsi 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.5pxGaris 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:
1 101000101011(0010 ⊕ 1011) ⋘ 1 = 001100101010 ⊕ 0011=10012 001010010111(1001 ⊕ 0111) ⋘ 1 = 110110010010 ⊕ 1101=11113 100111111110(1111 ⊕ 1110) ⋘ 1 = 00101111 1011 Cipherteks =
1111 1011= FB.Dekripsi (kunci terbalik ; , ):
3 11111011111000101011 ⊕ 0010=100111112 10011111011111011111 ⊕ 1101=001010011 00101001101100111010 0010 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.
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.
Additional Information
SPN vs Feistel
Dua arsitektur utama cipher blok: Feistel (DES, Blowfish, RC5, GOST: hanya separuh blok berubah per putaran, tak perlu invertibel) dan SPN, Substitution-Permutation Network (AES, Serpent: seluruh blok disubstitusi lalu dipermutasi tiap putaran, S-box dan lapisan linier harus invertibel). Feistel butuh lebih banyak putaran; SPN berdifusi lebih cepat.
Avalanche dan Kriteria Desain S-box
Efek longsor (avalanche) menuntut bit cipherteks berubah untuk perubahan 1 bit. S-box yang baik memiliki nonlinearity tinggi (tahan linear cryptanalysis, Matsui 1993) dan differential uniformity rendah (tahan differential cryptanalysis, Biham-Shamir 1990). Sifat DES yang berubah 2 bit pada keluaran per 1 bit masukan adalah salah satu kriteria awalnya.
Luby-Rackoff
Teorema Luby-Rackoff: jaringan Feistel 3 putaran dengan fungsi putaran pseudorandom menghasilkan permutasi pseudorandom, dan 4 putaran menjadi super-pseudorandom. Ini alasan teoretis mengapa Feistel aman walau tak invertibel.
Proyek Eksplorasi Mandiri
- Bangun jaringan Feistel 4 putaran dengan sembarang (mis. hash pendek) dan buktikan secara program bahwa dekripsi memulihkan plainteks untuk 10.000 pasangan acak.
- Ukur efek longsor cipher mainanmu: ubah 1 bit plainteks, hitung rata-rata jumlah bit cipherteks yang berubah untuk , dan plot.
Bacaan Lanjutan
- C. E. Shannon, “Communication Theory of Secrecy Systems”, 1949.
- H. Feistel, “Cryptography and Computer Privacy”, Scientific American, 1973.
- Stallings, Cryptography and Network Security, Bab 3 (Block Ciphers and DES).