Generator bcrypt

bcrypt masih menjadi salah satu pilihan paling aman untuk menyimpan password. Ia sengaja dibuat lambat, membuat salt sendiri, dan dapat diskalakan menghadapi peningkatan hardware melalui parameter cost yang bisa diatur. Generator ini menghasilkan hash bcrypt yang sesuai standar dari password plaintext, sehingga Anda dapat membuat user uji, memigrasikan akun antar sistem, atau membandingkan nilai dengan hash yang sudah ada di kolom users.password.

Cara membuat hash password dengan bcrypt

  1. 1

    Masukkan password plaintext

    Hingga 72 byte - bcrypt diam-diam memotong input setelah batas itu.

  2. 2

    Pilih faktor cost

    10 adalah default saat ini; 12 umum untuk sistem baru; 14 sangat konservatif. Setiap +1 kira-kira menggandakan waktu hashing.

  3. 3

    Salt acak dibuat

    Salt 16 byte diambil dari RNG kriptografis dan disematkan dalam string hash yang dihasilkan.

  4. 4

    Salin hash

    Output berupa string self-describing seperti `$2b$12$...` yang mencakup versi, cost, salt, dan digest.

Anatomi hash bcrypt

$2b$12$mE2n5YqWjKqT9tXg.OQPoeeHZJ9hdSvOt5wFdRRQwl6yE1vWWY3z6
  |   |  |                      |
  |   |  salt (22 karakter Base64)  digest (31 karakter Base64)
  |   cost (2 digit, 4-31)
  versi (2a, 2b, 2y - semuanya bcrypt)

Seluruh string panjangnya 60 karakter. Kolom bertipe VARCHAR(60) atau CHAR(60) adalah skema standar.

Rekomendasi faktor cost

Cost Perkiraan waktu per hash (CPU 2024) Penggunaan
10 ~80 ms Default lama, masih dapat diterima
12 ~300 ms Baseline rekomendasi saat ini
13 ~600 ms Aplikasi dengan keamanan lebih tinggi
14 ~1.2 s Sangat konservatif; delay login terasa

Setiap kenaikan menggandakan work factor. Jika latensi login di bawah 500 ms sangat penting, tetap di 10-12.

Byte versi: 2a vs 2b vs 2y

  • $2a$ - Spesifikasi asli 1999. Sebagian besar library menghasilkan hash 2a.
  • $2b$ - Revisi 2014 yang memperbaiki bug truncation di crypt_blowfish. Lebih disukai untuk hash baru.
  • $2y$ - Tag khusus PHP, secara fungsional setara dengan $2b$.

Ketiganya bisa diverifikasi satu sama lain; yang berbeda hanya tag pada string hash.

Perlindungan yang diberikan bcrypt

  • Rainbow tables - Salt unik per hash mengalahkan lookup yang sudah diprakomputasi.
  • Cracking GPU/ASIC - Key schedule Blowfish bersifat memory-bound dan tidak ramah GPU. Tidak sekeras Argon2 terhadap GPU, tetapi masih lambat untuk brute force.
  • Kebocoran database - Plaintext tidak pernah bisa dipulihkan dari hash tanpa brute force.

Yang TIDAK dilindungi bcrypt: password lemah (gunakan panjang minimum dan cek terhadap daftar breach), credential stuffing (gunakan faktor kedua), phishing.

Batas 72 byte

bcrypt hanya memakai 72 byte pertama dari password. Input lebih panjang dipotong diam-diam; alasan yang sama membuat banyak library kini merekomendasikan pre-hashing password dengan SHA-256 sebelum memasukkannya ke bcrypt. Alternatif modern (Argon2, scrypt) tidak memiliki batas ini.

Pertanyaan yang Sering Diajukan

Ya untuk penyimpanan password, pada cost ≥ 12. OWASP masih mencantumkannya sebagai algoritma yang dapat diterima. Argon2id adalah pilihan yang lebih disukai untuk sistem baru, tetapi memigrasikan hash bcrypt legacy adalah prioritas rendah.

Karena salt dibuat acak per hash. Verifikasi mengambil salt dari hash tersimpan, melakukan re-hash password yang dikirim dengan salt itu, lalu membandingkannya.

Sebagian besar library tidak mengekspos ini, dan ada alasan bagus - salt yang bisa diprediksi mengalahkan tujuannya. Gunakan salt yang dibuat library; itulah jalur yang aman.

Ya - work factor bersifat simetris. Memverifikasi hash cost-14 membutuhkan waktu 16x lebih lama daripada memverifikasi hash cost-10. Sesuaikan dengan throughput login Anda.

Alat Terkait