Saya menemukan sebuah diskusi di mana saya belajar bahwa apa yang saya lakukan sebenarnya bukan penggaraman kata sandi tetapi membumbui mereka, dan saya sejak itu mulai melakukan keduanya dengan fungsi seperti:
hash_function($salt.hash_function($pepper.$password)) [multiple iterations]
Mengabaikan algoritma hash yang dipilih (saya ingin ini menjadi diskusi tentang garam & paprika dan bukan algoritma tertentu tapi saya menggunakan yang aman), apakah ini opsi yang aman atau haruskah saya melakukan sesuatu yang berbeda? Bagi mereka yang tidak terbiasa dengan ketentuan:
Sebuah garam adalah nilai yang dihasilkan secara acak biasanya disimpan dengan string dalam database yang dirancang untuk membuat tidak mungkin untuk menggunakan tabel hash untuk crack password. Karena setiap kata sandi memiliki garamnya sendiri, mereka semua harus dipaksa secara individual untuk memecahkannya; Namun, karena garam disimpan dalam database dengan hash kata sandi, kompromi database berarti kehilangan keduanya.
Sebuah lada adalah nilai statis situs-lebar disimpan secara terpisah dari database (biasanya keras-kode dalam kode sumber aplikasi) yang dimaksudkan untuk menjadi rahasia. Ini digunakan sehingga kompromi dari basis data tidak akan menyebabkan tabel kata sandi seluruh aplikasi menjadi kasar.
Apakah ada sesuatu yang saya lewatkan dan memberi garam & membumbui kata sandi saya pilihan terbaik untuk melindungi keamanan pengguna saya? Apakah ada kelemahan keamanan potensial untuk melakukannya dengan cara ini?
Catatan: Asumsikan untuk tujuan diskusi bahwa aplikasi & database disimpan pada mesin yang terpisah, jangan berbagi kata sandi, dll. Sehingga pelanggaran server database tidak secara otomatis berarti pelanggaran server aplikasi.