Seberapa akurat `md5sum`?

27

Saat menggunakan md5sumuntuk memverifikasi integritas file, seberapa akurat prosesnya?

Apakah MD5 terverifikasi berarti SETIAP bit persis sama, atau adakah ambang batas yang harus dipatahkan sebelum perubahan biner tercermin dalam MD5?

Dokumentasi tentang bagaimana md5 dihasilkan juga akan dihargai.

Konner Rasmussen
sumber
@choroba jika saya membaca semua ini dengan benar, maka kemungkinan perubahan yang tidak terdeteksi meningkat dengan ukuran file yang diverifikasi. Namun itu masih probabilitas dan kepastian 100% hanya bisa didapat dengan file 16 byte. Apakah saya benar?
Konner Rasmussen
@Konner Saya membaca pertanyaan Anda yang berhubungan dengan transfer file. Untuk itu, aman. Kemungkinan sedikit rusak pada transfer kecil dan lebih mungkin bahwa Anda kehilangan sebagian dari file yang disalin pada transfer, dengan asumsi saya mengerti situasi Anda sebelumnya . MD5 dalam upaya setara dengan membandingkan kedua file, dengan beberapa keuntungan dalam kenyataan bahwa Anda tidak perlu mengakses kedua file secara bersamaan.
Doktoro Reichard
15
"Apakah MD5 terverifikasi berarti SETIAP bit persis sama." Perhatikan bahwa ini tidak mungkin, berkat Prinsip Pigeonhole. en.wikipedia.org/wiki/Pigeonhole_principle
Plutor
3
Saya tidak berpikir Anda mendapatkan jaminan untuk file 16 byte juga.
Mooing Duck

Jawaban:

65

MD5 rusak untuk tujuan ini melawan musuh yang cerdas. Dimungkinkan untuk secara jahat membangun dua blok data berbeda yang menghasilkan hash MD5 yang sama.

Namun, itu sepenuhnya cocok (meskipun hampir pasti ada cara yang lebih baik) untuk menggunakan MD5 untuk melindungi terhadap korupsi data yang tidak disengaja dalam perjalanan atau penyimpanan. Meskipun dapat dibayangkan bahwa peristiwa seperti itu dapat menyebabkan hash MD5 sama, kemungkinannya sangat rendah sehingga hampir tidak dapat dibayangkan bahwa itu adalah probabilitas yang layak untuk dikhawatirkan. Kegagalan yang disebabkan oleh radiasi latar belakang, tunneling, statis, dan puluhan sumber lain akan menjadi urutan besarnya lebih mungkin.

Bahkan jika Anda memiliki kuadriliun unit data, probabilitas bahwa MD5 yang tidak cocok akan menghasilkan hash MD5 milik salah satu unit kuadriliun jauh lebih kecil dari satu dalam kuadriliun.

David Schwartz
sumber
Walaupun secara teori dimungkinkan untuk menghasilkan dua file dengan hash yang sama, namun secara praktis tidak mungkin. Apalagi jika file pengganti juga masuk akal. Jika file asli adalah teks bahasa Inggris, misalnya, mungkin tidak ada kecocokan lain yang juga berbahasa Inggris. Atau jika ini adalah spreadsheet Excel, tidak ada file lain dengan hash yang sama yang akan menjadi spreadsheet yang valid.
Barmar
1
@Barmar: win.tue.nl/hashclash/Nostradamus , orang-orang ini membuat sejumlah file pdf dengan hash MD5 yang sama untuk membuktikan bahwa itu layak secara praktis.
philfr
26

MD5 adalah hash. Ini pada dasarnya memetakan seluruh konten file ke dalam string kecil yang panjang 16 byte IIRC.

Jelas akan ada banyak file yang hash ke jumlah MD5 yang sama. Oleh karena itu, jumlah MD5 yang cocok bukan jaminan kecocokan yang tepat antara file.

Tidak ada batasan seperti itu karena cara hash bekerja. Jadi jumlah MD5 dapat mendeteksi bahkan perubahan bit tunggal. Namun, banyak perubahan bit tunggal bersama-sama dapat menyebabkan hash MD5 menjadi sama. Oleh karena itu cukup masuk akal untuk menggunakan MD5 untuk memvalidasi integritas file terhadap korupsi acak tetapi tidak jika niat jahat dimungkinkan karena seseorang dapat memodifikasi file sambil memastikan hash MD5 sama.

Itai
sumber
1
Singkatnya, md5 tidak lebih dari cara cepat dan kotor untuk memverifikasi integritas file, dan seharusnya hanya digunakan ketika kesalahan yang tidak terdeteksi tidak akan menyebabkan dampak yang dahsyat ... benar?
Konner Rasmussen
3
penggunaan terbaiknya adalah untuk mendeteksi korupsi selama transfer atau penyalinan. tidak benar-benar sebagai masalah keamanan.
Michael Martinez
12
@KonnerRasmussen - ini bukan masalah tingkat reaksi, itu adalah sifat ancamannya. Jika Anda khawatir dua dokumen secara tidak sengaja memiliki MD5 yang sama, berhentilah khawatir: kemungkinannya jauh lebih tinggi bahwa komputer Anda secara spontan akan terbakar; Jika Anda khawatir penyerang yang cerdas mungkin menghasilkan dokumen yang cocok dengan yang sudah Anda miliki, itu adalah masalah serius dan Anda harus mendapatkan hash yang lebih baik; jika Anda khawatir penyerang yang cerdas mungkin menghasilkan dua dokumen yang cocok satu sama lain, jangan "khawatir": itu pasti akan terjadi.
Malvolio
5
Tentu saja, walaupun menghasilkan tumbukan hash MD5 secara teori dimungkinkan, menghasilkan tumbukan yang berguna (seperti pada, file bertabrakan adalah jenis file yang sama dan isinya setidaknya masuk akal otentik) jauh lebih sulit ...
Shadur
6
@ Safad: Itu dulu kasusnya, tetapi penelitian keamanan yang sedang berlangsung telah menemukan cara baru untuk menghasilkan tabrakan MD5 yang membuatnya lebih mudah. Khususnya, jika format file Anda memungkinkan potongan data "komentar" format bebas, mungkin untuk mencocokkan hash MD5 dengan memasukkan komentar yang sesuai.
MSalters
17

MD5-Hash terdiri dari 128bits. Satu bit terbalik dalam sumber membalik (rata-rata) 64 bit dalam hash.

Probabilitas dari dua hash yang secara tidak sengaja bertabrakan adalah 1/2 ^ 128 yaitu 1 dari 340 undecillion 282 decillion 366 nonillion 920 octillion 938 septillion 463 sextillion 463 quintillion 374 quadrillion 607 triliun 437 miliar 431 miliar 768 juta 211 ribu 456.

Namun jika Anda menyimpan semua hash maka berkat probabilitas paradoks ulang tahun sedikit lebih tinggi. Untuk memiliki 50% kemungkinan benturan hash apa pun, Anda memerlukan 2 ^ 64 hash. Ini berarti bahwa untuk mendapatkan tabrakan, rata-rata, Anda harus hash 6 miliar file per detik selama 100 tahun.

Sumber: porneL, https://stackoverflow.com/questions/201705/how-many-random-elements-before-md5-produces-collisions

Zsolt Szilagy
sumber
8
Jadi maksudmu masih ada peluang? : p
Holloway
1
Masalahnya adalah bahwa meskipun Anda PERLU hash 6 miliar file per detik selama 100 tahun untuk memastikan bahwa Anda menemukan tabrakan; itu bisa terjadi dalam detik pertama.
deroby
Benar, itu bisa terjadi pada detik pertama. Tapi seperti biasa, ini tentang menyeimbangkan alasan. Mungkin ada aplikasi militer di mana risiko itu tidak dapat diterima, tapi saya akan menyewa mobil tanpa pikir panjang di mana sensor airbag menggunakan md5. Ingat, kemungkinan Anda terkena petir beberapa kali sambil menunggu tabrakan MD5.
Zsolt Szilagy
Maaf, setengah dari 2 ^ 128 adalah 2 ^ 127, bukan 2 ^ 64.
fischi
2
@fischi, baca tautan pada paradoks ulang tahun, dan juga en.wikipedia.org/wiki/Birthday_attack - ini bukan masalah hanya dengan membagi dua jumlah total hash. Diberikan ruang pencarian H, jumlah hash yang harus Anda hasilkan sebelum mendapatkan 50% kemungkinan tabrakan adalah sekitar sqrt ((pi / 2) * H). Jika Anda melakukan matematika dengan 2 ^ 128, Anda akan mendapatkan angka sekitar 2 ^ 64
Paul Dixon