Tạo mật khẩu mạnh
Mật khẩu ngẫu nhiên sinh bằng bộ sinh số mã hoá của trình duyệt, kèm số bit entropy thật.
Độ mạnh: Rất mạnh
Cách tính
Độ mạnh của một mật khẩu ngẫu nhiên không nằm ở việc nó trông có "khó đoán" hay không, mà nằm ở số khả năng mà người tấn công phải thử. Con số đó gọi là entropy, đo bằng bit: mỗi bit tăng thêm làm số khả năng nhân đôi. Mật khẩu 12 ký tự lấy từ bộ 62 chữ và số có khoảng 71 bit; thêm bộ ký hiệu vào và tăng lên 16 ký tự thì thành khoảng 105 bit.
Trang này lấy số ngẫu nhiên từ crypto.getRandomValues của trình duyệt, không dùng Math.random. Math.random là bộ sinh giả ngẫu nhiên được gieo từ đồng hồ hệ thống: kết quả trông ngẫu nhiên, nhưng người biết mật khẩu được tạo vào khoảng thời gian nào có thể thu hẹp không gian tìm kiếm xuống mức thử được — và đó chính là toàn bộ cuộc tấn công.
Việc chọn ký tự cũng không đơn giản là lấy số ngẫu nhiên chia dư cho độ dài bảng chữ. Phép chia dư đó lệch: khi 256 không chia hết cho kích thước bảng chữ, các ký tự đầu bảng xuất hiện nhiều hơn phần còn lại. Trang này loại bỏ những byte rơi ngoài khoảng chia hết và lấy byte khác, nên mọi ký tự có xác suất bằng nhau.
Thời gian bẻ khoá hiển thị ở đây giả định 100 tỷ lần thử mỗi giây — mức của một kẻ tấn công có nguồn lực lớn đánh vào cơ sở dữ liệu bị rò rỉ được băm bằng thuật toán nhanh. Con số này cố tình chọn theo hướng bi quan, vì một ước tính tâng bốc mật khẩu còn tệ hơn là không có ước tính.
Công thức
entropy (bit) = độ dài × log₂(số ký tự trong bảng chữ)
Công thức này chỉ đúng với mật khẩu sinh ngẫu nhiên. Mật khẩu do người tự nghĩ ra luôn có entropy thực thấp hơn nhiều so với công thức, vì con người chọn theo khuôn mẫu.
Ví dụ
Mật khẩu 16 ký tự dùng cả bốn bộ ký tự:
- Kích thước bảng chữ
- 26 + 26 + 10 + 24 = 86 ký tự
- Entropy mỗi ký tự
- log₂(86) ≈ 6,43 bit
- Tổng entropy
- 16 × 6,43 ≈ 103 bit
- Số khả năng phải thử (trung bình một nửa)
- 2¹⁰² ≈ 5 × 10³⁰
- Ở tốc độ 100 tỷ lần thử/giây
- khoảng 1,6 × 10¹² năm
Dài hơn một ký tự có giá trị hơn là thêm một bộ ký tự: mỗi ký tự thêm vào nhân số khả năng lên 86 lần, còn bật bộ ký hiệu chỉ nâng bảng chữ từ 62 lên 86.
Câu hỏi thường gặp
Mật khẩu nên dài bao nhiêu?
Với tài khoản quan trọng, 16 ký tự trở lên dùng đủ bốn bộ ký tự là mức thoải mái an toàn trong nhiều thập kỷ tới. Dưới 12 ký tự thì không nên dùng cho bất cứ thứ gì đáng giá.
Độ dài hay độ phức tạp quan trọng hơn?
Độ dài. Mỗi ký tự thêm vào nhân không gian tìm kiếm lên bằng kích thước cả bảng chữ, trong khi bật thêm một bộ ký tự chỉ làm bảng chữ lớn hơn một chút. Mật khẩu 20 ký tự chỉ gồm chữ thường mạnh hơn mật khẩu 10 ký tự có đủ hoa, số và ký hiệu.
Mật khẩu có được gửi đi đâu không?
Không. Nó được sinh trên máy bạn và chỉ tồn tại trong bộ nhớ trang. Tải lại trang là nó biến mất — không lưu vào localStorage, không gửi lên máy chủ nào.
Tuỳ chọn "bỏ ký tự dễ nhầm" có làm yếu mật khẩu không?
Có, một chút: bảng chữ nhỏ đi nên entropy mỗi ký tự giảm. Nhưng con số entropy hiển thị đã tính đúng theo bảng chữ thực tế, nên bạn chỉ cần tăng độ dài thêm vài ký tự là bù lại được. Đáng dùng khi mật khẩu phải đọc từ màn hình rồi gõ tay sang nơi khác.
Tôi nên lưu mật khẩu ở đâu?
Trong một trình quản lý mật khẩu. Mật khẩu ngẫu nhiên đủ mạnh thì không ai nhớ nổi, và đó là điểm mạnh chứ không phải điểm yếu — miễn là bạn không phải nhớ nó. Đừng lưu trong ghi chú không mã hoá hay gửi qua tin nhắn.
Thời gian bẻ khoá hiển thị có đáng tin không?
Nó là mức trần lý thuyết với giả định dịch vụ băm mật khẩu của bạn đúng cách. Nếu nơi lưu mật khẩu bị rò rỉ và họ băm bằng thuật toán yếu, hoặc mật khẩu của bạn nằm trong từ điển đã bị lộ, thì con số này không còn ý nghĩa. Nó đo mật khẩu, không đo nơi bạn gửi mật khẩu đến.