Bảo mật Mật khẩu: Cách Tạo, Lưu trữ và Kiểm toán Mật khẩu Mạnh
Trả lời nhanh
Tạo mật khẩu ngẫu nhiên 16+ ký tự bằng Password Generator, không bao giờ dùng lại và lưu trong password manager. Trên server, hash bằng bcrypt (work factor 12+), scrypt hoặc Argon2id —không bao giờ MD5 hoặc SHA-256. Audit breach qua Have I Been Pwned API.
Giới thiệu
Mật khẩu yếu, dùng lại và lưu không đúng gây ra phần lớn chiếm tài khoản. Hướng dẫn này giải quyết bốn vấn đề cụ thể: (1) tạo mật khẩu đủ entropy chống brute force, (2) hash mật khẩu bằng KDF chậm thay vì hash nhanh, (3) tránh dùng lại giữa dịch vụ và (4) audit credential bị rò rỉ.
Từng bước một
-
Tạo mật khẩu có entropy cao
Sử dụng Trình tạo mật khẩu để tạo mật khẩu hơn 16 ký tự trộn chữ hoa, chữ thường, chữ số và ký hiệu. Entropy = log2(charsetSize^length); bảng chữ cái 16 ký tự gồm 94 ký hiệu cho ~ 105 bit, không thể thực hiện được bằng vũ lực ngay cả ở tốc độ 10^12 lần đoán/giây.
-
Không bao giờ sử dụng lại mật khẩu trên các dịch vụ
Việc sử dụng lại một mật khẩu có nghĩa là một lần vi phạm sẽ ảnh hưởng đến mọi tài khoản chia sẻ mật khẩu đó. Tạo mật khẩu duy nhất cho mỗi dịch vụ và lưu trữ chúng trong trình quản lý mật khẩu (Bitwarden, 1Password, KeePassXC). Mật khẩu chính là mật khẩu duy nhất bạn cần nhớ—hãy đặt nó thành một cụm mật khẩu dài.
-
Băm mật khẩu với KDF chậm trên máy chủ
Không bao giờ lưu trữ mật khẩu bằng MD5, SHA-1 hoặc SHA-256 thô — chúng quá nhanh và GPU có thể thử hàng tỷ lần mỗi giây. Sử dụng bcrypt với hệ số công việc 12+, mã hóa với N=2^17 hoặc Argon2id với bộ nhớ 64 MB. Các KDF này cố tình làm chậm và khó sử dụng bộ nhớ để đánh bại các cuộc tấn công GPU/ASIC.
-
Dùng muối để đánh bại bàn cầu vồng
Muối là một giá trị ngẫu nhiên duy nhất cho mỗi mật khẩu, được thêm vào trước hoặc kết hợp trước khi băm. Nó đảm bảo các mật khẩu giống hệt nhau sẽ tạo ra các giá trị băm khác nhau, khiến cho các bảng Rainbow được tính toán trước trở nên vô dụng. bcrypt và Argon2 tự động tạo và nhúng muối — đừng tự cuộn.
-
Kiểm tra mật khẩu bị vi phạm
Trước khi chấp nhận mật khẩu, hãy kiểm tra mật khẩu đó với Have I Been Pwned API bằng giao thức k-anonymity: chỉ gửi 5 ký tự đầu tiên của hàm băm SHA-1, nhận danh sách các hậu tố phù hợp và so sánh cục bộ. Điều này không bao giờ tiết lộ mật khẩu đầy đủ của API.
Ví dụ
Mật khẩu được tạo mạnh (16 ký tự, entropy ~ 105 bit)
đầu vào: Độ dài 16, tất cả các lớp ký tự
đầu ra: K9$mP2#vL7@nQ4!x (ngẫu nhiên, duy nhất, không bao giờ sử dụng lại)
Cụm mật khẩu cho mật khẩu chính (dễ nhớ + mạnh)
đầu vào: 4 từ thông dụng ngẫu nhiên
đầu ra: correct-horse-battery-staple (~44 bits but easy to remember; use 5-6 words for ~60+ bits)
hàm băm bcrypt của mật khẩu (hệ số công việc 12)
đầu vào: mật khẩu123 với bcrypt có giá 12
đầu ra: $2b$12$N9qo8uLOickgx2ZMRZoMy.MrqKQp7vqB4V1e5sTq7vqB4V1e5sTq (muối + chi phí + hàm băm được nhúng)
Các vấn đề thường gặp
- Sử dụng MD5 hoặc SHA-256 để băm mật khẩu: cả hai đều là băm nhanh. GPU hiện đại tính toán ~10 tỷ SHA-256/s, bẻ khóa mật khẩu 8 ký tự trong vài phút. Luôn sử dụng bcrypt, scrypt hoặc Argon2id.
- Sử dụng lại một mật khẩu trên các trang web: vi phạm ở trang web yếu nhất sẽ làm rò rỉ mật khẩu của mọi trang web. Tạo mật khẩu duy nhất và lưu trữ chúng trong trình quản lý.
- Lưu trữ mật khẩu ở dạng văn bản gốc hoặc mã hóa có thể đảo ngược: nếu cơ sở dữ liệu bị rò rỉ, mọi tài khoản sẽ bị xâm phạm ngay lập tức. Băm là một chiều và không thể đảo ngược—ngay cả máy chủ cũng không thể khôi phục bản gốc.
- Hệ số công việc thấp trong bcrypt: chi phí 4 là ổn vào năm 2002; vào năm 2026, chi phí sử dụng là 12+ (khoảng 4096 lần lặp). Băm lại khi đăng nhập để nâng cấp các giá trị băm cũ mà không buộc phải đặt lại mật khẩu.
Mẹo
- Nhắm tới ít nhất 100 bit entropy cho các tài khoản có giá trị cao — tức là 16 ký tự ngẫu nhiên từ bảng chữ cái 94 ký hiệu hoặc 6 từ xúc xắc ngẫu nhiên.
- Bật xác thực hai yếu tố (TOTP hoặc khóa phần cứng) cho mọi tài khoản hỗ trợ tính năng này — chỉ mật khẩu mạnh thôi là không đủ nếu mật khẩu đó bị lừa đảo.
- Sử dụng tùy chọn 'loại trừ các ký tự mơ hồ' của Trình tạo mật khẩu của chúng tôi (0/O, 1/l/I) khi mật khẩu sẽ được đọc to hoặc gõ từ bản in.
- Chỉ thay đổi mật khẩu sau khi đã xác nhận vi phạm chứ không phải theo lịch cố định — việc luân chuyển buộc người dùng phải chuyển sang các mẫu có thể dự đoán được như Spring2026!.