LLMが作るパスワードが危険な理由、100ビットに見えても実際は27ビット
(irregular.com)セキュリティ企業 Irregular の研究に基づき、Claude、ChatGPT、Gemini のような最新のLLM(大規模言語モデル)が生成するパスワードは、見た目には非常に強力に見えても、実際には極めて脆弱である点を指摘。
主要な実験結果
- 各モデルに「パスワードを生成して」と依頼する実験を50回繰り返し
- Claude Opus 4.6: 50回中 18回 がまったく同じパスワード
G7$kL9#mQ2&xP4!w(36%が同一)、ユニークなパスワードは30個 בלבד - モデルごとのパターンの好みが明確
- Claude → 'G' で始まり、2文字目が '7'
- ChatGPT → 'v' で始まる
- Gemini → 'k' または 'K' で始まる
- temperature を0.0〜1.0に変えても大きな違いはなし(0.0では50回すべて同じパスワード)
エントロピー(ランダム性)の錯覚
- KeePass のようなツールでは「約 100ビット のエントロピー、非常に強力」と評価
→ スーパーコンピュータでも解読に数十億年かかるレベルに見える - 実際の Shannon エントロピー計算結果: Claude生成パスワードは 27ビット 程度
→ 一般的なコンピュータでも数秒で破られうる弱いパスワード - GPT-5.2 の例: 15文字目が数字の '2' である確率は 99.7% (ほぼ固定)
なぜLLMはパスワード生成に不向きなのか?
- 本当に強力なパスワードは CSPRNG(暗号論的に安全な乱数生成器)により、すべての文字が 一様な確率 で出現しなければならない
- 一方でLLMは 最ももっともらしい次のトークン を予測するよう訓練されている → 予測可能性を最大化
- → プロンプトを工夫したり temperature を調整しても根本的な解決は不可能(Irregularの結論)
より大きな問題: AIコーディングエージェントのリスク
- Claude Code、Gemini-CLI、Codex などがコード内に 脆弱なパスワードをハードコード
例: MariaDB、PostgreSQL、FastAPI のAPIキーなど - 「パスワードを生成して」→
openssl randのような安全な方法を提案
「パスワードをおすすめして」→ LLMが作ったパターン化されたパスワードをそのまま挿入 - GitHub で
K7#mP9、k9#vLのようなパターンを検索すると、実際のリポジトリが多数見つかる
結論
- LLMは「強そうに見える」パスワードはうまく作れるが、本当のセキュリティ は見た目ではなく 実際のエントロピーとランダム性 に依存する。
- LLMの予測中心の設計により、パスワード生成用途には構造的に不向きであり、とりわけAIコーディングツールがこれをコードに埋め込むと、セキュリティ脆弱性が自動化された開発プロセスの中で密かに広がる可能性がある。
7件のコメント
openssl rand -hex 64を実行すれば済むのに、わざわざ LLM に直接パスワードを生成させる必要があるのでしょうか……?人間にパスワードを作らせても、本人が覚えやすいように一定のパターンがある形で作ってしまうものですし。
開発者ならそれほど問題ないでしょうが。最近はバイブコーディングで一般の人もコーディングすることが多いので、コードの中に自動で紛れ込むデフォルト値のほうがもっと問題になりそうです。例えばDB接続パスワードみたいなものですね..
確かに、Webサービスをデプロイしたのに
.envのような機密ファイルを外部ネットワークからアクセス可能な状態で公開してしまっている事例もかなり見てきたことを考えると……何も知らずにOpenClawでWebサービスを作って、HTMLソースにそのままキーを埋め込んでしまったせいでキーを盗まれ、突然請求が飛んでくるような事例も起こり得そうですね
人間もランダムに選ぶのは得意ではありません。パターンがあってはいけないのに、パターンを意図的に避けること自体もパターンと見なせるからです。
> Claude Opus 4.6: 50回中18回
なぜClaude codeがランダム文字列を生成しなかったのか、とても気になりますね
ああ……工学部1年生に微積分をもう一度教える教授たちがなぜあの表情をしているのか、今やっとわかった。
うう、これはちょっとひどいね