
2026/07/07 23:07
Show HN: Halo – 開源的で改ざん痕跡のあるAIエージェント向けランタイム証拠
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
本稿は、AI エージェントに対して改ざん検知可能な実行時ログを提供するオープンソース参照実装である「halo-record」を紹介する。これは付加のみで書き込まれ、SHA-256 ハッシュ化と RFC 8785 正規化を用いたハッシュ連結構造により構成され、プロデューサーへの信頼を必要とせず、誰でも整合性を検証できるようにしている。その最小限のスタックはレコーダー、バーファイア、witness クライアント、レポートサーバーの 4 つのコンポーネントで構成され、標準ライブラリ依存関係のみに加え、1 つの pip パッケージのみが必要である。ネットワークコールはオプションの"witness"を除き実行せず、記録数とチェーンフィンガープリントのみを受信するだけであり、ログ内容がインフラストラクチャから外に流出しないよう確保されている。生データの入力は保存されず、代わりに引数はハッシュ化され、一般的な秘密情報/PII 形式への最善の試みの正規表現パターンを用いて改行されたサマリーとして保存される(ディフェンス・イン・ dept)。監査向けのコードベースは、Apache-2.0 ライセンスの下で約 4,300 行の Python で構成されている。統合はシームレスであり、OpenTelemetry GenAI スパン対応(CrewAI や LlamaIndex などフレームワークを支援)、MCP インターセプタ、LangChain/LangGraph コールバック、Claude Code フック用のネイティブアダプターを提供し、エントリーポイントをラップしログファイルを指定する仅需 1 行(
from halo import trace)で実現可能(例:./audit.jsonl)。組み込みの 60 秒デモは、uvx --from halo-record halo demo --serveまたは pip install halo-recordにより実行でき、架空のベンダーシナリオをスケルトン化し、改ざん検知を実演できる。データがインフラストラクチャ内に保持され、外部"witness"アンカーファイルを用いて記録の削除がないことを証明できるようにすることで、SOC 2、EU AI Act、OWASP GenAI セキュリティプロジェクト、CSA AARM、AIUC-1 その他フレームワークへのコンプライアンス準備を支援している。本文
AI エージェント向け改ざん検知 Runtime 記録:ハッシュ連結による完全監査証跡
アーキテクチャと基本概念
AI エージェント(ツールコール、モデル呼出し、データアクセスなど)が行ったすべてのアクションは、追記のみで可能なハッシュ連結されたログの形式で保存されます。
- 改ざん検知機能: 記録が一度も変更されていないことを検証するには、作成者の信頼を要しません。
- 第三者検証可能: 顧客のセキュリティチームや任意の関係者が独立して監査を行うことができます。
- 監査証跡の提示: セキュリティレビューにおいては、説明文ではなく検証可能なレポートへのリンクを提供します。
- 対応の必要性: SOC2 チェックリストや AI 規制に準拠するための、書面での保証を超えたリアルタイム証明が必要とされています。
記録形式はオープンであり、以下のコンポーネントを備えた参考実装(パッケージ)が提供されます:
: 記録機能recorder
: 検証機能verifier
: 第三者による指紋保持クライアントwitness
: レポート配信サーバーreport server
なぜこのコードを信頼できるのか
エージェント内部へ組み込む際、以下の特性に基づいて信頼性を持たせています。盲目的に採用すべきではありませんが、以下の点は注目すべきです:
- ゼロのランタイム依存関係: 標準ライブラリのみを使用します。インストールは
の単一パッケージで完了します。pip install halo-record - ネットワーク通信の排除:
を除き(オプトイン制)、記録内容や連鎖指紋以外は一切送信しません。データはローカルに留まります。witness - 生データの非保存: 入力された引数はハッシュ化され、秘密情報の形式に準拠したサマリーとしてのみ保存されます。完全な生値は一切保存されません。(※防御的対策ですが、完全なる保証ではない点にご注意ください)。
- 小規模かつ監査容易: コード量は Python で約 4,300 行程度。短期間で全文を閲覧可能です。
- Apache-2.0 ライセンス: オープンソースとして利用できます。
60 秒で動作を確認するデモ
エージェントの事前セットアップも不要です。環境構築(
uv など)なしで素早く試すことができます。
インストール方法
- uv を使用する場合
uvx --from halo-record halo demo --serve - 従来の pip 方式の場合
pip install halo-record halo demo --serve
デモの内容
上記コマンドを実行すると、以下のデモ環境が起動します。
- 架空のエージェントベンダーの構築
- 2 つの顧客の設定とチェーン検証
- ゲートされた Runtime レポートの配信
- ブラウザによるオペレーターコンソールの表示
改ざんテスト例: デモで生成された
.jsonl ファイルから 1 行を削除し再読み込みすると、システムはその改ざんを検知します。
ご自身のエージェント記録への導入
境界点(エントリーポイント)での 1 行のカット&ペーストで開始可能です。
Python エージェントへの組み込み
エントリポイントをラップして、各ツールコールを
./audit.jsonl に記録します。
from halo import trace # run_my_agent が定義された関数です agent = trace(run_my_agent, profile="my-agent", log="audit.jsonl")
- デフォルトの保存場所:
引数が省略される場合、log
に保存されます(エージェントごとに個別のチェーンが生成されます)。~/.halo/my-agent.jsonl - アダプター利用: 既存システムとの連携アダプターも用意されています(詳細は後述)。
レポートの描画と配信
記録されたデータを HTML 形式で表示したり、顧客向けに配信したりします。
# チェーン単体の自己検証レポート生成 halo report audit.jsonl -o report.html # テナント単位のカスタムアクセス制御付きサーバー起動 halo serve ./records --port 8721
クイックスタート完了: ブラウザで自身のエージェント Runtime レポートが表示されれば準備は整います。JSONL ファイルを取得しても表示されない場合は、Issue をお立ちください。
既存システムとの連携アダプター
ソースタグが付与されたすべての記録により、レポートは証拠の収集方法を明文化します。
| 境界点でのキャプチャ | 既存テレメトリからのインGEST |
|---|---|
ネイティブ recorder () | OpenTelemetry GenAI スパン |
| MCP インターセプタ | LiteLLM カallback |
| LangChain / LangGraph のキャブバック | Langfuse エクスポート |
| OpenAI Agents SDK のフック | 任意のゲートウェイ / リバースプロキシログ |
| Claude Code / Agent SDK のフック | - |
アダプターの概要:
- OpenTelemetry 系: CrewAI、LlamaIndex など、OTel 機能を備えたフレームワークはアダプター経由でチェーンへ接続します。
- TypeScript: Vercel AI SDK および JS エコシステム向けのネイティブアダプター同梱されています。
- カスタム対応: スタックにない場合は Issue をお立ちください(多くのアダプターは約 100 行程度です)。
クロードコード (Claude Code) への適用
Claude Code は各ツールコール後に
PostToolUse フックを発火させます。これらを Halo に対応させることで、ファイル書き込みやシェルコマンドなど全ての動作がローカルチェーン内に記録されます。
コード変更なしの設定
既存のコーディングスタイルを維持したまま、設定ファイルに以下の JSON を追加するだけで機能します。
{ "hooks": { "PostToolUse": [ {"matcher": "*", "hooks": [{"type": "command", "command": "halo hook"}]} ] } }
この設定を
~/.claude/settings.json に追加すれば、記録はデフォルトの ~/.halo/audit.jsonl に保存されます(環境変数 $HALO_LOG で上書き可能)。
重要な動作特性:
- 思考過程の除外: データやネットワーク、外部状態を操作しない純粋なオーケストレーションツールはスキップされます。
- 記録対象: 境界点でのアクションのみを記録します(思考プロセスではなく)。
- ハッシュのみモード:
を設定すると、サマリーなしにコンテンツハッシュのみを記録できます。HALO_HASH_ONLY=1
検証とレポート生成
halo verify ~/.halo/audit.jsonl halo report ~/.halo/audit.jsonl -o report.html
任意の Runtime がポストアクションフックをサポートしていれば、同様のコマンドでイベントを読み込んで記録を追加できます(標準入力の JSON 形式)。
完全性と整合性 (Integrity) の仕組み
自己管理チェーン: チェーン内で何らかの変更がなされなかったことを証明できます。
- 不可避: 事後に編集や再順序付けは検知されます。
- 限界: recorder オペレーターによる記録の削除や書き換えに対しては、内部的には完全性を保証できません(信頼できる第三者の介入が必要です)。
完全性証明 (Witness): 信頼できる第三者が定期的にチェーンの指紋(数とヘッダーハッシュのみ)を保持することで、客観的な完全性を証明します。
# ローカルな witness にチェックポイントをアンカー設定 halo anchor audit.jsonl witness.jsonl # アンカー設定の完全性判定 halo anchor audit.jsonl witness.jsonl --check
- 役割分担: 自己検証は整合性の証明になりますが、顧客への完全性保証には信頼できる
の存在が必要です。witness - 早期アクセス: ホストされ認知された
の導入については、witness
までお問い合わせください。bkuan001@gmail.com
コンプライアンススタックにおける位置づけ
halo-record は認証ではなく、証拠生成層です。以下のような規制・フレームワークの要件に適合するためのアーティファクトを提供します:
- セキュリティ監査 / SOC 2: 検証可能な Runtime レポートで代替可能です(スクリーンショットや文章説明の代わり)。
- AIUC-1 (EU AI Act): エージェント振る舞いの継続的な Runtime 証拠。監査時に再構築するのではなく、リアルタイムで保持されます。
- OWASP GenAI Top 10: 過剰な代理権限や機密情報の漏洩リスクに対する、具体的なエージェント・ツール・データ操作の記録です。
- AARM (CSA): 改ざん検知可能なアクション受領書(R5/R6)を生成します。
は受領書レイヤーであり、完全な AARM システムには強制ゲートウェイとの連携が必要です。halo-record - EU AI Act: ハイリスク AI システム向けのログ記録および保持義務の満たし。
- ISO 42001 / NIST AI RMF: 管理システム制御の背後にある運用証拠の提供。
重要: これらの出力自体は「認証」を行いますが、評価者に検証可能な証拠を見せるためのものです。
コマンドラインインターフェース (CLI) チュートリアル
: シーマ+ハッシュチェーンを検証(失敗時は非ゼロ終了ステータス;CI/CD 親和)。halo verify
: チェーンを自己検証可能な HTML レポートとして描画。halo report
: HTTP プロトコルでテナント別レポートを配信(顧客ごとのアクセス制御付き)。halo serve
: レポート受信者(メールまたはドメイン)を指定。halo grant
: チェーンヘッダーを witness にアンカーし、halo anchor
で完全性を検証。--check
: 完全なベンダーデモのスケルトンを作成(記録 → witness → ゲートレポート)。halo demo
: 有効な例ログを出力。halo sample
: JSON 値の正規化 SHA-256 ハッシュ計算。halo hash
: Claude Code の PostToolUse フックを実行。halo hook
技術的詳細:整合性モデルと互換性
整合性の仕組み
レコードのハッシュは、
integrity.hash に記録され、前段のハッシュ値 integrity.prev_hash を参照します。
- 正規化: RFC 8785 (JSON Canonicalization Scheme) を使用。
- 暗号化: バイト列を SHA-256 でハッシュ化。
- 初期値: 最初のレコードの
はゼロ(64 ビット)です。prev_hash - 認証不要: 秘密鍵は不要で、公開アルゴリズムのみが本質です。
警告: チェーンを改ざんして検知されないとお考えですか?試行錯誤の結果と検証場所は以下のリンクにて閲覧可能です。
スキーマ参照
完全なフィールド定義については
をご参照ください。halo-record.schema.json
TypeScript 環境 (Node.js)
同じ記録フォーマットと witness プロトコルを Node 向けにも提供しています (
halo-record-ts)。Python かどちらの言語で記録しても、共通の検証器 (verifier) で検証可能です。
ライセンス
Apache-2.0