HN 日本語サマリー

← 一覧へ戻る
AI・機械学習

MCPツールにおけるコンテキスト漏洩を防ぐインメモリプライバシースクリーン

In-memory privacy shield to prevent context leaks in MCP tools (github.com)

7 pointsby jvonb1 コメント

要約

Rohan Protocolは、モデルコンテキストプロトコル(MCP)ツール実行中のコンテキスト漏洩、認証情報漏洩、プロンプトインジェクションを防ぐインメモリセキュリティプロキシ「Rohan Protocol Official Model Context Protocol (MCP) Server & Security Gateway」を発表しました。このオープンソースのMCPサーバーは、クライアントサイドのRAM分離、ポリシーファイアウォール、メモリゼロ化技術により、機密情報がモデルのコンテキストウィンドウに入るのを防ぎます。

全文翻訳

🛡️ Rohan Protocol

公式モデルコンテキストプロトコル(MCP)サーバー & セキュリティゲートウェイ

ツール実行中のLLMコンテキスト漏洩、認証情報漏洩、プロンプトインジェクションを防ぐインメモリセキュリティプロキシ。

[画像: NPM Version] [画像: Glama Server] [画像: Smithery Server] [画像: License: MIT] [画像: IEEE Paper] [画像: Settlement]

📦 公式オープンソースMCPサーバーモノレポ
コアとなるモデルコンテキストプロトコル(MCP)サーバーの実装は、このリポジトリのpackages/mcp/に直接配置されており、npmでは@rohan-protocol/mcpとして配布されています。

ソースからの実行 • MCPツール • クライアントセットアップ • アーキテクチャ • セキュリティ

⚠️ パブリックベータ(v0.6.0):Rohanは現在、クライアントサイドのRAMウィットネス分離、V-01セマンティックポリシーファイアウォール、およびV-02決定論的メモリゼロ化(zeroize)を強制し、ネイティブクライアントサイドWASM ZK-SNARK証明回路がアクティブな研究中(マイルストーン1)である間、MCPツールの呼び出しを保護しています。

⚡ 問題点:MCPにおけるプレーンテキストコンテキスト漏洩

モデルコンテキストプロトコル(MCP)は、自律エージェントをツールに接続します。しかし、トランスポート暗号化(TLS)は転送中のデータを保護するだけです — ホスト境界では、標準的なMCPツールはクリアテキストで実行されます。

🔴 ROHANなし(標準MCP)
エージェントがツールを呼び出す ➔ "api_key": "sk_live_...", "db_password": "secret" がプレーンテキストで渡される
                 ➔ LLMの会話コンテキストと推論ログに直接漏洩
                 ➔ コンテキスト漏洩とプロンプトインジェクションの恒久的なリスク

🟢 ROHAN SHIELDあり
エージェントがツールを呼び出す ➔ 引数は隔離されたクライアントRAMで厳密に評価される
                 ➔ V-02 Zeroizeがウィットネスメモリを揮発性メモリから即座に消去
                 ➔ 平文のパラメータがモデルコンテキストウィンドウに入ることは決してない

🛠️ ソースからのMCPサーバー実行

このリポジトリには、完全なオープンソースMCPサーバー実装が含まれています。ローカルでクローンしてサーバーを実行できます。標準のstdio経由で接続します。

# 1. リポジトリをクローン
git clone https://github.com/rohan-protocol/sdk.git
cd sdk

# 2. 依存関係をインストール & パッケージをビルド
npm install
npm run build

# 3. MCPサーバーをstdio経由で直接起動
node packages/mcp/dist/server.js

または、クローンせずにnpxで直接実行します。

npx -y @rohan-protocol/mcp@latest

🔧 公開されているMCPツール

@rohan-protocol/mcpサーバーは、標準のモデルコンテキストプロトコルツールエンドポイントをJSON-RPC overで登録します。

| MCPツール |
| --- | --- |
| rohan_zk_handshake | ツールの実行パラメータを一時的なRAMで評価し、プロンプトインジェクションを剥離し、暗号化された32バイトのインテントコミットメントを生成し、状態遷移をMidnightにガスレスでアンカーします。 |

入力パラメータ
targetAgentId (string), intent (string), privatePayload (object)

🚀 ユニバーサルMCPクライアントセットアップ

1. Claude Desktop

claude_desktop_config.jsonにrohan-shieldを追加します。

{
  "mcpServers": {
    "rohan-shield": {
      "command": "npx",
      "args": ["-y", "@rohan-protocol/mcp@latest"],
      "env": {
        "ROHAN_RELAYER_URL": "https://api.rohanprotocol.network/api/v1/handshake"
      }
    }
  }
}
2. Cursor IDE & Windsurf
  1. Settings → Features → MCP Servers → Add New MCP Server に移動します。
  2. 名前をrohan-shieldに設定します。
  3. タイプをcommandに設定します。
  4. コマンドとして npx -y @rohan-protocol/mcp@latest を使用します。

📁 モノレポ構造

rohan-protocol/sdk
├── packages/
│   ├── mcp/         # 🤖 公式モデルコンテキストプロトコル(MCP)サーバー (Stdio)
│   ├── sdk/         # ⚙️ コアインメモリコミットメントエンジン & リレーヤークライアント
│   └── webmcp/      # 🌐 React / Next.js ブラウザフック (V-07 DOM分離付き)
├── contracts/       # 📜 Midnight Compactスマートコントラクト (rohan_handshake.compact)
└── README.md

🏗️ アーキテクチャ

┌─────────────────────────────────────────────────────────────────────────────┐
│                           自律エージェントランタイム                          │
│               Claude Desktop / Cursor IDE / カスタムエージェントワークフロー          │
└──────────────────────────────────────┬──────────────────────────────────────┘
                                       │ ツール実行 (JSON-RPC)
                                       ▼
 ┌───────────────────────────────────────────────────────────────────────────┐
 │                  [@rohan-protocol/mcp] サーバー (packages/mcp)              │
 │  • Stdio MCPプロトコルサーバー: Anthropic MCP仕様に準拠                   │
 │  • V-01セマンティックファイアウォール: 隠されたUnicode & プロンプトインジェクションをフィルタリング |
 └─────────────────────────────────────┬─────────────────────────────────────┘
                                       │ インメモリウィットネス
                                       ▼
 ┌───────────────────────────────────────────────────────────────────────────┐
 │                  [@rohan-protocol/sdk] エンジン (packages/sdk)              │
 │  • 一時RAMコミットメント (32バイトインテントハッシュ)                      │
 │  • V-02決定論的ゼロ化: バッファをメモリ内で即座に上書き                     │
 │  • ディスク書き込みゼロ。スワップファイル露出ゼロ。                         │
 └─────────────────────────────────────┬─────────────────────────────────────┘
                                       │ ストリーム可能なHTTP (NDJSON)
                                       │ 受信 ➔ 承認 ➔ 証明 ➔ アンカー
                                       ▼
 ┌───────────────────────────────────────────────────────────────────────────┐
 │                       ROHANリレーヤーペイマスター                           │
 │  • ガスレストランザクションスポンサーシップ ($tDUSTは自動的にカバー)
 │  • スケールツーゼロネイティブ (永続的なSSE接続ボトルネックなし)
 └─────────────────────────────────────┬─────────────────────────────────────┘
                                       │ 不変リプレイ保護
                                       ▼
 ┌───────────────────────────────────────────────────────────────────────────┐
 │                      MIDNIGHTブロックチェーンレジャー                         │
 │  コントラクト: rohan_handshake.compact (Preprod: 585ac0c4448257507d8ffa2a...)
 └─────────────────────────────────────┘

🛡️ セキュリティ登録(脅威と緩和策)

脅威ID
V-01
V-02
V-05
V-07
脅威ベクトル
敵対的なプロンプトインジェクション
残留ヒープ漏洩
永続的なソケット枯渇
DOM / WebWorkerスクレイピング
緩和メカニズム
プロバー前セマンティックファイアウォール: 範囲外のペイロードをインターセプトし、ゼロ幅Unicodeインジェクション文字([\u200B-\u200D\uFEFF])を剥離します。
決定論的メモリゼロ化: マルチパス揮発性メモリワイピングにより、ウィットネスバッファを決定論的な0x00バイトパターンで上書きします。
スケールツーゼロNDJSON: 長寿命のSSE接続の代わりにチャンク化されたストリーム可能HTTPを使用し、アイドル時にプロキシをシャットダウンできるようにします。
WebMCPスレッド分離: WebWorker内で実行バッファを分離し、悪意のあるサードパーティブラウザ拡張機能から保護します。

📄 学術研究

暗号基盤、脅威登録、および形式的な数学的証明は、以下の研究論文に文書化されています。

Rohan: A Stateless Zero-Knowledge Trust Gateway for Privacy-Preserving Agentic Workflows via Streamable HTTP
Model Context Protocol Working Group & Rohan Protocol Lab
Zenodo / IEEE Spec v2.0 経由で公開 • DOI: 10.5281/zenodo.22730240

🤝 コミュニティと貢献

私たちはオープンに開発しています。

  • 🐛 バグまたはバイパスベクターを見つけましたか?GitHub Issueを開いてください。
  • ⭐️ サポート: プライバシーファーストのMCPツールを他の開発者が発見できるよう、リポジトリにスターを付けていただけると幸いです。

MITライセンスの下でライセンスされています。Rohan Protocolコミュニティによってメンテナンスされています。