Bahasa Indonesia

Alat pengembang · SHA kalkulator hash

SHA-256 Langkah demi Langkah: Padding, Jadwal Pesan, dan Putaran 64

· Cara kerjanya

sha-256 kriptografi browser-apis javascript

Diagram yang menunjukkan padding pesan, pembagian blok, loop pemrosesan putaran 64, dan kombinasi hash akhir
Ilustrasi vektor ToolAcre asli

SHA-256 mengisi input Anda, membaginya menjadi 512-bit blok dan menjalankan masing-masing blok melalui 64 putaran pencampuran. Posting ini menjelaskan setiap tahapan dalam bahasa sederhana tanpa memerlukan latar belakang kriptografi.

Apa yang sebenarnya terjadi pada byte Anda — kotak hitam yang tidak pernah dibuka oleh sebagian besar pengembang

SHA-256 adalah algoritme deterministik yang mengubah masukan apa pun menjadi sidik jari 256-bit (32-byte). Apa yang tampak seperti kotak hitam dari luar sebenarnya adalah serangkaian langkah yang terdefinisi dengan baik. Memahami langkah-langkah tersebut menghilangkan misteri dan memungkinkan Anda memverifikasi kebenaran, melacak bug, dan memahami mengapa outputnya seperti itu. Setiap bagian dari algoritme bersifat publik; kekuatan berasal dari desain, bukan dari kerahasiaan.

Algoritma ini beroperasi pada blok 512-bit. Jika input Anda lebih pendek, inputnya akan diisi. Jika lebih panjang, ia akan dipecah menjadi beberapa blok, masing-masing diproses secara berurutan, dengan keluaran setiap blok dimasukkan ke blok berikutnya. Setelah semua blok diproses, Anda memiliki delapan angka 32-bit yang, jika digabungkan, membentuk intisari 256-bit terakhir.

Padding — menambahkan 1 bit, nol, dan panjang pesan 64-bit untuk mencapai kelipatan 512 bits

Langkah padding bersifat deterministik dan formal. Setelah masukan Anda yang sebenarnya, tambahkan satu 1 bit (dalam praktiknya, byte 0x80 jika masukan Anda berakhir pada batas byte). Kemudian tambahkan nol bit hingga Anda 64 bits kekurangan kelipatan 512 bits. Terakhir, tambahkan pengkodean big-endian 64-bit dengan panjang input dalam bit. Padding ini memastikan setiap pesan merupakan kelipatan 512 bits dan mengkodekan panjang aslinya sehingga input identik dengan panjang berbeda tidak dapat menghasilkan intisari yang sama.

Untuk input abc (3 bytes = 24 bits), pesan yang diisi adalah 512 bits (satu blok): tiga byte 61 62 63, diikuti oleh 0x80, diikuti oleh nol, diikuti oleh 64-bit pengkodean 24 (yaitu 0x00...0x18 dalam bidang big-endian 64-bit). Pesan tersebut sekarang mengisi tepat satu blok 512-bit. Untuk string kosong, padding menambahkan 0x80, diikuti dengan nol, diikuti oleh 0x00...0x00 (menunjukkan 0 bits input). Untuk masukan yang lebih panjang seperti file 100-byte, padding akan mengisi blok terakhir hingga 512 bits dan menunjukkan 800 bits dari panjang aslinya.

Nilai awal dan konstanta ditetapkan oleh algoritma; derivasi historisnya berada di luar bukti penyimpanan

Algoritme dimulai dengan delapan variabel kerja 32-bit, diinisialisasi ke 32 bits pertama dari bagian pecahan akar kuadrat dari delapan bilangan prima pertama. Ini adalah konstanta yang dikodekan secara keras, terlihat dalam implementasi referensi apa pun dan dalam kode sumber perpustakaan kriptografi. Mereka ada karena penggunaan konstanta tetap dari matematika untuk menghindari kecurigaan adanya pintu belakang yang tersembunyi. Alat ToolAcre menggunakan implementasi Web Crypto browser, yang menerapkan konstanta yang sama.

Algoritme ini juga menggunakan konstanta bulat 64, yang berasal dari 32 bits pertama dari bagian pecahan akar pangkat tiga bilangan prima 64 pertama. Ini juga bersifat tetap dan bersifat publik. Konstanta berfungsi sebagai bahan pencampur tambahan; mengubahnya akan merusak algoritma dan menghasilkan intisari yang berbeda.

Jadwal pesan — memperluas 16 kata menjadi 64 dengan pergeseran dan rotasi

Jadwal pesan memperluas 16 kata (512 bits) menjadi 64 kata (2048 bits) melalui rumus tertentu. Untuk babak 0-15, kata-katanya datang langsung dari blok masukan. Untuk putaran 16-63, setiap kata baru dihitung dengan mengambil dua kata sebelumnya (pada offset tertentu), menerapkan rotasi dan pergeseran, melakukan XOR pada kata lain, dan menyimpan hasilnya. Rumusnya bersifat deterministik dan dapat dibalik dalam konteks satu blok, namun perluasannya menyebarkan pengaruh masukan ke seluruh putaran 64.

Rumus ekspansi menggunakan operasi putar-kanan (pergeseran bit melingkar di mana bit yang jatuh dari satu ujung muncul kembali di ujung lainnya) dan operasi pergeseran kanan. Rotasi mempertahankan semua bit tetapi mengubah posisinya; shift kanan membuang bit. Kombinasi operasi rotasi, pergeseran, dan XOR memastikan bahwa setiap bit masukan memengaruhi banyak kata dalam jadwal.

Satu putaran - fungsi Ch, Maj dan Sigma digambarkan sebagai operasi pencampuran bit, dan bagaimana delapan variabel kerja diperbarui

Setiap putaran 64 memproses satu kata dari jadwal pesan dan memperbarui delapan variabel kerja. Fungsi inti melibatkan enam operasi: campuran kondisional (sering disebut Ch, untuk "pilih") yang memilih bit berdasarkan variabel kontrol, fungsi mayoritas (Maj) yang mengambil nilai paling umum di antara tiga variabel, dua fungsi pencampuran khusus (Sigma_0 dan Sigma_1) yang memutar dan menggeser variabel kerja, dan modul penjumlahan 2^32. Semua aritmatika dilakukan pada kata-kata 32-bit, sehingga overflow terjadi.

Fungsi "pilih" mengambil tiga input 32-bit dan, untuk setiap posisi bit, memilih bit dari input pertama jika bit kontrol adalah 1, atau bit dari input kedua jika bit kontrol adalah 0. Fungsi mayoritas melihat tiga masukan dan, untuk setiap posisi bit, mengeluarkan nilai bit yang paling sering muncul di antara ketiga masukan tersebut. Ini adalah operasi non-linier yang memutus linearitas dan memastikan bahwa perubahan masukan kecil menyebar secara tidak terduga ke seluruh keadaan.

Merangkai blok dan menghasilkan keluaran — menambahkan hasil setiap blok ke dalam status berjalan

Setiap putaran memperbarui kedelapan variabel kerja dengan memutarnya dan memasukkan nilai baru yang dihitung dari konstanta putaran saat ini, kata jadwal pesan, dan keadaan sebelumnya. Tujuh variabel kerja pertama bergeser: tanggal 8 menjadi tanggal 1, tanggal 1 menjadi tanggal 2, dan seterusnya. Kedelapan baru dihitung dari variabel lama menggunakan fungsi pencampuran. Setelah putaran 64, Anda memiliki delapan nilai 32-bit baru. Ini ditambahkan (modulo 2^32) ke konstanta awal, menghasilkan status hash akhir untuk blok ini.

Untuk pesan multi-blok, delapan nilai dari satu blok menjadi keadaan awal untuk blok berikutnya. Rantai memastikan bahwa perubahan di mana pun pada masukan akan mempengaruhi semua blok berikutnya. Pada saat Anda mencapai blok terakhir, setiap bit masukan telah mempengaruhi keluaran akhir.

Contoh praktis dan apa yang tidak tercakup di dalamnya — menelusuri padding dan jumlah blok untuk pesan singkat; bukti keamanan berada di luar cakupan

Untuk masukan abc, pesan muat dalam satu blok 512-bit setelah padding. Paddingnya menambahkan 424 bits, sehingga totalnya menjadi 512 bits. Jadwal pesan memperluasnya menjadi 64 kata. Setiap putaran menggunakan satu kata dan memperbarui delapan variabel kerja melalui fungsi pencampuran. Setelah putaran 64, status di-XOR dengan konstanta awal, menghasilkan intisari akhir ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.

Ini adalah vektor uji yang dipublikasikan: komputasi yang sama pada masukan yang sama selalu menghasilkan keluaran yang sama. Alat ToolAcre melakukan penghitungan persis ini melalui implementasi Web Crypto browser. Anda dapat memverifikasinya dengan melakukan hashing abc dan membandingkan hasilnya dengan vektor yang diketahui. Browser apa pun yang mengimplementasikan Web Crypto dengan benar akan menghasilkan keluaran yang sama; algoritme tidak mengizinkan jalan pintas atau jalur alternatif.

Kesimpulan: Web Crypto melakukan pencampuran SHA-256 deterministik tanpa mengungkap rahasia

Algoritmenya bersifat publik, dan setiap langkah bersifat deterministik. Fungsi pencampuran (Ch, Maj, Sigma_0, Sigma_1) dipilih non-linier, artinya mengubah satu bit masukan tidak akan mengubah satu bit keluaran secara terduga. Perluasan kata pesan 16 menjadi 64 memastikan bahwa seluruh masukan memengaruhi keseluruhan komputasi. Putaran 64 dan jaringan status berarti keluarannya sensitif terhadap setiap bit masukan, dan repositori menggunakan keluaran yang dihasilkan sebagai intisari deterministik. Resistensi tabrakan adalah properti keamanan yang memiliki batas, bukan janji bahwa duplikasi keluaran secara matematis tidak mungkin dilakukan.

Bukti kriptografi berada di luar cakupan postingan ini. Poin kuncinya adalah Anda sekarang tahu apa yang sebenarnya dilakukan algoritma tersebut. Ini bukan sihir, dan ini bukan kotak hitam. Jika Anda ingin memverifikasi bahwa ToolAcre melakukan hashing dengan benar, lacak masukan Anda melalui langkah-langkah ini, atau gunakan implementasi referensi dalam bahasa lain dan bandingkan hasilnya. Implementasi browser dan referensi yang benar akan menghasilkan intisari yang identik untuk masukan yang identik.