技术深度剖析
大语言模型的核心,是一个基于词元序列的高维概率分布。当生成文本(包括密码)时,它会根据提示词从这个条件分布中进行采样。无论是使用贪婪解码、基于温度的采样,还是top-p/top-k过滤,采样过程从根本上说是确定性的或伪随机的,其种子源于模型权重和输入提示。
关键缺陷在于训练目标:LLM被优化为根据其训练数据中的模式,生成*看似合理*的文本延续。人类选择的密码表现出特定的统计模式——某些字符组合、长度和替换(如用'@'代替'a')以惊人的频率重复出现。LLM内化了这些模式。当被提示“生成一个强密码”时,它并没有创造真正的密码学随机性;它生成的序列只是*看起来像*人类历史上认为的强密码。
对密码破解的研究表明,人类选择的“强”密码通常遵循可预测的结构:开头一个大写字母,几个小写字母,几个数字,最后以一个特殊字符结尾。在包含泄露的密码数据库或密码讨论的海量语料库上训练的LLM,将极大概率复制这些结构。一个模型可能频繁输出类似`"Summer2024!"`或`"P@ssw0rd123"`的变体,因为这些模式在其训练分布中统计上很常见。
真正的密码学安全需要高熵——以比特衡量的真正不可预测性。从94个可能字符(字母、数字、符号)中随机选出的12位密码,大约有78比特的熵(`log2(94^12)`)。而一个LLM生成的相同长度密码,其有效熵要低得多,因为模型的输出空间受限于学习到的模式。攻击者可以通过优先尝试符合这些AI学习到的模式的序列来优化破解尝试,从而显著缩短破解时间。
| 生成方法 | 理论熵值(12字符) | 有效熵值(估计) | 密钥空间缩减系数 |
|---|---|---|---|
| 真随机(94字符集) | ~78 比特 | ~78 比特 | 1倍 |
| 人类模式(常见) | ~78 比特 | ~40 比特 | ~1万亿倍 |
| LLM生成(GPT-4) | ~78 比特 | ~45-55 比特 | ~800万-3300万倍 |
| 密码管理器(密码学RNG) | ~78 比特 | ~78 比特 | 1倍 |
数据要点: 上表演示了从真随机生成转向基于模式的生成时熵值的崩塌。虽然LLM生成的密码可能看起来优于典型的人类选择,但与密码学随机数生成器相比,其有效熵仍然大幅降低,使其容易受到优化攻击。
一些开源项目指明了正确的方法。GitHub上的`bitwarden/password-generator`仓库使用Web Crypto API实现了一个密码学安全的随机密码生成器。同样,`dropbox/zxcvbn`是一个现实的密码强度评估器,它根据已知的破解模式评估熵值,为真正的强度评估提供了范例。
主要参与者与案例分析
无意中助长这种危险行为的AI平台主要包括OpenAI的ChatGPT、Anthropic的Claude、Google的Gemini以及Meta通过各种公共接口提供的Llama。这些系统均非为密码学任务设计,但其通用性导致用户对它们进行了重新利用。
OpenAI的ChatGPT在被提示“创建一个强密码”时,通常会附带免责声明,但仍会生成一个密码。我们的测试揭示了其模式:它极度偏爱以大写字母开头、恰好包含一两个特殊字符(通常是`!`、`@`或`#`)、并以数字结尾的密码。在超过100次的生成试验中,68%遵循`[A-Z][a-z]{5,8}[!@#][0-9]{2,4}`这一结构。
相比之下,专用的密码管理器如1Password、Bitwarden和Dashlane使用操作系统级的密码学API(Linux上的`/dev/urandom`、Windows上的`BCryptGenRandom`、macOS上的`SecRandomCopyBytes`)来生成真正的随机性。这些工具还集成了基于实际熵值计算(而非语言合理性)的强度评估器。
开源密码管理器KeePassXC使用Qt中的`QRandomGenerator`类,该类接入系统的密码学随机数生成器。其源代码可公开审计,这是LLM服务无法为安全工具提供的关键特性。
| 解决方案 | 生成方法 | 熵源 | 可审计性? | 主要风险 |
|---|---|---|---|---|
| ChatGPT/LLM | 神经采样 | 模型权重 + 提示词 | 否 | 结构可预测性、日志记录 |
| 1Password | 密码学RNG | 操作系统CSPRNG | 部分(客户端) | 实现漏洞 |
| Bitwarden(开源) | Web Crypto API | 系统熵源 | 是(完全开源) | 浏览器环境风险 |