Bảo Mật Mật Khẩu Trên Trình Duyệt: Tạo, Mã Hóa, Hash và Kiểm Tra — Không Cần Server
Hướng dẫn thực tế về các công cụ mật khẩu và mã hóa ngay trên trình duyệt — tạo mật khẩu mạnh, mã hóa văn bản bằng AES-256, hash mật khẩu với PBKDF2 và kiểm tra độ mạnh của mật khẩu tức thì.
Mỗi lập trình viên và người dùng có ý thức bảo mật đều cần đến cùng một bộ công cụ: tạo mật khẩu mạnh, mã hóa đoạn văn bản nhạy cảm, hash mật khẩu để lưu trữ, hoặc xác minh rằng một hash có khớp hay không. Trước đây, những việc này đòi hỏi phải cài OpenSSL hoặc một ứng dụng chuyên dụng. Ngày nay, Web Crypto API đã đủ mạnh để thực hiện tất cả ngay trong trình duyệt — không cần gửi dữ liệu lên server, không có bất kỳ thông tin nào rời khỏi thiết bị của bạn.
Dưới đây là tổng quan về các công cụ thiết yếu và cách sử dụng từng công cụ một cách hiệu quả.
1. Trình Tạo Mật Khẩu: Cách Đúng Để Tạo Mật Khẩu
Con người rất kém trong việc tạo mật khẩu ngẫu nhiên. Chúng ta vô thức sử dụng các mẫu quen thuộc — từ điển, tên người, năm tháng, các ký tự liên tiếp trên bàn phím như qwerty123. Một trình tạo mật khẩu ngẫu nhiên thực sự sẽ tránh được tất cả những điều này.
Công cụ Tạo Mật Khẩu của chúng tôi sử dụng crypto.getRandomValues() — bộ tạo số ngẫu nhiên bảo mật mật mã được tích hợp sẵn trong mọi trình duyệt hiện đại. Điểm khác biệt so với Math.random():
Math.random()là chuỗi giả ngẫu nhiên — có thể dự đoán nếu biết seedcrypto.getRandomValues()lấy entropy từ cấp độ hệ điều hành — thực sự không thể đoán trước
Cài đặt được khuyến nghị:
| Trường hợp sử dụng | Độ dài | Tùy chọn |
|---|---|---|
| Đăng nhập website | 16+ | Chữ hoa, chữ thường, số, ký hiệu |
| Mật khẩu cơ sở dữ liệu | 24+ | Tất cả bộ ký tự |
| Cụm mật khẩu khóa mã hóa | 32+ | Tất cả bộ ký tự |
| PIN (mở khóa thiết bị) | 8+ | Chỉ số |
Những điều cần tránh:
- Mật khẩu dưới 12 ký tự (có thể bị bẻ khóa bằng GPU hiện đại)
- Mật khẩu chỉ toàn ký hiệu (nhiều dịch vụ không chấp nhận)
- Mật khẩu đã từng sử dụng ở bất kỳ đâu trước đây
2. Kiểm Tra Độ Mạnh Mật Khẩu: Biết Trước Khi Xác Nhận
Trước khi đặt mật khẩu — hoặc khi kiểm tra các mật khẩu hiện có — hãy chạy qua công cụ Kiểm Tra Độ Mạnh Mật Khẩu của chúng tôi. Công cụ đánh giá:
- Điểm độ dài — dài hơn luôn tốt hơn
- Độ đa dạng bộ ký tự — chữ thường, chữ hoa, chữ số, ký hiệu
- Các mẫu phổ biến — từ trong từ điển, chuỗi bàn phím, ký tự lặp lại
- Bits entropy — thước đo toán học về mức độ khó đoán
Điểm entropy là thước đo trung thực nhất. Một mật khẩu có entropy 128-bit sẽ mất thời gian dài hơn tuổi của vũ trụ để bẻ khóa bằng tốc độ tính toán hiện tại.
"password" → Entropy: ~11 bits ❌ Rất tệ
"P@ssw0rd" → Entropy: ~18 bits ❌ Vẫn tệ (có mẫu)
"correct-horse-bat" → Entropy: ~44 bits ⚠ Trung bình (từ trong từ điển)
"Kx9#mP2$vL7nQw" → Entropy: ~87 bits ✅ Mạnh
"mQ3$kX9#nP7&vL2@" → Entropy: ~104 bits ✅ Rất mạnh
3. Mã Hóa AES-256: Bảo Vệ Văn Bản Với Mã Hóa Cấp Quân Sự
Cần lưu một ghi chú bí mật, mã hóa giá trị cấu hình, hoặc gửi văn bản nhạy cảm qua kênh không bảo mật? Công cụ AES Mã Hóa / Giải Mã của chúng tôi sử dụng AES-256-GCM — thuật toán mã hóa tương tự được dùng bởi ngân hàng, chính phủ và các ứng dụng nhắn tin mã hóa đầu cuối.
Cách AES-256-GCM Hoạt Động (Đơn Giản Hóa)
- Cụm mật khẩu của bạn được xử lý qua PBKDF2 với 200.000 vòng lặp để tạo ra khóa 256-bit
- Một IV (vector khởi tạo) ngẫu nhiên được tạo cho mỗi lần mã hóa — đảm bảo cùng một plaintext cho ra kết quả mã hóa khác nhau mỗi lần
- Plaintext được mã hóa và tạo ra một thẻ xác thực — phát hiện việc giả mạo
- Đầu ra được mã hóa base64:
IV + tag + ciphertext
Plaintext: "API_KEY=sk_live_abc123"
Passphrase: "my-strong-passphrase"
↓
Encrypted: "a3Fm9K2...base64...Xp7nQ=="
Các thuộc tính bảo mật:
- ✅ Zero knowledge — không có gì được gửi lên bất kỳ server nào
- ✅ Mã hóa có xác thực — giải mã thất bại nếu ciphertext bị giả mạo
- ✅ Ngẫu nhiên hóa Salt + IV — cùng đầu vào cho ra đầu ra khác nhau mỗi lần
- ✅ 200.000 vòng lặp PBKDF2 — chống brute-force cụm mật khẩu
Ứng dụng thực tế:
- Mã hóa các giá trị
.envtrước khi lưu vào ứng dụng ghi chú - Chia sẻ mật khẩu với đồng nghiệp qua email/Slack (gửi ciphertext; chia sẻ passphrase qua kênh khác)
- Mã hóa nhật ký hoặc ghi chú cá nhân
- Lưu API key trong bảng tính dưới dạng đã mã hóa
4. Trình Tạo Hash Mật Khẩu: PBKDF2 Để Lưu Trữ An Toàn
Nếu bạn đang xây dựng ứng dụng lưu trữ mật khẩu người dùng, bạn tuyệt đối không được lưu mật khẩu dạng plaintext — hoặc hash yếu như MD5/SHA-1. Công cụ Tạo Hash Mật Khẩu của chúng tôi sử dụng PBKDF2-SHA256 để tạo hash mật khẩu an toàn.
Tại Sao Dùng PBKDF2 Thay Vì MD5/SHA-256?
| Hash | Thời gian mỗi lần đoán (GPU) | Số vòng lặp | Đánh giá |
|---|---|---|---|
| MD5 | 0,001ms | 1 | ❌ Đã bị phá vỡ |
| SHA-256 | 0,002ms | 1 | ❌ Quá nhanh |
| PBKDF2-SHA256 | 200ms+ | 200.000 | ✅ Phù hợp |
| bcrypt (cost 12) | 300ms+ | adaptive | ✅ Phù hợp |
Mục đích cốt lõi của việc hash mật khẩu là làm cho mỗi lần đoán trở nên tốn kém. Hash nhanh là thảm họa đối với mật khẩu.
Định dạng đầu ra hash:
pbkdf2$200000$<salt>$<hash>
Salt được tạo ngẫu nhiên cho mỗi hash, nghĩa là cùng một mật khẩu sẽ cho ra hash khác nhau mỗi lần — ngăn chặn tấn công rainbow table.
5. Trình Tạo TOTP / 2FA: Kiểm Tra Mã Xác Thực Của Bạn
Công cụ Tạo TOTP / 2FA của chúng tôi tạo ra mật khẩu dùng một lần dựa trên thời gian, tương thích với Google Authenticator, Authy và bất kỳ ứng dụng xác thực nào tuân thủ RFC 6238. Nhập khóa bí mật Base32 và nhận mã 6 chữ số hiện tại kèm đồng hồ đếm ngược.
Trường hợp sử dụng:
- Xác minh rằng triển khai TOTP trên server của bạn tạo ra đúng mã
- Kiểm tra cài đặt 2FA trước khi triển khai cho người dùng
- Tạo mã cho khóa bí mật đã đăng ký (như phương pháp dự phòng)
Mã TOTP thay đổi mỗi 30 giây, được gắn với thời gian UTC hiện tại và về mặt toán học không thể dự đoán nếu không có khóa bí mật.
6. Cụm Mật Khẩu Diceware: Dễ Nhớ và Mạnh Về Mặt Toán Học
Công cụ Tạo Mật Khẩu Diceware của chúng tôi tạo cụm mật khẩu từ danh sách từ EFF — phương pháp tương tự được các nhà nghiên cứu bảo mật sử dụng cho mật khẩu chính và khóa mã hóa đĩa.
Ví dụ: correct-horse-battery-staple-voyage
Tại sao cụm mật khẩu tốt hơn mật khẩu ký tự ngẫu nhiên cho mật khẩu chính:
| Mật khẩu | Entropy | Khả năng ghi nhớ |
|---|---|---|
Kx9#mP2$ (8 ký tự) |
~52 bits | Rất khó |
correct-horse-battery (3 từ) |
~58 bits | Dễ |
correct-horse-battery-staple (4 từ) |
~77 bits | Trung bình |
correct-horse-battery-staple-voyage (5 từ) |
~96 bits | Có thể nhớ được |
Đối với mật khẩu chính của trình quản lý mật khẩu — thứ bạn phải ghi nhớ và không bao giờ viết ra — một cụm mật khẩu diceware 5 từ là sự cân bằng tốt nhất giữa bảo mật và khả năng ghi nhớ.
Danh Sách Kiểm Tra Bảo Mật
Hãy thực hiện các bước này trước khi triển khai bất kỳ hệ thống xác thực nào:
- ✅ Tạo mật khẩu với Trình Tạo Mật Khẩu — sử dụng
crypto.getRandomValues() - ✅ Xác minh độ mạnh mật khẩu với Kiểm Tra Độ Mạnh Mật Khẩu — hướng đến 80+ bits entropy cho tài khoản đặc quyền
- ✅ Hash mật khẩu lưu trữ bằng PBKDF2, bcrypt hoặc Argon2 — xác minh định dạng đầu ra với Trình Tạo Hash Mật Khẩu
- ✅ Mã hóa các giá trị nhạy cảm khi lưu trữ với AES Mã Hóa — sử dụng AES-256-GCM, không phải AES-ECB
- ✅ Bật 2FA và kiểm tra mã với Trình Tạo TOTP
- ✅ Đối với mật khẩu chính, sử dụng Trình Tạo Diceware — tối thiểu 5+ từ
Điều quan trọng cần nhớ: mọi công cụ trong danh sách này đều chạy hoàn toàn trong trình duyệt của bạn. Mật khẩu, plaintext và hash của bạn không bao giờ rời khỏi thiết bị. Đó không chỉ là một tính năng — đó là tiêu chuẩn tối thiểu có thể chấp nhận được đối với các công cụ bảo mật.