Seperti yang ditunjukkan oleh Johannes Gorset, posting oleh Thomas Ptacek dari Matasano Security menjelaskan mengapa fungsi hashing sederhana dan bertujuan umum seperti MD5, SHA1, SHA256 dan SHA512 adalah pilihan hashing password yang buruk .
Mengapa? Mereka terlalu cepat - Anda dapat menghitung setidaknya 1.000.000 MD5 hash per detik per inti dengan komputer modern, sehingga brute force layak terhadap sebagian besar kata sandi yang digunakan orang. Dan itu jauh lebih sedikit daripada cluster server cracking berbasis GPU!
Pengasinan tanpa peregangan kunci hanya berarti Anda tidak dapat melakukan precompute pada tabel pelangi, Anda harus membuatnya ad hoc untuk garam spesifik tersebut. Tetapi itu tidak akan benar-benar membuat segalanya menjadi lebih sulit.
User @Will akan mengatakan:
Semua orang membicarakan ini seperti mereka dapat diretas melalui internet. Seperti yang telah dinyatakan, upaya membatasi tidak memungkinkan untuk memecahkan kata sandi melalui Internet dan tidak ada hubungannya dengan hash.
Mereka tidak perlu melakukannya. Rupanya, dalam kasus LinkedIn mereka menggunakan common kerentanan injeksi SQL untuk mendapatkan tabel DB login dan memecahkan jutaan kata sandi secara offline.
Kemudian dia kembali ke skenario serangan offline:
Keamanan benar-benar berperan ketika seluruh basis data dikompromikan dan seorang peretas kemudian dapat melakukan 100 juta upaya kata sandi per detik terhadap hash md5. SHA512 sekitar 10.000 kali lebih lambat.
Tidak, SHA512 tidak 10.000 kali lebih lambat dari MD5 - hanya dibutuhkan sekitar dua kali lipat. Crypt / SHA512 , di sisi lain, adalah binatang yang sangat berbeda yang, seperti rekan BCrypt, melakukan peregangan kunci , menghasilkan hash yang sangat berbeda dengan built-in garam acak dan akan memakan waktu antara 500 dan 999999 kali lebih banyak untuk dihitung (Peregangan merdu).
SHA512 => aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
Crypt/SHA512 => $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21
Jadi pilihan untuk PHP adalah Crypt / Blowfish (BCrypt), Crypt / SHA256 atau Crypt / SHA512. Atau setidaknya Crypt / MD5 (PHK). Lihat www.php.net/manual/en/function.crypt.php