Bỏ qua menu, vào nội dung chính
Quay lại
Độ mạnh mật khẩu

Kiểm tra mật khẩu và tạo mật khẩu mạnh

Đo entropy (bits) và thời gian dò ước tính theo các kịch bản tấn công. Đối chiếu HaveIBeenPwned qua k-anonymity API, chỉ gửi 5 ký tự đầu của hash, mật khẩu nguyên văn không rời trình duyệt.

Mạnh·Có một mẩu dữ liệu rời máy bạn, nhưng không phải mật khẩu. entropy·pool 94 ký tự·11 chars
Online attack (1K/s)80.3 tỷ nămCó rate limit, ví dụ login form
Offline hash (bcrypt, 100K/s)802.7 triệu nămDatabase leak, hash chậm
GPU fast (MD5, 100G/s)802.7 nămRig 8x RTX 4090

Có trong HaveIBeenPwned database?

Checklist

ChưaTối thiểu 12 ký tự
ĐạtCó chữ thường
ĐạtCó chữ HOA
ĐạtCó chữ số
ĐạtCó ký tự đặc biệt
ĐạtKhông lặp ký tự 3 lần liền
ĐạtKhông chứa pattern phổ biến

Entropy, thời gian dò và đối chiếu dữ liệu rò rỉ

Công cụ này đo bằng cách nào

Các lớp ký tự xuất hiện trong chuỗi được đếm để suy ra kích thước tập ký tự, nhân với độ dài chuỗi cho ra số bit entropy. Từ số bit đó, thời gian dò được ước lượng theo ba kịch bản: dò trực tuyến có giới hạn tần suất khoảng một nghìn lần thử mỗi giây, dò ngoại tuyến với hàm băm chậm, và dò bằng nhiều card đồ hoạ với hàm băm nhanh. Bên cạnh là bảy mục kiểm thói quen xấu và một nút sinh mật khẩu dài 20 ký tự lấy từ nguồn ngẫu nhiên mật mã của trình duyệt.

Lúc đặt chính sách mật khẩu

Khi đặt chính sách mật khẩu cho một hệ thống nội bộ và cần con số để bảo vệ lựa chọn của mình. Khi giải thích với khách hàng vì sao mật khẩu quen thuộc của họ là rủi ro, một con số thời gian dò thuyết phục hơn nhiều so với lời khuyên suông. Khi rà lại một mật khẩu cũ để quyết định có phải đổi ngay không.

Đọc số bit entropy

Dưới 30 bit là rất yếu, từ 90 bit trở lên là rất mạnh. Điều quan trọng nhất rút ra từ công thức: độ dài có sức nặng lớn hơn việc trộn thêm ký tự lạ, vì mỗi ký tự thêm vào nhân số tổ hợp lên bằng đúng kích thước tập ký tự. Một câu bốn từ dễ nhớ thường mạnh hơn một chuỗi tám ký tự đầy ký hiệu mà không ai nhớ nổi.

Vì sao entropy chưa đủ

Entropy tính theo công thức nên nó không biết chuỗi của bạn có nằm trong từ điển tấn công hay không; một mật khẩu ghép tên thương hiệu với năm và một dấu chấm than có đủ bốn lớp ký tự mà vẫn bị dò ra rất nhanh. Kết quả đối chiếu dữ liệu rò rỉ mới là phán quyết thật: chỉ cần số lần xuất hiện lớn hơn không, nghĩa là mật khẩu đó đã nằm trong các vụ lộ dữ liệu đã biết và phải đổi ngay, bất kể entropy cao đến đâu.

Có một mẩu dữ liệu rời máy bạn, nhưng không phải mật khẩu. Mật khẩu được băm SHA-1 ngay trong trình duyệt, và chỉ 5 ký tự đầu của chuỗi băm được gửi tới dịch vụ pwnedpasswords theo cơ chế k-anonymity. Dịch vụ trả về mọi chuỗi băm bắt đầu bằng 5 ký tự đó, phần đối chiếu còn lại diễn ra tại máy bạn, nên bên kia không biết bạn đang tra mật khẩu nào. Mật khẩu nguyên văn không bao giờ rời trình duyệt.

Ngưỡng phân loại độ mạnh và tốc độ dò giả định

Mức độ mạnh xếp theo số bit entropy tính từ độ dài và tập ký tự của mật khẩu:

Rất yếu0 - 30 bit
Yếu30 - 50 bit
Trung bình50 - 70 bit
Mạnh70 - 90 bit
Rất mạnh≥ 90 bit

Ba kịch bản tốc độ dò dùng để ước tính thời gian

Online attack (Có rate limit, ví dụ form đăng nhập)1.000 lần/giây
Offline hash chậm (kiểu bcrypt) (Database bị lộ, hàm băm chậm)100.000 lần/giây
GPU hàm băm nhanh (kiểu MD5) (Dàn nhiều card đồ hoạ)100 tỷ lần/giây

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

Công cụ kiểm tra mật khẩu này tính entropy bằng cách nào?

Đếm các lớp ký tự xuất hiện trong mật khẩu (chữ thường 26 ký tự, chữ HOA 26 ký tự, chữ số 10 ký tự, ký tự đặc biệt 32 ký tự) để suy ra kích thước tập ký tự (pool), rồi tính số bit entropy bằng độ dài mật khẩu nhân log cơ số 2 của pool đó. Toàn bộ phép tính chạy bằng JavaScript ngay trong trình duyệt.

Bao nhiêu bit entropy được coi là mật khẩu mạnh?

Rất yếu (từ 0 đến dưới 30 bit), Yếu (từ 30 đến dưới 50 bit), Trung bình (từ 50 đến dưới 70 bit), Mạnh (từ 70 đến dưới 90 bit), Rất mạnh (từ 90 bit trở lên). Ngưỡng này chỉ dựa trên độ dài và độ đa dạng ký tự, không biết mật khẩu có nằm trong từ điển tấn công hay không.

Thời gian dò mật khẩu được ước tính theo những kịch bản nào?

Ba kịch bản, giả định kẻ tấn công thử trung bình một nửa số tổ hợp có thể: Online attack ở tốc độ khoảng 1.000 lần/giây (Có rate limit, ví dụ form đăng nhập); Offline hash chậm (kiểu bcrypt) ở tốc độ khoảng 100.000 lần/giây (Database bị lộ, hàm băm chậm); GPU hàm băm nhanh (kiểu MD5) ở tốc độ khoảng 100 tỷ lần/giây (Dàn nhiều card đồ hoạ). Đây là ước tính lý thuyết dựa trên số bit entropy, không phải kết quả đo thực tế trên một hệ thống cụ thể.

Mật khẩu có bị gửi lên máy chủ nào để kiểm tra HaveIBeenPwned không?

Không. Mật khẩu được băm bằng SHA-1 ngay trong trình duyệt, sau đó chỉ 5 ký tự đầu của chuỗi băm được gửi tới API pwnedpasswords theo cơ chế k-anonymity. Máy chủ trả về mọi chuỗi băm bắt đầu bằng 5 ký tự đó, phần đối chiếu ký tự còn lại diễn ra ngay tại trình duyệt của bạn, nên bên nhận yêu cầu không biết bạn đang tra mật khẩu nào.

Vì sao một mật khẩu có entropy cao vẫn có thể bị báo là đã rò rỉ?

Vì entropy chỉ tính theo công thức toán học trên độ dài và tập ký tự, không biết chuỗi đó có từng xuất hiện trong các vụ lộ dữ liệu thật hay không. Một mật khẩu ghép tên thương hiệu, năm và dấu chấm than có thể đủ bốn lớp ký tự và entropy khá cao, nhưng vẫn bị tìm thấy trong dữ liệu rò rỉ nếu nhiều người từng đặt mật khẩu tương tự.

Bảy mục trong checklist mật khẩu kiểm tra những gì?

Độ dài tối thiểu 12 ký tự, có chữ thường, có chữ HOA, có chữ số, có ký tự đặc biệt, không lặp cùng một ký tự liền nhau từ ba lần trở lên, và không chứa các pattern phổ biến như 123, abc, qwerty hay chính chữ password. Đạt cả bảy mục không đảm bảo mật khẩu chưa từng bị lộ, nên vẫn cần đối chiếu kết quả HaveIBeenPwned bên trên.

Công cụ liên quan

Xem tất cả công cụ →

Công cụ riêng cho doanh nghiệp