Apa itu Bcrypt?
Bcrypt adalah fungsi hashing kata sandi yang dirancang oleh Niels Provos dan David Mazières pada tahun 1999. Fungsi ini didasarkan pada sandi Blowfish dan menggabungkan salt untuk melindungi dari serangan "rainbow table". Yang membedakan Bcrypt adalah mekanisme bawaannya untuk memperlambat proses hashing, yang merupakan fitur utama untuk menggagalkan serangan brute-force.
Tidak seperti fungsi hash tradisional seperti MD5 atau SHA-1, Bcrypt bersifat adaptif, artinya dapat dikonfigurasi untuk menjadi lebih lambat seiring waktu seiring peningkatan kemampuan perangkat keras. Ini memastikan bahwa Bcrypt tetap tahan terhadap serangan brute-force bahkan saat daya komputasi meningkat.
Bagaimana Cara Kerja Bcrypt?
Bcrypt beroperasi dalam tiga langkah utama:
- Pembuatan Salt: Bcrypt secara otomatis membuat salt acak untuk setiap kata sandi. Ini memastikan bahwa meskipun dua pengguna memiliki kata sandi yang sama, hash mereka akan berbeda.
- Pengaturan Kunci: Algoritme menggunakan cipher Blowfish untuk melakukan beberapa putaran hashing. Jumlah putaran (juga disebut faktor kerja atau faktor biaya) menentukan seberapa lambat prosesnya. Ini dapat dikonfigurasi dan dapat ditingkatkan seiring dengan peningkatan perangkat keras.
- Hashing: Kata sandi dan salt digabungkan dan diproses melalui cipher Blowfish untuk menghasilkan hash akhir. Outputnya mencakup salt, faktor kerja, dan hash yang dihasilkan, semuanya dirangkai menjadi string tunggal.
Format Hash Bcrypt
Hash Bcrypt adalah string yang berisi semua informasi yang diperlukan untuk memverifikasi kata sandi. Ini mencakup informasi tentang versi algoritma, faktor biaya (kerja), salt, dan kata sandi yang di-hash. Berikut adalah struktur hash Bcrypt:
$<version>$<cost>$<salt><hash>
Berikut contoh tampilan hash Bcrypt:
$2b$12$KIXIDzJ2Rf2zXSpwURZrYe0djyyu3E4yFczVqTx3FWSMsvjrdIhJy
Dalam contoh ini:
$2b$
menunjukkan versi Bcrypt. Versi umum mencakup $2a$, $2y$, atau $2b$. Versi $2b$ umumnya adalah yang terbaru dan direkomendasikan.12$
adalah faktor biaya (pekerjaan) (2^12 iterasi). Faktor ini menentukan seberapa mahal komputasi yang akan dilakukan.KIXIDzJ2Rf2zXSpwURZrYe
adalah salt. Kata sandi ini memiliki panjang 22 karakter (128 bit), yang dikodekan dalam Base64 yang dimodifikasi.0djyyu3E4yFczVqTx3FWSMsvjrdIhJy
adalah kata sandi yang di-hash. Panjangnya 31 karakter, juga dalam Base64 yang dimodifikasi.
./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
Ini berbeda dari Base64 standar dan penting saat mendekode atau membuat hash secara manual.
Mengapa Menggunakan Bcrypt?
Bcrypt menawarkan beberapa keuntungan dibandingkan algoritma hashing tradisional:
- Ketahanan terhadap serangan Brute-Force: Faktor kerja yang dapat disesuaikan membuat komputasi Bcrypt mahal, memperlambat penyerang yang mencoba memecahkan kata sandi.
- Salt Terintegrasi: Bcrypt secara otomatis menangani salting, menghilangkan kebutuhan pengembang untuk mengelola salt secara manual.
- Tahan Masa Depan: Faktor kerja dapat ditingkatkan dari waktu ke waktu untuk mengikuti kemajuan perangkat keras.
- Adopsi Luas: Bcrypt didukung oleh sebagian besar bahasa pemrograman dan kerangka kerja, membuatnya mudah untuk diintegrasikan ke dalam sistem yang ada.
Menerapkan Bcrypt di Aplikasi kamu
Mari kita lihat contoh sederhana tentang cara menggunakan Bcrypt dalam aplikasi Node.js. Pertama, kamu perlu
menginstal paket bcrypt
:
npm install bcrypt
Berikut cara melakukan hash kata sandi dan memverifikasinya:
const bcrypt = require('bcrypt');
const saltRounds = 12;
// Membuah Hash sebuah kata sandi
const plaintextPassword = 'mySecurePassword123';
bcrypt.hash(plaintextPassword, saltRounds, function(err, hash) {
if (err) throw err;
console.log('Hashed Password:', hash);
// Memferivikasi sebuah kata sandi
bcrypt.compare(plaintextPassword, hash, function(err, result) {
if (err) throw err;
console.log('Password Match:', result); // true
});
});
Dalam contoh ini, kami menggunakan faktor kerja 12, yang merupakan keseimbangan yang baik antara keamanan dan kinerja untuk sebagian besar aplikasi.
Praktik Terbaik untuk Menggunakan Bcrypt
Untuk mendapatkan hasil maksimal dari Bcrypt, ikuti praktik terbaik berikut:
- Pilih Faktor Kerja yang Sesuai: Faktor kerja 10–12 umumnya direkomendasikan, tetapi kamu harus menguji dan menyesuaikan berdasarkan kemampuan server kamu.
- Selalu Gunakan Bcrypt untuk Kata Sandi: Hindari penggunaan fungsi hash yang lebih cepat seperti SHA-256 untuk penyimpanan kata sandi, karena tidak dirancang untuk tujuan ini.
- Pastikan Library kamu Selalu Terkini: Pastikan kamu menggunakan versi terbaru Bcrypt untuk mendapatkan manfaat dari patch dan peningkatan keamanan.
- Gabungkan dengan Langkah Keamanan Lainnya: Gunakan Bcrypt bersama dengan praktik keamanan lainnya seperti HTTPS, pembatasan kecepatan, dan autentikasi multifaktor.
Kesimpulan
Bcrypt adalah alat yang ampuh untuk mengamankan kata sandi pengguna, dan desainnya membuatnya sangat cocok untuk aplikasi modern. Dengan memahami cara kerjanya dan mengikuti praktik terbaik, kamu dapat meningkatkan keamanan sistem kamu secara signifikan. Ingat, dalam bidang keamanan siber, tidak ada yang namanya terlalu berhati-hati.
Jika kamu belum menggunakan Bcrypt, sekaranglah saatnya untuk memulai. Pengguna kamu dan diri kamu di masa mendatang akan berterima kasih kepada kamu.