コーディングエージェントのリモート操作はエンドツーエンド暗号化されているか? リレー、鍵サービス、アプリから見えるもの
コーディングエージェント向けのリモート操作ツールは、エージェントとリポジトリを自分のマシン上に置いたまま使えます。多くのツールは、通信がエンドツーエンド暗号化されており、リレーをセルフホストできるとうたっています。どちらも有用ですが、それぞれが取り除くのは特定のリスクだけで、他のリスクは残ります。この記事では、経路上のどの部分から何が見えるのかを説明します。セルフホストのリレーを運用する価値があるかどうかの判断材料にしてください。
Pontia は私たちが開発しているツールです。他のツールに関する事実は、2026年11月12日時点で各ツールのドキュメントを確認したものです。
結論
- Claude Code Remote Control は Anthropic までの通信経路でのみ暗号化されます。接続中、Anthropic がトランスクリプトを保存します。
- Happy、Conductor、Pontia はエンドツーエンド暗号化された通信を中継するため、リレーからは Session の内容を読めません。
- T3 Connect は Cloudflare トンネル経由で通信を運びます。T3 のドキュメントには、その上にエンドツーエンド暗号化を重ねるという記述はありません。
- エンドツーエンド暗号化だけでは不十分です。 どの鍵が自分のマシンのものかをスマートフォンに伝える主体は、自前のクライアントを認可できてしまいます。Happy と Conductor は QR コードでデバイスをペアリングします。Pontia Cloud と Tailscale のコーディネーションサーバーは鍵を配布する側です。
- どのリモートを使っても、コードはモデルプロバイダーに送られます。
コードはモデルプロバイダーに送られる
エージェントは自分のマシン上で動きますが、プロンプト、読み込んだファイルの内容、コマンドの出力を、Anthropic、OpenAI、xAI などのモデルプロバイダーに、そのプロバイダーのデータポリシーのもとで送信します。リモート操作ツールを使ってもこの点は変わらず、リレーの設定でも変えられません。この記事の残りでは、すでに使っているプロバイダーに加えて、リモートによって増える関係者について扱います。
リモートの構成要素
コーディングエージェントのリモートはどれも4つの構成要素を持ちます。1社が複数を運営している場合でも同じです。
| 構成要素 | 役割 |
|---|---|
| ホスト | エージェント、ツール、プロジェクトファイルを動かす |
| クライアント | 入力に使うスマートフォンアプリ、ブラウザのページ、デスクトップアプリ |
| リレー | クライアントとホストが直接接続できないときに、両者の間でバイト列を運ぶ |
| 鍵・ID サービス | サインインを行い、どのクライアントがどのホストに到達できるかを決め、相手の公開鍵がどれかを双方に伝える |
エンドツーエンド暗号化を使うと、リレーを信頼する必要がなくなります。リレーは読むことも改ざんすることもできないデータを運ぶだけです。一方で、鍵サービス、クライアントのコード、両端への信頼は残ります。
各選択肢で何が見えるか
| 選択肢 | リレーから見えるもの | 鍵サービス | 備考 |
|---|---|---|---|
| Claude Code Remote Control | 平文。通信は TLS で Anthropic API を通り、接続中はトランスクリプトが Anthropic のサーバーに保存される | Anthropic | Zero Data Retention では利用できない |
| Codex in the ChatGPT app | OpenAI のガイドは「安全なリレー層」と説明しているが、エンドツーエンド暗号化かどうかは書かれていない | OpenAI | |
| T3 Connect | 通信は Cloudflare トンネルを通る。T3 のリレーは接続を確立するだけで、Session をプロキシしない | T3 Connect アカウントと、デバイスごとのペアリングリンク | Cloudflare はトンネルのホスト名に対して HTTPS を終端し、T3 のドキュメントには二重目の暗号化の記述はない。製品の利用イベントは、オフにしない限り T3 と PostHog に送られる |
| Happy | 暗号文。ホストがオフラインでもスマートフォンから Session を読めるよう、リレーに保存される | 自分のスマートフォン。スマートフォンがアカウントのプライマリキーを持ち、コンピューターはスマートフォンで QR コードを読み取って認可する(モバイルアクセス) | プッシュ通知は Expo を経由し、Session のタイトルが平文で含まれる。スマートフォンアプリは、オフにしない限り分析データを PostHog に送る(セルフホストガイド) |
| Conductor | 暗号文 | 自分の Mac。スマートフォンは、1回限り有効で10分後に失効する QR コードを読み取ってペアリングする | iOS のみ。Mac 上のローカル Workspace が対象 |
| Tailscale + SSH | DERP リレー上の WireGuard 暗号文 | Tailnet Lock を有効にしない限り、Tailscale のコーディネーションサーバーがノード鍵を配布する | その上で SSH ホスト鍵を自分で検証する |
| Pontia | 暗号文。保存はしない。Edge からはどのデバイスか、IP アドレス、タイミング、サイズが見える | Pontia Cloud | 製品分析なし。詳細は後述 |
Happy、Conductor、Tailscale の行を見ると、鍵サービスが重要な理由がわかります。Tailscale のドキュメントにははっきり書かれています。Tailnet Lock がなければ、悪意のあるコーディネーションサーバーがネットワークにノードを追加し、自分のマシンと通信できてしまいます。サーバーが鍵を選ぶ以上、ノード間のエンドツーエンド暗号化は役に立ちません。Happy と Conductor は、自分のデバイス同士で QR コードを読み取ってペアリングすることでこの問題を避けています。
エンドツーエンド暗号化が守らないもの
鍵・ID サービス。 どの公開鍵が自分のマシンのものかをブラウザに伝え、どのクライアントを許可するかをマシンに伝えるサービスは、自前のクライアントを認可できます。暗号化は依然としてエンドツーエンドですが、相手の端が違うだけです。QR コードやフィンガープリントの確認でデバイスを直接ペアリングすれば、このリスクはなくなります。アカウントにサインインしているだけでは、なくなりません。
クライアントのコード。 Web クライアントは、開くたびにサービスから JavaScript を読み込みます。ネイティブアプリはストアの更新でコードを受け取ります。どちらの場合も、クライアントを配布する会社は、復号したデータを漏らすバージョンを配布できます。オープンソースであれば監査はできますが、実行しているビルドがソースと一致することの証明にはなりません。
メタデータ。 内容を読めないリレーでも、IP アドレス、接続した時刻、接続時間、データ量は見えます。
両端。 ホストが侵害されると、エージェントが動いている場所なので、すべてが漏れます。スマートフォンを紛失すると、クライアントが保存しているデータと、サインインが続いている間にそこから到達できるものすべてが漏れます。
リレー以外のサイドチャネル。 プッシュ通知、製品分析、クラッシュレポートは、通常は別のサービスに送られます。何が含まれるかを確認してください。Happy のセルフホストガイドにはそれらが列挙されており、T3 Code は利用イベントをドキュメントに記載しています。
Pontia の各構成要素の扱い
リレーは Edge と呼ばれ、Pontia Cloud が鍵・ID サービスです。
暗号化。 ブラウザは接続ごとに新しい鍵ペアを作ります。Pontia Cloud は、そのブラウザの鍵を1台のデバイスとデバイス鍵のバージョンに結び付けるケイパビリティに署名します。有効期間は60秒です。ブラウザはこれを HPKE ハンドシェイク(X25519、続いて ChaCha20-Poly1305)の中でデバイスに送ります。デバイスは、ケイパビリティに有効な Cloud の署名がない限り Session を拒否します。リクエストには認証済みの ID が付くため、取得されたリクエストを再送することはできません。
Edge は暗号文を転送し、何も保存しません。デバイス ID、IP アドレス、タイミング、サイズは見え、転送を拒否することもできます。リクエストを読むことも改ざんすることもできません。Session の履歴はデバイスに残るため、デバイスがオフラインのときは Session にアクセスできません。
Pontia Cloud はデータ経路上にはありませんが、各デバイスの公開鍵を保持してブラウザに渡し、デバイスが受け入れるケイパビリティに署名します。そのため、侵害された Pontia Cloud は、自前のブラウザを認可してデバイスに到達させることができます。Pontia には、このリスクを取り除くデバイスのペアリングやフィンガープリントの確認はありません。Edge をセルフホストしても、サインインと認可は Cloud が引き続き提供するため、この点は変わりません。
クライアントのコード は、app.pontia.dev の場合、アプリとしてインストールしたときも含めて Pontia が配信します。Local Dashboard はデバイス上の pontiad が配信します。
スマートフォン上 では、Dashboard がすぐに開けるよう、最近の Session のタイムラインをブラウザのストレージにキャッシュします。ロック解除されたスマートフォンのブラウザを使える人は、それを読むことができます。
デバイス上 では、デバイスの ID 鍵と認証情報を保持する $PONTIA_HOME を保護してください。漏えいした ID を置き換えるには pontia remote rotate-key を実行します。紛失したデバイスを切り離すには、デバイス設定 で削除します。セキュリティ には、すべてのシークレットと漏えい時の対応がまとめられています。
Pontia Cloud を使わずに Pontia を使う
Pontia Cloud やそのホスト型クライアントを信頼したくない場合は、リモートアクセスを使わないでください。Local Dashboard は 127.0.0.1:8080 で待ち受け、$PONTIA_HOME/config.toml の external_api_token を使います。SSH トンネル経由でアクセスします。
ssh -N -L 8080:127.0.0.1:8080 agent@your-server 続いて、pontia up が表示するトークン付きの URL を開きます。スマートフォンにはポート転送ができる SSH クライアントが必要です。信頼の対象は、上の Tailscale + SSH の行と同様に、自分の SSH 鍵とネットワークに移ります。bind_addr はループバックのままにしてください。変更すると、トークンで保護された API がそのネットワークに公開されます。
リレーをセルフホストすべき場合
セルフホストの Edge で変わるのは、誰が暗号文を中継するかだけです。次のような場合に運用する価値があります。
- メタデータが重要な場合。 Pontia の Edge ではなく自分の Edge が、IP アドレスと接続時刻を見ることになります。
- ポリシーや契約上、暗号化されていても通信を自社のインフラ内に留める必要がある場合。
- 可用性と設置場所を自分で管理したい場合。 たとえば、デバイスの近くにリレーを置きたい場合や、私たちのサーバーの稼働に依存したくない場合です。
鍵サービスやクライアントのコードについては役に立ちません。Pontia Cloud が引き続きサインイン、接続の認可、app.pontia.dev の配信を行うためです。
Happy のセルフホストサーバーはさらに踏み込んでいます。アカウント情報と暗号化された Session ストレージを Happy のサーバーから移すため、プッシュ通知と分析を除いて、同社はデータ経路から外れます。ベンダーを完全に排除することが目的なら、そのモデルや素の SSH を、リレーのみのセルフホストと比較してください。
Pontia Edge のデプロイ
systemd を備えた公開 Linux サーバー、パブリック IPv4 アドレス、そしてポート80と443、または DNS-01 証明書を使う1つのカスタム HTTPS ポート(デフォルトは8443)が必要です。Edge 設定 でワンタイムコマンドを生成し、サーバー上で実行します。このコマンドは署名済みの pontia-edge リリースをインストールし、edge.pontia.dev 配下のホスト名に Let’s Encrypt 証明書を取得して、サービスを起動します。その後、デバイスを登録するときにその Edge を選択します。詳細は Edge のセルフホスト を参照してください。
どのリモートにも尋ねるべき質問
- どの鍵が自分のマシンのものかをクライアントに伝えるのは誰か。自分で確認できるか。
- 開くたびに、クライアントのコードはどこから来るのか。
- リレーは何を、どれくらいの期間保存するのか。
- プッシュ、分析、クラッシュレポートなど、他のチャネルから何が出ていくのか。
- 紛失したスマートフォンから何が読めるのか。どうやって失効させるのか。
- ベンダーのサービスをまったく使わずにツールを使えるか。