Di tempat kerja kami memiliki dua teori yang bersaing untuk garam. Produk yang saya kerjakan menggunakan sesuatu seperti nama pengguna atau nomor telepon untuk mengasinkan hash. Pada dasarnya sesuatu yang berbeda untuk setiap pengguna tetapi tersedia untuk kami. Produk lain secara acak menghasilkan salt untuk setiap pengguna dan berubah setiap kali pengguna mengubah sandi. Salt kemudian dienkripsi dalam database.
Pertanyaan saya adalah apakah pendekatan kedua benar-benar diperlukan? Saya dapat memahami dari perspektif teoritis murni bahwa ini lebih aman daripada pendekatan pertama, tetapi bagaimana dari sudut pandang kepraktisan. Saat ini untuk mengautentikasi pengguna, garam harus tidak dienkripsi dan diterapkan ke informasi login.
Setelah memikirkannya, saya tidak melihat keuntungan keamanan yang nyata dari pendekatan ini. Mengubah salt dari akun ke akun, masih menyulitkan seseorang untuk mencoba memaksakan algoritme hashing meskipun penyerang mengetahui cara menentukan dengan cepat untuk setiap akun. Ini terjadi dengan asumsi bahwa kata sandi cukup kuat. (Jelas menemukan hash yang benar untuk satu set kata sandi yang semuanya terdiri dari dua digit jauh lebih mudah daripada menemukan hash kata sandi yang benar yang terdiri dari 8 digit). Apakah saya salah dalam logika saya, atau ada sesuatu yang saya lewatkan?
EDIT: Oke jadi inilah alasan mengapa saya pikir itu benar-benar diperdebatkan untuk mengenkripsi garam. (biar tahu apakah saya di jalur yang benar).
Untuk penjelasan berikut, kami akan berasumsi bahwa kata sandi selalu 8 karakter dan salt adalah 5 dan semua kata sandi terdiri dari huruf kecil (itu hanya membuat matematika lebih mudah).
Memiliki garam yang berbeda untuk setiap entri berarti saya tidak dapat menggunakan tabel pelangi yang sama (sebenarnya secara teknis saya bisa jika saya memiliki ukuran yang cukup, tetapi mari kita abaikan itu untuk saat ini). Ini adalah kunci sebenarnya untuk garam dari apa yang saya pahami, karena untuk memecahkan setiap akun saya harus menemukan kembali roda sehingga untuk berbicara untuk masing-masing. Sekarang jika saya tahu cara menerapkan salt yang benar ke kata sandi untuk menghasilkan hash, saya akan melakukannya karena salt benar-benar hanya memperluas panjang / kompleksitas frasa hash. Jadi saya akan memotong jumlah kemungkinan kombinasi yang perlu saya hasilkan untuk "tahu" Saya memiliki kata sandi + garam dari 13 ^ 26 menjadi 8 ^ 26 karena saya tahu apa itu garam. Sekarang itu membuatnya lebih mudah, tetapi masih sangat sulit.
Jadi untuk mengenkripsi garam. Jika saya tahu garamnya dienkripsi, saya tidak akan mencoba dan mendekripsi (dengan asumsi saya tahu itu memiliki tingkat enkripsi yang cukup) terlebih dahulu. Saya akan mengabaikannya. Alih-alih mencoba mencari cara untuk mendekripsinya, kembali ke contoh sebelumnya saya hanya akan membuat tabel pelangi yang lebih besar yang berisi semua kunci untuk 13 ^ 26. Tidak mengetahui garam pasti akan memperlambat saya, tetapi saya tidak berpikir itu akan menambah tugas monumental untuk mencoba memecahkan enkripsi garam terlebih dahulu. Itu sebabnya saya tidak berpikir itu sepadan. Pikiran?
Berikut ini tautan yang menjelaskan berapa lama kata sandi akan bertahan di bawah serangan brute force: http://www.lockdown.co.uk/?pg=combi