Alat pembangun · SHA kalkulator cincang
Kriptografi Hash vs Checksum: Perkara yang CRC32 dan xxHash Tidak Boleh Dijanjikan
· Latar belakang
sha-256 kriptografi keselamatan
CRC32, FNV dan xxHash adalah cincang juga, tetapi mereka tidak berjanji menentang musuh. Siaran ini menerangkan perkara yang memisahkan cincangan kriptografi daripada jumlah semak dan cara memilih setiap kes penggunaan.
Hash yang mana untuk kerja yang mana? — pilihan antara kelajuan dan keselamatan musuh
Fungsi cincang datang dalam tiga kategori: jumlah semak untuk mengesan ralat tidak sengaja, cincang bukan kriptografi untuk pengedaran dan prestasi, dan cincang kriptografi untuk keselamatan. Setiap kategori mempunyai jaminan yang berbeza dan pertukaran yang berbeza dalam kelajuan dan saiz penghadaman. Jumlah semak seperti CRC32 adalah pantas dan pendek (4 bytes, 8 aksara heks) tetapi tidak menawarkan perlindungan terhadap pengubahsuaian yang disengajakan. Cincang bukan kriptografi seperti xxHash atau MurmurHash juga pantas dan berguna untuk jadual cincang dan pengedaran data, tetapi tidak menawarkan perlindungan terhadap musuh yang ingin menyebabkan perlanggaran. Cincang kriptografi seperti SHA-256 adalah lebih perlahan dan menghasilkan penghadaman yang lebih panjang (32 bytes, 64 aksara heks), tetapi ia menawarkan rintangan praimej dan rintangan perlanggaran—sifat keselamatan yang melindungi daripada musuh.
Memilih fungsi cincang yang salah untuk kes penggunaan anda ialah kesilapan keselamatan yang biasa. Menggunakan CRC32 untuk mengesahkan muat turun fail daripada sumber yang tidak dipercayai adalah tidak berkesan; penyerang boleh mengubah suai fail dengan mudah dan mengira semula CRC32. Menggunakan SHA-256 sebagai fungsi cincang pantas dalam jadual cincang frekuensi tinggi adalah membazir; CRC32 atau cincang bukan kriptografi yang pantas adalah mencukupi dan lebih murah.
Jumlah semak untuk ralat tidak sengaja — reka bentuk CRC untuk mengesan lilitan bit dalam penghantaran
Checksum direka untuk pengesanan ralat semasa penghantaran atau storan, di mana ralat diandaikan secara rawak dan tidak sengaja. CRC (Cyclic Redundancy Check) pada asalnya direka untuk mengesan lilitan bit dalam komunikasi. CRC32 menghasilkan pencernaan 32-bit. Jika bingkai rosak akibat lilitan bit rawak semasa penghantaran, CRC32 hampir pasti akan berubah, memberi amaran kepada penerima untuk meminta penghantaran semula. CRC boleh mengesan sehingga bilangan ralat bit tertentu bergantung pada polinomial; untuk kebanyakan kes penggunaan biasa, satu selak bit atau semburan beberapa selak bit dikesan dengan pasti.
CRC bersifat deterministik tetapi bukan kriptografi. Memandangkan fail dan CRC32nya, penyerang boleh mengubah suai fail dan mengira semula CRC32 agar sepadan dengan nilai yang dijangkakan. Bagi musuh yang mempunyai pengetahuan tentang polinomial CRC, membuat perlanggaran adalah mudah. CRC tidak sekali-kali bertujuan untuk menentang pengubahsuaian yang disengajakan; ia adalah semata-mata untuk pengesanan ralat tidak sengaja. Sistem sejarah seperti fail ZIP dan fail JPEG menggunakan CRC untuk tujuan ini. Protokol moden menggunakan CRC untuk pengesanan ralat pantas dalam saluran yang disulitkan atau disahkan, bukan sebagai semakan integriti kendiri.
Cincang bukan kriptografi untuk pengedaran — FNV, MurmurHash dan xxHash dalam jadual cincang dan pembahagian
Cincang bukan kriptografi seperti FNV-1a, MurmurHash dan xxHash direka untuk kelajuan dan keseragaman dalam jadual cincang dan pembahagian data. Ia mempunyai kependaman yang sangat rendah dan digunakan dalam situasi di mana anda perlu membahagikan data merentas pelayan atau baldi tanpa mengambil berat tentang sifat keselamatan. Jika anda sedang membina cache dan perlu memetakan kunci kepada nombor baldi, cincang pantas adalah sesuai. MurmurHash direka secara eksplisit untuk kegunaan jadual hash dan lebih pantas daripada SHA pada kebanyakan perkakasan. xxHash adalah lebih baharu dan dioptimumkan untuk CPU moden dengan cache dan vektorisasi yang besar.
Cincang ini bukan kriptografi kerana ia tidak menentang serangan praimej (mencari input yang menghasilkan ringkasan tertentu) atau serangan perlanggaran (mencari dua input berbeza yang menghasilkan ringkasan yang sama). Penyerang boleh mengira algoritma cincang dan mencari input yang bertembung atau yang menghasilkan output sasaran. Dalam persekitaran yang dipercayai (kelompok di mana semua nod berada di bawah kawalan anda), itu boleh diterima. Jika pengguna yang tidak dipercayai boleh mengawal input, cincang bukan kriptografi terdedah kepada serangan perlanggaran yang merendahkan prestasi (kes paling teruk jadual cincang ialah carian linear apabila semua kekunci berlanggar) atau menghasilkan kesan sampingan yang lain.
Apa yang ditambahkan oleh cincang kriptografi — praimej dan rintangan perlanggaran terhadap penyerang yang disengajakan
Cincangan kriptografi seperti SHA-256, SHA-384 dan SHA-512 memberikan rintangan praimej: jika dicernakan, adalah tidak boleh dilakukan secara pengiraan untuk mencari sebarang input yang menghasilkan cernaan tersebut. Mereka juga menyediakan rintangan perlanggaran: adalah tidak boleh dilakukan secara pengiraan untuk mencari dua input berbeza yang menghasilkan pencernaan yang sama. Sifat ini melindungi daripada musuh yang ingin memalsukan muat turun, mencipta sijil palsu atau mengusik mesej. Kosnya adalah kelajuan: SHA-256 lebih perlahan daripada CRC32 dan lebih perlahan daripada xxHash pada kebanyakan perkakasan.
SHA-1 rosak secara kriptografi (perlanggaran adalah praktikal) dan tidak boleh digunakan untuk tujuan keselamatan baharu, tetapi ia masih dikira untuk keserasian warisan. SHA-256, SHA-384 dan SHA-512 kekal kukuh dan merupakan pilihan standard untuk pencincangan kriptografi. "2" dalam SHA-2 menunjukkan keluarga kedua algoritma SHA (yang pertama ialah SHA-1 asal; SHA-3 ialah keluarga yang lebih baharu tetapi jarang digunakan untuk tujuan ini).
Hash kriptografi menambah sifat lawan; artikel ini mengelakkan tuntutan kelajuan relatif yang tidak disokong
Memadankan lima senario dengan keluarga cincang yang betul: Pertama, bingkai rangkaian yang dihantar melalui saluran yang boleh dipercayai yang disulitkan dengan AES: CRC32 adalah sesuai. Penyulitan melindungi daripada pengubahsuaian dan CRC mengesan rasuah yang tidak disengajakan. Kedua, jadual cincang atau pencincangan yang konsisten untuk pengimbangan beban: cincang bukan kriptografi seperti xxHash adalah sesuai. Kepantasan adalah penting, dan alam sekitar dipercayai. Ketiga, mengesahkan integriti muat turun daripada sumber yang tidak dipercayai: SHA-256 diperlukan. Penyerang boleh mengubah suai fail dan jumlah semak, tetapi bukan cincang kriptografi tanpa melanggar SHA-256.
Keempat, tandatangan dan sijil digital: SHA-256 diperlukan dan digabungkan dengan algoritma asimetri seperti RSA atau ECDSA. Tandatangan membuktikan cincangan tidak diubah suai selepas ditandatangani. Kelima, penyahduplikasian fail yang dimuat naik pengguna: SHA-256 diperlukan kerana pengguna sengaja boleh memuat naik fail yang direka bentuk untuk bertembung dengan fail sedia ada dalam cincang bukan kriptografi. Jika penyahduplikasian adalah berdasarkan xxHash, penyerang boleh memuat naik fail dengan cincangan yang sama seperti fail lain tetapi kandungan berbeza, menyebabkan sistem membuang muat naik secara salah.
Contoh yang berkesan — memadankan lima senario (bingkai rangkaian, peta cincang, pengesahan muat turun, tandatangan, penyahduplikasian muat naik pengguna) kepada keluarga yang betul
Kos memilih cincang kriptografi untuk setiap kes penggunaan ialah overhed prestasi. SHA-256 lebih perlahan daripada CRC dan lebih perlahan daripada xxHash. Dalam gelung panas—sekeping kod yang melaksanakan berjuta-juta kali sesaat—overhed itu ketara. Dalam fasa persediaan atau dalam operasi kelompok, ia boleh diabaikan. Rangka kerja keputusan ialah: adakah musuh mempunyai insentif untuk menyebabkan perlanggaran? Jika ya, gunakan SHA-256. Jika tidak, dan jika kelajuan adalah penting, gunakan cincang yang lebih pantas. Jika keselamatan lebih penting daripada kelajuan, gunakan SHA-256 tanpa mengira.
Kesilapan biasa ialah menggunakan MD5, cincangan kriptografi lama yang kini rosak. MD5 telah direka dalam 1992 dan perlanggaran ditunjukkan dalam 2004. Menggunakan MD5 untuk sebarang tujuan keselamatan adalah tidak selamat. Ia kadangkala dilihat dalam sistem warisan dan dalam situasi di mana kelajuan diutamakan, tetapi tiada senario di mana MD5 adalah pilihan yang tepat hari ini: jika anda memerlukan kelajuan, gunakan xxHash; jika anda memerlukan keselamatan, gunakan SHA-256. Jangan sekali-kali menggunakan MD5.
Pemetaan senario kekal kualitatif kerana gelagat daya tampung dan perlanggaran memerlukan bukti khusus pelaksanaan
Pencincangan kata laluan ialah kategori keempat, berbeza daripada kedua-dua checksum dan cincang kriptografi tujuan umum. Jangan gunakan SHA-256 untuk mencincang kata laluan. Sebaliknya, gunakan fungsi pencincangan kata laluan seperti bcrypt, scrypt atau Argon2, yang sengaja perlahan dan menyertakan garam. Cincangan kriptografi yang pantas seperti SHA-256 menjadikan tekaan kata laluan murah: penyerang boleh mencuba berjuta-juta tekaan sesaat. Fungsi pencincangan kata laluan direka bentuk untuk menjadikan setiap tekaan mahal dalam CPU dan memori, jadi meneka kata laluan yang kuat masih mengambil masa lebih lama daripada yang boleh menunggu oleh penyerang. Pencincangan kata laluan ialah kes penggunaan khusus dengan keperluannya sendiri.
Kalkulator cincang ToolAcre SHA tidak menyokong pencincangan kata laluan dan dengan sengaja tidak menawarkan MD5, tiada parameter tersuai dan tiada cincang pantas. Ia adalah alat untuk mengira ringkasan SHA standard untuk pengesahan dan semakan integriti, bukan untuk pengesahan atau storan kata laluan.
Bawa pulang: lawan atau tiada lawan — capai kalkulator cincang ToolAcre SHA apabila seseorang mungkin mengganggu data
Pilihan algoritma cincang ialah keputusan asas yang mempengaruhi prestasi dan keselamatan di seluruh sistem. Digest sahaja boleh dipercayai seperti algoritma yang menghasilkannya. Jika anda memilih CRC32 untuk pengesahan fail, ringkasan tidak memberikan perlindungan terhadap pengubahsuaian yang disengajakan. Jika anda memilih SHA-256 untuk jadual cincang, anda membazir sumber. Mengetahui sifat dan pertukaran bagi setiap kategori membolehkan anda memilih dengan betul.
Kalkulator cincang ToolAcre SHA menyediakan SHA-1 hingga SHA-512, meliputi cincangan kriptografi yang penting untuk kebanyakan kes penggunaan. Ia tidak menawarkan CRC32, xxHash atau MD5 kerana setiap satu daripada pilihan tersebut adalah pilihan yang tepat dalam konteks tertentu (CRC untuk pengesanan ralat dalam saluran yang dipercayai, xxHash untuk prestasi dalam persekitaran terkawal, tiada apa-apa untuk MD5), dan menawarkannya tanpa emphas akan menggalakkan mereka untuk menggunakannya tanpa setiap emphas. Kalkulator adalah untuk mengira ringkasan kriptografi standard. Gunakan baris arahan dengan `crc32`, `xxh64` atau alat yang setara jika anda memerlukan cincangan tersebut. Untuk pengesahan muat turun, cap jari sijil, git commit dan kes penggunaan serupa yang mana musuh mungkin mengganggu data, capai SHA-256 melalui ToolAcre SHA kalkulator cincang.