Trình Tạo Cụm Mật Khẩu Diceware
Công cụ miễn phí tạo cụm mật khẩu Diceware dùng danh sách dài của EFF và WebCrypto. Chọn số từ, dấu phân cách, xem entropy và thời gian bẻ khoá ước tính.
Về Trình Tạo Cụm Mật Khẩu Diceware
Vì sao Diceware được coi là an toàn hơn mật khẩu ký tự ngẫu nhiên?
Tính theo mỗi ký tự thì mật khẩu ASCII ngẫu nhiên dày đặc hơn: 12 ký tự ASCII hỗn hợp khoảng 71 bit entropy. Vấn đề là con người khó nhớ chuỗi ASCII ngẫu nhiên, nên thực tế người ta chọn mẫu yếu hoặc lưu ở nơi dễ bị đánh cắp. Cụm Diceware 6 từ chứa khoảng 77 bit (nhiều hơn mật khẩu 12 ký tự ngẫu nhiên), nhưng các từ là tiếng Anh thật, dễ phát âm và đến từ danh sách phổ biến, nên đi vào trí nhớ hình ảnh-thính giác chỉ vài giây. Đánh đổi là độ dài trên màn hình so với khả năng nhớ trong đầu, và với mật khẩu chính, khả năng nhớ thắng - cụm bạn nhớ được là cụm bạn không cần ghi xuống.
Nên dùng bao nhiêu từ?
Đối với hầu hết tài khoản trực tuyến có giới hạn tốc độ đăng nhập, sáu từ EFF (~77 bit) đã quá đủ - kẻ tấn công bị giới hạn vài trăm lần đoán mỗi giây, ngay cả 50 bit cũng mất thời gian địa chất. Với mật khẩu chính của trình quản lý, ổ đĩa mã hoá và các bí mật offline mà kẻ tấn công có thể vét cạn trên GPU ở 10 tỷ lần đoán/giây, khuyến nghị tăng lên bảy (~90 bit) hoặc tám (~103 bit) từ. Hạt giống BIP-39 của Bitcoin dùng 12 từ từ danh sách 2048 từ lớn hơn, tương đương 132 bit - chuẩn vàng cho khoá tiền mã hoá. Hãy dùng thanh đo entropy của trang này làm hướng dẫn: nhắm ít nhất 80 bit và trên 100 bit cho bất kỳ thứ gì không thể đảo ngược.
Tính ngẫu nhiên của JavaScript có thực sự an toàn không?
Có - công cụ dùng crypto.getRandomValues, được API Web Crypto của W3C định nghĩa là bộ sinh số ngẫu nhiên giả mật mã an toàn (CSPRNG). Mọi trình duyệt lớn đều cài đặt nó dựa trên nguồn entropy của hệ điều hành (getrandom trên Linux, BCryptGenRandom trên Windows, SecRandomCopyBytes trên macOS), và đây cũng là nguyên thuỷ mà HTTPS, WebAuthn và các trình quản lý mật khẩu sử dụng. Hàm Math.random cũ không an toàn và không bao giờ được dùng ở đây. Ngoài ra, công cụ áp dụng rejection sampling khi rút gọn số nguyên ngẫu nhiên 32 bit xuống khoảng 0-7775, loại bỏ độ lệch mô-đun nhỏ mà 'random % 7776' đơn giản sẽ tạo ra.

Cụm mật khẩu hoặc danh sách có bị gửi về máy chủ không?
Không. Danh sách EFF 7776 từ chỉ tải về một lần dưới dạng tệp JSON tĩnh (và được trình duyệt lưu cache vĩnh viễn), từ đó trở đi mọi thao tác tung, tra cứu và lắp ghép diễn ra trong tab trình duyệt. Không có lời gọi API, không có log và không có phân tích nào trên kết quả. Bạn có thể kiểm tra bằng cách mở tab Network của DevTools trước khi bấm Tạo: chỉ có yêu cầu tải danh sách ban đầu xuất hiện. Điều này khiến công cụ an toàn cho mật khẩu thật, hạt khôi phục và khoá két, kể cả trên máy dùng chung hoặc cách ly mạng (sau lần tải đầu vẫn dùng offline được).
Vì sao viết hoa mỗi từ lại cộng 0 bit entropy?
Entropy đo độ bất định của kẻ tấn công về lựa chọn của bạn. Nếu kẻ tấn công biết quy tắc 'luôn viết hoa chữ cái đầu mỗi từ', thì mọi lần đoán đã bao gồm sẵn việc viết hoa đó. Không còn ngẫu nhiên thêm để vượt qua, nên độ tăng entropy bằng không. Viết hoa các ký tự ở vị trí ngẫu nhiên trong từ thì sẽ thêm entropy, nhưng sẽ khiến cụm gần như không thể nhớ, đánh mất mục đích Diceware. Ngược lại, chữ số ngẫu nhiên hoặc ký hiệu ngẫu nhiên cuối có cộng entropy thật vì cả vị trí lẫn giá trị đều ẩn với kẻ tấn công.
Tôi có thể tung xúc xắc thật và ra kết quả giống nhau không?
Có - đó chính là lý do Diceware ra đời. Bật 'Hiển thị tung 5d6', tạo một cụm và bạn sẽ thấy các khối năm chữ số như 23541 cạnh mỗi từ. Để tái tạo cụm bằng xúc xắc vật lý, hãy tung năm xúc xắc khác nhau (hoặc một xúc xắc năm lần), ghi năm chữ số theo thứ tự và tra cứu mục đó trong danh sách EFF (có thể tải PDF từ eff.org). Với những bí mật cực kỳ quan trọng - hạt ví phần cứng tiền mã hoá, khoá mã hoá sao lưu offline - tung xúc xắc thật loại bỏ mọi nghi ngờ về chất lượng CSPRNG hay trình duyệt bị xâm hại, đổi lại vài phút tung cho mỗi từ.
