Hash "aman" adalah hash yang diyakini sulit untuk "dipalsukan" dengan cara yang direproduksi secara formula tanpa pengetahuan sebelumnya tentang pesan yang digunakan untuk membuat hash. Karena informasi itu umumnya rahasia, maka kebutuhan untuk hash, ini adalah properti yang baik dari fungsi hashing yang dimaksudkan untuk digunakan dalam otentikasi.
Hash umumnya dianggap "aman" jika, diberi pesan M, fungsi hash hash (), dan nilai hash H yang dihasilkan oleh hash (M) dengan panjang dalam bit L, tidak ada yang berikut ini dapat dilakukan dalam waktu kurang dari O (2 L ) waktu:
- Diberikan hash () dan H, menghasilkan M. (resistensi preimage)
- Diberikan hash () dan M, menghasilkan M 2 yang berbeda sehingga hash (M 2 ) == H. (resistensi tabrakan lemah)
- Diberikan hash (), hasilkan setiap M 1 dan M 2 sedemikian rupa sehingga hash (M 1 ) == hash (M 2 ). (resistensi tabrakan yang kuat)
Selain itu, hash "aman" harus memiliki panjang hash L sehingga 2 Lbukan jumlah langkah yang layak bagi komputer untuk melakukan perangkat keras saat ini. Hash integer 32-bit hanya dapat memiliki 2,1 miliar nilai; sementara serangan preimage (menemukan pesan yang menghasilkan hash H tertentu) akan memakan waktu cukup lama, itu tidak layak untuk banyak komputer, terutama yang ada di tangan lembaga pemerintah yang disewa dengan pemecahan kode. Selain itu, suatu algoritma yang membuat dan menyimpan pesan acak dan hash mereka akan, berdasarkan probabilitas, memiliki peluang 50% untuk menemukan hash duplikat dengan setiap pesan baru setelah mencoba hanya 77.000 pesan, dan akan memiliki peluang 75% untuk mencapai duplikat setelah hanya 110.000. Bahkan hash 64-bit masih memiliki peluang 50% untuk bertabrakan setelah mencoba hanya sekitar 5 miliar nilai. Itulah kekuatan serangan ulang tahun pada hash kecil. Sebaliknya,angka decillion (1,5 * 10 34 ).
Kebanyakan serangan yang didemonstrasikan pada hash kriptografi adalah serangan tabrakan, dan telah menunjukkan kemampuan untuk menghasilkan pesan bertabrakan dalam waktu kurang dari 2 L (sebagian besar masih eksponensial-waktu, tetapi mengurangi eksponen hingga setengahnya adalah pengurangan signifikan dalam kompleksitas karena membuat hash 256-bit semudah diselesaikan sebagai 128-bit, 128-bit semudah diselesaikan sebagai 64-bit, dll).
Selain ukuran hash kecil, faktor lain yang dapat membuat hash terbukti tidak aman adalah:
Low work - hash yang dirancang untuk digunakan oleh hashtable atau untuk tujuan "checksum" lainnya biasanya dirancang agar murah secara komputasi. Itu membuat serangan brute-force jauh lebih mudah.
"Sticky State" - Fungsi hashing rentan terhadap pola input di mana nilai hash saat ini dari semua input sejauh ini tidak berubah ketika diberi byte input tambahan tertentu. Memiliki "sticky state" membuat tabrakan mudah ditemukan, karena begitu Anda mengidentifikasi pesan yang menghasilkan hash "sticky state", itu sepele untuk menghasilkan pesan lain yang memiliki hash yang sama dengan menambahkan byte input yang menjaga hash dalam "sticky state" -nya ".
Difusi - Setiap byte input dari pesan harus didistribusikan di antara byte dari nilai hash dengan cara yang sama rumitnya. Fungsi hash tertentu membuat perubahan yang dapat diprediksi ke bit tertentu dalam hash. Ini sekali lagi membuat pembuatan tabrakan sepele; diberi pesan yang menghasilkan hash, tabrakan dapat dengan mudah dibuat dengan memperkenalkan nilai-nilai baru ke pesan yang hanya memengaruhi bit yang berubah yang dapat diprediksi.