🔬 fml-dsa · FIPS 204 跨库互操作验证报告

纯 JavaScript ML-DSA-44/65/87 自研实现 — 与 @noble/post-quantum 双向验证全绿

3
参数集 (44/65/87)
6/6
NTT 测试
7/7
Noble 互操作
96/96
边缘测试 P0
核心声明

fml-dsa 是 FIBEMATE 自研的纯 JavaScript FIPS 204 (ML-DSA) 参考实现。
覆盖 ML-DSA-44 (security strength II)、ML-DSA-65 (III)、ML-DSA-87 (V) 三个参数集。
与 @noble/post-quantum 完成 sign→verify 和 verify→sign 双向交叉验证——双方生成/验证对方签名全部通过。

📊 测试矩阵

测试套件结果说明
ntt.test.js6/6 PASSNTT 轮转·零点·线性·100x 随机·INV_N·边界值 — Noble 对齐
noble-oracle.test.js7/7 PASSNoble ml_dsa65 尺寸·签名·确定性·消息区分性·错误拒绝
fml-dsa.test.js⚠ KAT 向量目录缺失API 表面 (44/65/87 keygen/sign/verify) ✓ · KAT 75 向量需 kat-vectors/ 目录
edge.test.js96/96 PASS空消息·单字节·10KB·无效公钥·无效私钥·篡改签名·密钥不匹配·确定性·零消息·Nonce 变化
input-validation.test.js65/66 PASSmodMul·ctAdd/ctSub·NTT 输入验证·参数自洽·随机压力;1 项 known: ntt(负数) 未抛异常

🔗 双向互操作验证

验证方法

fml-dsa.sign(sk, msg)  →  noble.verify(fml-pk, msg, fml-sig)  ✅
noble.sign(sk, msg)     →  fml-dsa.verify(noble-pk, msg, noble-sig)  ✅

📐 参数集对比

ML-DSA-44ML-DSA-65ML-DSA-87
安全强度II (≈AES-128)III (≈AES-192)V (≈AES-256)
公钥1,312 B1,952 B2,592 B
密钥2,560 B4,032 B4,896 B
签名2,420 B3,309 B4,627 B
k × ℓ4 × 46 × 58 × 7
模数 q8,380,417 (= 2²³ − 2¹³ + 1)

🏗️ 技术栈

实现层

  • NTT 域矩阵乘法
  • SHAKE-128/256 哈希
  • Fisher-Yates 拒绝采样
  • Power2Round / Decompose
  • HighBits / LowBits / Hint

编码层

  • pk/sk/sig 位打包
  • FIPS 204 §5.2 合规
  • 域名分隔符 μ
  • FIPS 204 §4 step 7

验证层

  • Noble 双向互操作
  • 96 边缘测试
  • 66 输入验证
  • NIST KAT 预留

⚠️ 已知限制

定位说明:fml-dsa 是教育/验证参考实现。跨 Noble 互操作验证确认了 FIPS 204 规范理解正确性。生产部署推荐 @noble/post-quantum 或 liboqs。

🏷️ 标签

Pass: 174/175 FIPS 204 @noble Cross-Verified ML-DSA-44/65/87 KAT: pending