学习路线与里程碑
总体路线
有限域与拉格朗日插值
↓
Shamir Secret Sharing
↓
普通 Schnorr 签名
↓
可信 Dealer 的门限 Schnorr
↓
两轮 FROST + 份额验证
↓
Feldman VSS + DKG
↓
nonce 持久化、重放保护、崩溃恢复
↓
门限 ECDSA / 更高级研究方向
不要跳过普通 Schnorr。若不先理解单人签名中的 challenge 和 nonce,就很难判断 FROST 中每个绑定因子和承诺在防御什么。
理论与实践对应表
按下表交错推进,不建议先读完全部理论再一次性写代码。
| 学习单元 | 配套实践 | 本阶段产物 | 进入下一步的条件 |
|---|---|---|---|
| 导读、威胁模型 | 实验 0 | Rust 工程约定与安全声明 | 能区分 toy、教学规范版和生产实现 |
| 数学基础 | 实验 1 | 可手算的 F17 有限域 | 域运算与负例测试全部通过 |
| Shamir | 实验 2 | t-of-n 拆分、恢复与性质测试 | 能解释少于门限为何不泄密 |
| 普通 Schnorr | 实验 3 | Ristretto255 单签与规范解析 | 篡改、单位元、非法编码均拒绝 |
| 门限 Schnorr、FROST | 实验 4 | 可信 Dealer 的 2-of-3 FROST | 三个合法子集均通过普通验证器 |
| VSS/DKG、安全工程 | 实验 5、6 | 本地 DKG、nonce 状态机与故障注入 | 综合验收矩阵通过并能说明未覆盖项 |
| 门限 ECDSA | 选修研究 | 复杂度分析或玩具 MPC 实验 | 不作为本手册核心毕业条件 |
本手册有两个明确终点:
- 核心里程碑:完成可信 Dealer 的本地
2-of-3FROST; - 完整毕业项目:在单进程事件模拟器中完成 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。
推荐节奏
每个里程碑至少完成四份材料:
- 一页自己的推导笔记;
- 一个最小实现;
- 一组性质测试与负例;
- 一个攻击或故障演示。
只有四项都完成,才进入下一阶段。门限密码学里,“缺失的失败测试”通常比“缺失的功能”更危险。