Kapan tepat menggunakan CRC untuk deteksi kesalahan versus fungsi hashing yang lebih modern seperti MD5 atau SHA1? Apakah yang pertama lebih mudah diimplementasikan pada perangkat yang tertanam?
130
CRC berfungsi dengan baik untuk mendeteksi kesalahan acak pada data yang mungkin terjadi, misalnya, dari gangguan jaringan, gangguan saluran, distorsi, dll.
CRC secara komputasional jauh lebih kompleks daripada MD5 atau SHA1. Menggunakan fungsi hash seperti MD5 mungkin berlebihan untuk deteksi kesalahan acak. Namun, menggunakan CRC untuk segala jenis pemeriksaan keamanan akan jauh lebih tidak aman daripada fungsi hashing yang lebih kompleks seperti MD5.
Dan ya, CRC jauh lebih mudah diimplementasikan pada perangkat keras tertanam, Anda bahkan bisa mendapatkan solusi paket yang berbeda untuk ini di IC.
MD5
,SHA-1
juga harus dihindari, beberapa varianSHA-2
direkomendasikan.CRC dirancang terhadap perubahan yang tidak disengaja dalam data. Artinya, itu baik untuk mendeteksi kesalahan yang tidak disengaja, tetapi akan sia-sia sebagai cara untuk memastikan data tidak ditangani dengan jahat.
Lihat juga ini .
sumber
Saya menemukan sebuah penelitian yang menunjukkan betapa tidak pantasnya hash CRC untuk tabel hash . Ini juga menjelaskan karakteristik sebenarnya dari algoritma. Studi ini juga mencakup evaluasi algoritma hash lainnya dan merupakan referensi yang baik untuk disimpan.
Kesimpulan yang relevan tentang CRC untuk hash:
MEMPERBARUI
Sepertinya situs ini sedang down. The arsip internet memiliki salinan sekalipun.
sumber
Saya menjalankan setiap baris kode PHP ini dalam 1.000.000 loop. Hasilnya ada di komentar (#).
Kesimpulan saya:
Gunakan "sha256" (atau lebih tinggi) saat Anda membutuhkan lapisan keamanan tambahan.
Jangan gunakan "md5" atau "sha1" karena mereka memiliki:
sumber
"The quick brown fox jumped over the lazy dog."
) Anda akan melihat berapa banyak cepat CRC adalah dari MD5.Untuk informasi CRC tentang implementasi, kecepatan dan keandalan lihat Panduan yang tidak menyakitkan untuk algoritma deteksi kesalahan CRC . Ia memiliki segalanya di CRC.
Kecuali ada orang yang mencoba dan memodifikasi data Anda dengan jahat dan menyembunyikan perubahan CRC sudah cukup. Cukup gunakan polinomial "Baik" (standar).
sumber
Itu semua tergantung pada kebutuhan dan harapan Anda.
Berikut ini perbedaan singkat cepat antara algoritme fungsi hash ini :
CRC (CRC-8/16/32/64)
MD5
SHA-1
adalah algoritma hash kriptografi,
menghasilkan nilai hash 160-bit (20-byte) yang dikenal sebagai intisari pesan
itu adalah hash kriptografi dan sejak 2005 itu tidak lagi dianggap aman,
dapat digunakan untuk keperluan enkripsi,
contoh tabrakan sha1 telah ditemukan
pertama kali diterbitkan pada tahun 1993 (sebagai SHA-0), kemudian 1995 sebagai SHA-1,
seri: SHA-0, SHA-1, SHA-2, SHA-3,
Singkatnya, menggunakan SHA-1 tidak lagi dianggap aman terhadap lawan yang didanai dengan baik, karena pada 2005, cryptanalyst menemukan serangan pada SHA-1 yang menunjukkan kemungkinan tidak cukup aman untuk schneier penggunaan yang sedang berlangsung . US NIST menyarankan bahwa agen-agen federal harus berhenti menggunakan SHA1-1 untuk aplikasi yang memerlukan resistensi tabrakan dan harus menggunakan SHA-2 setelah 2010 NIST .
Oleh karena itu, jika Anda mencari solusi sederhana dan cepat untuk memeriksa integritas file (terhadap korupsi), atau untuk beberapa tujuan cache sederhana dalam hal kinerja, Anda dapat mempertimbangkan CRC-32, untuk hashing Anda dapat mempertimbangkan untuk menggunakan MD5, namun jika Anda mengembangkan aplikasi profesional (yang harus aman dan konsisten), untuk menghindari kemungkinan tabrakan - gunakan SHA-2 dan yang lebih tinggi (seperti SHA-3).
Performa
Beberapa tes benchmark sederhana dalam PHP:
Terkait:
sumber
Anda tidak mengatakan apa yang ingin Anda lindungi.
CRC sering digunakan dalam sistem tertanam sebagai pemeriksaan terhadap korupsi data yang tidak disengaja sebagai lawan mencegah modifikasi sistem berbahaya. Contoh tempat di mana CRC dapat berguna adalah untuk memvalidasi gambar EPROM selama inisialisasi sistem untuk menjaga terhadap kerusakan firmware. Bootloader sistem akan menghitung CRC untuk kode aplikasi dan membandingkannya dengan nilai yang disimpan sebelum mengizinkan kode dijalankan. Ini melindungi terhadap kemungkinan korupsi program yang tidak disengaja atau unduhan yang gagal.
CRC juga dapat digunakan dengan cara yang sama untuk melindungi data konfigurasi yang disimpan dalam FLASH atau EEPROM. Jika CRC tidak benar maka data dapat ditandai sebagai tidak valid dan set data cadangan default atau yang digunakan. CRC mungkin tidak valid karena kegagalan perangkat atau jika pengguna melepaskan daya selama pembaruan penyimpanan data konfigurasi.
Ada komentar bahwa hash memberikan kemungkinan lebih besar untuk mendeteksi korupsi daripada CRC dengan banyak kesalahan bit. Ini benar, dan keputusan apakah menggunakan CRC 16 atau 32 bit atau tidak akan bergantung pada konsekuensi keamanan dari blok data yang rusak yang digunakan dan apakah Anda dapat membenarkan peluang 1 in 2 ^ 16 atau 2 ^ 32 dari blok data yang dinyatakan salah valid.
Banyak perangkat memiliki generator CRC bawaan untuk algoritma standar. Seri MSP430F5X dari Texas memiliki implementasi perangkat keras dari Standar CRC-CCITT.
sumber
CRC32 lebih cepat dan hash hanya 32 bit.
Gunakan saat Anda hanya menginginkan checksum yang cepat dan ringan. CRC digunakan dalam ethernet.
Jika Anda membutuhkan lebih banyak keandalan, lebih baik menggunakan fungsi hashing modern.
sumber
Hanya gunakan CRC jika sumber daya komputasi sangat ketat (yaitu beberapa lingkungan sematan) atau Anda perlu menyimpan / mengangkut banyak nilai output dan ruang / bandwidth ketat (karena CRC biasanya 32-bit di mana output MD5 128-bit, SHA1 160 bit, dan varian SHA lainnya hingga 512 bit).
Jangan pernah menggunakan CRC untuk pemeriksaan keamanan karena CRC sangat mudah untuk "dipalsukan".
Bahkan untuk deteksi kesalahan yang tidak disengaja (daripada deteksi perubahan berbahaya) hash lebih baik daripada CRC sederhana. Sebagian karena cara sederhana CRC dihitung (dan sebagian karena nilai CRC biasanya lebih pendek dari output hash umum sehingga memiliki rentang nilai yang jauh lebih kecil), itu jauh lebih mungkin bahwa, dalam situasi di mana ada dua atau lebih kesalahan , satu kesalahan akan menutupi yang lain sehingga Anda berakhir dengan CRC yang sama meskipun ada dua kesalahan.
Singkatnya: kecuali Anda memiliki alasan untuk tidak menggunakan algoritma hash yang layak, hindari CRC sederhana.
sumber
Saya menemukan penggunaan CRC baru-baru ini yang cerdas. Penulis alat identifikasi duplikasi dan penghapusan file jdupe (penulis yang sama dari alat exif jhead yang populer) menggunakannya selama melewati pertama file. CRC dihitung pada 32K pertama dari setiap file untuk menandai file yang tampak sama, juga file harus memiliki ukuran yang sama. File-file ini ditambahkan ke daftar file untuk melakukan perbandingan biner penuh. Ini mempercepat memeriksa file media besar.
sumber
CRC32 jauh lebih cepat dan kadang-kadang memiliki dukungan perangkat keras (yaitu pada prosesor Nehalem). Sungguh, satu-satunya waktu Anda akan menggunakannya adalah jika Anda berinteraksi dengan perangkat keras, atau jika Anda benar - benar ketat dalam kinerja
sumber
Mari kita mulai dengan dasar-dasarnya.
Dalam Kriptografi, algoritma hashing mengubah banyak bit menjadi lebih sedikit melalui operasi digest. Hash digunakan untuk mengonfirmasi integritas pesan dan file.
Semua algoritma hashing menghasilkan collision. Tabrakan adalah ketika beberapa kombinasi banyak bit menghasilkan keluaran bit yang sama lebih sedikit. Kekuatan kriptografi dari algoritma hashing ditentukan oleh ketidakmampuan bagi seorang individu untuk menentukan apa output yang akan diberikan untuk input yang diberikan karena jika mereka dapat, mereka dapat membuat file dengan hash yang cocok dengan file yang sah dan kompromi dengan asumsi integritas dari sistem. Perbedaan antara CRC32 dan MD5 adalah bahwa MD5 menghasilkan hash yang lebih besar yang sulit diprediksi.
Saat Anda ingin menerapkan integritas pesan - artinya pesan belum diubah saat transit - ketidakmampuan untuk memprediksi tabrakan adalah properti yang penting. Sebuah 32-bit hash bisa menggambarkan 4 miliar pesan yang berbeda atau file menggunakan 4 miliar hash unik yang berbeda. Jika Anda memiliki 4 miliar dan 1 file, Anda dijamin memiliki 1 tabrakan. 1 TB Bitspace memiliki kemungkinan untuk Miliaran Tabrakan. Jika saya seorang penyerang dan saya bisa memprediksi hash 32 bit itu nantinya, saya bisa membuat file yang terinfeksi yang bertabrakan dengan file target; yang memiliki hash yang sama.
Selain itu jika saya melakukan transmisi 10mbps maka kemungkinan sebuah paket rusak tepat untuk memotong CRC32 dan melanjutkan sepanjang ke tujuan dan mengeksekusi sangat rendah. Katakanlah pada 10mbps saya mendapatkan 10 kesalahan \ detik . Jika saya meningkatkannya hingga 1gbps, sekarang saya mendapatkan 1.000 kesalahan per detik . Jika saya ram hingga 1 exabit per detik, maka saya memiliki tingkat kesalahan 1.000.000.000 kesalahan per detik . Katakanlah kita memiliki tingkat tabrakan 1 \ 1.000.000kesalahan transmisi, Artinya 1 dalam sejuta kesalahan transmisi menghasilkan data yang korup tidak terdeteksi. Pada 10mbps saya akan mendapatkan data kesalahan yang dikirim setiap 100.000 detik atau sekali sehari. Pada 1gbps itu akan terjadi setiap 5 menit sekali. Pada 1 exabit per detik, kita berbicara beberapa kali per detik.
Jika Anda membuka Wireshark Anda akan melihat header Ethernet khas Anda memiliki CRC32, header IP Anda memiliki CRC32, dan Header TCP Anda memiliki CRC32, dan itu merupakan tambahan terhadap apa yang mungkin dilakukan oleh protokol layer yang lebih tinggi; misalnya IPSEC mungkin menggunakan MD5 atau SHA untuk memeriksa integritas selain yang di atas. Ada beberapa lapisan pengecekan error dalam komunikasi jaringan tipikal, dan mereka MASIH sering dan sesekali pada kecepatan sub 10mbps.
Cyclic Redundancy Check (CRC) memiliki beberapa versi umum dan beberapa tidak umum tetapi umumnya dirancang untuk hanya memberitahu ketika pesan atau file telah rusak dalam perjalanan (beberapa bit membalik). CRC32 dengan sendirinya bukan protokol pemeriksaan kesalahan yang sangat baik menurut standar saat ini di lingkungan perusahaan skalar yang besar karena tingkat tabrakan; rata-rata pengguna hard-drive dapat memiliki lebih dari 100 ribu file, dan berbagi file di sebuah perusahaan dapat memiliki puluhan juta. Rasio ruang-hash dengan jumlah file terlalu rendah. CRC32 secara komputasi murah untuk diimplementasikan sedangkan MD5 tidak.
MD5 dirancang untuk menghentikan penggunaan tabrakan yang disengaja untuk membuat file berbahaya terlihat jinak. Itu dianggap tidak aman karena hashspace telah cukup dipetakan untuk memungkinkan beberapa serangan terjadi, dan beberapa tabrakan dapat diprediksi. SHA1 dan SHA2 adalah anak-anak baru di blok.
Untuk verifikasi file, Md5 mulai digunakan oleh banyak vendor karena Anda dapat melakukan file multigigabyte atau file multiterrabyte dengan cepat dan menumpuknya di atas penggunaan OS umum dan dukungan CRC32's. Jangan kaget jika dalam dekade berikutnya sistem file mulai menggunakan MD5 untuk memeriksa kesalahan.
sumber
Kode CRC lebih sederhana dan lebih cepat.
Untuk apa Anda butuh?
sumber