Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

学习路线与里程碑

总体路线

有限域与拉格朗日插值
        ↓
Shamir Secret Sharing
        ↓
普通 Schnorr 签名
        ↓
可信 Dealer 的门限 Schnorr
        ↓
两轮 FROST + 份额验证
        ↓
Feldman VSS + DKG
        ↓
nonce 持久化、重放保护、崩溃恢复
        ↓
门限 ECDSA / 更高级研究方向

不要跳过普通 Schnorr。若不先理解单人签名中的 challenge 和 nonce,就很难判断 FROST 中每个绑定因子和承诺在防御什么。

理论与实践对应表

按下表交错推进,不建议先读完全部理论再一次性写代码。

学习单元配套实践本阶段产物进入下一步的条件
导读、威胁模型实验 0Rust 工程约定与安全声明能区分 toy、教学规范版和生产实现
数学基础实验 1可手算的 F17 有限域域运算与负例测试全部通过
Shamir实验 2t-of-n 拆分、恢复与性质测试能解释少于门限为何不泄密
普通 Schnorr实验 3Ristretto255 单签与规范解析篡改、单位元、非法编码均拒绝
门限 Schnorr、FROST实验 4可信 Dealer 的 2-of-3 FROST三个合法子集均通过普通验证器
VSS/DKG、安全工程实验 5、6本地 DKG、nonce 状态机与故障注入综合验收矩阵通过并能说明未覆盖项
门限 ECDSA选修研究复杂度分析或玩具 MPC 实验不作为本手册核心毕业条件

本手册有两个明确终点:

  • 核心里程碑:完成可信 Dealer 的本地 2-of-3 FROST;
  • 完整毕业项目:在单进程事件模拟器中完成 DKG → FROST → nonce 崩溃恢复与对抗测试。

不要为了“毕业”提前加入真实网络、生产数据库或真实资产;这些会把注意力从协议不变量移向部署细节。

里程碑 0:建立实验纪律

学习内容:

  • 区分教学实现、规范兼容实现和生产实现;
  • 写出第一版威胁模型;
  • 建立测试命名、错误类型和秘密类型规则。

完成标准:

  • 仓库中有醒目的非生产安全声明;
  • 能解释为什么 Rust 的内存安全不等于密码协议安全;
  • 固定种子 RNG 只存在于测试代码。

里程碑 1:Shamir Secret Sharing

学习内容:

  • 有限域加减乘除;
  • 次数为 \(t-1\) 的随机多项式;
  • Horner 求值;
  • 在 \(x=0\) 处计算拉格朗日插值;
  • 非零且不重复的参与者标识符。

完成标准:

  • 2-of-3 和一般 t-of-n 均可工作;
  • 任意合法的 \(t\) 个份额恢复同一秘密;
  • 少于 \(t\) 个份额的恢复请求被 API 拒绝;
  • 重复 ID、零 ID、非法门限被拒绝;
  • 能解释为什么 Shamir 不能检测恶意 Dealer。

里程碑 2:普通 Schnorr

学习内容:

  • 标量乘法与群元素;
  • Fiat–Shamir challenge;
  • 签名和验证方程;
  • 规范编码和域分离;
  • nonce 重用攻击。

完成标准:

  • 正确签名通过验证;
  • 修改消息、承诺或响应后验证失败;
  • 能通过一个故意脆弱的例子从重复 nonce 的两个签名恢复私钥;
  • transcript 不依赖 Debug、JSON 或平台字节序。

里程碑 3:可信 Dealer 的门限 Schnorr/FROST

学习内容:

  • 密钥份额与公开验证份额;
  • 签名者集合对应的拉格朗日系数;
  • hiding/binding nonce;
  • commitment list、binding factor 与 group commitment;
  • 单个签名份额验证;
  • 聚合为普通 Schnorr 签名。

完成标准:

  • 任意合法的 2-of-3 子集都能签名;
  • 最终结果可由普通 Schnorr 验证器验证;
  • 某个签名份额被篡改时能够定位并拒绝;
  • 少于门限、重复参与者、消息不一致、承诺列表不一致均失败;
  • nonce 对象被消费后无法再次进入签名 API。

里程碑 4:VSS 与 DKG

学习内容:

  • Feldman coefficient commitments;
  • 接收方如何验证自己的份额;
  • 多个 Dealer 的贡献如何相加;
  • 投诉、证据、剔除和中止;
  • 认证广播与私密点对点信道假设。

完成标准:

  • 错误份额会被接收方检测;
  • 所有诚实参与者得到相同群公钥;
  • DKG 输出可直接进入上一阶段签名;
  • 同步本地模拟的故障注入覆盖错误份额、承诺分叉、漏发、虚假投诉和 Dealer 沉默。

重复、乱序、旧 session 消息和崩溃恢复需要下一里程碑的状态机;不把它们当作本里程碑公式验证的前置条件。

里程碑 5:协议工程

学习内容:

  • 会话 ID 与协议版本;
  • 显式状态机;
  • nonce 的预生成、占用、消耗和崩溃恢复;
  • 重放保护与幂等边界;
  • 密钥份额静态保护、备份和刷新;
  • 可审计但不泄密的日志。

完成标准:

  • 在两轮之间模拟崩溃,重启后不会复用 nonce;
  • 旧会话消息不能注入新会话;
  • 每个状态只接受允许的消息类型;
  • 所有网络输入的解析失败均返回错误而非 panic。

推荐节奏

每个里程碑至少完成四份材料:

  1. 一页自己的推导笔记;
  2. 一个最小实现;
  3. 一组性质测试与负例;
  4. 一个攻击或故障演示。

只有四项都完成,才进入下一阶段。门限密码学里,“缺失的失败测试”通常比“缺失的功能”更危险。