Artikel Coda Hale "Cara Aman Menyimpan Kata Sandi" mengklaim bahwa:
bcrypt memiliki garam bawaan untuk mencegah serangan tabel pelangi.
Dia mengutip makalah ini , yang mengatakan bahwa dalam implementasi OpenBSD tentang bcrypt
:
OpenBSD menghasilkan garam bcrypt 128-bit dari stream kunci arcfour (arc4random (3)), diunggulkan dengan data acak yang dikumpulkan kernel dari pengaturan waktu perangkat.
Saya tidak mengerti bagaimana ini bisa berhasil. Dalam konsepsi saya tentang garam:
- Itu harus berbeda untuk setiap kata sandi yang disimpan, sehingga tabel pelangi yang terpisah harus dihasilkan untuk masing-masing kata sandi
- Itu perlu disimpan di suatu tempat agar dapat diulang: ketika pengguna mencoba masuk, kami mencoba kata sandi mereka, mengulangi prosedur salt-and-hash yang sama seperti yang kami lakukan ketika kami awalnya menyimpan kata sandi mereka, dan membandingkan
Ketika saya menggunakan Devise (seorang manajer login Rails) dengan bcrypt, tidak ada kolom garam dalam database, jadi saya bingung. Jika garam itu acak dan tidak disimpan di mana pun, bagaimana kita dapat dengan andal mengulangi proses hashing?
Singkatnya, bagaimana bisa bcrypt memiliki garam bawaan ?