SHA-256 adalah prosedur yang didefinisikan secara tepat untuk menghitung sidik jari data, yang disebut hash. Masukan yang sama selalu menghasilkan keluaran yang sama sepanjang 256 bit: 32 byte, biasanya ditulis sebagai 64 karakter heksadesimal. Bitcoin memakainya untuk menghubungkan dan memeriksa data serta dalam penambangan. Namun, sidik jari itu bukan salinan terenkripsi dari isi aslinya.
Bayangkan seseorang mengirimkan berkas beserta hash-nya. Dengan menghitung sendiri, Anda dapat memeriksa apakah data yang diunduh cocok dengan sidik jari tersebut. Perubahan kecil pada masukan pun sangat mungkin mengubah keseluruhan hasil. Namun, sidik jari saja tidak memberi tahu siapa pembuat berkas atau apakah berkas itu aman. Jika penyerang menyisipkan berkas berbahaya sekaligus hash-nya, keduanya akan cocok. Karena itu, sumber nilai pembanding juga harus dapat dipercaya. [1] [5]
Untuk tiga byte ASCII abc, tanpa tanda kutip dan tanpa baris baru, hasilnya adalah ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad. Ini bukan angka yang dibuat secara acak: setiap implementasi yang benar menghasilkan nilai ini dari byte yang persis sama. Menambahkan spasi atau baris baru mengubah masukan. Hash yang berbeda dalam keadaan itu bukan berarti algoritmanya rusak. Pengodean teks juga berpengaruh. [3]
Enkripsi dirancang agar pesan dapat dipulihkan dengan sebuah kunci. SHA-256 tidak memiliki kunci seperti itu maupun prosedur pembaliknya. Namun, masukan yang mungkin tetap bisa dicoba: orang yang menduga Anda melakukan hashing terhadap PIN empat digit dapat mencoba seluruh 10.000 kombinasi dan membandingkan hasilnya. Hash yang panjang tidak menambahkan entropi (tingkat ketakterdugaan masukan) yang tidak dimiliki rahasia lemah. Keamanan juga bergantung pada banyaknya kemungkinan yang benar-benar perlu dicoba penyerang. [5] [7]
Pengenal blok, txid (pengenal transaksi), dan penggabungan pasangan hash dalam Merkle Tree (struktur pohon yang menghubungkan hash) memakai SHA256(SHA256(data)). Penerapan kedua memproses 32 byte mentah hasil pertama, bukan bentuk teksnya yang terdiri dari 64 karakter. Keluarannya tetap 256 bit. Hashing ganda di sini adalah aturan protokol, bukan bukti bahwa SHA-256 tunggal telah dipecahkan. Bitcoin juga memakai konstruksi lain: misalnya Taproot menambahkan tag yang sudah ditentukan ke masukan untuk memisahkan berbagai tujuan hashing. [2] [4] [6]
Penambang berulang kali mengubah bagian yang diizinkan dalam header calon blok dan menghitung SHA-256 gandanya. Mereka mencari hasil yang, jika dibaca sebagai angka, tidak melebihi target (batas angka) yang ditetapkan. Mereka tidak sedang mendekripsi pesan atau mencari kunci privat orang lain. Menemukan header yang sesuai membutuhkan banyak percobaan; memeriksanya cepat. Header juga merujuk blok sebelumnya, sehingga perubahan pada blok lama mengganggu tautan berikutnya. Full Node (node yang memeriksa aturan Bitcoin secara mandiri) tetap memeriksa transaksi dan aturan lain: hash yang memenuhi syarat saja tidak membuat blok tidak valid menjadi valid. [4]
Jumlah pesan yang mungkin lebih banyak daripada sidik jari 256-bit, sehingga beberapa masukan berbeda pasti mempunyai hash yang sama. Inilah collision. Yang penting adalah apakah kita dapat sengaja menemukannya. Untuk hash ideal 256-bit, pencarian umum terhadap collision apa pun memerlukan sekitar 2^128 percobaan; mencari masukan untuk sidik jari yang sudah ditetapkan memerlukan sekitar 2^256. Keduanya tugas yang berbeda. Menemukan collision tidak dengan sendirinya mengungkap kunci privat Bitcoin. Angka-angka ini juga bukan jaminan keamanan seluruh dompet atau protokol. [5]
SHA-256 adalah komponen, bukan solusi lengkap untuk setiap masalah keamanan. Algoritma ini sengaja cepat, sehingga tidak cocok digunakan sendirian untuk menyimpan kata sandi pilihan manusia: penyerang dapat menguji tebakan dengan cepat. Untuk itu tersedia prosedur khusus penurunan nilai dari kata sandi, misalnya dengan biaya komputasi yang dapat diatur. Demikian pula, resep buatan sendiri “hash sesuatu lalu dapatkan kunci aman” tidak mengatasi kurangnya keacakan awal maupun kebocoran masukan. Pengguna biasanya tidak perlu menghitung SHA-256 secara manual, tetapi sebaiknya memahami apa yang dibuktikan oleh sidik jari yang diperiksa dan apa yang tidak. [8] [7]
SHA-256 termasuk keluarga SHA-2 dan dijelaskan dalam NIST FIPS 180-4. Sebelum menghitung, algoritma menambahkan padding beserta informasi panjang masukan, lalu memprosesnya dalam potongan 512-bit, masing-masing melalui 64 ronde. Blok internal ini berukuran 64 byte dan bukan blok Bitcoin. Header blok Bitcoin berukuran 80 byte; blok Bitcoin lengkap juga memuat transaksi. Angka 256 menunjukkan panjang sidik jari keluaran, bukan ukuran blok atau kunci privat. [1] [4]
Untuk gambaran yang lebih utuh, baca entri ini bersama Hash, Proof of Work, Block Header, Alamat Bitcoin, Merkle Tree, Bitcoin. Entri ini juga dirujuk dari Hash, ASIC Miner, Hashrate, Nonce.