Alat pembangun · SHA kalkulator cincang
Merkle–Damgård Menjelaskan: Pembinaan Di Belakang SHA-1 dan SHA-2
· Latar belakang
sha-256 kriptografi pelayar-apis
Fungsi mampatan saiz tetap tidak boleh mencincang input sewenang-wenangnya sendiri. Merkle–Damgård merantai sekatan demi sekatan; siaran ini menerangkan pembinaan, idea buktinya dan kelemahan yang dibawanya.
Input sewenang-wenangnya, output tetap — masalah yang perlu diselesaikan oleh setiap fungsi cincang dahulu
Fungsi cincang mesti memetakan input arbitrari kepada output tetap. Mesej tiga bait dan mesej tiga megabait mesti menghasilkan tepat 256 bits output untuk SHA-256. Hash mestilah deterministik, jadi input yang sama sentiasa menghasilkan output yang sama. Keluaran mesti kelihatan rawak; menukar satu bit input sepatutnya menukar kira-kira separuh bit output.
Ini adalah keperluan yang bercanggah pada pandangan pertama, kerana algoritma pantas tunggal tidak dapat mengendalikan mesej dengan panjang sewenang-wenang dan menghasilkan output lebar tetap yang seragam. Pembinaan Merkle–Damgård menyelesaikannya dengan menggunakan fungsi mampatan saiz tetap berulang kali, memasukkan output setiap aplikasi ke input seterusnya. Binaan ini digunakan oleh SHA-1 dan semua SHA-2 (SHA-256, SHA-384 dan SHA-512).
Fungsi mampatan — pengadun bersaiz tetap yang mengambil keadaan dan blok dan mengembalikan keadaan baharu
Fungsi mampatan ialah primitif kriptografi teras yang menggerakkan cincangan Merkle–Damgård. Ia memerlukan keadaan saiz tetap, biasanya 256 bits untuk SHA-256 atau 512 bits untuk SHA-512, dan blok input bersaiz tetap, biasanya 512 bits untuk SHA-256 atau 1024 bits untuk SHA-512. Fungsi mampatan menggabungkannya bersama-sama menggunakan operasi bitwise, putaran dan carian jadual, menghasilkan keadaan baharu dengan saiz yang sama. Fungsi ini mestilah tahan perlanggaran: mencari dua pasangan (keadaan, blok) berbeza yang menghasilkan output yang sama mestilah sukar.
Fungsi mampatan itu sendiri bukanlah fungsi cincang yang lengkap—ia tidak mengendalikan panjang input sewenang-wenangnya, malah ia tidak mengendalikan input pertama, yang tidak mempunyai keadaan sebelumnya. Sebaliknya, ia adalah blok bangunan yang dibina di sekelilingnya. Fungsi mampatan ialah satu-satunya operasi kriptografi yang berjalan berulang kali; yang lain adalah simpan kira yang menghubungkan fungsi ini kepada cincang penuh.
Rantaian dan vektor pemula — cara blok bersuapan antara satu sama lain daripada keadaan permulaan yang tetap
Vektor permulaan ialah keadaan permulaan tetap, dipilih dengan teliti untuk mengelakkan simetri atau kelemahan. Untuk SHA-256, IV ialah lapan perkataan 32-bit yang diterbitkan daripada bahagian pecahan punca kuasa dua bagi lapan nombor perdana pertama. Nilai-nilai ini adalah sewenang-wenang tetapi deterministik, jadi setiap pelaksanaan menghasilkan hasil yang sama. Blok mesej pertama dicampur dengan IV menggunakan fungsi mampatan, menghasilkan keadaan baharu. Blok mesej kedua bercampur dengan keadaan itu, menghasilkan satu lagi keadaan baharu, dan seterusnya melalui setiap blok mesej.
Rantaian ini adalah bahagian yang penting: output satu blok bergantung pada semua blok sebelumnya, jadi menukar mana-mana blok sebelumnya mengubah semua blok berikutnya. Pada masa blok akhir diproses, keadaan mengandungi maklumat tentang setiap bit input. Padding adalah helah yang menjadikan pembinaan ini berbunyi. Mesej tidak selalu dibahagikan sama rata kepada blok. Pembinaan Merkle–Damgård menggunakan pengukuhan MD: tambahkan satu bit pada mesej, kemudian tambahkan sifar sehingga hampir satu blok penuh tinggal, kemudian tambahkan panjang mesej asal.
Melapik dengan panjang mesej — mengapa pengukuhan MD adalah perkara yang menjadikan pembinaan berbunyi
Hujah keselamatan untuk Merkle–Damgård mengatakan bahawa jika fungsi mampatan adalah tahan perlanggaran, maka keseluruhan cincang adalah tahan perlanggaran. Buktinya ialah pengurangan: jika anda boleh menemui perlanggaran dalam cincang, anda boleh mengeluarkan perlanggaran dalam fungsi mampatan, yang bercanggah dengan andaian bahawa fungsi mampatan sukar untuk berlanggar. Intuisinya ialah sebarang perlanggaran dalam cincang akhirnya mesti menghasilkan perlanggaran dalam salah satu panggilan fungsi mampatan, kerana keadaan dibawa ke hadapan sepenuhnya.
Kelemahan dalam Merkle–Damgård ditemui dari semasa ke semasa, walaupun pembinaan asasnya kukuh. Sambungan panjang ialah satu: penyerang yang melihat ringkasan mesej boleh melanjutkan mesej dan mengira ringkasan yang sah untuk mesej yang lebih panjang tanpa mengetahui apa-apa tentang input. Serangan praimej kedua adalah satu lagi: diberikan mesej, mencari mesej berbeza dengan cincang yang sama adalah lebih mudah daripada yang sepatutnya untuk beberapa jenis mesej. Kelemahan ini mendorong reka bentuk SHA-3, yang menggunakan pendekatan berbeza yang dipanggil pembinaan span.
Pelapik pengekodan panjang memisahkan mesej berlapik; bukti keselamatan penuh adalah bukti repositori di luar
Fungsi mampatan untuk SHA-256 mengambil keadaan 256-bit (lapan perkataan 32-bit) dan blok 512-bit. Operasi menggunakan 64 pusingan, setiap satu mencampurkan keadaan dengan pemalar dan perkataan dari blok. Pencampuran menggunakan operasi bitwise: XOR, AND, NOT. Ia menggunakan putaran dan anjakan yang menggerakkan bit tanpa mengubah bit yang ditetapkan. Ia menggunakan carian jadual yang menyediakan pencampuran bukan linear yang XOR sahaja tidak dapat dicapai.
SHA-512 menggunakan binaan yang sama seperti SHA-256 tetapi dengan operasi 64-bit dan bukannya operasi 32-bit. Keadaan ialah 512 bits (lapan 64-bit perkataan), dan saiz blok ialah 1024 bits. Fungsi mampatan mempunyai 80 pusingan dan bukannya 64 dan pemalar serta carian jadual adalah berbeza. Untuk SHA-384, keadaan dan fungsi mampatan adalah sama seperti SHA-512, tetapi sahaja 384 bits pertama daripada keadaan akhir adalah output. 128 bits terakhir dibuang. Pemangkasan ini adalah sebab SHA-384 tahan terhadap sambungan panjang.
Sambungan panjang ialah sempadan pembinaan yang disahkan; tuntutan motivasi berbilang perlanggaran dan SHA-3 ditinggalkan
Keselamatan cincang Merkle–Damgård bergantung pada beberapa pegangan hartanah. Fungsi mampatan mestilah tahan perlanggaran, jadi menyerangnya secara langsung tidak boleh dilaksanakan. Skim padding mesti memastikan bahawa mesej yang berbeza menghasilkan bentuk empuk yang berbeza, jadi setiap perlanggaran dalam cincang mesti melibatkan perlanggaran fungsi mampatan. Saiz blok dan saiz keadaan mestilah cukup besar sehingga kekerasan tidak dapat dilaksanakan. Keadaan yang lebih luas membesarkan ruang carian generik, tetapi artikel ini tidak melampirkan kiraan operasi atau tarikh kebolehlaksanaan tanpa terbitan sebaris dan sumber yang disemak.
Jika penyerang mendapati kelemahan dalam fungsi mampatan, atau jika komputer kuantum menjadi praktikal dan boleh mencari ruang tidak berstruktur dalam masa sqrt(2^n) dan bukannya masa 2^n, maka margin keselamatan terhakis. Kelemahan yang mendorong SHA-3 bukanlah pemecahan dalam fungsi mampatan, tetapi isu sambungan panjang dan kelemahan struktur lain. Pembinaan span mengelakkannya dengan tidak pernah menerbitkan keadaan dalaman sepenuhnya.
Perkara ini tidak meliputi — fungsi bulat khusus SHA-256, diliputi dalam siaran berasingan
Cara pembinaan Merkle-Damgård mengendalikan setiap saiz input adalah akibat praktikal reka bentuknya. Pisahkan mesej kepada blok 512-bit, pad blok terakhir, proses setiap blok melalui fungsi mampatan dalam urutan, dan keluarkan keadaan akhir. Untuk input satu bait, padding menghasilkan blok 512-bit (satu bait mesej, satu bit padding, 447 bits daripada sifar dan 64 bits untuk panjangnya). Bilangan pemampatan ialah bilangan blok 512-bit, yang berkadar dengan panjang mesej.
Setiap penghadaman ToolAcre SHA kalkulator cincang yang dihasilkan berasal daripada pembinaan ini. Rumusan 64-aksara SHA-256 ialah keadaan 256-bit terakhir yang dicetak dalam perenambelasan. Rumusan 128-aksara SHA-512 ialah keadaan 512-bit terakhir yang dicetak dalam perenambelasan. Rumusan 96 SHA-384 ialah 384 bits pertama daripada keadaan 512-bit terakhir. Pelapik di belakang tabir memastikan setiap mesej yang mungkin menghasilkan bilangan blok yang betul dan lebar penghadaman yang betul. Ini ialah pembinaan standard Merkle–Damgård yang dijalankan dalam pelayar.
Bawa pulang: rangka yang sama di belakang empat algoritma — setiap mencerna ToolAcre SHA kalkulator cincang yang dihasilkan berasal daripada pembinaan ini
Memahami pembinaan adalah berguna untuk mengetahui mengapa digest sentiasa lebar yang sama dan mengapa menukar satu bit input mengubah keseluruhan digest. Sifat rantaian bermaksud bahawa setiap bit input mempengaruhi setiap bit output melalui satu siri operasi pencampuran. Perubahan satu bit pada awal mesej akan disebarkan melalui semua pemampatan berikutnya, jadi ringkasan akhir adalah berbeza sama sekali. Sifat ini dipanggil kesan runtuhan salji dan merupakan tandatangan fungsi cincang bunyi.
Pembinaan Merkle–Damgård telah digunakan selama beberapa dekad dan membentuk asas kepada fungsi cincang yang paling banyak digunakan. SHA-1 dan SHA-2 dibina pada pembinaan ini dan banyak sistem yang digunakan bergantung pada outputnya. Pembinaannya ditubuhkan dan bukannya percubaan, tetapi sejarah itu tidak menjadikan setiap penggunaan selamat; sambungan panjang ialah satu sempadan yang didokumenkan. Memahami pembinaan ini membantu pembangun memahami sebab sifat keselamatan tertentu dipegang dan sebab vektor serangan tertentu wujud.