Vì sao mật khẩu do LLM tạo ra lại nguy hiểm: trông như 100 bit nhưng thực tế chỉ là 27 bit
(irregular.com)Dựa trên nghiên cứu của công ty bảo mật Irregular, bài viết chỉ ra rằng các LLM (mô hình ngôn ngữ lớn) hiện đại như Claude, ChatGPT, Gemini tạo ra mật khẩu trông có vẻ rất mạnh, nhưng trên thực tế lại cực kỳ yếu.
Kết quả thí nghiệm chính
- Lặp lại 50 lần yêu cầu “hãy tạo mật khẩu” với từng mô hình
- Claude Opus 4.6: trong 50 lần có 18 lần tạo ra đúng cùng một mật khẩu
G7$kL9#mQ2&xP4!w(trùng 36%), tổng số mật khẩu duy nhất chỉ là 30 - Mỗi mô hình thể hiện rõ xu hướng ưa thích một mẫu nhất định
- Claude → bắt đầu bằng 'G' + ký tự thứ hai là '7'
- ChatGPT → bắt đầu bằng 'v'
- Gemini → bắt đầu bằng 'k' hoặc 'K'
- Ngay cả khi thay đổi temperature từ 0.0 đến 1.0 thì kết quả cũng không khác biệt nhiều (ở 0.0 thì cả 50 lần đều cho ra cùng một mật khẩu)
Ảo giác về entropy (độ ngẫu nhiên)
- Trong các công cụ như KeePass, chúng được đánh giá là “khoảng 100 bit entropy, rất mạnh”
→ nhìn như thể ngay cả siêu máy tính cũng phải mất hàng tỷ năm mới bẻ được - Nhưng khi tính Shannon entropy thực tế: mật khẩu do Claude tạo chỉ ở mức 27 bit
→ là loại mật khẩu yếu có thể bị phá chỉ trong vài giây bằng máy tính thông thường - Ví dụ với GPT-5.2: xác suất ký tự ở vị trí thứ 15 là chữ số '2' lên tới 99,7% (gần như cố định)
Vì sao LLM không phù hợp để tạo mật khẩu?
- Một mật khẩu thực sự mạnh phải được tạo bằng CSPRNG (bộ sinh số ngẫu nhiên an toàn về mật mã), trong đó mọi ký tự xuất hiện với xác suất đồng đều
- Ngược lại, LLM được huấn luyện để dự đoán token tiếp theo có khả năng nhất → tối đa hóa khả năng dự đoán
- → Vì vậy, dù tối ưu prompt hay điều chỉnh temperature cũng không thể giải quyết tận gốc (kết luận của Irregular)
Vấn đề lớn hơn: rủi ro từ AI coding agent
- Claude Code, Gemini-CLI, Codex... đã hardcode các mật khẩu yếu vào trong mã
Ví dụ: MariaDB, PostgreSQL, khóa API FastAPI... - “Hãy tạo mật khẩu” → có thể đề xuất phương pháp an toàn như
openssl rand
“Hãy gợi ý mật khẩu” → LLM lại chèn ngay một mật khẩu theo mẫu do chính nó tạo ra - Tìm trên GitHub với các mẫu như
K7#mP9,k9#vLcó thể thấy nhiều kho mã thực tế chứa những chuỗi này
Kết luận
- LLM có thể tạo ra những mật khẩu “trông mạnh”, nhưng bảo mật thực sự không phụ thuộc vào bề ngoài mà nằm ở entropy thực tế và độ ngẫu nhiên.
- Do đặc tính thiết kế dựa trên dự đoán, LLM về mặt cấu trúc không phù hợp cho việc tạo mật khẩu; đặc biệt khi các công cụ lập trình AI đưa những mật khẩu này vào mã, lỗ hổng bảo mật có thể âm thầm lan rộng trong quy trình phát triển tự động.
7 bình luận
Nếu dùng
openssl rand -hex 64là được rồi, có nhất thiết phải bắt LLM tự tạo mật khẩu không nhỉ...?Ngay cả khi bảo con người tự tạo mật khẩu, họ cũng sẽ làm theo một kiểu có quy luật nhất định để bản thân dễ nhớ mà.
Có lẽ với các lập trình viên thì không thành vấn đề gì lớn. Nhưng dạo này người bình thường cũng code nhiều nhờ vibe coding, nên có vẻ những giá trị mặc định tự động bị nhúng vào trong code mới là vấn đề lớn hơn. Ví dụ như mật khẩu kết nối DB...
Chắc chắn là đã triển khai web service rồi, nhưng nghĩ lại thì tôi cũng từng thấy khá nhiều trường hợp mở toang để các tệp nhạy cảm như
.envcó thể bị truy cập từ mạng bên ngoài...Nếu ai đó không hiểu rõ mà dùng OpenClaw để làm web service, rồi nhúng nguyên
keyvào mã nguồn HTML, thì cũng có thể xảy ra những trường hợp bị đánh cắp key và đột nhiên nhận hóa đơn.Con người cũng không giỏi chọn ngẫu nhiên. Đáng ra không nên có quy luật, nhưng việc cố tình tránh quy luật tự nó cũng có thể được xem là một quy luật.
Tôi rất tò mò vì sao Claude code lại không tạo ra chuỗi ngẫu nhiên.
À... giờ thì tôi hiểu vì sao các giáo sư dạy lại giải tích cho sinh viên năm nhất khối kỹ thuật lại có vẻ mặt như thế.
Hu hu, cái này hơi quá rồi đấy