Tạo Văn Bản Ngẫu Nhiên
Tạo mật khẩu, chuỗi, số, chữ cái và UUID v4 ngẫu nhiên an toàn bằng Web Crypto API. Bộ đo entropy hiển thị số bit và thời gian bẻ khóa ước tính.
Về Công Cụ Tạo Mật Khẩu & Chuỗi Ngẫu Nhiên
Công cụ này tạo các giá trị ngẫu nhiên an toàn về mật mã hoàn toàn trong trình duyệt của bạn bằng Web Crypto API (crypto.getRandomValues), chính nguồn entropy an toàn mà trình duyệt cung cấp cho khóa và token — không phải Math.random(). Nó có thể tạo mật khẩu mạnh (với chữ hoa, chữ thường, chữ số và ký hiệu tùy chọn), chuỗi ngẫu nhiên tùy ý, dãy số và chữ cái, và UUID phiên bản 4 theo chuẩn RFC 4122 (cũng dùng crypto.randomUUID gốc khi có sẵn). Vì tính ngẫu nhiên được lấy từ pool entropy an toàn của hệ điều hành, mọi giá trị ở đây đều phù hợp cho bí mật thực tế: mật khẩu, khóa API, token phiên, salt và mã dùng một lần. Với mỗi mật khẩu hoặc chuỗi được tạo, công cụ còn hiển thị entropy ước tính theo bit và thời gian bẻ khóa offline ước tính, tính từ kích thước bảng chữ cái thực và độ dài, để kỹ sư bảo mật, quản trị viên và người duyệt tuân thủ có thể kiểm tra một thông tin xác thực so với chính sách (NIST và OWASP thường nêu tối thiểu 80 bit cho bí mật giá trị cao) thay vì dựa vào nhãn 'Mạnh' mơ hồ.
Tính ngẫu nhiên có an toàn về mật mã không — tôi dùng được cho mật khẩu thật chứ?
Có. Mọi chế độ (mật khẩu, chuỗi, số, chữ cái, từ và UUID) đều lấy từ crypto.getRandomValues(), bộ sinh số giả ngẫu nhiên an toàn về mật mã của Web Crypto API, được seed từ pool entropy của hệ điều hành (/dev/urandom trên Unix, CryptGenRandom/BCryptGenRandom trên Windows). Khác với Math.random(), output của nó không thể dự đoán từ các giá trị quan sát được, nên các giá trị tạo ra phù hợp cho mật khẩu, khóa API, token phiên, salt và mã dùng một lần. Việc chọn số nguyên dùng lấy mẫu loại bỏ (rejection sampling) để tránh thiên lệch chia dư, nên mỗi ký tự có xác suất đồng đều. Như mọi khi, hãy tạo bí mật trên thiết bị tin cậy và lưu trong trình quản lý mật khẩu — không có gì ở đây được gửi lên máy chủ.
Entropy theo bit được tính thế nào và tại sao quan trọng?
Entropy được tính là bit = độ_dài × log2(kích_thước_pool), trong đó kích_thước_pool là số ký tự khác nhau trong bảng chữ cái đang dùng và độ_dài là số ký tự được tạo. Ví dụ, mật khẩu 16 ký tự từ bộ đầy đủ 94 ký hiệu ASCII in được có khoảng 16 × log2(94) ≈ 105 bit, trong khi 8 chữ số (pool 10) chỉ có khoảng 8 × log2(10) ≈ 27 bit. Bit entropy là thước đo chuẩn và có cơ sở về độ khó đoán một bí mật: mỗi bit thêm vào nhân đôi không gian tìm kiếm. Nó có ý nghĩa hơn nhiều so với thanh màu 'Mạnh/Yếu' vì cho phép kiểm tra thông tin xác thực so với ngưỡng chính sách rõ ràng.
'Đạt chuẩn 80-bit' nghĩa là gì?
Hướng dẫn bảo mật như NIST SP 800-63B và OWASP khuyến nghị bí mật giá trị cao phải có đủ entropy để tấn công brute-force offline là bất khả thi; 80 bit là mức sàn thường được nêu cho thông tin xác thực quan trọng, với 112–128 bit được ưu tiên cho khóa dài hạn. Khi mật khẩu hoặc chuỗi được tạo đạt tối thiểu 80 bit, huy hiệu kết luận chuyển sang xanh ('Đạt chuẩn 80-bit'); dưới mức đó nó cảnh báo bạn ('Dưới chuẩn 80-bit'). Để tăng entropy, hãy tăng độ dài hoặc bật thêm lớp ký tự (chữ hoa, chữ thường, chữ số, ký hiệu), điều này mở rộng bảng chữ cái.

Thời gian bẻ khóa offline được ước tính thế nào?
Con số thời gian bẻ khóa giả định kẻ tấn công offline nhanh thực hiện khoảng 1×10¹² (một nghìn tỷ) lần đoán mỗi giây — một bậc độ lớn hợp lý cho dàn GPU cao cấp chống lại hash nhanh hoặc không salt — và bí mật được tìm thấy trung bình sau khi tìm nửa không gian khóa. Vậy số giây ước tính ≈ 2^bit ÷ 1e12 ÷ 2. Đây là chỉ báo bậc độ lớn ước chừng, không phải đảm bảo: một KDF chậm có salt như Argon2 hay bcrypt làm việc bẻ khóa chậm hơn đáng kể, trong khi văn bản rõ bị lộ hoặc mật khẩu dùng lại khiến nó tức thì. Hãy dùng con số bit làm thước đo chính và thời gian làm trực giác.
UUID v4 có bao nhiêu bit entropy?
UUID phiên bản 4 có tổng 128 bit, nhưng 6 bit trong đó bị chuẩn cố định (4 bit cho trường phiên bản và 2 bit cho trường variant), còn lại 122 bit ngẫu nhiên. Con số đó cao hơn hẳn ngưỡng 80 bit, đó là lý do UUID v4 được dùng rộng rãi cho định danh không thể đoán, khóa idempotency và token. Công cụ này tạo UUID v4 theo chuẩn RFC 4122 bằng crypto.randomUUID() khi trình duyệt hỗ trợ, dự phòng bằng crypto.getRandomValues() với các bit phiên bản và variant được đặt đúng.
Tại sao có tùy chọn 'Loại trừ ký tự nhầm lẫn'?
Các ký tự dễ nhầm như 0/O và 1/l/I rất dễ đọc sai khi thông tin xác thực được in, viết tay, đọc qua điện thoại, hoặc đọc trên màn hình với font kém — dẫn đến đăng nhập thất bại và ticket hỗ trợ. Loại bỏ chúng cải thiện độ chính xác khi sao chép cho bí mật do con người xử lý (khóa Wi‑Fi, mã voucher, mật khẩu ban đầu). Đánh đổi là bảng chữ cái nhỏ hơn một chút và do đó entropy mỗi ký tự thấp hơn một chút; phần đọc entropy phản ánh pool thu nhỏ tự động, nên bạn có thể kéo dài giá trị để bù nếu cần.
'Không lặp ký tự' làm gì và giới hạn độ dài là bao nhiêu?
Khi bật, mọi ký tự trong kết quả là duy nhất. Vì chuỗi không lặp không thể dài hơn bảng chữ cái của nó, độ dài yêu cầu tự động bị giới hạn bằng kích thước bảng chữ cái — ví dụ bạn chỉ lấy được tối đa 10 ký tự duy nhất từ các chữ số 0–9, hoặc khoảng 16 ký hiệu duy nhất từ pool 16 ký tự. Công cụ xây dựng giá trị từ một bản sao đã xáo trộn an toàn của bảng chữ cái (Fisher–Yates với CSPRNG), nên kết quả không thiên lệch và không có ký tự trùng. Lưu ý rằng cấm lặp làm giảm entropy một chút so với cho phép lặp, nên để có độ mạnh tối đa cho bí mật dài hãy tắt nó.
