§

Trình tạo Bcrypt

§

Tạo Hash Bcrypt

10 (1,024 rounds)

Bcrypt đã trở thành tiêu chuẩn băm mật khẩu trong phát triển web kể từ khi ra mắt năm 1999 bởi Provos và Mazières. NIST SP 800-63B khuyến nghị băm mật khẩu bằng bộ nhớ tốn nhiều tài nguyên và OWASP liệt kê bcrypt là lựa chọn ưu tiên cùng với Argon2id. Rails tích hợp bcrypt qua has_secure_password, Django hỗ trợ bcrypt như backend cắm thêm, và các nhà phát triển Node.js dùng bcryptjs. Hệ số chi phí kiểm soát thời gian băm — gấp đôi chi phí đồng nghĩa gấp đôi công việc. Hầu hết ứng dụng chọn chi phí 10 (1.024 vòng) làm mức cơ bản, trong khi hệ thống tài chính hoặc quản trị thường dùng 12 (4.096 vòng). Công cụ này chạy hoàn toàn trong trình duyệt bằng JavaScript, vì vậy mật khẩu của bạn không bao giờ rời khỏi máy.

Bcrypt là gì?

Bcrypt là một hàm băm mật khẩu được thiết kế bởi Niels Provos và David Mazières, dựa trên thuật toán Blowfish. Không giống các bảng băm nhanh như MD5 hay SHA-256, bcrypt được thiết kế chậm và tốn nhiều tài nguyên — điều này khiến các cuộc tấn công brute-force vào hash mật khẩu bị đánh cắp trở nên bất khả thi. Bcrypt tự động tạo muối (salt) ngẫu nhiên cho mỗi mật khẩu, vì vậy các mật khẩu giống nhau tạo ra các hash khác nhau.

Bcrypt hoạt động như thế nào?

Thuật toán bcrypt chạy hoàn toàn trong trình duyệt của bạn. Đây là các bước cụ thể:

  1. Mật khẩu của bạn được mã hóa thành byte UTF-8 và đưa vào lịch trình khóa bcrypt, khởi tạo mảng P 4.184 byte và các hộp S của thuật toán Blowfish bằng mật khẩu và muối.
  2. Một muối ngẫu nhiên 128-bit được tạo ra. Muối được trộn vào lịch trình khóa để mỗi muối duy nhất tạo ra một hash hoàn toàn khác nhau ngay cả với cùng một mật khẩu.
  3. Lịch trình khóa được lặp lại 2^cost vòng (ví dụ: 2^10 = 1.024 lần lặp ở chi phí 10). Mỗi lần lặp mã hóa lại các mục muối và mảng P, làm cho tính toán chậm hơn tỷ lệ thuận khi chi phí tăng.
  4. Kết quả cuối cùng là một chuỗi 60 ký tự theo định dạng $2b$<cost>$<salt><hash>, trong đó cost được đệm số 0 (ví dụ: 10), salt là 22 ký tự Base64 và hash là 31 ký tự Base64.
  5. Để xác minh, cùng một thuật toán được chạy lại với mật khẩu cần kiểm tra và muối lấy từ hash đã lưu. Nếu hash kết quả khớp với hash đã lưu, mật khẩu đúng.

Tôi nên sử dụng hệ số chi phí nào?

Hệ số chi phí là logarit của số lần lặp — chi phí 10 nghĩa là 2^10 = 1.024 vòng, chi phí 12 nghĩa là 4.096 vòng. Hãy chọn dựa trên nhu cầu bảo mật và phần cứng của bạn:

  • Chi phí 4-6 (16-64 vòng) — chỉ dùng cho phát triển và kiểm thử. Quá nhanh cho môi trường sản xuất; bảo vệ tối thiểu.
  • Chi phí 8 (256 vòng) — mức tối thiểu cho các ứng dụng không quan trọng. Khoảng 6ms trên phần cứng hiện đại.
  • Chi phí 10 (1.024 vòng) — mức cơ sở khuyến nghị hiện tại. Mất khoảng 25ms. Tốt cho hầu hết ứng dụng web.
  • Chi phí 12 (4.096 vòng) — khuyến nghị cho cổng quản trị, hệ thống tài chính và ứng dụng bảo mật cao. Mất khoảng 100ms.
  • Chi phí 14 (16.384 vòng) — bảo mật cao. Mất khoảng 400ms. Dùng cho mật khẩu chính, khóa mã hóa hoặc khi độ trễ đăng nhập chấp nhận được.

Tại sao nên dùng bcrypt generator này?

  • Quyền riêng tư của bạn được bảo vệ — mọi mật khẩu đều được băm cục bộ trong trình duyệt và không có dữ liệu nào rời khỏi thiết bị của bạn.
  • Bạn có cả hai chế độ song song: tạo hash mới hoặc xác minh hash hiện có mà không cần chuyển trang.
  • Hệ số chi phí có thể điều chỉnh từ 4 (nhanh) đến 15 (rất chậm), phù hợp với nhu cầu bảo mật ứng dụng của bạn.
  • Hash tuân thủ tiêu chuẩn định dạng $2b$ tương thích với mọi ngôn ngữ và framework lớn.

Các ứng dụng phổ biến của bcrypt là gì?

Bcrypt được sử dụng rộng rãi để lưu trữ và xác minh mật khẩu trong ngành:

  • Xác thực người dùng ứng dụng web — lưu trữ hash mật khẩu người dùng trong cơ sở dữ liệu để mật khẩu dạng văn bản thuần không bao giờ được lưu.
  • Băm khóa API — băm bí mật API trước khi lưu trữ để việc lộ cơ sở dữ liệu không làm rò rỉ thông tin xác thực hợp lệ.
  • Kiểm toán di chuyển — kiểm tra hash mật khẩu cũ từ hệ thống cũ vẫn có thể xác thực người dùng sau khi nâng cấp lớp xác thực.

Hash bcrypt trông như thế nào?

Băm mật khẩu hunter2 với hệ số chi phí 10 tạo ra chuỗi như $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy. Định dạng được phân tích như sau: $2b$ (phiên bản thuật toán), 10 (hệ số chi phí), $, tiếp theo là 22 ký tự muối và 31 ký tự hash, tất cả được mã hóa Base64. Mỗi lần chạy với cùng một mật khẩu tạo ra hash khác nhau vì muối ngẫu nhiên.

Công cụ tạo bcrypt này chạy hoàn toàn trong trình duyệt bằng JavaScript thuần. Băm mật khẩu trước khi lưu trữ, xác minh hash hiện có và điều chỉnh hệ số chi phí phù hợp với yêu cầu bảo mật — tất cả mà không gửi một byte nào lên máy chủ.