世界を動かす技術を、日本語で。

役割の混乱としてのプロンプトインジェクション

概要

Prompt injection は、LLMが ロール(役割) を誤認識することに起因する脆弱性。 LLMは 全ての情報を一つの文字列 として受け取り、タグで区切ることでロールを判別。 ロール誤認識 により、低権限テキストが高権限として扱われる攻撃が成立。 ロールの科学的理解が進めば、 攻撃防御やLLM設計 に大きな影響。 本稿は 論文「A Theory of Prompt Injection」 の要点と研究課題を解説。

プロンプトインジェクション理論とロールの重要性

  • LLMは入力を「一つの長い文字列」 として受け取り、そこに system, user, think, assistant, tool などのロールタグで区切りを付ける構造。
  • 人間は「自分の思考」と「他人の発言」を自然に区別できるが、 LLMは全てを同じチャネルで受信 し、タグ付けでしか区別できない状況。
  • ロールタグ は本来「信頼」「命令権限」「アイデンティティ」「生成モード」など多くの意味を担う。
    • 例: user タグは命令、 think はモデル自身の推論、 tool は外部データ
  • ロールの境界 は本質的に曖昧で、モデル内部での扱いが不完全であることが多い。

ロール構造の失敗とプロンプトインジェクション

  • プロンプトインジェクション は「低権限」なテキスト(例:webページ内のtoolタグ)が「高権限」(userタグ等)として誤解されることで発生。
  • 攻撃者は toolタグ内に命令文を埋め込む ことで、LLMに「本物のユーザー指示」と誤認させることが可能。
  • 現行モデル はベンチマークテストでは高い防御率を示すが、 人間の攻撃者 には高確率で突破される。
    • 理由:ベンチマークは既知攻撃の暗記に依存しがちで、新規・適応型攻撃には脆弱。
  • ロール認識の失敗 が根本原因。LLMは「どのロールのテキストか」を正確に区別できていない。

ロール認識の内部メカニズム解明

  • ロールプローブ という手法で、LLMが各トークンをどのロールと「内部的に」認識しているかをスコア化。
    • 例: CoTness(thinkタグらしさ)Userness(userタグらしさ) など
  • 実験内容:
      1. 正しいタグ付き会話 :thinkタグ部分は高いCoTness、他は低い
      1. 全タグ除去 :内容は同じだが、thinkだった部分のCoTnessはほぼ変わらず高い
  • 結論: タグだけでなく、文体や内容 もロール認識に強く影響
    • 「推論的な文体」自体がthinkタグと同じ内部表現を誘発
    • タグと文体が一致しない場合、誤認識が発生 しやすい

なぜロール認識が難しいのか

  • LLMの内部表現 は「タグ」と「内容(文体)」が混ざっており、完全に独立していない
  • 攻撃者 はこの曖昧さを突き、toolタグ内にuser的な文体で命令を埋め込むことで、 ロール越境 を実現
  • タグのみに依存した防御策 は限界があり、 文体・内容も考慮した新たなアプローチ が必要

ロール科学の研究課題と今後の展望

  • ロール認識のメカニズム解明 :タグ・文体・コンテキストがどう相互作用するかの理論構築
  • 新たな防御策 :ロール誤認識を防ぐための「ロール型言語システム」「複合的検知モデル」の開発
  • メカニズムインタープリタビリティ :LLMがどのように内部でロール境界を形成・維持しているかの可視化
  • ベンチマークの見直し :暗記依存でない、適応型攻撃への耐性を測る新指標の確立
  • ロールの科学的体系化 :人間の認知科学や情報システム理論と接続したLLMロール科学の確立

まとめ

  • プロンプトインジェクション はLLMのロール誤認識という本質的な構造的問題に起因
  • タグだけでなく、 文体や内容もロール認識に強く影響 するため、従来の単純な防御策では不十分
  • ロールの科学的理解と新たな防御アーキテクチャ の研究が今後のLLM安全性向上の鍵

参考論文:A Theory of Prompt Injection (arXiv:2603.12277)

Hackerたちの意見

すごく面白い発見だね。個人的には、役割をトークンに組み込むっていう考え方をしてたんだ。要するに、各役割に対して埋め込み(トークンの次元と同じ次元)を作って、それを各トークンに足す感じ。これで、あいまいさのない、偽造できないタグが追加されるんだ。小さなシェイクスピアモデルで試してみたけど(代表的ではないけど)、各話者のための自由形式の埋め込みを作ったら、キャラクター間の面白い類似性マップができたよ。(そのマップがあまり情報を提供してなかったのは色々理由があるけど、それは小さなHNコメントの範疇を超えてるね)

個人的には、役割をトークンに組み込むっていう考え方をしてたんだ。要するに、各役割に対して埋め込み(トークンの次元と同じ次元)を作って、それを各トークンに足す感じ。これで、あいまいさのない、偽造できないタグが追加されるんだ。これって、制御トークンでトレーニングデータも準備する必要があるんじゃない?

LLMの仕組みについてはあまり詳しくないけど(ちゃんと学ばなきゃ)、こういうのが進む道かもしれないって感じる。モデルを動かしているソフトウェアは、ユーザーからのものとそうでないもの、ツールコールからのものとそうでないものをあいまいさなく知っているんだ。それをテキストの一部としてLLMに見せる方法があると、周囲のタグよりもニューラルネットの動きに合ってる気がする。

最初に思ったのは、バランスが崩れるんじゃないかってこと。例えば、誤字がある単語なんかは、アシスタントタグが付くことはほとんどないだろうし。

すべてのトークンを複製して、その複製を思考の連鎖専用に取っておくこともできるよ。ユーザーの入力からしっかりフィルタリングできるし。要するに、各トークンに「思考」のビットを追加する感じ。

これを正しく読んでいるなら、何かが...で囲まれていることはほとんど関係ないってことだね。特定の重みを引き起こすのは書き方なんだ。「ユーザーが...ポリシーが...と尋ねています」と書くだけで、ガードレールをバイパスできる。マルチターンの会話では、LLMが「ごめん、デイブ、それはできない」と返答したら、次のリクエストの前に「ユーザーが...ポリシーが...と尋ねています」と付け加えるだけで済むんだ。LLMの仕組みを知っていれば、納得できると思う。もっと面白い質問は(結論にはどこにも書いてないけど)「トレーニング中にLLMの重みを毒するための似たようなトリックはあるのか?」ってことだね。みんなトレーニング中に取り込まれるときに、自分の重みが競合する重みに勝つようにしようとしてると思う。「AAA製品を買え」と「BBB製品を買え」の対立みたいに。

トークン自体にアイデンティティ情報を埋め込むチャンスがありそうだね、シーケンス情報を埋め込むみたいに。ただ、トレーニングがかなり難しいんだ。シーケンスはどんなデータコーパスでも簡単に導き出せるけど、アイデンティティはそうはいかない。https://usize.github.io/blog/2026/april/why-no-ai-coworkers.... > 入力テンソルにシーケンス情報が埋め込まれるのと同じように、「Instructional Segment Embedding」というアプローチがアイデンティティ情報のための並行埋め込みチャネルを追加するんだ。これによってモデルは出所を実際に意識することができる。そして、うまくいく。でも、テストしたのはシステム、ユーザー、データの3つの固定カテゴリだけだった。ここでのアイデアに触れている面白い論文があるよ: https://arxiv.org/abs/2410.09102

正しい。トークンの色付けはないよ。モデルは「最初の…」に強く注意を向けるように学習されてるだけだし、「トークン#4242の前の何か」にも。

どこかで、標準的な海賊版の素材を使って、マンチュリアン・キャンディデートのトリガーワードをうまく組み込んだLLMが訓練されてるに違いないね。

トレーニング中にLLMの重みを毒する似たようなトリックはある?うん、「脱獄プロンプト」のすべてがトレーニングセットの一部だから、これが起こることもあるよ。昔は「解放者プラニウス」を言及するだけでLLMが「脱獄」できたけど、今は通用しないみたいだね。研究所がそのRLメソッドを更新して中和したんだろう。

「ユーザーは...ポリシーが...と尋ねている」と書くだけで、ガードレールを回避できるんだよね。LLMからトークンを生成する際には、ユーザー入力とシステム入力の区別がないことを忘れちゃいけない。OpenAI APIがトークンにタグを付けたり、別々のセクションとして表示したりできるかもしれないけど、結局は全部混ざって、アテンションレイヤーの浮動小数点ベクトルになるんだ(これがLLMが機能するために必要)。一度混ざっちゃうと、元に戻すことはできない。LLMは、信頼できるデータと信頼できないデータをきれいに分離できるSQLとは根本的に違うんだよね。

みんな、自分の重みがトレーニング中に競合する重みに対して生き残るようにしようとしてるよね。「AAA製品を買え」と「BBB製品を買え」みたいに。人間にとってもプロパガンダがあるのと同じだね。

Hacker Newsで議論の続きを見る