🔐 安全验证

FIBEMATE 采用"可验证优先"的设计原则。所有密码学实现均经过形式化测试、确定性验证和时间戳存证。

ML-KEM-768 (FIPS 203) 后量子安全 端到端加密 零知识认证 可自托管

1. 后量子密码学

2. 三线测试套件

测试通道覆盖范围状态
Track 1: 正式验证KAT (9/9)、代数等价、IND-CPA、隐式拒绝✅ 22/22
Track 2: 跨语言互操作JS ↔ WASM 自洽性✅ 15 passed, 2 预期差异
Track 3: FIPS 140-3POST、NIST、完整性、自检✅ 6/6

3. 确定性可重现性

800/800 循环验证通过

📌 同一种子输入 → 完全相同的密钥对和共享密钥输出。
跨实现 (JS vs WASM) 的二进制差异由 FIPS 203 §12.1 允许,不影响安全性。

4. 信任边界与威胁模型

信任边界断言语录:

🧠 完整威胁模型(威胁模型文档待更新)。

5. 时间戳存证

所有核心实现文件已通过 DigiCert 签发 RFC 3161 时间戳,确保代码在特定时间点的完整性可被第三方验证。

📥 存证清单已归档至 /docs/tsa/

6. 开源验证

FIBEMATE 于 2026 年 8 月底 开源。届时你可以:

  1. 自行构建并运行测试套件
  2. 验证时间戳存证与源码哈希的匹配性
  3. 审计所有密码学实现
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

7. 算法协同定位:ML-KEM · SM3 · SM4

三者不是竞争关系,而是不同层次的互补组件——ML-KEM-768 负责"安全通道建立",SM3/SM4 负责"通道内数据保护"。不在同一个维度上,不存在"哪个更好"的问题。

8. 混合密钥交换路线:X-Wing vs SM2-MLKEM

混合 KEM 有两种主流编号:

方案IANA 编号组成FIBEMATE 采用
X-Wing (X25519MLKEM768)4588X25519 + ML-KEM-768❌ 未采用
SM2MLKEM7684590SM2 + 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 原生改造,功能完整且可审计。

9. SM2-MLKEM-768 性能追平路线

目标:让 SM2-MLKEM-768 混合握手在 延迟与流量 上追平 X25519MLKEM768(路径 A),同时保留国密合规优势。

9.1 基准对照(X25519MLKEM768 参考)

指标X25519MLKEM768说明
握手延迟~45 ms (p95)原生 TLS 层,零应用层开销
握手流量基准 100%
服务端吞吐~3200 ops/sec原生 addon 加速

9.2 当前实现(路径 C-2 应用层)

指标SM2-MLKEM-768 (C-2)差距
握手延迟~78.5 ms (p95)+33 ms(应用层混合开销)
握手流量+12%SM2 公钥/签名较 X25519 略大
服务端吞吐~3225 ops/sec持平(ML-KEM 原生 addon)

📌 延迟差距来自应用层混合的两次往返,可通过 TLS Exporter 预计算SM2 签名批处理 进一步压缩。

9.3 延迟优化路径

9.4 流量优化路径

🎯 目标:延迟差距 < 15 ms,流量差距 < 5%,在保留国密合规前提下追平路径 A。

9.5 兼容性边界

9.6 混合握手实现状态

路径 C-2 已上线(reg-server 集成,IANA #4590,10/10 集成测试通过)。
⚠️ 路径 A(TLS 层原生混合)于 2026-07-10 搁置——Nginx + oqs-provider 需 OpenSSL 3.2+,当前 3.0.13 不支持,且无混合协商回调 API。

9.7 密钥生命周期集成

混合会话密钥已接入密钥生命周期管理 v2(PBKDF2 + AES-GCM-256,IndexedDB v2):

9.8 SM2 TVLA 侧信道验证

SM2 标量乘法已实现 加法掩码(Additive Masking over Z_q),并通过 TVLA 时序验证:

测试样本结果
SM2 TVLA (掩码版)N=2,000 · 1-4 阶矩10/10 全部通过 (|t| < 4.5)
Naive → Masked 泄露压缩65.56 → 0.7291× 压缩
STM32 C 框架Cortex-M4编译自测通过

📌 SHA-256 基线对照:未掩码实现在 N=2,000 下 TVLA 全部失败(|t|>10),加法掩码后降至 |t|<4.5,达到 TVLA 通过阈值。

9.9 HMAC-SM3 TVLA 验证

测试样本结果
HMAC-SM3 TVLAN=2,000 · 1-4 阶矩8/8 全部通过
掩码一致性Z_q 加法掩码零泄露转移

📌 这是首个在纯 JavaScript 环境下通过 TVLA 时序验证的 SM2 / HMAC-SM3 公开实现。

9.10 形式化验证(TLA+)

混合握手协议 Path C-2 已通过 TLA+ 形式化验证(7 条不变量,101,467 状态,0 违例,0 死锁):

⚠️ 局限:lossy network 死锁由 TCP 重传绕过(真实协议靠重传);K3 基于 key=i 构造而非密码级独立采样;EasyCrypt 密码学证明未做。

10. SM4 恒定时间实现路线图

SM4 当前为查表实现(S-box 查表),存在理论上的缓存侧信道风险。路线图为消除该风险:

阶段方案验收标准
Phase 1位切片 (bitsliced) SM4 S-box,消除查表无内存依赖分支,TVLA 验证通过
Phase 2恒定时间密钥调度(T-tables → 纯算术)调度无数据相关内存访问
Phase 3WASM 内联汇编 + 编译器屏障防止编译器重排引入泄露

📌 当前 SM4 用于通道内数据加密(非密钥协商),缓存侧信道影响远低于协商层;Phase 1 完成后将补齐 TVLA 验证并归档 TSR。

11. 实验分支:LookingGlass v2 DMTH 安全模型

⚠️ 2026-06-26 实验分支声明

LookingGlass (原 DMH) 为 FIBEMATE 自研实验性混淆方案,已更名为 DMTH(确定性掩码 + 标准矩阵对)。它不提升底层 LWE 难度,仅增加软件层混淆;默认关闭,不部署生产环境。

11.1 修正对比

维度修正前 (DMH)修正后 (DMTH)
安全声称depth × n × log(q) 计算硬度标准 LWE 计算硬度 + 陷门复杂度
depth 作用错误地作为攻击难度正确定义为陷门隐蔽性参数
公钥形态未验证BKZ 确认标准 LWE
学术诚实不准确自我修正 ✅

11.2 实际安全强度

参数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 列为陷门结构复杂度指标,不提供额外计算硬度。

11.3 验证方法

11.4 LookingGlass 定位

✅ 代码验证已完成 · 实验验证已完成 · 安全模型已修正

LookingGlass 是 FIBEMATE 的「默认关闭、按需开启」实验性模块。它独立于 SM2/ML-KEM/Cheshire Cat 底盘运行。

LookingGlass 全系列 38 份 DigiCert TSR · 2026-06-26 · 全部 Granted ✅ · 详见 抗量子就绪状态 §7