Seberapa unik checksum?

11

Saya punya banyak file yang perlu saya sortir; dan sayangnya ada banyak file dengan nama yang sama tetapi konten berbeda, dan ada konten yang sama dengan nama file berbeda.

Saya sedang berpikir tentang menggunakan md5sumuntuk menghasilkan checksum untuk file, tetapi saya perlu tahu - apakah mungkin dua file berbeda (mis. Konten yang berbeda) akan menghasilkan checksum yang sama?

Jika ya, seberapa besar kemungkinan hal itu terjadi?

Apakah mungkin untuk menggunakan dua program checksum yang tidak terkait (mis. Tidak dalam "keluarga" yang sama) untuk menghasilkan dua checksum - dengan asumsi bahwa sementara dua file berbeda dapat menghasilkan checksum yang sama untuk salah satu program checksum, itu tidak akan pernah terjadi pada keduanya sekaligus?

Baard Kopperud
sumber
2
Ingat md5 / sha2 / etc adalah HASH data sehingga memetakan banyak bit informasi ke ruang bit yang lebih kecil, sehingga mungkin saja ada tabrakan. HASH bukanlah kunci unik dan jika itu adalah tujuan Anda ... Saya sangat merekomendasikan untuk melakukan sesuatu yang lain.
mdpc
Untuk menyortir file, MD5 baik-baik saja. Dari crypto.stackexchange.com/a/18337/49945 , probabilitas tabrakan checksum dari dua konten yang berbeda adalah 1 dalam 2 ^ 128 yaitu sekitar 1 dalam 10 ^ 43. Itu sangat, sangat jarang. Jika Anda melakukan satu perbandingan per mikrodetik, rata-rata Anda akan mendapatkan tabrakan sekali dalam 10 ^ 20 tahun. Ini baru ~ 10 ^ 9 tahun sejak Big Bang, jadi kemungkinan tabrakan terjadi BAHKAN WAKTU SINGLE, pada satu perbandingan per mikrodetik dari Big Bang sampai sekarang masih hanya 1 dari 10 ^ 11. Diberikan seratus miliar komputer secara bersamaan, hanya ~ satu yang akan melihat tabrakan.
ToolmakerSteve
... meskipun tidak jelas mengapa Anda akan menggunakan algoritma hash saat menyortir file. Jika ada file dengan nama yang sama, mereka harus dapat diidentifikasi oleh beberapa kriteria lain; misalnya harus ada beberapa jalur unik ke file, atau mungkin byte offset dalam beberapa perangkat penyimpanan? Salah satu dari itu akan menjadi cara yang lebih bermanfaat untuk merujuk secara unik ke file.
ToolmakerSteve

Jawaban:

11

Dua file dengan konten yang sama tetapi nama file berbeda: ( file1 dan file2 ):

cat file1
this is a simple file

cat file2
this is a simple file

md5sum file1
7de45bf879db49de7e2eacea23e6c165  file1
md5sum file2
7de45bf879db49de7e2eacea23e6c165  file2

Dua file dengan konten berbeda tetapi nama file yang sama: ( file1 dan file1 )

cat file1
this is a simple file
cat file1
this is a simple file with extra contents
md5sum file1 #first file1
7de45bf879db49de7e2eacea23e6c165  file1
md5sum file1 #second file1
c7c8f3fd9ddd7a926c31416a69063e4e  file1

Dari entri wiki ,

Namun, sangat tidak mungkin bahwa dua file tidak identik di dunia nyata akan memiliki hash MD5 yang sama, kecuali jika mereka secara khusus dibuat memiliki hash yang sama.

Tapi, algoritma MD5 memiliki kekurangannya sendiri.

Namun, sekarang mudah untuk menghasilkan collision MD5, adalah mungkin bagi orang yang membuat file untuk membuat file kedua dengan checksum yang sama, sehingga teknik ini tidak dapat melindungi terhadap beberapa bentuk perusakan berbahaya. Selain itu, dalam beberapa kasus, checksum tidak dapat dipercaya (misalnya, jika diperoleh melalui saluran yang sama dengan file yang diunduh), dalam hal ini MD5 hanya dapat menyediakan fungsionalitas pengecekan kesalahan: ia akan mengenali unduhan yang korup atau tidak lengkap, yang menjadi lebih mungkin saat mengunduh file yang lebih besar.

Saya akan merekomendasikan menggunakan sha1 untuk menghitung checksum karena memproduksi tabrakan tidak mudah ketika menggunakan algoritma sha1 . Memproduksi sha1 checksum cukup mudah seperti yang Anda lihat di sini .

Ramesh
sumber
CATATAN: pertanyaannya adalah tentang menyortir file; rekomendasi untuk digunakan sha1tidak relevan dengan tugas itu; itu hanya penting ketika mementingkan keamanan .
ToolmakerSteve