Security Tools

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ì.

7 phút đọc

Ổ khóa trên bàn phím laptop tượng trưng cho bảo mật kỹ thuật số

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 seed
  • crypto.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)

  1. 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
  2. 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
  3. 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
  4. Đầ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ị .env trướ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:

  1. ✅ Tạo mật khẩu với Trình Tạo Mật Khẩu — sử dụng crypto.getRandomValues()
  2. ✅ 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
  3. ✅ 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
  4. ✅ 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
  5. ✅ Bật 2FA và kiểm tra mã với Trình Tạo TOTP
  6. ✅ Đố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.