Skip to content
AuditSQLiteHash ChainCompliance

审计链设计:SHA256 哈希链与 FTS5 全文检索

为什么哈希链

传统日志系统的问题是:日志可以被修改、删除、伪造。如果攻击者控制了服务器,他可以清理日志掩盖痕迹。

哈希链(Hash Chain)通过密码学链接解决这个问题:每条记录的哈希值包含前一条记录的哈希,形成链条。修改任何一条记录都会导致后续所有记录的哈希不匹配。

数据结构

{
  "seq": 47,
  "timestamp": "2026-05-27T09:25:47Z",
  "event_type": "tool_call",
  "decision": "Allow",
  "hash_prev": "0x7a3f...",
  "hash_self": "0x8c4d...",
  "payload": {
    "tool": "github.create_issue",
    "args_redacted": { "title": "Fix bug", "body": "[REDACTED person]" },
    "lease_id": "lse_9m4p",
    "risk_score": 45
  }
}

hash_self = SHA256(seq + timestamp + event_type + decision + hash_prev + payload_json)

完整性校验

vigils-session replay --verify 执行以下校验:

  1. 按 seq 顺序遍历所有记录
  2. 重新计算每条记录的 hash_self
  3. 与存储值对比
  4. 检查 hash_prev 是否与上一条的 hash_self 匹配

任何不匹配都会输出:

Hash chain BROKEN at seq=23: expected 0xabc..., got 0xdef...

FTS5 全文检索

SQLite 的 FTS5 扩展为审计日志提供全文检索能力:

vigils-audit search "github_token" --session=ses_abc

搜索范围包括:

  • 工具名称
  • 操作类型
  • 脱敏后的参数
  • 决策结果
  • 时间范围

FTS5 的倒排索引使检索时间复杂度为 O(1),即使百万级记录也能毫秒级响应。

存储优化

  • 单条记录平均 2KB
  • 100 万条约 2GB
  • SQLite WAL 模式支持并发读写
  • 自动归档:超过 90 天的记录压缩存储

合规价值

审计链的设计满足以下合规要求:

  • SOC2 Type II:完整的行为追溯
  • ISO 27001:访问控制与审计证据
  • GDPR:数据处理活动的不可篡改记录
  • 等保 2.0:三级系统要求的审计功能

哈希链不是炫技,是合规的基石。