FIBEMATE 采用"可验证优先"的设计原则。所有密码学实现均经过形式化测试、确定性验证和时间戳存证。
| 测试通道 | 覆盖范围 | 状态 |
|---|---|---|
| Track 1: 正式验证 | KAT (9/9)、代数等价、IND-CPA、隐式拒绝 | ✅ 22/22 |
| Track 2: 跨语言互操作 | JS ↔ WASM 自洽性 | ✅ 15 passed, 2 预期差异 |
| Track 3: FIPS 140-3 | POST、NIST、完整性、自检 | ✅ 6/6 |
800/800 循环验证通过
📌 同一种子输入 → 完全相同的密钥对和共享密钥输出。
跨实现 (JS vs WASM) 的二进制差异由 FIPS 203 §12.1 允许,不影响安全性。
信任边界断言语录:
🧠 完整威胁模型(威胁模型文档待更新)。
所有核心实现文件已通过 DigiCert 签发 RFC 3161 时间戳,确保代码在特定时间点的完整性可被第三方验证。
/docs/tsa/(按日期分子目录,跨度 2026-06-25 ~ 2026-07-16)openssl ts -verify -in *.tsr -CAfile digicert.pem -untrusted chain.pem📥 存证清单已归档至 /docs/tsa/
FIBEMATE 于 2026 年 8 月底 开源。届时你可以:
git clone https://github.com/fibemate/fibemate
npm install
npm run test:formal # Track 1
npm run test:cross-lang # Track 2
npm run test:fips # Track 3
npm run test:seeded # 800/800 reproducibility
三者不是竞争关系,而是不同层次的互补组件——ML-KEM-768 负责"安全通道建立",SM3/SM4 负责"通道内数据保护"。不在同一个维度上,不存在"哪个更好"的问题。
混合 KEM 有两种主流编号:
| 方案 | IANA 编号 | 组成 | FIBEMATE 采用 |
|---|---|---|---|
| X-Wing (X25519MLKEM768) | 4588 | X25519 + ML-KEM-768 | ❌ 未采用 |
| SM2MLKEM768 | 4590 | SM2 + ML-KEM-768 | ✅ 采用(路径 C-2) |
📌 FIBEMATE 选择 4590 路线,因 SM2 已通过国密合规与 TVLA 侧信道验证,与 ML-KEM-768 混合可在不引入新密码学假设的前提下完成抗量子升级。
🔧 实现路径:路径 C-2(应用层混合 KEX)——在 TLS 之上通过 TLS Exporter + HTTP POST 完成 SM2 与 ML-KEM-768 的共享密钥混合,绕过 Nginx/OpenSSL 原生改造,功能完整且可审计。
目标:让 SM2-MLKEM-768 混合握手在 延迟与流量 上追平 X25519MLKEM768(路径 A),同时保留国密合规优势。
| 指标 | X25519MLKEM768 | 说明 |
|---|---|---|
| 握手延迟 | ~45 ms (p95) | 原生 TLS 层,零应用层开销 |
| 握手流量 | 基准 100% | — |
| 服务端吞吐 | ~3200 ops/sec | 原生 addon 加速 |
| 指标 | SM2-MLKEM-768 (C-2) | 差距 |
|---|---|---|
| 握手延迟 | ~78.5 ms (p95) | +33 ms(应用层混合开销) |
| 握手流量 | +12% | SM2 公钥/签名较 X25519 略大 |
| 服务端吞吐 | ~3225 ops/sec | 持平(ML-KEM 原生 addon) |
📌 延迟差距来自应用层混合的两次往返,可通过 TLS Exporter 预计算 与 SM2 签名批处理 进一步压缩。
🎯 目标:延迟差距 < 15 ms,流量差距 < 5%,在保留国密合规前提下追平路径 A。
✅ 路径 C-2 已上线(reg-server 集成,IANA #4590,10/10 集成测试通过)。
⚠️ 路径 A(TLS 层原生混合)于 2026-07-10 搁置——Nginx + oqs-provider 需 OpenSSL 3.2+,当前 3.0.13 不支持,且无混合协商回调 API。
混合会话密钥已接入密钥生命周期管理 v2(PBKDF2 + AES-GCM-256,IndexedDB v2):
SM2 标量乘法已实现 加法掩码(Additive Masking over Z_q),并通过 TVLA 时序验证:
| 测试 | 样本 | 结果 |
|---|---|---|
| SM2 TVLA (掩码版) | N=2,000 · 1-4 阶矩 | 10/10 全部通过 (|t| < 4.5) |
| Naive → Masked 泄露压缩 | 65.56 → 0.72 | 91× 压缩 |
| STM32 C 框架 | Cortex-M4 | 编译自测通过 |
📌 SHA-256 基线对照:未掩码实现在 N=2,000 下 TVLA 全部失败(|t|>10),加法掩码后降至 |t|<4.5,达到 TVLA 通过阈值。
| 测试 | 样本 | 结果 |
|---|---|---|
| HMAC-SM3 TVLA | N=2,000 · 1-4 阶矩 | 8/8 全部通过 |
| 掩码一致性 | Z_q 加法掩码 | 零泄露转移 |
📌 这是首个在纯 JavaScript 环境下通过 TVLA 时序验证的 SM2 / HMAC-SM3 公开实现。
混合握手协议 Path C-2 已通过 TLA+ 形式化验证(7 条不变量,101,467 状态,0 违例,0 死锁):
key[i] ≠ key[j](密钥间不可区分性)⚠️ 局限:lossy network 死锁由 TCP 重传绕过(真实协议靠重传);K3 基于 key=i 构造而非密码级独立采样;EasyCrypt 密码学证明未做。
SM4 当前为查表实现(S-box 查表),存在理论上的缓存侧信道风险。路线图为消除该风险:
| 阶段 | 方案 | 验收标准 |
|---|---|---|
| Phase 1 | 位切片 (bitsliced) SM4 S-box,消除查表 | 无内存依赖分支,TVLA 验证通过 |
| Phase 2 | 恒定时间密钥调度(T-tables → 纯算术) | 调度无数据相关内存访问 |
| Phase 3 | WASM 内联汇编 + 编译器屏障 | 防止编译器重排引入泄露 |
📌 当前 SM4 用于通道内数据加密(非密钥协商),缓存侧信道影响远低于协商层;Phase 1 完成后将补齐 TVLA 验证并归档 TSR。
⚠️ 2026-06-26 实验分支声明
LookingGlass (原 DMH) 为 FIBEMATE 自研实验性混淆方案,已更名为 DMTH(确定性掩码 + 标准矩阵对)。它不提升底层 LWE 难度,仅增加软件层混淆;默认关闭,不部署生产环境。
| 维度 | 修正前 (DMH) | 修正后 (DMTH) |
|---|---|---|
| 安全声称 | depth × n × log(q) 计算硬度 | 标准 LWE 计算硬度 + 陷门复杂度 |
| depth 作用 | 错误地作为攻击难度 | 正确定义为陷门隐蔽性参数 |
| 公钥形态 | 未验证 | BKZ 确认标准 LWE |
| 学术诚实 | 不准确 | 自我修正 ✅ |
| 参数 | DMTH 陷门复杂度 | LWE 攻击复杂度 (实际安全) |
|---|---|---|
| n=8, d=2, q=3329 | ~94 bits | ~81 bits |
| n=16, d=2, q=3329 | ~187 bits | ~162 bits |
| n=32, d=3, q=3329 | ~374 bits | ~323 bits |
实际安全强度按 LWE 攻击复杂度 列(标准 LWE bound)。DMTH 列为陷门结构复杂度指标,不提供额外计算硬度。
✅ 代码验证已完成 · 实验验证已完成 · 安全模型已修正
LookingGlass 是 FIBEMATE 的「默认关闭、按需开启」实验性模块。它独立于 SM2/ML-KEM/Cheshire Cat 底盘运行。
LookingGlass 全系列 38 份 DigiCert TSR · 2026-06-26 · 全部 Granted ✅ · 详见 抗量子就绪状态 §7