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 执行以下校验:
- 按 seq 顺序遍历所有记录
- 重新计算每条记录的 hash_self
- 与存储值对比
- 检查 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:三级系统要求的审计功能
哈希链不是炫技,是合规的基石。