Pemahaman saya adalah bahwa kode hash dan checksum adalah hal yang serupa - nilai numerik, dihitung untuk satu blok data, yang relatif unik.
yaitu Probabilitas dua blok data yang menghasilkan nilai hash / checksum numerik yang sama cukup rendah sehingga dapat diabaikan untuk keperluan aplikasi.
Jadi, apakah kita memiliki dua kata untuk hal yang sama, atau adakah perbedaan penting antara kode hash dan checksum?
language-agnostic
hash
computer-science
checksum
Richard Ev
sumber
sumber
Jawaban:
Saya akan mengatakan bahwa checksum selalu merupakan kode hash . Namun, tidak semua kode hash membuat checksum yang baik.
Sebuah checksum memiliki tujuan khusus --- ia memverifikasi atau memeriksa integritas data (beberapa dapat melampaui itu dengan memungkinkan koreksi kesalahan ). Checksum yang "baik" mudah dihitung, dan dapat mendeteksi banyak jenis kerusakan data (misalnya satu, dua, tiga bit yang salah).
Kode hash secara sederhana mendeskripsikan fungsi matematika yang memetakan data ke beberapa nilai. Ketika digunakan sebagai alat pengindeksan dalam struktur data (misalnya tabel hash), probabilitas tabrakan yang rendah diinginkan.
sumber
Ada tujuan berbeda di balik masing-masingnya:
Dalam praktiknya, fungsi yang sama sering kali baik untuk kedua tujuan tersebut. Secara khusus, kode hash yang kuat secara kriptografis adalah checksum yang bagus (hampir tidak mungkin kesalahan acak akan merusak fungsi hash yang kuat), jika Anda mampu membayar biaya komputasi.
sumber
Memang ada beberapa perbedaan:
sumber
Hashcode dan checksum keduanya digunakan untuk membuat nilai numerik pendek dari item data. Perbedaannya adalah bahwa nilai checksum harus berubah, meskipun sedikit modifikasi dilakukan pada item data. Untuk nilai hash, persyaratannya hanyalah bahwa item data dunia nyata harus memiliki nilai hash yang berbeda.
Contoh yang jelas adalah string. Sebuah checksum untuk sebuah string harus mencakup setiap bit, dan urutannya penting. Di sisi lain, kode hash sering kali dapat diimplementasikan sebagai checksum dari awalan dengan panjang terbatas. Itu berarti bahwa "aaaaaaaaaaba" akan memiliki hash yang sama dengan "aaaaaaaaaaab", tetapi algoritme hash dapat menangani benturan semacam itu.
sumber
Wikipedia menjelaskannya dengan baik:
sumber
Sebuah checksum melindungi dari perubahan yang tidak disengaja.
Hash kriptografi melindungi dari penyerang yang sangat termotivasi.
Ketika Anda mengirim bit pada kabel, mungkin secara tidak sengaja terjadi bahwa beberapa bit dibalik, atau dihapus, atau dimasukkan. Untuk memungkinkan penerima mendeteksi (atau terkadang memperbaiki) kecelakaan seperti ini, pengirim menggunakan checksum.
Tetapi jika Anda berasumsi ada seseorang yang secara aktif dan cerdas memodifikasi pesan di kabel dan Anda ingin melindungi dari penyerang semacam ini, maka gunakan hash kriptografik (saya mengabaikan tanda tangan kriptografik, atau menggunakan saluran sekunder atau semacamnya, karena pertanyaannya sepertinya tidak luput dari ini).
sumber
Sumber: CompTIA ® Keamanan + Panduan Dasar-Dasar Keamanan Jaringan - Edisi Kelima - Mark Ciampa -Halaman 191
sumber
Hari-hari ini mereka dapat dipertukarkan, tetapi di zaman dahulu kala checksum adalah teknik yang sangat sederhana di mana Anda akan menambahkan semua data (biasanya dalam byte) dan menempatkan satu byte pada akhirnya dengan nilai itu dalam .. maka Anda akan mudah-mudahan mengetahui jika ada data asli yang rusak. Mirip dengan bit centang, tetapi dengan byte.
sumber
Perbedaan antara fungsi kode hash dan checksum adalah, keduanya dirancang untuk tujuan yang berbeda.
Sebuah checksum digunakan untuk mengetahui apakah sesuatu di masukan telah berubah.
Kode hash digunakan untuk mengetahui apakah sesuatu dalam input telah berubah dan memiliki "jarak" sebanyak mungkin antara nilai kode hash individu.
Selain itu, mungkin ada persyaratan lebih lanjut untuk fungsi hash, yang bertentangan dengan aturan ini, seperti kemampuan untuk membentuk hierarki / klaster / keranjang nilai kode hash lebih awal.
Dan jika Anda menambahkan beberapa pengacakan awal bersama, Anda mendapatkan konsep untuk enkripsi / pertukaran kunci modern.
Tentang Probabilitas:
Sebagai contoh, mari kita asumsikan bahwa data masukan sebenarnya selalu berubah (100% dari waktu). Dan anggaplah Anda memiliki fungsi hash / checksum yang "sempurna", yang menghasilkan nilai hash / checksum 1-bit. Oleh karena itu, Anda akan mendapatkan nilai hash / checksum yang berbeda, 50% dari waktu, untuk data masukan acak.
Jika tepat 1 bit dalam data masukan acak Anda telah berubah, Anda akan dapat mendeteksi 100% waktu tersebut, tidak peduli seberapa besar data masukan tersebut.
Jika 2 bit dalam data masukan acak Anda telah berubah, kemungkinan Anda untuk mendeteksi "perubahan" dibagi 2, karena kedua perubahan tersebut dapat saling menetralkan, dan tidak ada fungsi hash / checksum yang akan mendeteksi bahwa 2 bit sebenarnya berbeda dalam data masukan .
...
Artinya, Jika jumlah bit dalam data input Anda beberapa kali lebih besar dari jumlah bit dalam nilai hash / checksum Anda, kemungkinan Anda untuk benar-benar mendapatkan nilai hash / checksum yang berbeda, untuk nilai input yang berbeda, berkurang dan bukan a konstan .
sumber
Saya cenderung menggunakan kata checksum saat mengacu pada kode (numerik atau lainnya) yang dibuat untuk file atau bagian data yang dapat digunakan untuk memeriksa bahwa file atau data tidak rusak. Penggunaan paling umum yang saya temui adalah untuk memeriksa bahwa file yang dikirim melalui jaringan belum diubah (sengaja atau tidak).
sumber
Dalam sharding data cluster Redis, ia menggunakan a
hash slot
untuk memutuskan node mana yang akan digunakan. Ambil contoh operasi modulo di bawah ini:The
6
muncul dua kali di berbeda input. Tujuan dari hash hanyalah untuk memetakan nilai input ke nilai output dan keunikan bukanlah bagian dari kesepakatan. Jadi, dua input berbeda yang menghasilkan output yang sama tidak masalah di dunia hash.Sebuah checksum, di sisi lain, harus membedakan output meskipun satu bit dalam input berubah karena tujuannya bukan untuk memetakan, tetapi untuk mendeteksi kerusakan data. Jadi, dua input berbeda yang menghasilkan output yang sama tidak dapat diterima di checksum.
sumber
Sebuah checksum hanyalah angka yang dihasilkan dari bidang data dengan oring (dengan penambahan logis maka jumlah). Checksum memiliki kemampuan untuk mendeteksi kerusakan bit atau jumlah bit apa pun di dalam bidang data dari mana ia dihasilkan, yaitu memeriksa semua kesalahan, tidak dapat memperbaikinya. Checksum adalah hash karena ukuran checksum lebih kecil dari data asli. Ya, Anda akan mengalami benturan karena checksum sama sekali tidak sensitif terhadap posisi bit di bidang data.
Cyclic redundancy check (CRC) adalah sesuatu yang sangat berbeda, lebih kompleks dan TIDAK disebut checksum. Ini adalah aplikasi dari rangkaian polinomial yang memiliki kemampuan untuk mengoreksi sejumlah bit rusak individu yang dipilih dalam bidang data tempat ia dihasilkan. Pembuatan hasil CRC dalam ukuran yang lebih besar dari datafield asli (tidak seperti checksum) - maka nama termasuk kata "redundansi" dan harga yang Anda bayarkan untuk kemampuan mengoreksi kesalahan. Oleh karena itu, CRC BUKAN hash dan tidak boleh disalahartikan atau dinamai sebagai checksum, karena redundansi selalu menambah ukuran data asli.
sumber