Apa itu bcrypt?
Bcrypt adalah fungsi hashing kata sandi yang dirancang oleh Niels Provos dan David Mazières, berdasarkan cipher Blowfish. Tidak seperti digest cepat seperti MD5 atau SHA-256, bcrypt sengaja dibuat lambat dan mahal secara komputasi — ini membuat serangan brute-force terhadap hash kata sandi yang dicuri menjadi tidak praktis. Bcrypt secara otomatis menghasilkan garam acak per kata sandi, sehingga kata sandi yang identik menghasilkan hash yang berbeda.
Bagaimana cara kerja bcrypt?
Algoritma bcrypt berjalan sepenuhnya di browser Anda. Berikut yang terjadi langkah demi langkah:
- Kata sandi Anda dikodekan sebagai byte UTF-8 dan dimasukkan ke dalam jadwal kunci bcrypt, yang menginisialisasi larik-P 4.184-byte dan S-box cipher Blowfish menggunakan kata sandi dan garam.
- Garam acak 128-bit dihasilkan. Garam dicampur ke dalam jadwal kunci sehingga setiap garam unik menghasilkan hash yang benar-benar berbeda bahkan untuk kata sandi yang sama.
- Jadwal kunci dijalankan sebanyak 2^cost putaran (mis., 2^10 = 1.024 iterasi pada biaya 10). Setiap iterasi mengenkripsi ulang entri garam dan larik-P, membuat komputasi semakin lambat seiring meningkatnya biaya.
- Output akhir adalah string 60 karakter dalam format
$2b$<cost>$<salt><hash>, di mana cost diisi nol (mis., 10), salt adalah 22 karakter Base64, dan hash adalah 31 karakter Base64. - Untuk verifikasi, algoritma yang sama dijalankan kembali dengan kata sandi kandidat dan garam yang diambil dari hash yang tersimpan. Jika hash yang dihasilkan cocok dengan hash yang tersimpan, kata sandi benar.
Faktor biaya mana yang harus saya gunakan?
Faktor biaya adalah logaritma dari jumlah iterasi — biaya 10 berarti 2^10 = 1.024 putaran, biaya 12 berarti 4.096 putaran. Pilih berdasarkan kebutuhan keamanan dan perangkat keras Anda:
- Biaya 4-6 (16-64 putaran) — hanya untuk pengembangan dan pengujian. Terlalu cepat untuk penggunaan produksi; memberikan perlindungan minimal.
- Biaya 8 (256 putaran) — batas minimum untuk aplikasi non-kritis. Sekitar 6ms pada perangkat keras modern.
- Biaya 10 (1.024 putaran) — dasar yang direkomendasikan saat ini. Membutuhkan sekitar 25ms. Baik untuk sebagian besar aplikasi web.
- Biaya 12 (4.096 putaran) — direkomendasikan untuk portal admin, sistem keuangan, dan aplikasi keamanan tinggi. Membutuhkan sekitar 100ms.
- Biaya 14 (16.384 putaran) — keamanan tinggi. Membutuhkan sekitar 400ms. Gunakan untuk kata sandi master, kunci enkripsi, atau saat latensi login dapat diterima.
Mengapa menggunakan generator bcrypt ini?
- Privasi Anda terlindungi — setiap kata sandi di-hash secara lokal di browser Anda, dan tidak ada data yang pernah meninggalkan perangkat Anda.
- Anda mendapatkan kedua mode berdampingan: hasilkan hash baru atau verifikasi yang sudah ada tanpa berpindah halaman.
- Faktor biaya dapat disesuaikan dari 4 (cepat) hingga 15 (sangat lambat), sehingga Anda dapat menyesuaikan kebutuhan keamanan aplikasi Anda.
- Hash menggunakan format standar
$2b$yang berfungsi dengan setiap bahasa dan framework utama.
Apa aplikasi umum bcrypt?
Bcrypt banyak digunakan untuk penyimpanan dan verifikasi kata sandi di seluruh industri:
- Otentikasi pengguna aplikasi web — menyimpan hash kata sandi pengguna di database sehingga kata sandi teks biasa tidak pernah disimpan.
- Hashing kunci API — hashing rahasia API sebelum menyimpannya, sehingga pelanggaran database tidak membocorkan kredensial yang valid.
- Audit migrasi — memeriksa bahwa hash kata sandi lama dari sistem yang lebih lama masih dapat mengotentikasi pengguna setelah meningkatkan lapisan otentikasi.
Seperti apa bentuk hash bcrypt?
Hash kata sandi hunter2 dengan faktor biaya 10 menghasilkan string seperti $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy. Formatnya diuraikan sebagai: $2b$ (versi algoritma), 10 (faktor biaya), $, lalu 22 karakter garam dan 31 karakter hash, semuanya dienkode Base64. Setiap kali dijalankan dengan kata sandi yang sama menghasilkan hash yang berbeda karena garam acak.
Generator bcrypt ini berjalan sepenuhnya di browser Anda menggunakan implementasi JavaScript murni. Hash kata sandi sebelum menyimpannya, verifikasi hash yang ada, dan sesuaikan faktor biaya dengan kebutuhan keamanan Anda — semua tanpa mengirim satu byte pun ke server.