知识卡片

为可审计性而设计:端到端完整性检查与默克尔树

普通读书笔记卡

内容

[[信任但验证审计与可审计性设计]]要真正落地,需要具体的设计手段。如果一个事务在数据库中改变了多个对象,事后很难说清这个事务到底意味着什么——即便捕获了变更数据捕获的日志,各表的插入更新删除也不能清楚说明为什么要做这些变更(决定变更的应用逻辑调用是稍纵即逝、无法重现的);而基于事件的系统能提供更好的可审计性:用户输入被表示成单一不可变事件,任何状态变更都从该事件确定性地、可重复地衍生,相同的事件日志经过相同版本的衍生代码,理应产生相同的状态变更——这让[[变更数据捕获的实现方式与日志压缩机制]]所属的显式数据流处理,能通过对事件日志算哈希来检查事件存储是否被破坏,或重跑批处理/流处理来验证衍生状态是否与预期一致,甚至并行跑冗余的衍生流程互相比对。检查系统完整性最好以端到端方式进行:能覆盖的系统环节越多,某个处理阶段出现不被察觉损坏的概率就越小;持续的端到端完整性检查能不断提高你对系统正确性的信心、让你敢于更快地推进变更。密码学工具能让这种检查更稳健——加密货币和分布式账本技术本质上是由互不信任组织托管副本、彼此不断检查完整性并用共识协议决定该执行哪些事务的分布式数据库,其中的密码学审计通常依赖默克尔树(能高效证明一条记录出现在数据集中的哈希树),证书透明性也是依赖默克尔树检查TLS/SSL证书有效性的安全技术——作者认为这类完整性检查算法未来会在通用数据系统中得到更广泛应用,尽管把它们做到对没有密码学审计需求的系统也可伸缩、且性能损耗可控,还需要更多工作。

参考来源

- 位置:《数据密集型应用系统设计》第十二章《数据系统的未来》"为可审计性而设计""端到端原则重现""用于可审计数据系统的工具"(源文件:_epub-src/ch12_split_002.html) - 结论依据:原文说明基于事件的系统比传统事务日志更具可审计性(事件确定性衍生状态可重跑验证),端到端完整性检查能覆盖更多环节降低损坏概率,并介绍加密货币/分布式账本依赖默克尔树的密码学审计思路,直接支撑本卡片结论。 - 原始内容:在事件溯源方法中,系统的用户输入被表示为一个单一不可变事件……对于任何衍生状态,我们可以重新运行从事件日志中衍生它的批处理器与流处理器,以检查是否获得相同的结果……密码学审计与完整性检查通常依赖默克尔树。