这是一个 Merkle 树 与 Merkle 包含证明 的交互式演示,基于浏览器 WebCrypto API 的 SHA-256 构建。Merkle 树将一组数据块哈希成单一的根哈希,该根哈希一次性承诺了所有数据块;包含证明则是一小串兄弟哈希,让任何人都能从单个叶子重新推导出该根。其安全模型完全基于哈希:它依赖 SHA-256 的抗碰撞性和抗第二原像性,不涉及任何密钥或签名。哈希遵循 RFC 6962 的域分离(leaf = SHA-256(0x00 ∥ data),node = SHA-256(0x01 ∥ left ∥ right)),这正是该演示中第二原像防御真实有效而非流于形式的原因。它是一个教学工具,而非生产级库。
本目录中有两个实验涉及 Merkle 树,它们不可互换。本实验关注的是证明语义:可信根必须来自何处、每一步所哈希的确切字节、RFC 9162 基于索引的验证、一致性证明及其所捕获的历史攻击、页面上被攻破的第二原像与 CVE-2012-2459 构造,以及一个固定的真实证书透明度条目,对照 Google 的 Argon 日志进行验证。 crypto-lab-merkle-vault 关注的是结构:用父子连接线绘制的树、逐层遍历单个证明并在运行哈希上升时点亮相应节点,以及在顶部逐字节断言重算根与承诺根相等。若想了解什么是 Merkle 树以及一次攀爬如何运作,请从那里开始;若想了解一个证明能让你相信什么、不能让你相信什么,请到这里来。
⌈log₂ n⌉ 个哈希,因此可以证明单笔交易存在于一个包含数百万笔交易的区块中,而无需发送整个区块。systemslibrarian.github.io/crypto-lab-merkle-proofs
实时添加或删除数据块以构建树,选择任意叶子生成其包含证明,然后进行验证——仅根据该叶子及其兄弟哈希重新计算根。你可以逐步执行或动画演示每次重算一个哈希的过程(观察运行中的哈希沿树向上攀升),在任意步骤展开**“显示字节”以查看确切的 SHA-256 原像(叶子为 0x00 ∥ data,节点为 0x01 ∥ L ∥ R),篡改叶子或翻转任意证明步骤中的一位,观察验证结果翻转为 REJECTED,并拖动滑块查看证明在多达 2³⁰ 个叶子时仍保持对数复杂度(还可构建真实的 256–4,096 叶子树)。一个信任模型演示直接呈现经典误解:提供叶子、证明和根的证明者会产生一个能通过验证的三元组——却什么也证明不了。两个安全演示让你开启/关闭 RFC 6962 域分离,使第二原像伪造先成功、后失败,并比较 Bitcoin 的奇数节点复制与 RFC 6962 的提升,以复现 CVE-2012-2459 根碰撞。一致性(仅追加)证明有独立的可视化——旧树以阴影显示在新树内部,并标记证明的子树根——外加三种历史篡改攻击(重写、删除、重排),证明均能捕获。最后,页面验证一个真实的证书透明度条目**:Google Argon2026h1 日志(28 亿份证书)中索引 1,234,567,890 处的一枚固定 Let's Encrypt 证书,使用 RFC 9162 基于索引的验证以 32 个哈希证明其已被包含——与实验其余部分使用相同的代码路径。学习目标、先预测后揭示的提示、自测测验、术语表工具提示、回顾表以及延伸阅读支持主动学习;**“复制此树的链接”**可为任意树状态生成深链接,便于用于幻灯片或作业。
git clone https://github.com/systemslibrarian/crypto-lab-merkle-proofs
cd crypto-lab-merkle-proofs
npm install
npm run dev
没有环境变量。使用 npm test 运行测试套件(RFC 6962 测试向量、证明往返、篡改拒绝、第二原像攻击/防御、一致性证明、针对独立参考实现的模糊测试,以及固定的真实世界 CT 证明)。
npm run test:a11y 运行浏览器门禁(Playwright)。e2e/claims.spec.ts 驱动真实页面,并根据页面打印的内容重新推导每一个判定——仅当重新计算出的根与显示的受信任根相等时才为 INCLUDED,仅当打印出的两个根相等时才为 ROOTS COLLIDE,效率标题来自其自身的算术——并遍历每条篡改路径(叶子、证明位、日志重写/删除/重排、CT 证书位翻转),以断言其达到拒绝、指明原因并恢复。e2e/a11y.spec.ts 是 axe-core WCAG A/AA 扫描。两者都在每次 Pages 部署前的 CI 中运行。
参见 TEACHING.md 获取讲师指南:50 分钟的课程流程、讨论问题、每个部分旨在打破的误解,以及作业扩展。
位于 systemslibrarian.github.io/crypto-lab 的 170+ 个实时浏览器演示之一 —— 涵盖从 Atbash(公元前 600 年)到 NIST FIPS 203/204/205(2024 年)。
"所以,你们或吃或喝,无论做什么,都要为荣耀神而行。" —— 哥林多前书 10:31