Detail SHA-256: Algoritma Hash Bitcoin Secara Mendalam
SHA-256 (Secure Hash Algorithm 256-bit) adalah fungsi hash kriptografi yang menghasilkan hash sepanjang 256 bit (64 karakter heksadesimal). Ini adalah bagian dari keluarga SHA-2, dirancang oleh NSA, dan digunakan dalam Bitcoin untuk Proof-of-Work. Berikut detail langkah-langkahnya:
Struktur Umum
- Input: Data apa pun (teks, file, dll.).
- Output: Hash 256-bit.
- Blok: Memproses data dalam blok 512-bit.
- Putaran: 64 putaran kompresi per blok.
SHA-256 menggunakan operasi bitwise seperti rotasi (ROTR), XOR, AND, serta penjumlahan modulo 2³² untuk mengacak data secara aman.
Langkah-Langkah SHA-256
1. Preprocessing
- Konversi ke Biner: Input diubah ke bit. Misalnya, "abc" → 01100001 01100010 01100011 (24 bit).
Padding:
- Tambah "1" di akhir: 01100001 01100010 01100011 1.
- Tambah nol hingga panjang jadi kelipatan 512 bit, sisakan 64 bit untuk panjang.
- Tambah panjang input (dalam bit) sebagai 64 bit terakhir. Untuk "abc" (24 bit): 00011000 (dengan nol di depan).
- Total: 512 bit. Contoh:
Pecah ke Blok: Input pendek seperti "abc" jadi 1 blok 512-bit.
2. Inisialisasi Nilai Awal (Hash Values)
SHA-256 mulai dengan 8 konstanta 32-bit (H0-H7), diambil dari akar kuadrat bilangan prima pertama:
- H0 = 6a09e667
- H1 = bb67ae85
- H2 = 3c6ef372
- H3 = a54ff53a
- H4 = 510e527f
- H5 = 9b05688c
- H6 = 1f83d9ab
- H7 = 5be0cd19
3. Pemrosesan Setiap Blok
Setiap blok 512-bit diproses sebagai berikut:
Pecah ke 16 Kata (W0-W15):
- Blok dibagi jadi 16 potongan 32-bit.
- Untuk "abc":
- W0 = 61626380 (hex dari "abc" + "1" + nol).
- W1-W14 = 00000000.
- W15 = 00000018 (panjang 24 bit).
Ekspansi ke 64 Kata (W16-W63):
Gunakan rumus:
W[i] = W[i-16] + σ0(W[i-15]) + W[i-7] + σ1(W[i-2])
- σ0(x) = (x ROTR 7) XOR (x ROTR 18) XOR (x SHR 3).
- σ1(x) = (x ROTR 17) XOR (x ROTR 19) XOR (x SHR 10).
- ROTR = rotasi ke kanan, SHR = geser ke kanan.
Contoh W16:
- W16 = W0 + σ0(W1) + W9 + σ1(W14).
- W1, W9, W14 = 00000000, jadi σ0 dan σ1 menghasilkan nol.
- W16 = W0 = 61626380.
- a = H0, b = H1, c = H2, d = H3, e = H4, f = H5, g = H6, h = H7.
- K0 = 428a2f98
- K1 = 71374491, dll.
- Σ0(a) = (a ROTR 2) XOR (a ROTR 13) XOR (a ROTR 22).
- Σ1(e) = (e ROTR 6) XOR (e ROTR 11) XOR (e ROTR 25).
- Ch(e,f,g) = (e AND f) XOR ((NOT e) AND g).
- Maj(a,b,c) = (a AND b) XOR (a AND c) XOR (b AND c).
- h = 5be0cd19, e = 510e527f, f = 9b05688c, g = 1f83d9ab.
- W0 = 61626380, K0 = 428a2f98.
- Σ1(e) = hitung rotasi e → (contoh bitwise kompleks).
- Ch(e,f,g) = bitwise AND/XOR → (nilai spesifik).
- T1 = h + Σ1(e) + Ch + K0 + W0.
- Σ0(a) dan Maj(a,b,c) serupa.
- Update a-h.
- Setelah 64 putaran:
- H0 = H0 + a
- H1 = H1 + b
- H7 = H7 + h
- Gabungkan H0-H7 jadi 256-bit.
- Untuk "abc": ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.
- ROTR(n): Rotasi bit ke kanan sebanyak n posisi.
- Contoh: 1100 ROTR 1 = 0110.
- SHR(n): Geser bit ke kanan, isi nol di kiri.
- Contoh: 1100 SHR 1 = 0110.
- XOR: Bitwise exclusive OR.
- 1 XOR 1 = 0, 1 XOR 0 = 1.
- AND: Bitwise AND.
- 1 AND 1 = 1, 1 AND 0 = 0.
- a = 6a09e667, e = 510e527f, dll.
- T1 dan T2 dihitung (bitwise panjang).
- Update a-h.
- Tanpa Perantara: Transaksi langsung antar pengguna.
- Blockchain: Buku besar publik terdesentralisasi.
- Keamanan: Kriptografi untuk perlindungan.
- Proof-of-Work: Mencegah double-spending.
- Pasokan Terbatas: 21 juta Bitcoin.
- Transaksi: Masuk ke mempool.
- Penambang: Memecahkan teka-teki hashing (SHA-256).
- Hash: Harus dimulai dengan nol tertentu.
- Imbalan: Blok ditambahkan, penambang dapat Bitcoin.
- Unik: Data berbeda = hash berbeda.
- Satu Arah: Tidak bisa dibalik.
- Konsisten: Data sama = hash sama.
- Input "abc" → 01100001 01100010 01100011.
- Padding: Tambah "1", nol, dan panjang (24 bit) → 512 bit.
- Blok: 61626380 00000000 ... 00000018.
- H0 = 6a09e667, H1 = bb67ae85, dll.
- 16 Kata: W0 = 61626380, W15 = 00000018.
- Ekspansi: W16 = W0 + σ0(W1) + W9 + σ1(W14).
- 64 Putaran:
- T1 = h + Σ1(e) + Ch(e,f,g) + K[i] + W[i].
- T2 = Σ0(a) + Maj(a,b,c).
- Update a-h setiap putaran.
- Konstanta: K0 = 428a2f98, dll.
- Hash "abc": ba7816bf8f01cfea....
- ROTR: Rotasi bit (misalnya, 1100 ROTR 1 = 0110).
- XOR: 1 XOR 0 = 1.
- AND: 1 AND 1 = 1.
- Preprocessing: Padding ke 1088 bit.
- State: Matriks 1600-bit.
- Absorb: 24 putaran Keccak-f.
- Squeeze: Hash 256-bit.
- "abc" → 3a985da74fe225b2....
- Preprocessing: Blok 128-byte.
- Kompresi: 10 putaran G-function.
- Output: "abc" → 508c5e8c327c14e2....
- BLAKE2: Cepat, sederhana, praktis.
- SHA-3: Aman, fleksibel, kompleks.

Komentar
Posting Komentar