systemslibrarian/crypto-lab-syndrome-drain

GitHub: systemslibrarian/crypto-lab-syndrome-drain

一个基于浏览器的交互式可视化工具,展示代码型后量子 KEM 在公钥复用场景下的多实例安全退化现象及密钥轮换策略计算。

Stars: 0 | Forks: 0

# Syndrome Drain `基于编码的 KEMs` · `BIKE` · `HQC` · `Classic McEliece` · `DOOM` · `Vite + TypeScript` · `无后端` **基于编码的 KEMs 的多实例安全性退化** — 一个针对 [May & Sá Diogo, IACR ePrint 2026/517](https://eprint.iacr.org/2026/517) 中研究成果的教育性 可视化工具。 🔗 **在线演示:** https://systemslibrarian.github.io/crypto-lab-syndrome-drain/ ## 它展示了什么 基于编码的 KEMs 依赖于 **syndrome decoding**。*Decoding One Out of Many* (DOOM, Sendrier) 指出,持有同一把密钥的 `M` 个 syndrome 允许你对其中之一进行解码,速度大约快 **√M** — 这相当于节省了 ½·log₂(M) 比特。 当单个公钥被重复用于派生 **D** 个会话密钥时,攻击者可以一次性收集大量 syndrome:对于 BIKE 约为 **≈ n·D**(其准循环环每次会话提供 `n` 个 syndrome),对于 HQC 和 Classic McEliece 约为 **≈ D**。因此,有效安全性会随着 D 的增加而*流失*。对于 NIST Level‑1 参数集,它大约在 **D = 2¹¹ (BIKE‑1)**、**2²¹ (mceliece3488‑64)** 和 **2³⁴ (HQC‑1)** 时跌破 143 比特的下限 —— 因此**公钥必须按照与会话量挂钩的周期进行轮换。** 页面采用了渐进式披露的分层设计:顶部的 **TL;DR** 卡片(10 秒电梯演讲,外加谁会有重复使用密钥的倾向以及更安全的模式),一个**实时安全级别指示器**(在你拖动 D 时提供直观的“这安全吗?”判断),一个交互式**侵蚀图表**(带有调节 D 的滑块、用于每个交叉点的预设跳转按钮、三条动态曲线、红色底线、**同时包含**模型推算和论文给出的交叉点标记以及实时读数表),一个带有实时 syndrome 计数的 **DOOM 机制**解释,一个**密钥轮换策略计算器**(带有切合实际的流量场景预设,将会话速率转化为轮换周期),一个**常见误区** FAQ(包括为什么 ML‑KEM/Kyber 不会受到同样的影响),一个**参数与来源**深入剖析(其中每个数字都引用了论文,并附带一个可直接复制粘贴的**“自行验证”**代码块),一个诚实的**已知缺陷**面板,以及一个经文页脚。 每一个由模型推算出的数字(读数表、轮换限制)都带有一个内嵌的 **“理想化 √D 模型”** 徽章,因此它绝不会与论文中完整的 ISD 结果混淆 —— 简化模型与现实之间的区别被内置于 UI 中,而不是仅仅停留在文字描述上。 图表特意为每个方案绘制了**两个**交叉点标记:一个实心圆点(理想化的 √D 模型)和一个空心菱形(论文中完整的 ISD 表格)。对于 mceliece3488‑64,它们有明显的间距 —— 模型与论文之间的区别被直接融入到了视觉中,而不是被埋没在文字里。 ## 模型(构造上保持诚实) `effectiveSecurityBits(D) = T₁ − ½·log₂(D)`,锚定在每个方案已发表的单实例 MMT 比特复杂度 `T₁` 上(攻击者的最佳变体,纯时间度量)。`n·D` 与 `D` 的 syndrome 计数作为*机制*展示;因为 `n` 是一个常数,它已经作为一个固定偏移量被折算进 `T₁` 中,所以不会被重复计算(如果重复计算将会破坏已发表的 2³⁴ 交叉点 —— 参见 [`src/model.test-notes.md`](src/model.test-notes.md))。 `crossoverD()` 根据模型计算每个交叉点,**并且**将其与论文中完整的 ISD 表格进行交叉核对。它们在 HQC 和 BIKE 上是一致的;但对于 **mceliece3488‑64,它们存在差异**(模型推算 ≈2¹⁷,而论文为 2²¹,因为 McEliece 实际的 ISD 斜率 ≈0.39 比该定律假设的 ½ 要平缓)。演示展示了**两者**并标记了差异,而不是默默地只相信其中一个。 ## 开发 ``` npm install npm run dev # local dev server npm test # vitest — guards the model against regression npm run build # tsc --noEmit && vite build → dist/ npm run preview # serve the production build ``` 无运行时依赖;仅需 TypeScript + Vite。纯计算核心 ([`src/model.ts`](src/model.ts)) 不访问 DOM 并且是确定性的 —— 相同的 输入,相同的输出,没有 `Math.random`,没有 `Date`,没有网络。其不变性 (D=1 ⇒ T₁、交叉点排序、模型与论文的一致性标志、没有 `n·D` 重复计算、D<1 抛出异常)由 [`src/model.test.ts`](src/model.test.ts) 锁定 并在 CI ([`.github/workflows/ci.yml`](.github/workflows/ci.yml)) 中运行。 你可以使用 `?d=`(D 的 log₂)深层链接到一个特定的重用计数,例如 `…/?d=21`。 ## 部署 推送到 `main` 分支会通过 [`.github/workflows/deploy.yml`](.github/workflows/deploy.yml) 构建并发布到 **GitHub Pages**。Vite 的 `base` 被设置为 `/crypto-lab-syndrome-drain/` 以匹配仓库路径。 ## 无障碍与移动端 采用移动优先的设计,并致力于达到 WCAG AA 意图:语义化界标、跳过链接、带有可见焦点环的可键盘操作控件、`aria-live` 读数以及对图表的完整屏幕阅读器文本描述、宽大的触摸目标、支持 `prefers-reduced-motion` 和 `prefers-contrast`,以及在窄屏幕上重排为卡片的表格。深色模式是默认主题;切换状态会持久化到 `localStorage`。 ## 来源 - Alexander May & Gabriel Sá Diogo, *Multi-Instance Security Degradation of Code-Based KEMs*, IACR ePrint **2026/517**. - N. Sendrier, *Decoding One Out of Many*, PQCrypto 2011 (DOOM). - Esser, May, Zweydinger, *McEliece needs a break*, EUROCRYPT 2022 (MMT‑DOOM). - 官方 Level‑1 参数集:HQC‑1, BIKE‑1, mceliece3488‑64. 转录的数值和逐数字的引用位于 [`PAPER-NOTES.md`](PAPER-NOTES.md)。 ## 相关演示 `crypto-lab` 系列中的其他实验室: - **crypto-lab-aes-modes** — AES 分组密码模式,可视化。 *仅供教育使用。数字根据已公开的参数计算;这是 渐近的多实例退化,并非对 syndrome decoding 的破解。 单实例的硬度保持完好。不作任何保证 —— 依赖之前请务必自行验证。*
标签:Vite, 前端交互, 后量子密码, 密码学, 手动系统调用, 教育可视化, 自动化攻击