Jawaban:
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 varian SHA-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 .
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:
CRC32 tidak pernah dimaksudkan untuk penggunaan tabel hash. Sebenarnya tidak ada alasan yang baik untuk menggunakannya untuk tujuan ini, dan saya sarankan Anda menghindari melakukannya. Jika Anda memutuskan untuk menggunakan CRC32, sangat penting bahwa Anda menggunakan bit hash dari ujung yang berlawanan dengan yang di mana oktet kunci dimasukkan. Yang ujung ini tergantung pada implementasi CRC32 spesifik. Jangan memperlakukan CRC32 sebagai fungsi hash "kotak hitam", dan jangan menggunakannya sebagai hash tujuan umum. Pastikan untuk menguji setiap aplikasi untuk kesesuaian.
MEMPERBARUI
Sepertinya situs ini sedang down. The arsip internet memiliki salinan sekalipun.
Saya menjalankan setiap baris kode PHP ini dalam 1.000.000 loop. Hasilnya ada di komentar (#).
hash('crc32', 'The quick brown fox jumped over the lazy dog.');# 750ms 8 chars
hash('crc32b','The quick brown fox jumped over the lazy dog.');# 700ms 8 chars
hash('md5', 'The quick brown fox jumped over the lazy dog.');# 770ms 32 chars
hash('sha1', 'The quick brown fox jumped over the lazy dog.');# 880ms 40 chars
hash('sha256','The quick brown fox jumped over the lazy dog.');# 1490ms 64 chars
hash('sha384','The quick brown fox jumped over the lazy dog.');# 1830ms 96 chars
hash('sha512','The quick brown fox jumped over the lazy dog.');# 1870ms 128 chars
Kesimpulan saya:
Gunakan "sha256" (atau lebih tinggi) saat Anda membutuhkan lapisan keamanan tambahan.
Jangan gunakan "md5" atau "sha1" karena mereka memiliki:
"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).
Itu semua tergantung pada kebutuhan dan harapan Anda.
Berikut ini perbedaan singkat cepat antara algoritme fungsi hash ini :
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,
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).
Beberapa tes benchmark sederhana dalam PHP:
# Testing static text.
$ time php -r 'for ($i=0;$i<1000000;$i++) crc32("foo");'
real 0m0.845s
user 0m0.830s
sys 0m0.008s
$ time php -r 'for ($i=0;$i<1000000;$i++) md5("foo");'
real 0m1.103s
user 0m1.089s
sys 0m0.009s
$ time php -r 'for ($i=0;$i<1000000;$i++) sha1("foo");'
real 0m1.132s
user 0m1.116s
sys 0m0.010s
# Testing random number.
$ time php -r 'for ($i=0;$i<1000000;$i++) crc32(rand(0,$i));'
real 0m1.754s
user 0m1.735s
sys 0m0.012s\
$ time php -r 'for ($i=0;$i<1000000;$i++) md5(rand(0,$i));'
real 0m2.065s
user 0m2.042s
sys 0m0.015s
$ time php -r 'for ($i=0;$i<1000000;$i++) sha1(rand(0,$i));'
real 0m2.050s
user 0m2.021s
sys 0m0.015s
Terkait:
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.
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.
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.
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.