Utilia

Generator dan Pemeriksa Bcrypt

Buat hash bcrypt dengan cost factor 4 hingga 14, cocokkan kata sandi dengan hash yang ada, dan lihat versi, cost, salt, serta digest-nya.

Hash kata sandi

Cocokkan kata sandi dengan hash

Cara membuat hash kata sandi dengan bcrypt

  1. Di bagian Hash kata sandi, ketik Kata sandi. Penghitung menampilkan panjangnya dalam byte UTF-8 dan memperingatkan Anda jika melebihi 72 byte.
  2. Pilih Cost factor (4–14). Baris di bawahnya menampilkan jumlah putaran, misalnya 10 → 2^10 = 1.024 putaran.
  3. Klik Buat hash. Bilah progres mengikuti prosesnya, dan halaman tetap bisa dipakai selama proses berjalan. Setelah selesai, alat ini menampilkan waktu yang dibutuhkan dan Hash bcrypt yang siap disalin.
  4. Hash dipecah menjadi bagian-bagiannya: Versi, Cost, Salt (22 karakter), dan Hash (31 karakter).

Untuk mencocokkan kata sandi dengan hash, ketik kata sandinya, tempel hash-nya (hash yang baru saja Anda buat terisi otomatis), lalu klik Periksa kata sandi. Hasilnya menyatakan apakah keduanya cocok. Centang Sembunyikan kata sandi untuk menyamarkan kedua kolom kata sandi.

Proses hashing berjalan di browser Anda dengan pustaka bcryptjs, yang baru dimuat saat pertama kali Anda membutuhkannya. Tidak ada kata sandi atau hash yang dikirim ke mana pun.

Cara kerja bcrypt

bcrypt (Provos dan Mazières, 1999) adalah fungsi hashing kata sandi yang dibangun di atas cipher Blowfish. Berbeda dengan SHA-256, bcrypt sengaja dibuat lambat, dan tingkat kelambatannya bisa diatur: cost factor adalah pangkat dua, sehingga setiap +1 menggandakan pekerjaan. Cost 10 berarti 1.024 iterasi key setup yang mahal; cost 12 berarti 4.096. Kelambatan ini hampir tidak terasa saat pengguna login, tetapi membuat brute force terhadap database yang dicuri jauh lebih mahal.

Hash seperti $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy dibaca sebagai berikut:

  • $2b$: versinya. $2a$ dan $2y$ (PHP) kompatibel dan bisa diperiksa di sini; $2x$ menandai hash dari implementasi lama yang bermasalah dan ditolak.
  • 10: cost factor.
  • 22 karakter berikutnya: salt acak 128 bit, dalam alfabet Base64 khas bcrypt (./A-Za-z0-9).
  • 31 karakter terakhir: hasil sepanjang 184 bit.

Karena salt-nya acak dan disimpan di dalam hash, meng-hash kata sandi yang sama dua kali menghasilkan dua hash berbeda, dan keduanya sama-sama terverifikasi dengan benar. Itulah sebabnya kata sandi diperiksa dengan fungsi verifikasi, bukan dengan membandingkan hash.

Memilih cost

Pilih cost tertinggi yang sanggup ditangani server Anda sambil tetap menjaga login terasa cepat, biasanya sekitar seperempat detik per hash. OWASP merekomendasikan cost minimum 10 untuk bcrypt. Browser menjalankan bcrypt dalam JavaScript, yang beberapa kali lebih lambat daripada implementasi native di server: mulai cost 12, alat ini memperingatkan bahwa hashing bisa memakan waktu satu hingga beberapa detik, dan setiap tingkat tambahan menggandakan waktunya. Pekerjaan dipecah menjadi potongan-potongan pendek, sehingga halaman tidak membeku.

Untuk sistem baru, OWASP kini lebih menyarankan Argon2id, dengan bcrypt tetap dapat diterima bila Argon2id tidak tersedia.

Batas 72 byte

bcrypt hanya memakai 72 byte pertama kata sandi; sisanya diabaikan tanpa pemberitahuan. Byte tidak sama dengan karakter: huruf beraksen memakan 2 byte dalam UTF-8 dan emoji memakan 4 byte. Dua kata sandi panjang yang 72 byte pertamanya sama akan menghasilkan hash yang sama. Penghitung byte memperingatkan Anda jika kata sandi terlalu panjang. Sebagian sistem melakukan pre-hash pada kata sandi panjang (misalnya dengan HMAC-SHA256, lalu Base64) sebelum bcrypt; jika Anda melakukannya, jangan pernah meneruskan digest biner mentah, karena byte nol akan mengakhiri kata sandi lebih awal di banyak implementasi.

Pertanyaan yang sering diajukan

Mengapa kata sandi yang sama menghasilkan hash berbeda setiap kali?

Setiap hash mendapat salt acak baru yang disimpan di dalam hash itu. Tombol Periksa kata sandi membaca salt dan cost dari hash lalu menghitung ulang, sehingga setiap versi tetap terverifikasi.

Bisakah hash bcrypt didekripsi?

Tidak. bcrypt adalah fungsi satu arah. Satu-satunya cara memulihkan kata sandi adalah menebaknya dan meng-hash setiap tebakan, dan justru itulah yang diperlambat oleh cost factor.

Cost factor berapa yang sebaiknya dipakai?

Minimal 10, dan lebih tinggi jika server Anda tetap cukup cepat. Ukurlah di perangkat keras produksi Anda: waktu yang ditampilkan di sini mencerminkan JavaScript di browser Anda, yang biasanya lebih lambat daripada server.

Apakah hash $2a$, $2b$, dan $2y$ bisa saling dipertukarkan?

Untuk kata sandi di bawah 256 byte, ketiganya memberikan hasil yang sama, dan alat ini memeriksa ketiganya. $2b$ memperbaiki bug length-wraparound di implementasi OpenBSD, sedangkan $2y$ adalah nama di PHP untuk implementasi yang benar.

Apakah aman mengetik kata sandi asli di sini?

Semuanya berjalan secara lokal dan tidak ada yang dikirim atau disimpan. Meski begitu, untuk akun sungguhan, sebaiknya Anda menguji dengan kata sandi contoh, bukan kata sandi yang benar-benar Anda pakai.