Detail SHA-3: Algoritma Hash Berbasis Keccak
SHA-3 adalah fungsi hash kriptografi yang dikembangkan dari algoritma Keccak, pemenang kompetisi NIST SHA-3 pada 2015. Berbeda dengan SHA-256 yang menggunakan struktur Merkle-Damgård, SHA-3 menggunakan konstruksi sponge yang memungkinkan fleksibilitas output dan keamanan tinggi. SHA-3 tersedia dalam varian seperti SHA3-224, SHA3-256, SHA3-384, dan SHA3-512, serta mode XOF (eXtendable Output Function) seperti SHAKE128 dan SHAKE256. Saya akan fokus pada SHA3-256 untuk detail ini.
![]() |
- Input: Data apa pun.
- Output: Hash dengan panjang tertentu (misalnya, 256 bit untuk SHA3-256).
- State: Matriks 3D 5x5x64 bit (total 1600 bit).
- Kapasitas (c): Bagian state untuk keamanan (512 bit untuk SHA3-256).
- Rate (r): Bagian state untuk input per iterasi (1600 - 512 = 1088 bit).
- Putaran: 24 putaran Keccak-f per blok.
SHA-3 bekerja dengan "menyerap" (absorb) input dan "memeras" (squeeze) output, seperti spons.
Langkah-Langkah SHA-3
1. Preprocessing
- Konversi ke Biner: Input diubah ke bit. Misalnya, "abc" → 01100001 01100010 01100011 (24 bit).
- Padding:
- Aturan padding Keccak untuk SHA-3: Tambah "01" (domain separation) dan "1" di akhir, isi nol di antara.
- Untuk SHA3-256 (r=1088 bit):
- "abc" (24 bit) → 01100001 01100010 01100011 01 000...1.
- Total panjang jadi kelipatan 1088 bit (1 blok untuk "abc").
- Contoh blok 1088-bit:
- 01100001 01100010 01100011 01 000...1
- Pecah ke Blok: Input pendek seperti "abc" jadi 1 blok 1088-bit.
- State adalah matriks 5x5x64 bit (1600 bit), semua diisi nol:
- [0, 0, 0, 0, 0] // x=0
- [0, 0, 0, 0, 0] // x=1
- [0, 0, 0, 0, 0] // x=2
- [0, 0, 0, 0, 0] // x=3
- [0, 0, 0, 0, 0] // x=4
- Setiap elemen (lane) adalah 64-bit.
- Koordinat: A[x,y,z], x dan y = 0-4, z = 0-63 (bit dalam lane).
- XOR dengan Blok Input:
- Blok 1088-bit pertama (misalnya, "abc" + padding) di-XOR-kan dengan 1088 bit pertama state.
- 512 bit terakhir (kapasitas) tetap nol.
- State awal jadi: [input di r, nol di c].
- State 1600-bit diproses melalui 24 putaran.
- Tiap putaran punya 5 langkah: θ (Theta), ρ (Rho), π (Pi), χ (Chi), ι (Iota).
- Hitung paritas tiap kolom (XOR semua bit di z tertentu untuk setiap x).
- Update setiap lane:
- A[x,y,z] = A[x,y,z] XOR (paritas[x-1,z] XOR paritas[x+1,z-1])
- Contoh: Jika lane A[0,0] = "abc" (24 bit + padding), paritas dihitung dan disebarkan.
- Rotasi bit setiap lane dengan jumlah berbeda (tabel rotasi Keccak).
- Misalnya:
- A[0,0] rotasi 0 bit (tidak berubah).
- A[1,0] rotasi 1 bit.
- A[2,1] rotasi 45 bit, dll.
- Contoh: 1100 rotasi 1 → 0110.
- A'[x,y] = A[(x + 3y) mod 5, x]
- Contoh: A[1,0] pindah ke A[0,1].
- Update setiap bit:
- A[x,y,z] = A[x,y,z] XOR ((NOT A[x+1,y,z]) AND A[x+2,y,z])
- Contoh: Jika A[0,0,0] = 1, A[1,0,0] = 0, A[2,0,0] = 1 → 1 XOR ((NOT 0) AND 1) = 1 XOR 1 = 0.
- XOR lane A[0,0] dengan konstanta putaran (RC[i]), misalnya RC[0] = 0000000000000001.
- Total 24 RC unik.
- Iterasi: Ulangi untuk setiap blok input (hanya 1 untuk "abc").
- Ambil 256 bit pertama state setelah Keccak-f.
- Untuk SHA3-256, cukup 1 "squeeze" karena r > 256.
- Hash "abc": 3a985da74fe225b2045c172d6bd390bd855f086e3e9d525b46bfe24511431532.
- XOR: 1 XOR 1 = 0, 1 XOR 0 = 1.
- AND: 1 AND 1 = 1, 1 AND 0 = 0.
- NOT: NOT 1 = 0, NOT 0 = 1.
- Rotasi: Geser bit dengan wrap-around (misalnya, 1100 rotasi 1 = 0110).
- θ: Hitung paritas, sebarkan.
- ρ: Rotasi lane (misalnya, A[1,0] rotasi 1 bit).
- π: Acak posisi.
- χ: Non-linear XOR/AND.
- ι: XOR A[0,0] dengan RC[0].
- Peer-to-Peer: Transaksi langsung.
- Blockchain: Buku besar publik.
- Keamanan: Kriptografi.
- Proof-of-Work: Mencegah double-spending.
- Pasokan: 21 juta Bitcoin.
- Transaksi: Masuk mempool.
- Penambang: Hash data dengan SHA-256.
- Target: Hash dengan nol awal.
- Imbalan: Blok ditambahkan.
- Unik: Data berbeda = hash berbeda.
- Satu Arah: Tidak bisa dibalik.
- Konsisten: Data sama = hash sama.
- W0 = 61626380, ekspansi ke 64 kata.
- 64 putaran: T1 = h + Σ1(e) + Ch + K[i] + W[i].
- "abc" → 01100001 01100010 01100011 01 000...1 (1088 bit).
24 Putaran Keccak-f:
- θ: Difusi paritas.
- ρ: Rotasi lane (misalnya, A[1,0] rotasi 1).
- π: Permutasi posisi.
- χ: A[x,y,z] XOR ((NOT A[x+1,y,z]) AND A[x+2,y,z]).
- ι: XOR A[0,0] dengan RC (misalnya, 00000001).
- XOR: 1 XOR 1 = 0.
- AND: 1 AND 0 = 0.
- Rotasi: 1100 rotasi 1 = 0110.
- Preprocessing: Blok 128-byte.
- Kompresi: 10 putaran G-function.
- Output: "abc" → 508c5e8c327c14e2....
- BLAKE2: Cepat, sederhana.
- SHA-3: Aman, fleksibel.

Komentar
Posting Komentar