Fungsi hash yang baik memiliki properti berikut:
Mengingat hash pesan, secara komputasi tidak mungkin bagi penyerang untuk menemukan pesan lain sehingga hash mereka identik.
Diberikan sepasang pesan, m 'dan m, secara komputasi tidak layak untuk menemukan dua sehingga h (m) = h (m')
Kedua kasus itu tidak sama. Dalam kasus pertama, ada hash yang sudah ada yang Anda coba cari tabrakan. Dalam kasus kedua, Anda mencoba untuk menemukan setiap dua pesan yang bertabrakan. Tugas kedua secara signifikan lebih mudah karena ulang tahun "paradoks."
Di mana kinerja bukanlah masalah besar, Anda harus selalu menggunakan fungsi hash yang aman. Ada serangan yang sangat cerdas yang dapat dilakukan dengan memaksa tabrakan dalam hash. Jika Anda menggunakan sesuatu yang kuat sejak awal, Anda akan mengamankan diri Anda dari ini.
Jangan gunakan MD5 atau SHA-1 dalam desain baru. Kebanyakan cryptographers, termasuk saya, akan menganggapnya rusak. Sumber utama kelemahan dalam kedua desain ini adalah bahwa properti kedua, yang saya uraikan di atas, tidak berlaku untuk konstruksi ini. Jika seorang penyerang dapat menghasilkan dua pesan, m dan m ', yang keduanya hash dengan nilai yang sama mereka dapat menggunakan pesan-pesan ini terhadap Anda. SHA-1 dan MD5 juga menderita serangan ekstensi pesan, yang dapat melemahkan aplikasi Anda secara fatal jika Anda tidak berhati-hati.
Hash yang lebih modern seperti Whirpool adalah pilihan yang lebih baik. Itu tidak menderita dari serangan ekstensi pesan ini dan menggunakan matematika yang sama seperti AES digunakan untuk membuktikan keamanan terhadap berbagai serangan.
Semoga itu bisa membantu!