Cập nhật lần cuối:

Độ dài mật khẩu và bảo mật - Chọn độ dài phù hợp

13 phút đọc

Độ dài mật khẩu là yếu tố quan trọng nhất trong bảo mật mật khẩu. Mỗi ký tự bổ sung nhân số lượng tổ hợp có thể lên khoảng 95 lần, khiến các cuộc tấn công brute-force khó hơn theo cấp số nhân. Hướng dẫn này đi sâu hơn những lời khuyên bề mặt, bao gồm cách tính entropy, chi phí hàm băm, bậc độ lớn của thời gian cần cho tấn công vét cạn, so sánh passphrase với chuỗi ngẫu nhiên, và chiến lược xác thực đa yếu tố - tất cả dựa trên NIST SP 800-63B phiên bản thứ tư, công bố năm 2025.

Entropy và độ mạnh mật khẩu

Entropy, đo bằng bit, định lượng mức độ khó đoán của mật khẩu. Công thức rất đơn giản:

Entropy (bits) = log2(charset sizelength) = length × log2(charset size)

Với bộ ký tự ASCII in được đầy đủ gồm 95 ký tự, mỗi ký tự đóng góp khoảng 6,57 bit entropy. Mật khẩu 8 ký tự cho khoảng 52,6 bit, 12 ký tự khoảng 78,8 bit, và 16 ký tự khoảng 105,1 bit. Entropy không có một ngưỡng tuyệt đối nào để tuyên bố là "an toàn": con số này chỉ có ý nghĩa khi được đặt cạnh tốc độ thử của kẻ tấn công. Cùng một mật khẩu 60 bit có thể trụ rất lâu nếu dịch vụ lưu trữ bằng một hàm băm chậm, nhưng sụp đổ nhanh nếu dữ liệu bị đánh cắp lại được băm bằng một hàm nhanh. Vì vậy hãy đọc entropy như một thang so sánh giữa các mật khẩu, chứ không phải như một giấy chứng nhận an toàn.

Một nhận định quan trọng: tăng độ dài hiệu quả hơn tăng sự đa dạng ký tự. Mật khẩu 16 ký tự chỉ dùng chữ thường (26 ký tự) có khoảng 75,2 bit entropy - gần bằng mật khẩu 12 ký tự sử dụng toàn bộ 95 ký tự (78,8 bit). Kéo dài mật khẩu chữ thường đó lên 20 ký tự và entropy đạt khoảng 94 bit, vượt qua mật khẩu 14 ký tự dùng đầy đủ bộ ký tự (khoảng 92 bit). Đây là cơ sở toán học cho lý do tại sao độ dài quan trọng hơn độ phức tạp.

Hướng dẫn NIST SP 800-63B

NIST SP 800-63B phiên bản thứ tư được công bố tháng 8 năm 2025 và thay thế các phiên bản trước đó, trở thành tài liệu tham chiếu cho chính sách mật khẩu. Tài liệu cấm việc bắt buộc quy tắc cấu tạo và bắt buộc đổi mật khẩu theo định kỳ, đồng thời đặt độ dài làm yếu tố bảo mật chính.

Lý do tài liệu đi xa đến mức cấm hẳn quy tắc cấu tạo là vì trên thực tế người dùng đáp ứng quy tắc bằng biến đổi nhỏ nhất có thể: thêm "1" và "!" vào cuối, hoặc viết hoa chữ cái đầu. Những biến đổi đó nằm ngay trong các mẫu mà công cụ dò mật khẩu thử trước tiên, nên không gian tìm kiếm thực tế gần như không rộng thêm, trong khi mật khẩu lại khó nhớ hơn.

Thời gian cần cho tấn công vét cạn

Bảng dưới đây là một ví dụ tính toán, không phải số đo trên một thiết bị cụ thể. Giả định kẻ tấn công thử được 1011 lần mỗi giây trên một hàm băm nhanh, và mật khẩu được sinh ngẫu nhiên từ bộ 95 ký tự ASCII in được. Điều đáng đọc ở đây là bậc độ lớn: cứ thêm hai ký tự thì thời gian dài ra khoảng 9.000 lần.

Độ dàiTổ hợpEntropyThời gian với giả định 1011 lần thử/giây
6 ký tự~7,35 × 1011~39,4 bit~7 giây
8 ký tự~6,63 × 1015~52,6 bit~18 giờ
10 ký tự~5,99 × 1019~65,7 bit~19 năm
12 ký tự~5,4 × 1023~78,8 bit~1,7 × 105 năm
16 ký tự~4,4 × 1031~105,1 bit~1,4 × 1013 năm

Tốc độ giả định ở trên chỉ có nghĩa với một hàm băm nhanh. Nếu dịch vụ lưu mật khẩu bằng một hàm băm được thiết kế cho mục đích đó, số lần thử mỗi giây giảm đi nhiều bậc độ lớn và cùng một mật khẩu sẽ trụ lâu hơn rất nhiều. Ngược lại, hệ thống dùng hàm băm nhanh khiến mật khẩu ngắn sụp đổ gần như tức thời. Vì người dùng không chọn được thuật toán băm phía máy chủ, cách phòng thủ nằm trong tầm tay vẫn là đặt mật khẩu đủ dài.

Chi phí hàm băm và độ dài mật khẩu

Bảo mật mật khẩu không chỉ phụ thuộc vào độ dài mà còn vào chi phí tính toán của hàm băm phía máy chủ. Dưới đây là so sánh các thuật toán chính:

Thuật toánVị trí trong việc lưu trữ mật khẩu
MD5Hàm băm đa dụng, được thiết kế để chạy nhanh, nên không phù hợp cho lưu trữ mật khẩu. Vẫn còn tồn tại trong các hệ thống cũ
SHA-256Cũng là hàm băm đa dụng và vẫn quá nhanh cho mục đích lưu mật khẩu, dù chậm hơn MD5
bcryptĐược thiết kế để cố ý chậm, với hệ số chi phí điều chỉnh được. Đầu vào bị giới hạn 72 byte
Argon2idBên thắng cuộc thi Password Hashing Competition năm 2015 và là lựa chọn đầu tiên được RFC 9106 khuyến nghị. Thiết kế memory-hard nên khó tăng tốc bằng song song hóa
scryptCũng theo thiết kế memory-hard, ra đời trước Argon2

bcrypt cắt đầu vào ở 72 byte, nghĩa là mật khẩu chỉ dùng ASCII bị giới hạn hiệu quả ở 72 ký tự, và văn bản tiếng Nhật UTF-8 khoảng 24 ký tự. Hạn chế này ảnh hưởng trực tiếp đến độ dài mật khẩu tối đa trên một số nền tảng. Argon2id không có hạn chế như vậy và có thể xử lý mật khẩu có độ dài tùy ý. Các dịch vụ mới nên ưu tiên Argon2id.

Ngay cả với hàm băm chậm như bcrypt hoặc Argon2id, mật khẩu ngắn vẫn dễ bị tấn công từ điển và tấn công dựa trên quy tắc. Chi phí băm là chiến thuật trì hoãn; biện pháp phòng thủ cơ bản là độ dài đủ lớn (entropy).

Tại sao độ dài quan trọng hơn độ phức tạp

Nhiều dịch vụ yêu cầu "ít nhất một chữ hoa, một số và một ký hiệu", nhưng NIST rõ ràng bác bỏ cách tiếp cận này. Các con số nói lên tất cả.

"P@ssw0rd!" có 9 ký tự và đủ cả bốn loại ký tự, nhưng nó nằm trong những danh sách mật khẩu bị rò rỉ phổ biến nhất, nên bị dò ra gần như ngay lập tức. Ngược lại, bốn từ được chọn ngẫu nhiên từ một danh sách 7.776 từ - cách làm quen thuộc của phương pháp Diceware - cho khoảng 51,7 bit entropy, và sáu từ cho khoảng 77,5 bit, trong khi vẫn dễ nhớ hơn nhiều so với chín ký tự rối rắm kia.

Cũng cần hiểu rằng các phép thay thế kiểu l33t, chẳng hạn a thành @, o thành 0 hay i thành 1, không mở rộng không gian tìm kiếm. Công cụ dò mật khẩu áp dụng đúng những phép thay thế đó lên từ điển trước khi chuyển sang vét cạn, nên "P@ssw0rd" bị thử gần như cùng lúc với "password"; người dùng phải ghi nhớ thêm một quy tắc biến đổi mà hầu như không nhận lại chút an toàn nào.

Quy tắc phức tạp phản tác dụng vì ba lý do. Thứ nhất, người dùng đáp ứng yêu cầu bằng các mẫu dễ đoán (viết hoa chữ đầu, thêm "1!"). Thứ hai, mật khẩu phức tạp khó nhớ nên người dùng giữ chúng ngắn. Thứ ba, mật khẩu không thể nhớ được cuối cùng bị lưu dạng văn bản thuần trên giấy nhớ hoặc tệp văn bản.

Passphrase so với chuỗi ngẫu nhiên

Có hai cách tiếp cận để tạo mật khẩu dài: passphrase và chuỗi ký tự ngẫu nhiên. Mỗi cách có những đánh đổi riêng.

Khía cạnhPassphraseChuỗi ngẫu nhiên
Ví dụcorrect horse battery staplekX9#mP2$vL7@nQ4
Độ dài28 ký tự15 ký tự
Entropy~51,7 bit (4 từ từ danh sách 7.776 từ)~98,5 bit (95 ký tự × 15 ký tự)
Khả năng ghi nhớCao (nhớ theo câu chuyện)Thấp (cần trình quản lý mật khẩu)
Dễ gõCao (gõ bình thường)Thấp (ký tự đặc biệt bất tiện)
Khả năng chống tấn công từ điểnPhụ thuộc vào số từ và kích thước danh sáchCực kỳ cao

Hãy để ý sự chênh lệch trong bảng: passphrase dài gần gấp đôi về số ký tự nhưng entropy lại thấp hơn chuỗi ngẫu nhiên 15 ký tự. Với passphrase, đơn vị ngẫu nhiên là từ chứ không phải ký tự, nên đánh giá độ mạnh bằng số ký tự sẽ phóng đại rất nhiều so với thực tế. Độ mạnh của passphrase phụ thuộc vào số lượng từ và kích thước danh sách từ. Sáu từ Diceware (từ danh sách 7.776 từ) cho khoảng 77,5 bit entropy. Chỉ sử dụng các từ thông dụng hàng ngày sẽ làm yếu passphrase trước tấn công từ điển, vì vậy việc kết hợp các từ không liên quan một cách ngẫu nhiên là thiết yếu. "My cat is cute" là một passphrase kém; "chair purple submarine cayenne galaxy" mạnh hơn nhiều.

Sử dụng passphrase cho mật khẩu chính (mở khóa trình quản lý mật khẩu) và chuỗi ngẫu nhiên do trình quản lý mật khẩu tạo cho các tài khoản dịch vụ riêng lẻ.

Đối diện với giới hạn độ dài của dịch vụ

Giới hạn độ dài khác nhau rất nhiều giữa các dịch vụ, và phần lớn dịch vụ không công bố con số cụ thể ở chỗ dễ tìm. Vì vậy cách chắc chắn nhất là tự kiểm tra trên tài khoản của mình: thử đặt một mật khẩu 32 ký tự do trình quản lý mật khẩu sinh ra, nếu bị từ chối thì hạ xuống 24 ký tự, rồi 16 ký tự, cho đến khi được chấp nhận. Con số dừng lại chính là giới hạn thực tế của dịch vụ đó, và nên được ghi vào phần ghi chú của mục mật khẩu để lần sau không phải thử lại.

Giới hạn tối đa thường có hai nguyên nhân kỹ thuật. Thứ nhất, bcrypt cắt đầu vào ở 72 byte, nên các hệ thống dùng nó có lý do đặt trần quanh mức đó. Thứ hai, những hệ thống được thiết kế từ thời dữ liệu được lưu trong cột có độ dài cố định thường giữ nguyên trần cũ, kể cả sau khi thuật toán băm đã được thay. Nói cách khác, một trần ngắn phản ánh tuổi của hệ thống hơn là một chủ ý bảo mật nào đó.

Sức mạnh kết hợp xác thực đa yếu tố

Dù mật khẩu dài đến đâu, nó trở nên vô dụng nếu bị đánh cắp qua phishing hoặc keylogger. Độ dài mật khẩu bảo vệ chống tấn công brute-force, trong khi xác thực đa yếu tố (MFA) bảo vệ chống đánh cắp thông tin đăng nhập - các vector tấn công khác nhau bổ sung cho nhau mạnh mẽ.

Thiết lập lý tưởng là mật khẩu dài (hoặc passphrase) kết hợp với khóa bảo mật FIDO2. Điều này cung cấp khả năng chống mạnh mẽ đồng thời trước tấn công brute-force, tấn công từ điển, phishing và credential stuffing.

Phương pháp tốt nhất cho trình quản lý mật khẩu

Kiểm tra rò rỉ và thiết kế chính sách mật khẩu

Hướng dẫn thực tế cho cả người dùng cá nhân và nhà phát triển dịch vụ:

Cho người dùng cá nhân:

Cho nhà phát triển dịch vụ:

Các lỗi thường gặp và biện pháp đối phó

Kết luận

Bảo mật mật khẩu phụ thuộc vào entropy, và cách hiệu quả nhất để tăng entropy là thêm độ dài. SP 800-63B phiên bản thứ tư yêu cầu tối thiểu 15 ký tự khi mật khẩu được dùng một mình và tối thiểu 8 ký tự khi nó chỉ là một yếu tố trong xác thực đa yếu tố, và kết hợp mật khẩu dài với hàm băm chậm như bcrypt hoặc Argon2id cung cấp bảo vệ thực tế hiệu quả. Người dùng cá nhân nên tạo mật khẩu ngẫu nhiên 20+ ký tự qua trình quản lý mật khẩu, sử dụng passphrase Diceware làm mật khẩu chính. Thêm xác thực đa yếu tố dựa trên FIDO2/passkey đạt được mức phòng thủ cao nhất hiện có. Kiểm tra độ dài mật khẩu của bạn với Bộ đếm ký tự.

Chia sẻ bài viết này