Tidak, tidak mungkin untuk membalikkan fungsi hash seperti MD5: mengingat nilai hash output tidak mungkin untuk menemukan pesan input kecuali informasi yang cukup tentang pesan input diketahui.
Dekripsi bukan fungsi yang didefinisikan untuk fungsi hash; enkripsi dan dekripsi adalah fungsi-fungsi sandi seperti AES dalam mode CBC; fungsi hash tidak mengenkripsi atau mendekripsi . Fungsi hash digunakan untuk mencerna pesan input. Sesuai namanya, tidak ada algoritma terbalik yang dimungkinkan oleh desain .
MD5 telah dirancang sebagai fungsi hash satu arah yang aman secara kriptografis . Sekarang mudah untuk menghasilkan collision untuk MD5 - bahkan jika sebagian besar dari pesan input telah ditentukan sebelumnya. Jadi MD5 secara resmi rusak dan MD5 tidak boleh dianggap sebagai hash yang aman secara kriptografis lagi. Namun masih mustahil untuk menemukan pesan input yang mengarah ke nilai hash: temukan X ketika hanya H (X) yang diketahui (dan X tidak memiliki struktur yang dihitung sebelumnya dengan setidaknya satu blok 128 byte dari data yang telah dikomputasi) . Tidak ada serangan pra-gambar yang diketahui terhadap MD5.
Secara umum juga memungkinkan untuk menebak kata sandi menggunakan brute force atau serangan kamus (augmented), untuk membandingkan basis data atau untuk mencoba dan menemukan hash kata sandi dalam apa yang disebut tabel pelangi. Jika kecocokan ditemukan maka secara komputasi yakin bahwa input telah ditemukan. Fungsi hash juga aman terhadap serangan tabrakan: menemukan X'
sehingga H(X') = H(X)
diberikan H(X)
. Jadi, jika X
ditemukan, secara komputasi pasti bahwa itu memang pesan input. Kalau tidak, Anda akan melakukan serangan tabrakan setelah semua. Tabel pelangi dapat digunakan untuk mempercepat serangan dan ada sumber daya internet khusus di luar sana yang akan membantu Anda menemukan kata sandi yang diberikan hash tertentu.
Tentu saja dimungkinkan untuk menggunakan kembali nilai hashH(X)
untuk memverifikasi kata sandi yang dihasilkan pada sistem lain. Satu-satunya hal yang sistem penerima harus lakukan adalah untuk menyimpan hasil dari fungsi deterministik F
yang mengambil H(X)
sebagai masukan. Ketika X
diberikan kepada sistem maka H(X)
dan karenanya F
dapat dihitung ulang dan hasilnya dapat dibandingkan. Dengan kata lain, tidak perlu mendekripsi nilai hash hanya memverifikasi bahwa kata sandi itu benar, dan Anda masih dapat menyimpan hash sebagai nilai yang berbeda.
Alih-alih MD5, penting untuk menggunakan hash kata sandi atau PBKDF (fungsi penurunan kunci berbasis kata sandi). Fungsi semacam itu menentukan cara menggunakan garam bersama dengan hash. Dengan cara itu hash identik tidak akan dihasilkan untuk kata sandi identik (dari pengguna lain atau dalam basis data lain). Kata sandi hash karena alasan itu juga tidak memungkinkan tabel pelangi untuk digunakan selama garamnya cukup besar dan diacak dengan benar.
Kata sandi hash juga mengandung faktor kerja (kadang-kadang dikonfigurasi menggunakan hitungan iterasi ) yang secara signifikan dapat memperlambat serangan yang mencoba menemukan kata sandi yang diberi nilai garam dan nilai hash. Ini penting karena database dengan nilai garam dan hash bisa dicuri. Akhirnya, kata sandi hash mungkin juga hard-memory sehingga diperlukan sejumlah besar memori untuk menghitung hash. Ini membuatnya tidak mungkin untuk menggunakan perangkat keras khusus (GPU, ASIC, FPGA, dll.) Untuk memungkinkan penyerang mempercepat pencarian. Input atau opsi konfigurasi lain seperti lada atau jumlah paralelisasi mungkin juga tersedia untuk hash kata sandi.
Namun itu masih akan memungkinkan siapa pun untuk memverifikasi kata sandi yang diberikan H(X)
bahkan jika H(X)
kata sandi hash. Kata sandi hash masih bersifat deterministik, jadi jika ada yang tahu semua input dan algoritma hash itu sendiri maka X
dapat digunakan untuk menghitung H(X)
dan - lagi - hasilnya dapat dibandingkan.
Hash kata sandi yang umum digunakan adalah bcrypt , scrypt dan PBKDF2 . Ada juga Argon2 dalam berbagai bentuk yang merupakan pemenang kompetisi hashing kata sandi yang cukup baru. Di sini, di CrackStation adalah posting blog yang bagus tentang melakukan keamanan kata sandi yang benar.
Dimungkinkan untuk membuat musuh tidak mungkin melakukan perhitungan hash untuk memverifikasi bahwa kata sandi itu benar. Untuk ini lada dapat digunakan sebagai input ke kata sandi hash. Atau, nilai hash tentu saja dapat dienkripsi menggunakan cipher seperti AES dan mode operasi seperti CBC atau GCM. Namun ini membutuhkan penyimpanan rahasia / kunci secara independen dan dengan persyaratan akses yang lebih tinggi daripada hash kata sandi.