SSH秘密鍵とクラウドの鍵をAgentのプロンプトに書いたあと、LLM中継はなぜ呼び出し記録をそのまま売れるのか
2026年9月11日前後、セキュリティ研究者の寿超璠(Chaofan Shou)は、中国の大手LLM中継から約6TBの未マスキングの Fable 呼び出しデータを買ったと述べた。中には SSH 秘密鍵、VPN 設定、アリババクラウドの鍵、GitLab トークンがあり、複数の企業と研究機関の内部へ入れる材料だと主張している。本記事はその中継が本当に売ったかを再審しない。その場で照合できる仕組みだけを開く。本文を読まないと転送できない中継を通した瞬間、Agent のプロンプトに入った鍵は、すでに平文として残っている。URLクリーナーやワンタイムリンクの操作説明ではない。
まずプロンプトが通った経路を分ける
本記事が答えるのは「SSH秘密鍵とクラウドの鍵をAgentのプロンプトに書いたあと、LLM中継はなぜ呼び出し記録をそのまま売れるのか」だけです。マスキングのフォーム説明でも、各社モデルのプライバシーポリシー全文でもありません。
プロンプトが中継を通るとき何が起きるか
問うのは「モデル会社のサーバが会話を学習するか」ではない。先に聞くのは、この hop に本文を見なければならない中間者がいるかどうかである。
LLM中継は、エディタと上流モデルのあいだに入る。日本のチームでも、公式枠の空き待ち、複数アカウントの分配、割引単価のために API Host を第三者へ向ける例がある。リクエストが中継に着くと、相手は利用枠を確認し、自分の上流鍵に差し替え、同じプロンプトを Claude などへ転送する。この三つを終えるには、こちら側の HTTPS をいったん終端し、JSON の messages や Agent の文脈を読む必要がある。KuCoin の日本語解説は、寿氏の投稿を「アプリケーション層のプロキシは平文のリクエストとツール呼び出しをすべて見られる」と要約している。TokyoBlackHatNews のルーター層の整理も、モデルに届く前の各ルーターがプロンプトと API キーを平文で読めると書いている。
プログラミング用 Agent は、この hop をより危うくする。Cursor、Claude Code、自作のエージェントは、許可した範囲で作業領域を読み、.env を眺め、端末出力を拾い、次のプロンプトへ継ぎ足す。開発者が -----BEGIN OPENSSH PRIVATE KEY----- を対話欄へ自分で貼らなくても、「テスト機へ繋いで」と頼んだ瞬間に、秘密鍵やデプロイスクリプトが本文へ入ることがある。寿氏のチームの論文 Your Agent Is Mine: Measuring Malicious Intermediary Attacks on the LLM Supply Chain は、有料28・無料400、合わせて428のルーターを測った。戻り内容を書き換えたものが9、研究者が置いた AWS のテスト鍵を実際に AWS へ投げたものが17、テスト用ウォレットの ETH を動かしたものが1、と報告している。これは「中継が自ら悪さをするか」の証拠である。本記事が照合するのは、より日常の一本だ。全体ログを開いているだけで、悪意がなくても、書いた鍵は残る。
対話型のウェブ画面へ問い合わせを貼る経路とは別である。ウェブ版へ貼るときは、少なくとも自分が貼った操作が見える。Agent が中継を通るとき、文脈はツールが自動で組むことが多い。本機で見るべきは「自分で鍵を貼ったか」ではない。「この hop に本文を見なければならない中継があるか」と「いまの本文に、そのままで使える通行証が入っているか」である。Claude Code の送信先を中継へ向けたあとに鍵が毎回そこへ行く、という切り分けは、送信先の環境変数を先に見る、という日本語の現場メモにもある。ファイルを読まれたかより先に、宛先がどこを指しているかを見る、という順番は本記事と同じである。
中継が呼び出し記録を売れるのは、上流モデルを破ったからではない。転送の前に平文を見る必要があるからである。HTTPS が守るのは、あなたから中継、中継から上流、という二本の回線であり、中継プロセスの中ですでに開かれたコピーは守らない。
呼び出しログがそのまま売れる理由
「そのまま」とは、リクエスト本文が残っている、という意味である。「誰かが一度呼んだ」という回数だけではない。
中継が障害切り分け、課金、微調整用のコーパスを残すいちばん楽な方法は、開いたあとのリクエストをデータベースへ丸ごと書くことである。プロンプト、システム指示、Agent が読んだファイル断片、ツールの戻り値は、テキスト欄として残る。6TB の呼び出しデータを売る、とは、この開いたあとの履歴を売ることである。研究者は、内部へ直結できる SSH 秘密鍵と glpat- トークンがあったと述べ、公開報道は伏せ字にした企業 GitLab のアドレスを示している。本サイトはそのデータを買っておらず、「某社を乗っ取れる」を検証済みの結論にはしない。その場で照合できるのは仕組みである。ログがリクエスト本文を持つなら、書いた鍵は自動では星印にならない。
HTTPS の錠も、「学習に使わない」という宣言も、この層は止めない。ブラウザやエディタが中継へ送るとき、TLS はこの hop で終わる。中継は自分の上流アカウントで、新しい TLS をもう一本開く。二本の回線はそれぞれ暗号化されていても、真ん中の機械のプロセスが見るのは平文の JSON である。上流モデルが会話を学習しないと約束しても、中継が自分で残したコピーは見えない。コピーがあるか、売るかは、中継の保存方針で決まる。「一時チャット」を選んだかどうかでは決まらない。
課金ログと呼び出し本文も、同じファイルではない。トークン数、モデル名、状態コードだけなら、SSH 秘密鍵は売れない。運用が「失敗した Agent の手順を再現する」ために完全な messages を残した瞬間、そのファイルは切り分けの材料と闇市場の材料を兼ねる。寿氏の開示が技術圏で広がったのは、買い手が要約ではなく、まだ使える通行証を受け取ったと主張したからである。判断すべきは「中継にログがあるか」ではない。「ログの中にプロンプト本文があるか」である。
路上の人は本文を見ない。守るのは伝送であり、中継プロセスの中ですでに開かれたコピーではない。
認証ヘッダの差し替え、課金、上流への転送のために、プロンプトと添付断片を読む。
6TB に値が付くのは、中身がまだリクエスト履歴だからであり、回数だけではない。
公式のモデル API へ直結すれば、「本文を見なければならない灰色の中間者」は一本減る。それでも、プロンプトが自分のパソコンだけに残ることにはならない。モデル会社のサーバも平文を受け取る。買い手が「灰色の中継」から「自分で選んだ会社」に変わるだけである。本記事が中継を見るのは、9月の開示が「本文をまとめて売った」を仮説から議論中の出来事へ変えたからである。公式へ直結したあとも、鍵をプロンプトへ入れてよいかの結論は同じである。入れてよくない。
形式マスキングが覆える鍵の種類
星印は、よくあるトークンが丸ごとコピーされる確率を下げる。短い接頭辞を持たない秘密鍵ブロックは覆わない。
UsePwd のマスキングは、現在のタブで6種の欄を形式で識別する。電話、個人番号のよくある桁、カード、メール、よくあるトークン、IP である。トークン類が見るのは照合できる接頭辞で、sk-、sk-ant-、sk-proj-、AKIA、ghp_、github_pat_、glpat-、xoxb-、Bearer などである。登録不要ですぐ使え、原文は既定でアップロードせず、統計にも書かない。glpat- を含むテスト文を貼ると、ページは接頭辞を残し、中ほどを伏せ、末4桁を出す。全マスクでは接頭辞と星だけが残る。この一段で、よくあるクラウドとコードホストのトークンは、少なくとも形式ルールに掛かる、と本機で示せる。
SSH 秘密鍵は、たいていこの接頭辞ではない。OpenSSH の秘密鍵は -----BEGIN OPENSSH PRIVATE KEY----- で始まる PEM ブロックで、中ほどは Base64、末尾に対応する END 行がある。VPN 設定、kubeconfig、データベース接続文字列、アリババクラウドの AccessKey が AKIA のような形をしていなければ、形式マスキングは拾わない。問い合わせの電話に星を付けても、「Agent が id_ed25519 を文脈へ読んだ」は解けない。問い合わせを対話型AIへ貼る前に、形式マスキングが同じ顧客へ戻る理由は、問い合わせ原文を対話型AIに貼る前、形式マスキングが同じ顧客に紐づく理由にある。あちらが残すのは身元の層である。こちらが残すのは通行証であり、中継ログの通行証は、そのままログインに使えることが多い。
トークンが glpat-***wQ4x になっても、末4桁とリポジトリのホストが揃えば、案件は絞れる。全マスクは末4桁を消す。それでも「この会話がどの機械、どのクラスタの話か」は消えない。本当に一層減るやり方は、秘密鍵とクラウドの鍵をプロンプトへ入れないことである。手順書は「鍵は別のワンタイムリンクで渡す」と書き、Agent には手順だけを見せ、材料は見せない。同僚へパスフレーズを渡すときはワンタイムリンクを使う。現在のタブで AES-256-GCM により暗号化し、平文は 32 KB まで、鍵は s.html?id={id}#{key} の # の後ろ、サーバが一時保管するのは暗号文だけである。作成も閲覧も登録不要ですぐ使え、先にアカウントは要らない。
sk-、glpat-、ghp_、AKIA はルールで識別できる。末4桁は範囲を狭め得る。
短い接頭辞がない。Base64 の一塊がプロンプトへ入れば、中継ログにも一塊のまま残る。
プロンプトには手順だけを書く。材料はワンタイムリンクへ回し、暗号文はサーバ、鍵は # の後ろだけ。
問い合わせの星付け、チャット送付と何が違うか
三つとも「平文が目の前を離れる」話である。残るコピーの種類は同じではない。
問い合わせを対話型AIへ貼るときの第一のリスクは、「同じ一人へ戻せるか」である。電話に星を付けても、氏名、住所、受付番号は残る。中継が Agent の呼び出し記録を売るときの第一のリスクは、「他人のシステムへまだ入れるか」である。GitLab トークン、SSH 秘密鍵、クラウドの鍵そのものがログイン材料である。二つを「AI へ貼った」へまとめると、処置の順番が消える。問い合わせは、まず身元の層が残っていないかを見る。鍵は、まず本文にそのままで使える通行証があるかと、この hop に本文を見なければならない中継があるかを見る。
クラウドの環境変数が流出したあと、新しい鍵をチャットへ戻してはいけない理由は、クラウドの環境変数が流出したあと、新しい鍵をチャットに送ってはいけない理由にある。あちらは二巡目の漏洩である。Slack、チケット、スクリーンショットが、検索でき、同期される平文のコピーを残す。本記事は一巡目がモデル呼び出しの鎖で起き得ることである。鍵を「同僚へ送った」わけではない。作業領域を持った Agent にデプロイを頼んだだけである。チャット履歴と中継ログは同じアーカイブではない。処置は同じである。新しい鍵を、本文が残る通路へ載せない。
URL の # fragment は HTTP リクエストに入らない。理由はURL の # fragment がサーバーログに出ない理由にある。ワンタイムリンクが復号鍵を fragment へ付けるのは、暗号文を一時保管するサーバから鍵を隠すためである。中継はその逆である。仕事が本文を読むことである。「焼却サーバは鍵を見ない」を「任意の中間者がプロンプトを見ない」と読まないでほしい。二本の経路の見える範囲は違う。どちらもネットワークパネルでその場照合できる。
UsePwd は他人の中継ログを止められない。許可した作業領域を Agent が読むことも止められない。照合できるのは、よくあるトークンが本機で覆えるかと、鍵を暗号文だけを一時保管するワンタイムリンクへ回せるかである。本記事を「このサイトを入れれば中継は売れなくなる」とは読まないでほしい。
覆えたものと覆えなかったものをその場で照合する
目標は「すべての中継が 6TB を売っている」を証明することではない。いま使っているブラウザで、どの文字列が覆われ、どれが平文のまま残るかを示すことである。
-
01
本番では使わないテスト文を二本用意する
使用中の秘密鍵、クラウドの鍵、GitLab トークンは書かない。一本目は偽のトークン、たとえば
glpat-TESTONLY0000000000wQ4xとsk-test_UsePwdRelayCheck20260916。二本目は偽の PEM の殻だけで、-----BEGIN OPENSSH PRIVATE KEY-----、USEPWD-FAKE-KEY-NOT-REAL、対応するEND行だけを書く。以下の手順は形式ルールの照合だけであり、本物の通行証をモデルや中継へ渡さない。 -
02
本機のマスキングへ一本目を貼り、トークンが掛かるかを見る
マスキングを開く。ページは登録不要ですぐ使える。一本目をマスキング欄へ貼る。よくある結果は、
glpat-とsk-test_がトークンとして識別され、中ほどが星になることである。F12 でネットワークパネルを開く。この原文を処理しているあいだ、リクエスト本文に、いま貼ったテスト列は出ないはずである。この一段が照合するのは「形式ルールがよくある接頭辞を覆える」であり、「中継が止まった」ではない。 -
03
二本目を貼り、PEM ブロックがそのまま残るかを見る
消してから、偽の秘密鍵ブロックを貼る。よくある結果は、
BEGIN/ENDの一塊が残ることである。形式マスキングは PEM 装甲を欄として見ない。この結果をメモする。Agent が本物のid_ed25519をプロンプトへ読めば、中継ログに出るのはこの覆えないブロックであり、星付きの電話番号ではない。問い合わせのマスキングは、この層まで届かない。 -
04
「手順」と「材料」を分け、ワンタイムリンクへ回す
ワンタイムリンクを開き、偽のパスフレーズ
RelayCheck-20260916でテスト用リンクを作る。回数は既定の 1、期限は 24 時間のままにする。生成後はs.html?id=と#の二段が見えるはずである。ネットワークパネルでサーバへ送るのは暗号文であり、リクエスト URL に#の後ろは出ない。プロンプトには「材料はワンタイムリンクにある」とだけ書き、パスフレーズそのものは書かない。測り終えたらリンクを捨てる。 -
05
設定ファイル一式を照合するときは、ファイル暗号化へ切り替える
VPN 設定や 32 KB を超える材料は、ワンタイムリンクには向かない。1件 5 GB までなら、ファイル暗号化で本機の AES-256-GCM ストリーム暗号化を行い、
.lock/.encを書き、ファイルは既定でアップロードしない。パスフレーズは別のワンタイムリンクで渡す。照合するのは「暗号文ファイルとパスフレーズを、本文が残る同じ通路へ載せない」であり、「暗号化したから Agent が秘密鍵を読んでよい」ではない。
エディタの API Host がすでに第三者の中継を指しているなら、本番の鍵で試さない。捨ててよいプロジェクトで、.env や ~/.ssh を文脈へ読むかを先に照合し、その hop を続けるかを決める。公式 API への直結は、灰色の中間者を一本減らす。それでも秘密鍵をプロンプトへ書いてよいことにはならない。
プロンプトに鍵を書かないあとでも止まらないこと
「自分では貼っていない」を「中継ログに鍵はない」と読むと、同じように照合できる境界をいくつか落とす。
Agent に作業領域を読む権限があれば、対話欄を開いていなくても、鍵をリクエストへ継ぎ足せる。YOLO モード、端末コマンドの自動承認、リポジトリ全体を文脈にする、はいずれもこの面を広げる。論文が測った「戻り内容へ余分な指示を埋め込んだ」は、別の能動的な経路である。中継は送り出した鍵を残せるだけでなく、受け取ったコードも書き換え得る。本サイトは、ある中継が改ざんしているかを照合できない。見えない hop は、ログを残し得るし、応答を書き換え得る、とだけ言える。
すでに売られた 6TB は、今日プロンプトの習慣を変えても消えない。研究者は、その中の通行証がまだ有効であり得ると述べている。処置の順番は、クラウドコンソール、GitLab、ホスト、VPN で先に失効し、それから新しい材料を出すことである。新しい鍵を Agent の文脈へ戻さず、チャット窓へも戻さない。長期保管や複数端末の同期は、専用のパスワードマネージャーへ任せる。UsePwd にアカウントもパスワード保管庫もなく、失ったリンクを利用者ごとに取り戻すこともできない。立場の説明は概要にある。
形式マスキングは補助であり、一つも漏らさない保証ではない。重要な外向け文面は、目視してもう一度見てほしい。パスフレーズそのものはパスワード生成で 6–128 文字のあいだで作り、強度チェックで本機の強度と、ページ同梱の弱いパスワード公開リストを見る。ネット全体の Have I Been Pwned 照会ではない。これらのページも本記事と同じく、登録不要ですぐ使える。HTTPS の小さな錠や、「一時」と付いた会話を、「中継プロセスの中に平文がない」とは読まないでほしい。回線の暗号化と、プロセス内の本文は、同じ層ではない。
鍵をプロンプトに書いたあとよく聞かれること
以下の4つは本記事の境界の中だけを答える。ツールページのボタン説明は繰り返さない。
読み終えたら覆えたものと覆えなかったものを照合する
記事が答えたのは、鍵を Agent のプロンプトに書いたあと、中継が呼び出し記録をそのまま売れる理由である。本物ではないテスト用トークンで形式マスキングを照合するか、材料をワンタイムリンクへ回すなら、該当ページを開いてください。先に登録する必要はありません。