Apakah hashing MD5 file masih dianggap sebagai metode yang cukup baik untuk mengidentifikasinya secara unik mengingat semua gangguan algoritma MD5 dan masalah keamanan dll? Keamanan bukanlah perhatian utama saya di sini, tetapi mengidentifikasi setiap file secara unik.
Ada pemikiran?
Jawaban:
Iya. MD5 telah sepenuhnya rusak dari perspektif keamanan, tetapi kemungkinan tabrakan yang tidak disengaja masih sangat kecil. Pastikan saja bahwa file tersebut tidak dibuat oleh seseorang yang tidak Anda percayai dan mungkin memiliki niat jahat.
sumber
Untuk tujuan praktis, hash yang dibuat mungkin acak, tetapi secara teoritis selalu ada kemungkinan tabrakan, karena prinsip Pigeonhole . Memiliki hash yang berbeda tentu berarti file tersebut berbeda, tetapi mendapatkan hash yang sama tidak berarti bahwa file tersebut identik.
Menggunakan fungsi hash untuk tujuan itu - tidak peduli apakah keamanan menjadi perhatian atau tidak - oleh karena itu harus selalu menjadi langkah pertama pemeriksaan, terutama jika algoritma hash diketahui dengan mudah membuat benturan. Untuk mengetahui secara andal apakah dua file dengan hash yang sama berbeda, Anda harus membandingkan file tersebut byte-by-byte.
sumber
MD5 akan cukup baik jika Anda tidak memiliki musuh. Namun, seseorang dapat (dengan sengaja) membuat dua file berbeda yang memiliki nilai hash yang sama (disebut tabrakan), dan ini mungkin atau mungkin bukan masalah, bergantung pada situasi Anda yang sebenarnya.
Karena mengetahui apakah kelemahan MD5 yang diketahui berlaku untuk konteks tertentu adalah masalah kecil, disarankan untuk tidak menggunakan MD5. Menggunakan fungsi hash tahan benturan (SHA-256 atau SHA-512) adalah jawaban yang aman. Juga, menggunakan MD5 adalah hubungan masyarakat yang buruk (jika Anda menggunakan MD5, bersiaplah untuk membenarkan diri Anda sendiri; sedangkan tidak ada yang akan mempertanyakan Anda menggunakan SHA-256).
sumber
return 0;
menjadi areturn 1;
). Ini sangat tidak mungkin, tetapi risiko tabrakan dengan SHA-256 bahkan lebih kecil dari itu. Secara matematis, Anda tidak dapat memastikan bahwa dua file yang memiliki nilai yang sama identik, tetapi Anda tidak dapat memastikannya dengan membandingkan file itu sendiri, selama Anda menggunakan komputer untuk perbandingan. Yang saya maksud adalah bahwa tidak ada artinya melampaui beberapa 99,999 .... 9% kepastian, dan SHA-256 sudah memberikan lebih dari itu.Sebuah md5 dapat menghasilkan tabrakan. Secara teoritis, meskipun sangat tidak mungkin, satu juta file berturut-turut dapat menghasilkan hash yang sama. Jangan menguji keberuntungan Anda dan memeriksa tabrakan md5 sebelum menyimpan nilainya.
Saya pribadi suka membuat md5 string acak, yang mengurangi overhead hashing file besar. Ketika tabrakan ditemukan, saya mengulangi dan hash ulang dengan penghitung loop yang ditambahkan.
Anda bisa membaca tentang prinsip pigeonhole .
sumber
Saya tidak akan merekomendasikannya. Jika aplikasi akan bekerja pada sistem multi-pengguna, mungkin ada pengguna, yang akan memiliki dua file dengan hash md5 yang sama (dia mungkin insinyur dan bermain dengan file seperti itu, atau hanya ingin tahu - mereka dapat diunduh dengan mudah dari http: / /www2.mat.dtu.dk/people/S.Thomsen/wangmd5/samples.html , saya sendiri saat menulis jawaban ini mengunduh dua sampel). Hal lain adalah, bahwa beberapa aplikasi mungkin menyimpan duplikat seperti itu untuk alasan apa pun (saya tidak yakin, jika ada aplikasi seperti itu tetapi kemungkinan ada).
Jika Anda secara unik mengidentifikasi file yang dihasilkan oleh program Anda, saya akan mengatakan tidak masalah untuk menggunakan MD5. Jika tidak, saya akan merekomendasikan fungsi hash lainnya di mana belum ada tabrakan yang diketahui.
sumber
Secara pribadi saya pikir orang menggunakan checksum mentah (pilih metode Anda) dari objek lain untuk bertindak sebagai pengenal unik terlalu banyak ketika mereka benar-benar ingin melakukannya adalah memiliki pengenal unik. Sidik jari pada objek untuk penggunaan ini bukanlah maksudnya dan kemungkinan membutuhkan lebih banyak pemikiran daripada menggunakan uuid atau mekanisme integritas serupa.
sumber
MD5 rusak, Anda dapat menggunakan SHA1 sebagai gantinya (diterapkan di sebagian besar bahasa)
sumber
Ketika melakukan hashing pendek (<beberapa K?) String (atau file) seseorang dapat membuat dua kunci hash md5, satu untuk string aktual dan yang kedua untuk kebalikan dari string yang digabungkan dengan string asimetris pendek. Contoh: md5 (reverse (string || '1010')). Menambahkan string ekstra memastikan bahwa file yang terdiri dari serangkaian bit identik menghasilkan dua kunci yang berbeda. Harap dipahami bahwa bahkan di bawah skema ini ada peluang teoretis dari dua kunci hash yang identik untuk string non-identik, tetapi kemungkinannya tampak sangat kecil - sesuatu dalam urutan kuadrat dari probabilitas tabrakan md5 tunggal, dan penghematan waktu bisa menjadi besar bila jumlah file bertambah. Skema yang lebih rumit untuk membuat string kedua juga dapat dipertimbangkan,
Untuk memeriksa tabrakan, seseorang dapat menjalankan pengujian ini untuk mengetahui keunikan kunci hash md5 untuk semua bit_vectors dalam db:
pilih md5 (bit_vector), count (*), bit_and (bit_vector) dari db dengan
grup bit_vector oleh md5 (bit_vector), bit_vector memiliki bit_and (bit_vector) <> bit_vector
sumber
Saya suka menganggap MD5 sebagai indikator kemungkinan saat menyimpan data file dalam jumlah besar.
Jika hashnya sama, saya kemudian tahu saya harus membandingkan file byte demi byte, tetapi itu mungkin hanya terjadi beberapa kali karena alasan yang salah, jika tidak (hash tidak sama) Saya yakin kita sedang berbicara tentang dua file yang berbeda .
sumber