Băm & kiểm tra bcrypt
Băm mật khẩu bằng bcrypt và đối chiếu chuỗi hash với văn bản thuần
Về công cụ này
Băm một mật khẩu bằng bcrypt với hệ số chi phí bạn chọn, hoặc đối chiếu một chuỗi thuần với chuỗi hash sẵn có — cả hai đều chạy trọn vẹn trong trình duyệt, đúng thứ bạn muốn khi cái đang bị đem ra thử chính là mật khẩu. Ngoài ra còn có phần soi hash, tách bất kỳ chuỗi bcrypt nào thành phiên bản, chi phí và salt.
Bcrypt vẫn là lựa chọn vững chắc để lưu mật khẩu vì nó cố ý chậm và có salt riêng cho từng mật khẩu: hệ số chi phí nhân đôi khối lượng tính toán sau mỗi nấc, nên chi phí 12 nghĩa là 4096 vòng thiết lập của thuật toán mã bên dưới. Phần hiển thị thời gian cho thấy mức chi phí bạn chọn mất bao lâu, biến đánh đổi giữa bảo mật và độ trễ thành con số cụ thể.
Nhu cầu thường gặp hơn mỗi ngày lại là kiểm chứng: xác nhận chuỗi hash trong cơ sở dữ liệu có khớp với một mật khẩu đã biết hay không mà chẳng cần khởi động mã ứng dụng. Dán cả hai vào, nhận câu trả lời có hoặc không.
Câu hỏi thường gặp
- Trên môi trường production nên dùng hệ số chi phí bao nhiêu?
- Lời khuyên kinh điển: cao nhất trong mức độ trễ đăng nhập mà bạn chấp nhận được, ngày nay thường là 10–13. Hãy nhắm tới 100–300 ms mỗi lần băm trên phần cứng production. JavaScript trong trình duyệt chạy chậm hơn mã gốc, nên con số hiển thị ở đây là giới hạn trên cho máy chủ của bạn.
- Vì sao cùng một mật khẩu lại cho ra chuỗi hash khác nhau mỗi lần?
- Mỗi lần băm sẽ sinh một salt ngẫu nhiên 16 byte và cất ngay trong chuỗi hash. Đó là chủ ý thiết kế — mật khẩu giống hệt nhau vẫn cho hash khác nhau, làm vô hiệu các bảng cầu vồng dựng sẵn. Khi kiểm chứng, salt được đọc ngược ra từ chính chuỗi hash, nhờ vậy việc so khớp vẫn hoạt động.
- Các phần của một chuỗi hash bcrypt nghĩa là gì?
- $2b$12$ cộng 53 ký tự: 2b là phiên bản thuật toán, 12 là chi phí (2^12 vòng), 22 ký tự tiếp theo là salt, và 31 ký tự cuối là phần tóm lược — tất cả viết theo bảng base64 riêng của bcrypt. Phần soi hash bên dưới công cụ sẽ tách bất kỳ chuỗi nào theo đúng cách đó.
- Bcrypt còn được khuyên dùng hơn Argon2 không?
- Argon2id hiện là lựa chọn đầu tiên cho hệ thống mới (đòi hỏi nhiều bộ nhớ nên chống lại việc bẻ khóa bằng GPU). Bcrypt vẫn chấp nhận được và có mặt khắp nơi — lời khuyên thực tế là: đừng hoảng hốt di dời một kho bcrypt đang chạy tốt, nhưng với thiết kế mới tinh thì hãy chọn Argon2id. Cả hai đều vượt xa các hàm băm nhanh như SHA-256.