Tạo Mật Khẩu
Tạo mật khẩu mạnh bằng randomness mã hóa. Tùy chỉnh độ dài, charset, loại ký tự dễ nhầm. Chỉ trong browser.
Password Generator
—
Generated with crypto.getRandomValues. For storage, hash with bcrypt / Argon2, never with plain SHA.
Runs entirely in your browser. Your input never leaves your device.
What next?
How it works
"Mạnh" thực ra là gì
Độ mạnh password đo bằng bit entropy — log2 của số password có thể được sinh ra. Password 20 ký tự từ 95 ký tự in được có ~131 bit entropy. "P@ssw0rd!" có thể 8 ký tự nhưng entropy thấp hơn nhiều vì attacker biết thử các thay thế thông dụng.
Trực giác: độ dài đè bẹp độ phức tạp. Password 20 ký tự chỉ chữ thường (94 bit) mạnh hơn nhiều so với 8 ký tự đủ symbol (52 bit), và dễ nhớ hơn.
Hướng dẫn hiện đại (NIST SP 800-63B) phản ánh điều này:
- Tối thiểu 12+ ký tự, khuyến nghị 16+
- Không bắt buộc rotate định kỳ (làm password yếu đi, không mạnh hơn)
- Không quy tắc "phải có uppercase + symbol" (đẩy user vào pattern dự đoán được)
- Reject password có trong database breach công khai
Tool này generate thế nào
Chúng tôi dùng crypto.getRandomValues, CSPRNG của browser. Mỗi ký tự pick uniformly random từ charset bạn chọn. Không seed, không Math.random (KHÔNG an toàn), không dự đoán được.
Charset pool quyết định trực tiếp entropy:
| Charset | Pool size | Bit/ký tự | |---|---|---| | chỉ lowercase | 26 | 4.7 | | + uppercase | 52 | 5.7 | | + digits | 62 | 5.95 | | + symbols | ~94 | 6.55 |
Ước lượng ở đầu generator nhân length × bit/ký tự và chuyển sang ước lượng crack-time, giả định attacker offline với GPU farm cao cấp 10 tỷ guess/giây. Cố ý bi quan — hầu hết attacker thật không duy trì được rate đó.
Toggle loại ký tự dễ nhầm
Một số ký tự nhìn giống nhau ở font nhỏ: 0 và O, l và 1 và I, dấu backtick và apostrophe. Khi exclude, bạn từ bỏ ~6% entropy đổi lại khả năng đọc password qua điện thoại hoặc từ bản in. Đáng cho scenario dùng một lần; skip khi tạo cho password manager.
Quy tắc duy nhất ai cũng phá: đừng lưu password bằng SHA-256
Nếu app của bạn nhận password user và lưu, bạn có một việc: đừng hash bằng thuật toán nhanh. SHA-256, SHA-1, MD5 — tất cả bị cấm. Đáp án đúng là hash chậm, memory-hard, có salted:
- Argon2id — state of the art hiện tại
- bcrypt — cũ hơn nhưng vẫn chấp nhận được
- scrypt — ổn cho một số use case
Cố ý ~100ms mỗi hash, vô hình với user đăng nhập nhưng tàn phá với attacker thử tỷ guess trên database bị steal. Dùng library, đừng tự code.
Lưu password ở đâu
Không trong đầu, không trong spreadsheet, không trong file text. Dùng password manager:
- 1Password (trả phí, polished, family plan)
- Bitwarden (mã nguồn mở, free tier phủ hầu hết user)
- Apple Passwords / iCloud Keychain (user iOS/macOS)
- KeePassXC (offline, self-host)
Manager tạo và lưu password cho bạn, bạn chỉ cần nhớ một master password. Master password đó 20+ ký tự vô nghĩa dễ nhớ (passphrase kiểu correct horse battery staple work tốt — ~44 bit nhưng bạn nhớ được).
Use case trong tool này
- Tạo credential service bạn sẽ lưu trong password manager
- Tạo API key random, webhook secret, JWT signing key
- Tạo password tạm thời một lần để share qua kênh an toàn
- Tạo database seed hoặc test fixture
Quyền riêng tư
Tạo hoàn toàn client-side. Trang không gửi password đi đâu. Mở Network tab — im lặng khi click Generate. CSPRNG của browser là nguồn entropy; chúng tôi không bao giờ thấy output.
Công cụ liên quan
- Hash Generator — xem SHA-256 password trông thế nào (và học vì sao đó không phải cách lưu password).
- UUID Generator — khi cần ID có cấu trúc unique, không phải password.
FAQ
Password nên dài bao nhiêu?
Tối thiểu 12+ ký tự, khuyến nghị 16+ cho thứ quan trọng, 20+ cho master password. Độ dài quan trọng hơn độ phức tạp — password 20 ký tự lowercase mạnh hơn 8 ký tự đủ symbol.
Passphrase (correct horse battery staple) tốt hơn chuỗi random không?
Về dễ nhớ, có. Bốn từ tiếng Anh random cho ~44 bit entropy, đủ cho password tài khoản hàng ngày (chúng tôi nghiêng về năm hoặc sáu từ cho tài khoản quan trọng hơn). Chuỗi random đạt entropy/ký tự cao hơn nhưng chỉ quan trọng khi bạn không nhớ — cho credential lưu password manager, chọn chuỗi random.
Vì sao exclude ký tự dễ nhầm lại mất entropy?
Bỏ ~6% character pool, giảm nhẹ bit/ký tự. Bạn lấy lại khả năng đọc password to hoặc từ bản in không ambiguity. Đáng đánh đổi cho password dùng một lần hoặc viết tay; skip cho password chỉ lưu password manager.
Randomness ở đây có an toàn không?
Có. Dùng crypto.getRandomValues, CSPRNG của browser, phù hợp để tạo cryptographic key. KHÔNG dùng Math.random, vốn dự đoán được và không an toàn.
Password tôi tạo có gửi lên server không?
Không. Trang làm mọi generation local. Mở DevTools Network và click Generate — bạn thấy zero request.
Có nên rotate password định kỳ?
NIST không còn khuyến nghị rotate bắt buộc định kỳ. Nó ép user vào pattern dự đoán (Spring2024! → Summer2024!). Rotate khi có lý do tin password bị compromise (notification breach, hoạt động đáng ngờ); ngoài ra để password mạnh unique nguyên.
Vì sao "P@ssw0rd!" yếu dù có đủ 4 loại ký tự?
Vì attacker biết thử pattern từ-thông-dụng + thay-thế-thông-dụng trước. Entropy thật đến từ việc là một trong nhiều khả năng có likelihood bằng nhau — P@ssw0rd! là một trong vài nghìn "biến thể clever rõ ràng", không phải một trong 95^9 = 6e17 khả năng random.