# VAP Browser Recorder — 実験版 0.1.0 2026年10月31日 / Verifiable AI Provenance Framework (VAP) を参照したChrome拡張の試作。 **選択した画面上のテキストを端末内で保存し、署名付きで書き出して検証できます。** サーバー契約・APIキー・npmインストールは、拡張機能の利用には不要です。 これは独自の観測記録形式 `vap-browser-observation/0.1.0` です。VAP v1.2 Draft 3準拠、OAP準拠、公式Evidence Pack形式、Chrome Web Store公開済み製品、AI提供者が署名した記録のいずれも主張しません。既存の `vap-interop-demo/0.2.0` 検証器には投入できません。 ## 導入(デスクトップ版Chrome) 1. ZIPを展開します。 2. Chrome 137以降で `chrome://extensions` を開きます。対応下限は宣言値であり、そのバージョンでの実機試験は未実施です。 3. 「デベロッパー モード」をオンにします。 4. 「パッケージ化されていない拡張機能を読み込む」で、**manifest.jsonが入っている `extension` フォルダー**を指定します。 5. 拡張メニューからVAP Browser Recorderを固定します。 ## 使い方 1. AIチャットなどの通常のHTTP/HTTPSページを開き、保存したい回答のテキストをマウスで選択します。 2. 拡張アイコンを押し「選択したテキストを取り込む」を押します。 3. 本文とサイトのオリジンを確認し、「この内容を保存する」にチェックして「署名して保存」を押します。 4. 「記録庫」を開き、必要に応じて記録JSONを書き出します。 5. 続けて「同じ記録の照合票を保存」を押し、本文とは別の信頼できる場所に保管します。 6. 記録JSONと、以前に別途保管した照合票を選び「この端末で検証する」で照合します。 選択範囲は取り込み時点のスナップショットです。保存前にタブの表示が更新されても、プレビュー中の内容が保存されます。会話の自動取り込み、プロンプトの送信監視、AIの操作停止は実装していません。ChatGPT・Claude・Gemini専用アダプターはなく、通常のDOMテキスト選択を使用します。これらのサービスの現行画面での動作は未確認です。 Chrome内部ページ、Web Storeなどの制限ページ、PDFビューア、iframe内の選択、入力欄・編集欄は対象外です。シークレットモードは無効です。1回32 KiB、1記録庫500件、ファイル4 MiBが上限です。 ## 保存と権限 | 項目 | 動作 | | --- | --- | | 取得内容 | ユーザーが選択したDOMテキスト、サイトのオリジン、端末時刻 | | URL | パス・クエリ・フラグメント・ページタイトルを取得対象に含めない | | 本文 | 拡張専用IndexedDBに平文保存。書き出しJSONも平文 | | 鍵 | 端末内でEd25519鍵を生成。秘密鍵はWebCryptoの非抽出可能なCryptoKeyとしてIndexedDBに保存 | | 権限 | `activeTab` と `scripting` のみ。常設の全サイト権限、常時content scriptなし | | 通信 | ネットワーク通信なし。CSPで `connect-src 'none'` | | 同期 | アカウント同期・クラウドバックアップなし | | リセット | 現在の記録と鍵を上書きし新規記録庫へ。物理消去・削除証明ではない | 機密情報・個人情報を含む本文の保存可否は、保存前のプレビューで判断してください。自動匿名化はありません。ブラウザプロファイルや端末を操作できる第三者への機密性を保証しません。非抽出可能鍵も、同じ拡張権限を持つ悪意あるコードによる署名利用や端末管理者による改変を防ぎません。アンインストール・プロファイル削除で記録が失われるため、必要な記録は書き出してください。 ## 何を検証するか - SHA-256による本文・メタデータのイベントハッシュ。 - Ed25519による各イベントとマニフェストの署名。 - 連番と前イベントのハッシュによる記録順。 - RFC 6962型のMerkle Tree Hash(0x00 / 0x01ドメイン分離、奇数葉の複製なし)。 - マニフェストが署名対象に含める件数・先頭末尾ID・ポリシー・最終ハッシュ・Merkleルート。 - 別途保管した照合票を指定した場合、その鍵指紋と記録全体のダイジェストとの一致。 署名・ハッシュ一致は**このファイル集合の整合性**です。表示ページは保存前に編集できます。本文の正しさ、AI提供者の真正な出力、モデル内部の判断、非表示ツール呼び出し、選択されなかった会話、信頼できる発生時刻は証明しません。イベント時刻は順序判定に使わず、端末時計の巻き戻りを隠しません。 同梱公開鍵だけでの検証は信頼の確立ではありません。記録と鍵の丸ごと置換は、信頼できる経路で別途保持された鍵指紋との照合がなければ検出できません。同じ鍵で短縮した記録を再署名する場合も、既存の完全な記録ダイジェストまたは外部コミットメントが必要です。 照合票は外部アンカーや認証局の証明書ではありません。自分で生成した照合票を同じZIPや同じ改変可能な保存場所に置くだけでは、独立した保護になりません。 ## ローカル検証 Node.js 22以降、外部依存なし。 ```sh npm test node verify.mjs observations.json node verify.mjs observations.json --checkpoint checkpoint.json ``` 成功時は `INTEGRITY_OK`、検証不成立時は `NOT_VERIFIED` です。成功結果にも提供者の出所・信頼できる時刻・VAP準拠の未確立を含めます。 `examples/synthetic-pack.json` と `examples/synthetic-checkpoint.json` は自動生成した合成データです。実際のAI会話やChromeからの取得記録ではありません。サンプルの照合票は、独立した信頼を与えるものではありません。 ## 検証状況 `docs/TEST-REPORT.md` に実行結果と残課題を記載しています。Nodeの暗号・改変試験は実施済みです。実際のChromeでのロード、activeTab、IndexedDBへのCryptoKey保存、ポップアップ操作、各AIサービスの画面での確認は未実施です。実機用の確認手順も同ファイルに含めています。 ## 製品化の順序 1. デスクトップChromeで手動収集経路を検証し、機密情報の保存方針と暗号化・鍵管理を詰める。 2. 記録時のハッシュを外部の収集サービスへ送信し、受領署名・信頼できる鍵配布・外部時刻証明・オフライン時の未確立表示を追加する。本文送信は別の明示的選択とする。 3. 自動収集は、ユーザーが有効化した対象タブの範囲を宣言し、DOM変更・ストリーミング・編集・分岐・欠測を明示する。全会話を取れたと推定しない。 4. AILEX等の提供者側ログと照合し、利用者観測と提供者署名の両方がある記録に進める。 5. 適用プロファイル、VAP v1.2条項別マッピング、外部アンカー、鍵失効・回復・保存期間を実装してから、適合性評価と配布審査を進める。 事業上は、無料のローカル保存・検証を入口に、有償の組織別保管、外部アンカー、権限管理、レビュー用提出パッケージへ広げる案が考えられます。これは提案であり、需要・料金・法的証拠力の検証は未実施です。 参照元・仕様との対応は `docs/SOURCES-AND-MAPPING.md`、バイト契約は `docs/FORMAT.md` を参照してください。