systemslibrarian/crypto-lab-stark-tower

GitHub: systemslibrarian/crypto-lab-stark-tower

一个浏览器端的 zk-STARK 交互式教学演示,通过六大展项可视化展示 AIR 约束、FRI 承诺和端到端证明验证流程。

Stars: 0 | Forks: 0

# crypto-lab-stark-tower ## 1. 它是什么 STARK Tower 是一个**真实可用**的浏览器端 zk-STARKs(Scalable Transparent ARguments of Knowledge; Ben-Sasson et al., 2018)演示项目——这是基于配对的 SNARK 的后量子替代方案。STARK 不需要可信设置(唯一的密码学假设是抗碰撞哈希),具有准线性的扩展性,并且被推测可以抵御量子对手的攻击。它们将计算表示为多项式约束的 Arithmetic Intermediate Representation (AIR),并使用 FRI (Fast Reed–Solomon IOP) 作为透明的低度测试。其代价是证明尺寸较大(约 45–200 KB,而 Groth16 为 128 字节)。 让这个演示不同于纸上谈兵的是:**验证者真的能抓住作弊的证明者,而且是无需重新运行计算做到的。** 它仅检查 Merkle 开启和 FRI 低度测试。只要篡改一个 trace 单元格,约束商就会停止成为多项式,它的低度扩展将不再具有低度,FRI 就会将其拒绝。 ## 2. 为什么选择 STARK-101 域 算术运算在 `p = 3·2^30 + 1 = 3221225473` 上进行,这是来自 StarkWare STARK-101 教程的域。这是刻意为之的:像 `2^31 − 1` 这样的梅森素数的 2-adicity 为 1(没有 2 的幂的子群),因此你*无法*在其中构建真正的 NTT 风格求值域或真正的 FRI 折叠。而 `3·2^30 + 1` 具有 `2^30 | (p − 1)` 的特性,提供了忠实 STARK 所需的 2-adic 结构。 ## 3. 何时使用 STARK - ✅ 当可信设置仪式不可行或无法接受时 - ✅ 当长期证明的有效性需要后量子安全性时 - ✅ 对于 STARK 证明时间胜过 SNARK 的大规模计算 - ✅ 当证明通用 RISC-V 或 VM 执行时(Risc Zero、Miden VM) - ✅ 在证明尺寸不受限制的链下完整性证明中 - ❌ 在严格的 gas 限制下的链上验证——STARK 验证远比 Groth16 昂贵(约 50 ms 对比约 1 ms) - ❌ 当证明尺寸至关重要时——45–200 KB 对比 Groth16 的 128 字节 - ❌ 对于 SNARK 设置成本可接受的小型电路——Groth16 更快且更小 ## 4. 六大展项 1. **入门指南** — STARK 与 SNARK 的对比表(设置、假设、后量子姿态、尺寸)。 2. **AIR** — 交互式单列 Fibonacci trace;检查约束;篡改一行并观察残差变为非零。 3. **FRI** — 真正的偶/奇陪集折叠(`f(x), f(−x) → f′(x²)`),每一层都有基于 SHA-256 的 Merkle root,外加域减半至常量的 **SVG 可视化**;低度多项式会坍缩,而高度多项式则不会。 4. **证明尺寸** — 基准测试表,实时测量演示自身的玩具级证明尺寸,以及一个交互式的**安全性 ↔ 尺寸 ↔ 速度计算器**(膨胀率和查询次数 → 可靠性比特)。 5. **证明与验证** — 完整的端到端协议。生成证明,验证它(逐项检查报告),检查单个查询的反承诺,查看**简洁性摘要**(验证者接触了多少极少的值),然后**破坏 trace**,观察 *FRI 低度测试*如何在无需重新计算 trace 的情况下拒绝它。包含**零知识模式**切换,以及一个**掩码实验**,通过直方图将掩码后的开启与无见证模拟器进行对比,以展示见证保持隐藏。披露面板如实说明了生产级 STARK 还需要添加什么。 6. **在生产中** — StarkNet、StarkEx、Risc Zero、Polygon Miden。 ## 5. 架构 | 文件 | 职责 | | --- | --- | | `src/field.ts` | `F_p` 算术、单位根、Lagrange 插值、多项式求值/度 | | `src/merkle.ts` | SHA-256 Merkle 承诺、开启、验证 | | `src/stark.ts` | AIR、证明者、验证者、真正的 FRI;以及用于展项的 `airAnalysis` / `friDemo` | | `src/main.ts` | 仅包含 DOM 绑定(无密码学) | ### 什么是真实的,什么是简化的 - **真实的:** 域、多项式插值、SHA-256 Merkle 承诺、偶/奇 FRI 折叠、Fiat-Shamir 挑战、查询反承诺、能捕获篡改的低度测试、**逐约束度数调整**(`αᵢ + βᵢ·x^(D−dᵢ)`),以及一个**可选的零知识掩码**模式(`f′ = f + (xᴺ−1)·r`),其隐藏见证的特性已得到经验性证明。 - **为清晰而简化(应用内有明确标注):** 玩具级参数(短 trace,膨胀率 8,8 次查询 ≈ 20 位可靠性)以及使用 Lagrange 插值而非 NTT。ZK 特性是通过经验展示的(揭示的值与见证无关),而不是通过完整的记录模拟器证明。这些都没有改变作弊是*如何*被捕获的。 ## 6. 本地运行与测试 ``` git clone https://github.com/systemslibrarian/crypto-lab-stark-tower cd crypto-lab-stark-tower npm install npm run dev # serve the demo npm test # crypto self-test + jsdom UI smoke test npm run typecheck # tsc --noEmit ``` `npm test` 断言诚实的证明会被接受,被篡改的证明会被拒绝 **(通过低度测试)**(而非重新计算),被篡改的 Merkle 叶子会被拒绝,并且每个展项在无头 DOM 中都能正确运行。 ## 7. 在线演示 https://systemslibrarian.github.io/crypto-lab-stark-tower/ ## 8. Crypto-Lab 套件的一部分 属于 [crypto-lab](https://systemslibrarian.github.io/crypto-lab/) 的一部分——基于浏览器的密码学演示,涵盖了从 2500 年的密码学历史到 NIST FIPS 2024 后量子标准的内容。 所以,你们或吃或喝,或无论做什么,都要为荣耀神而行。——《哥林多前书》10:31
标签:WebAssembly, zk-STARK, 前端可视化, 区块链底层, 密码学, 手动系统调用, 自动化攻击, 零知识证明