Angka konkret membantu memahami cost factor bcrypt: di server rata-rata, cost 10 memakan waktu sekitar 60-70 md per hash, cost 12 sekitar empat kali lebih lama, dan cost 14 mendekati satu detik penuh. Bagi banyak startup dan super-app di Indonesia yang melayani jutaan pengguna dari perangkat mobile kelas menengah ke bawah, memilih cost factor berarti menyeimbangkan beban server login dengan biaya yang harus dibayar penyerang untuk setiap tebakan kata sandi.
Mengapa kecepatan merugikan keamanan kata sandi
Jika penyerang mencuri database hash kata sandi, mereka mencoba memulihkan kata sandi asli dengan brute force. Dengan fungsi cepat seperti SHA-256, perangkat keras modern bisa memeriksa miliaran kombinasi per detik. Bcrypt sengaja membuat satu kali hashing memakan waktu sekitar 100 milidetik, sehingga brute force menjadi berkali-kali lipat lebih lambat dan mahal.
Apa itu cost factor
Parameter "cost" bcrypt menentukan jumlah putaran internal sebagai pangkat dua (2^cost, biasanya 10-12). Menaikkannya satu tingkat kira-kira menggandakan waktu hashing — dan menggandakan pula total biaya serangan brute force bagi penyerang.
Salt bawaan
Bcrypt secara otomatis menghasilkan salt acak unik untuk setiap kata sandi dan menyematkannya langsung ke dalam hasil — tidak ada yang perlu disimpan terpisah. Dua kata sandi identik menghasilkan hash berbeda, dan rainbow table yang dihitung sebelumnya untuk kata sandi umum jadi tidak berguna — setiap hash harus diserang satu per satu.
Untuk apa ini dibutuhkan
- Menyimpan kata sandi pengguna dengan benar di database aplikasi.
- Memahami mengapa SHA-256 atau MD5 adalah pilihan buruk untuk hashing kata sandi.
- Menguji atau memigrasikan sistem autentikasi yang menggunakan bcrypt, sambil menyesuaikan cost factor dengan kapasitas server.
Batas tersembunyi: 72 byte
Bcrypt hanya memproses 72 byte pertama dari kata sandi — apa pun yang lebih panjang dibuang begitu saja tanpa peringatan. Dalam praktiknya ini jarang menjadi masalah untuk kata sandi berbasis Latin di Indonesia (72 karakter ASCII sudah sangat panjang), tapi perlu diperhatikan saat menentukan batas maksimum panjang kata sandi di formulir pendaftaran.