# 試作検証結果 — 2026-10-31 環境: Linux / Node.js v24.22.1。外部npm依存なし。 ## 実行結果 `node --test tests/*.test.mjs`: **15件成功、0件失敗、0件スキップ**。 実行記録: `test-transcript.txt`。 主な検証内容: - 日本語・絵文字の保存形式、署名・ハッシュ検証、別途指定した鍵と記録ダイジェストの照合。 - テキスト・時刻・オリジン・署名・アルゴリズム・件数の改変を拒否。 - レコードの間引き・末尾削除・順序変更・重複を署名済みマニフェストに対して拒否。 - 別鍵の有効な記録への置換を、元の照合票で拒否。 - 同じ鍵で再署名した短縮版は、鍵照合だけでは通り、元の記録ダイジェストを併用すると拒否。この限界を意図的に試験。 - 空記録・不正URL・無効日付・過大入力・不正UTF-8相当文字列を拒否。 - 重複JSONキー・BOM・指数/小数・負ゼロ・深すぎる構造・未対応フィールドを拒否。 - RFC6962型Merkleルートを、Node cryptoによる別実装と0/1/3/5/6葉で比較。 - 秘密鍵の非抽出属性と、最小限の拡張権限・通信制限を検証。 - DOM取得関数をモック上で実行し、選択なし・編集欄・制限スキーム・過大入力を拒否。実ブラウザ試験ではない。 `node verify.mjs examples/synthetic-pack.json --checkpoint examples/synthetic-checkpoint.json`: **INTEGRITY_OK**。 機械可読結果: `example-verification.json`。合成データであり、本番のAI会話収集を試験した結果ではない。 全JavaScriptモジュールの `node --check` による構文チェック成功。 ## 実施できなかった検証 この環境にはChrome/Chromium実行バイナリがなく、テスト用バイナリ取得も有効なZIPとして完了しなかった。以下は**未確認**: - ChromeがManifest V3拡張をロードすること、CSPの実挙動。 - ツールバークリックによるactiveTab権限、実ページへのisolated world実行。 - IndexedDBに非抽出可能CryptoKeyを永続化し、Chrome再起動後に利用できること。 - Web Locksによる複数画面同時保存、保存中ポップアップ終了時の実際の挙動。 - ダウンロード・リセット・DOM変更時のUI挙動と見た目。 - ChatGPT・Claude・Geminiの現行UI、各OS・各Chrome版。 独立したセキュリティ監査、VAP適合性試験、第三者再現、Chrome Web Store審査は未実施。 ## 実機確認手順 1. 新しいChromeプロファイルで `extension` を読み込み、拡張ページにエラーがないことを確認。 2. 合成テキストを表示したHTTP/HTTPSページでテキストを選択し、取り込みプレビューを確認。 3. 同意チェックなしでは保存できないことを確認。 4. 保存し、記録庫に本文とオリジンだけが表示されることを確認。 5. Chromeを終了・再起動し、記録が残ることと追加保存・書き出しが成功することを確認。 6. JSONと照合票を別々に保存し、拡張内検証とNode検証が一致することを確認。 7. 書き出しJSONの本文1文字を変更し、両方の検証が不成立になることを確認。 8. 別の合成記録を作り、古い照合票との検証が不成立になることを確認。 9. シークレット、chrome://ページ、選択なし、入力欄、32 KiB超過時に取得が成立しないことを確認。 10. 複数ウィンドウから保存・リセットを行い、連番と署名が壊れないことを確認。保存成功表示前に閉じた場合は、記録庫で保存結果を確認する。 11. オフラインで保存・検証でき、DevToolsのネットワーク表示で拡張からの外部通信がないことを確認。 12. リセット後に新しい鍵指紋となり、以前の書き出しファイルは旧照合票で引き続き検証できることを確認。 実機結果を埋めるまでは、機密情報を含まない合成テキストで試用する。