アーキテクチャ / 改竄不能な監査

改竄不能な監査

誰が・いつ・何を・どの承認で実行したか。あとから1バイトも書き換えられない記録。

ハッシュ連鎖(event sourcing)

すべての判断・ゲート評価・実行は、追記専用(append-only)のイベントとして記録されます。各イベントは前イベントのハッシュを内包し、鎖を成します。

event = { seq, ts, kind, payload, prev_hash, hash }

hash = SHA-256( prev_hash + canonical(body) )

どこか1箇所でも改竄すると、それ以降のハッシュがすべて食い違い、鎖が破断します。だから tamper-evident(改竄が必ず露見する)。

検証とリプレイ

  • verify():先頭から鎖を再計算。1イベントでも改竄されていれば False
  • replay(reducer, initial):記録済みイベント列を畳み込み、最終状態を再構成(タイムトラベル監査)
# audit.py — 鎖の検証 def verify(self): prev = GENESIS for e in self._events: body = {k: e[k] for k in _BODY_KEYS} if e["prev_hash"] != prev or e["hash"] != _hash(prev, body): return False prev = e["hash"] return True

再現可能な判断

これが「再現可能な判断」を技術的に裏付けます。同じグラフ・同じトレース・同じポリシーなら、同じ最終状態に到達する。だからコンサル商品としても、「なぜその判断をしたか」を改竄不能な形で説明できます。

実証ページでは、24イベントの鎖が verify()=True となり、1バイト改竄後に verify()=False(改竄検出成功)になることを実出力で示しています。