Trình tạo Bcrypt

5 trên 2 xếp hạng

Trình tạo Bcrypt là công cụ miễn phí giúp tạo mã băm mật khẩu bcrypt từ bất kỳ chuỗi đầu vào nào để lưu trữ mật khẩu an toàn.

Bcrypt là gì và hiện còn an toàn không?

Bcrypt là thuật toán băm mật khẩu vẫn được xem là phù hợp để lưu trữ mật khẩu nếu cấu hình hệ số chi phí hợp lý, dù các hệ thống mới thường ưu tiên Argon2id. Niels Provos và David Mazières thiết kế bcrypt vào năm 1999, sử dụng quy trình lập lịch khóa của mật mã Blowfish để cố ý làm tăng chi phí cho mỗi lần thử đoán mật khẩu.

Phép băm chỉ diễn ra theo một chiều. Vì vậy, ứng dụng kiểm tra mật khẩu bằng cách băm giá trị cần xác minh theo các tham số đã lưu, thay vì khôi phục mật khẩu ban đầu. Khác với những thuật toán đa dụng như SHA-3, bcrypt tạo ra một bản ghi mã hóa độc lập có độ dài cố định, gồm phiên bản, hệ số chi phí, salt và checksum.

Một bản ghi bcrypt tiêu chuẩn dài 60 ký tự ASCII. Checksum biểu diễn 184 bit và được thể hiện bằng 31 ký tự theo kiểu mã hóa Base64 riêng của bcrypt. Bcrypt chưa bị xem là mất an toàn về mặt mật mã, nhưng có một hạn chế do thiết kế đã lâu: các cách triển khai truyền thống chỉ xử lý tối đa 72 byte đầu vào. Argon2id còn có khả năng chống tấn công nhờ yêu cầu nhiều bộ nhớ, điều mà bcrypt không cung cấp.

Cách dùng Trình tạo Bcrypt như thế nào?

Nhập chuỗi cần băm, chạy công cụ rồi sao chép giá trị hiển thị trong trường kết quả Mã băm Bcrypt. Hãy lưu toàn bộ kết quả, không chỉ lấy riêng checksum ở cuối.

  1. Dùng chính xác mật khẩu hoặc chuỗi kiểm thử, bao gồm cả chữ hoa, chữ thường, dấu cách và dấu câu.
  2. Tạo kết quả bcrypt.
  3. Sao chép đủ cả 60 ký tự, bao gồm dấu hiệu phiên bản và hệ số chi phí ở đầu.
  4. Lưu kết quả vào cột mã băm mật khẩu trong cơ sở dữ liệu.
  5. Khi đăng nhập, hãy dùng hàm xác minh bcrypt của nền tảng thay vì tạo mã băm mới rồi so sánh trực tiếp hai chuỗi.

Bcrypt thường tạo một salt ngẫu nhiên mới cho mỗi mã băm. Vì vậy, cùng một đầu vào được băm hai lần có thể cho ra hai bản ghi khác nhau, nhưng cả hai đều xác minh đúng đầu vào đó. Đây là hành vi bình thường và giúp các mật khẩu giống nhau không tạo ra giá trị lưu trữ giống nhau.

Quá trình xử lý diễn ra trên máy chủ. Dữ liệu đầu vào được gửi đến máy chủ qua HTTPS và không được lưu trữ. Với mật khẩu thực dùng trong môi trường vận hành, hãy cân nhắc xem việc nhập mật khẩu vào bất kỳ dịch vụ trực tuyến bên thứ ba nào có phù hợp với chính sách bảo mật của tổ chức hay không.

Có thể giải mã hoặc đảo ngược mã băm bcrypt không?

Không. Không thể giải mã mã băm bcrypt vì đây không phải là dữ liệu được mã hóa và cũng không chứa khóa giải mã. Cách tấn công thực tế là thử đoán các mật khẩu có thể có, rồi xác minh từng giá trị dự đoán với mã băm đã lưu.

Bcrypt làm chậm quá trình đoán này bằng hệ số chi phí có thể cấu hình. Tuy nhiên, nó không thể khiến một mật khẩu ngắn, phổ biến hoặc từng bị rò rỉ trở nên an toàn, và kẻ tấn công kiên trì vẫn có thể tìm ra đầu vào yếu. Salt ngăn kẻ tấn công tái sử dụng một bảng tính sẵn cho nhiều tài khoản, nhưng salt không phải dữ liệu bí mật và được lưu ngay trong bản ghi.

Cách đọc kết quả bcrypt

Kết quả bcrypt thường tuân theo định dạng modular crypt. Một cấu trúc tiêu biểu là $2y$12$[22-character salt][31-character checksum]. Đây chỉ là ví dụ minh họa định dạng, không phải mã băm của một mật khẩu cụ thể.

Thành phần Độ dài thường gặp Mục đích
Dấu hiệu phiên bản 4 ký tự Xác định biến thể bcrypt, chẳng hạn như $2y$ hoặc $2b$.
Hệ số chi phí 3 ký tự Ghi hệ số chi phí gồm hai chữ số, theo sau là dấu phân cách.
Salt 22 ký tự Mã hóa một salt ngẫu nhiên 128 bit.
Checksum 31 ký tự Mã hóa checksum bcrypt 184 bit.

Hãy luôn giữ nguyên các thành phần này trong cùng một bản ghi. Việc thay đổi một ký tự, cắt bớt giá trị hoặc lưu vào cột quá ngắn thường khiến quá trình xác minh thất bại. Dấu hiệu phiên bản có thể khác nhau giữa các thư viện tương thích, vì vậy ứng dụng nên dùng API mật khẩu đã được kiểm chứng thay vì tự phân tích rồi dựng lại bản ghi.

Khi nào nên dùng bcrypt?

Nên dùng bcrypt để băm mật khẩu trong các hệ thống đã hỗ trợ thuật toán này, đặc biệt khi cần tương thích với cơ sở dữ liệu hoặc framework hiện có. Bcrypt được thiết kế để xử lý chậm và có salt, nên không phù hợp làm checksum đa dụng cho tệp hoặc mã định danh chống trùng lặp.

  • Trường hợp phù hợp gồm mật khẩu ứng dụng, kiểm thử quá trình chuyển đổi, kiểm tra kích thước trường cơ sở dữ liệu và tái tạo môi trường phát triển tương thích với bcrypt.
  • Thay vào đó, hãy dùng Argon2id cho hệ thống mật khẩu mới nếu nền tảng hỗ trợ và có thể quản lý đúng các thiết lập bộ nhớ.
  • Thay vào đó, hãy dùng SHA-3 để kiểm tra tính toàn vẹn của tệp, tạo dấu vân tay nội dung hoặc chống trùng lặp. Trình tạo SHA-3/384 và Trình tạo SHA-3/512 tạo mã băm đa dụng, không phải bản ghi mật khẩu.
  • Không dùng bcrypt cho chữ ký số, xác thực thông điệp, mã hóa hoặc lưu trữ dữ liệu cần khôi phục về sau.

Dấu cách, dấu câu và chữ số đều được xử lý như dữ liệu đầu vào chứ không bị bỏ qua. Ký tự có dấu và ký tự ngoài bảng chữ cái Latin được mã hóa thành byte trước khi bcrypt xử lý. Vì vậy, cả hai hệ thống phải tạo ra cùng một chuỗi byte, bao gồm việc dùng nhất quán bảng mã ký tự và chuẩn hóa Unicode. Giới hạn 72 byte đặc biệt quan trọng trong trường hợp này vì một ký tự Unicode có thể chiếm nhiều hơn một byte. Về mặt kỹ thuật, bcrypt có thể băm đầu vào rỗng, nhưng mật khẩu rỗng không tạo ra khả năng chống đoán có ý nghĩa.

Câu hỏi thường gặp

Mã băm bcrypt cần bao nhiêu dung lượng trong cơ sở dữ liệu?

Hãy dành ít nhất 60 ký tự ASCII cho một bản ghi bcrypt thông thường. Trường rộng hơn một chút có thể thuận tiện khi chuyển sang thuật toán mật khẩu khác trong tương lai, còn cột nhị phân là không cần thiết đối với dạng mã hóa tiêu chuẩn.

Có thể chuyển mã băm mật khẩu SHA hiện có sang bcrypt không?

Bạn không thể chuyển một mã băm SHA hiện có thành mã băm bcrypt của mật khẩu ban đầu nếu không biết mật khẩu đó. Cách chuyển đổi phổ biến là xác minh mã băm cũ vào lần đăng nhập tiếp theo của người dùng, sau đó băm mật khẩu vừa cung cấp bằng bcrypt hoặc Argon2id và thay thế bản ghi cũ.

Trước khi lưu kết quả, hãy kiểm tra rằng bạn đã sao chép đủ giá trị gồm 60 ký tự, trường cơ sở dữ liệu không cắt bớt dữ liệu và ứng dụng nhận hỗ trợ dấu hiệu phiên bản có trong bản ghi.

Công cụ phổ biến