Alat pembangun · SHA kalkulator cincang
SHA-256 Langkah demi Langkah: Padding, Jadual Mesej dan 64 Pusingan
· Bagaimana ia berfungsi
sha-256 kriptografi pelayar-apis javascript
SHA-256 melapisi input anda, membahagikannya kepada 512-bit blok dan menjalankan setiap satu melalui 64 pusingan pencampuran. Catatan ini menerangkan setiap peringkat dalam bahasa biasa tanpa memerlukan latar belakang kriptografi.
Perkara yang sebenarnya berlaku pada bait anda — kotak hitam yang kebanyakan pembangun tidak pernah dibuka
SHA-256 ialah algoritma deterministik yang mengubah sebarang input menjadi cap jari 256-bit (32-bait). Apa yang kelihatan seperti kotak hitam dari luar sebenarnya adalah urutan langkah yang jelas. Memahami langkah-langkah tersebut menghilangkan misteri dan membolehkan anda mengesahkan ketepatan, mengesan pepijat dan memahami mengapa output adalah seperti itu. Setiap bahagian algoritma adalah awam; kekuatan datang dari reka bentuk, bukan dari kerahsiaan.
Algoritma beroperasi pada blok 512-bit. Jika input anda lebih pendek, ia akan menjadi empuk. Jika lebih panjang, ia akan dipecahkan kepada berbilang blok, setiap satu diproses mengikut urutan, dengan setiap keluaran blok masuk ke blok seterusnya. Selepas semua blok diproses, anda mempunyai lapan nombor 32-bit yang, digabungkan bersama, membentuk ringkasan 256-bit terakhir.
Padding — menambahkan 1 bit, sifar dan panjang mesej 64-bit untuk mencapai gandaan 512 bits
Langkah padding adalah deterministik dan formal. Selepas input sebenar anda, tambahkan satu 1 bit (dalam amalan, bait 0x80 jika input anda berakhir pada sempadan bait). Kemudian tambahkan sifar bit sehingga anda 64 bits kekurangan gandaan 512 bits. Akhir sekali, tambahkan pengekodan big-endian 64-bit panjang input dalam bit. Pelapik ini memastikan setiap mesej adalah gandaan 512 bits dan mengekodkan panjang asal supaya input yang sama dengan panjang yang berbeza tidak dapat menghasilkan ringkasan yang sama.
Untuk input abc (3 bytes = 24 bits), mesej berlapik ialah 512 bits (satu blok): tiga bait 61 62 63, diikuti dengan 0x80, diikuti dengan sifar, diikuti oleh 64pengekodan -bit daripada 24 (iaitu 0x00...0x18 dalam a 64-bidang besar-endian kecil). Mesej itu kini mengisi tepat satu 512-blok bit. Untuk rentetan kosong, padding menambah 0x80, diikuti dengan sifar, diikuti dengan 0x00...0x00 (menunjukkan 0 bits daripada input). Untuk input yang lebih panjang seperti a 100-byte fail, padding akan mengisi blok terakhir ke 512 bits dan menunjukkan 800 bits panjang asal.
Nilai awal dan pemalar ditetapkan oleh algoritma; terbitan sejarah mereka adalah bukti repositori di luar
Algoritma bermula dengan lapan pembolehubah kerja 32-bit, dimulakan kepada 32 bits pertama daripada bahagian pecahan punca kuasa dua bagi lapan nombor perdana pertama. Ini adalah pemalar berkod keras, boleh dilihat dalam mana-mana pelaksanaan rujukan dan dalam kod sumber perpustakaan kriptografi. Ia wujud kerana menggunakan pemalar tetap daripada matematik mengelakkan syak wasangka pintu belakang tersembunyi. Alat ToolAcre menggunakan pelaksanaan Kripto Web pelayar, yang menggunakan pemalar yang sama ini.
Algoritma ini juga menggunakan 64 pemalar bulat, yang diperoleh daripada 32 bits pertama bahagian pecahan punca kubus 64 nombor perdana yang pertama. Ini juga tetap dan awam. Pemalar berfungsi sebagai bahan campuran tambahan; mengubahnya akan memecahkan algoritma dan menghasilkan pencernaan yang berbeza.
Jadual mesej — mengembangkan 16 perkataan menjadi 64 dengan anjakan dan putaran
Jadual mesej mengembangkan 16 perkataan (512 bits) kepada 64 perkataan (2048 bits) melalui formula tertentu. Untuk pusingan 0-15, perkataan datang terus daripada blok input. Untuk pusingan 16-63, setiap perkataan baharu dikira dengan mengambil dua perkataan awal (pada offset tertentu), menggunakan putaran dan anjakan, XORing dalam perkataan lain dan menyimpan hasilnya. Formula adalah deterministik dan boleh diterbalikkan dalam konteks satu blok, tetapi pengembangan menyebarkan pengaruh input ke semua pusingan 64.
Formula pengembangan menggunakan rotate-right (anjakan bit bulat di mana bit yang jatuh dari satu hujung muncul semula pada yang lain) dan operasi anjakan kanan. Putaran mengekalkan semua bit tetapi mengubah kedudukannya; anjakan kanan membuang bit. Gabungan putaran, anjakan dan operasi XOR memastikan setiap bit input mempengaruhi berbilang perkataan dalam jadual.
Satu pusingan — fungsi Ch, Maj dan Sigma digambarkan sebagai operasi pencampuran bit, dan cara lapan pembolehubah berfungsi mengemas kini
Setiap daripada 64 pusingan memproses satu perkataan jadual mesej dan mengemas kini lapan pembolehubah yang berfungsi. Fungsi teras melibatkan enam operasi: campuran bersyarat (sering dipanggil Ch, untuk "pilih") yang memilih bit berdasarkan pembolehubah kawalan, fungsi majoriti (Maj) yang memilih nilai yang paling biasa antara tiga pembolehubah, dua fungsi campuran khas (Sigma_0 dan Sigma_1) yang memutar dan menganjak pembolehubah kerja, dan modulo penambahan 2^32. Semua aritmetik dilakukan pada 32-bit perkataan, jadi limpahan melilit.
Fungsi "pilih" mengambil tiga input 32-bit dan, untuk setiap kedudukan bit, memilih bit daripada input pertama jika bit kawalan ialah 1, atau bit daripada input kedua jika bit kawalan ialah 0. Fungsi majoriti melihat tiga input dan, untuk setiap kedudukan bit, mengeluarkan nilai bit yang paling kerap muncul di antara tiga. Ini adalah operasi bukan linear yang memecahkan kelinearan dan memastikan bahawa perubahan input kecil disebarkan secara tidak dapat diramalkan melalui keadaan.
Merantai blok dan menghasilkan output — menambah setiap hasil blok ke dalam keadaan berjalan
Setiap pusingan mengemas kini semua lapan pembolehubah yang berfungsi dengan memutarkannya dan memasukkan nilai baharu yang dikira daripada pemalar pusingan semasa, perkataan jadual mesej dan keadaan sebelumnya. Tujuh pembolehubah kerja pertama beralih: yang ke-8 menjadi yang pertama, yang pertama menjadi yang ke-2, dan seterusnya. Ke-8 baharu dikira daripada pembolehubah lama menggunakan fungsi pencampuran. Selepas 64 pusingan, anda mempunyai lapan nilai 32-bit baharu. Ini ditambah (modulo 2^32) pada pemalar awal, menghasilkan keadaan cincang akhir untuk blok ini.
Untuk mesej berbilang blok, lapan nilai dari satu blok menjadi keadaan awal untuk blok seterusnya. Rantaian memastikan bahawa perubahan di mana-mana dalam input mempengaruhi semua blok berikutnya. Pada masa anda mencapai blok akhir, setiap bit input telah mempengaruhi output akhir.
Contoh yang berkesan dan perkara yang tidak dicakupi ini — mengesan padding dan kiraan blok untuk mesej ringkas; bukti keselamatan berada di luar skop
Untuk input abc, mesej dimuatkan dalam satu blok 512-bit selepas pelapik. Pelapik menambah 424 bits, menjadikan jumlah 512 bits. Jadual mesej mengembangkan ini kepada 64 perkataan. Setiap pusingan menggunakan satu perkataan dan mengemas kini lapan pembolehubah yang berfungsi melalui fungsi pencampuran. Selepas 64 pusingan, keadaan di-XOR dengan pemalar awal, menghasilkan ringkasan akhir ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.
Ini ialah vektor ujian yang diterbitkan: pengiraan yang sama pada input yang sama sentiasa menghasilkan output yang sama. Alat ToolAcre melakukan pengiraan tepat ini melalui pelaksanaan Web Crypto pelayar. Anda boleh mengesahkannya dengan mencincang abc dan membandingkan hasilnya dengan vektor yang diketahui. Mana-mana pelayar yang melaksanakan Web Crypto dengan betul akan menghasilkan output yang sama; algoritma tidak mengakui jalan pintas atau laluan alternatif.
Bawa pulang: Web Crypto melakukan pencampuran SHA-256 deterministik tanpa mendedahkan rahsia
Algoritma adalah awam, dan setiap langkah adalah deterministik. Fungsi pencampuran (Ch, Maj, Sigma_0, Sigma_1) dipilih untuk menjadi bukan linear, bermakna menukar satu bit input tidak boleh meramalkan mengubah satu bit output. Pengembangan 16 perkataan mesej kepada 64 memastikan bahawa keseluruhan input mempengaruhi keseluruhan pengiraan. Pusingan 64 dan rantaian keadaan bermakna bahawa output adalah sensitif kepada setiap bit input dan repositori menggunakan output yang terhasil sebagai ringkasan deterministik. Rintangan perlanggaran ialah sifat keselamatan dengan had, bukan janji bahawa output pendua adalah mustahil secara matematik.
Bukti kriptografi berada di luar skop siaran ini. Perkara utama ialah anda kini tahu apa yang sebenarnya dilakukan oleh algoritma. Ia bukan sihir, dan ia bukan kotak hitam. Jika anda ingin mengesahkan bahawa ToolAcre sedang mencincang dengan betul, jejak input anda sendiri melalui langkah ini atau gunakan pelaksanaan rujukan dalam bahasa lain dan bandingkan hasil. Pelaksanaan pelayar dan sebarang rujukan yang betul akan menghasilkan ringkasan yang sama untuk input yang sama.