版本: v3.3.0 | 最后更新: 2026-08-31
本文档明确陈述 FIBEMATE 的安全边界、已知限制和不适用范围。诚实的工程必须声明自己做不到什么,而不是靠模糊措辞暗示安全增益。
---
FIBEMATE 是一个 后量子密码全栈工程演示与验证平台,不是安全产品。
| 是 | 不是 |
|:---|:---|
| 密码工程参考实现 | 生产就绪的安全库 |
| 多算法互操作性验证 | 商用密码产品 |
| 侧信道缓解技术演示 | 通过认证的安全模块 |
| 开源社区项目 | 企业级安全解决方案 |
---
### 2.1 密码理论安全证明缺失
项目自研 VWZ 签名方案基于全新 VMQ-SPARSE 张量困难假设,无标准 LWE 格问题安全归约证明,未经过学术界广泛密码分析验证,安全性未形成共识。该组件仅为实验研究用途,默认关闭,严禁用于安全可信场景。
### 2.2 硬件物理安全验证不完整
FPGA v5 硬件仅完成逻辑时序、ILA 仿真、L8/L9 完整性测试(43/43 PASS),无真实芯片功耗、电磁泄漏侧信道实测数据。当前硬件安全层级仅为逻辑安全,不具备物理抗攻击能力,L9 硬件防护安全模型论证存在断层。阻塞原因为 CH340G 电平不匹配,待更换 CP2102/FT232 设备后补全测试(计划 Q4 2026)。
### 2.3 实验组件隔离存在工程漏洞
VWZ、LookingGlass 等实验组件通过运行时 Feature Flag 关闭(FIBEMATE_EXPERIMENTAL=0 默认生产模式),所有 require('experimental/...') 调用均在 if (flags.XXX) 条件块或 try/catch 防御块内。
**整改完成 (P0-01)**:2026-08-25 新增 `scripts/check-experimental-isolation.cjs` CI 门禁脚本,自动化验证 `src/` 目录下所有对 `experimental/` 的 require 均为条件引用(非无条件加载)。CI bom-check job 中已集成此检查。实验代码物理隔离于 `experimental/` 目录,生产入口 `src/index.js` 在 `FIBEMATE_EXPERIMENTAL=0` 下不会加载任何实验模块。
### 2.4 ML-KEM 自定义实现的固有风险
项目早期采用时域多项式实现 ML-KEM-768,与 NIST 标准 NTT 域格式不原生互通,虽已完成全量交叉验证修复历史漏洞(nonce 截断、A 矩阵退化、decapsulate 参数顺序),但自定义实现脱离标准范式,相比原生 liboqs 实现存在更高的隐蔽性实现漏洞风险。内部自测无法完全覆盖标准兼容类缺陷,依赖外部交叉验证兜底。
当前状态:2026-07-21 已重写为 NTT 域实现(FIPS 203 §4.3),noble + liboqs 双向 10,000 轮全量通过。长期风险已降低但未消除。
---
### 3.1 形式化验证覆盖范围有限
TLA+ 形式化验证仅覆盖 SM2+ML-KEM C-2 混合握手协议逻辑(7 条不变式,101,467 状态,EXIT 0),未覆盖 ML-KEM 底层运算、SM2 签名加密、Double Ratchet 密钥更新等核心算法模块。无法从数学层面证明算法逻辑绝对安全,仅能依靠黑盒测试验证功能正确性。
### 3.2 软硬件安全防护不统一
软件层 SM2、ML-KEM 已完成掩码随机化、常量时间运算、TVLA 侧信道防护(N=10,000,36/36 全绿),但 FPGA 硬件 NTT、椭圆运算模块未同步实现同等防护逻辑,硬件层存在独立侧信道攻击面,软硬件安全防护体系不一致。
当前硬件仅完成逻辑时序验证(WNS=+9.755ns),物理侧信道测试(ChipWhisperer)待 Q4 2026 补齐。
### 3.3 无第三方权威安全审计
所有生产组件仅完成自研自测、TVLA 测试、KAT 合规、形式化协议验证,未通过外部第三方密码安全审计、渗透测试、代码审计,无法规避单人开发的思维盲区与实现漏洞。这是项目评分 7.8→8.5 的最大杠杆项。
---
### 4.1 X3DH 握手匿名性审查
基于宁建廷等(2025)匿名认证框架对 FIBEMATE X3DH + SPK 独立化握手的审查结论:
Jianting Ning et al., *Anonymous Authentication and Key Agreement, Revisited*. ePrint 2025/1986.
### 4.2 流量混淆对抗评估
基于 PrivDPI(CCS'19)/ Pine(ESORICS'20 最佳论文)对照评估 FIBEMATE 三策略(StaticPad / PerPhase / BudgetPool):
Jianting Ning et al., *PrivDPI*, CCS 2019; *Pine*, ESORICS 2020 Best Paper.
详见:traffic-obfuscation-vs-privdpi.md
---
| 局限 | 影响 |
|:---|:---|
| 默认依赖 Nginx 反向代理暴露 | 无内置 mTLS 双向认证、自动证书签发 |
| PM2 部署模板未加固 | 无日志脱敏、崩溃转储、内存溢出防护 |
| Mixnet 仿真模块无强隔离 | 存在误加载风险 |
---
### ✅ 已实现
### ❌ 已知限制
| 限制 | 影响 | 计划 |
|:---|:---|:---|
| 纯 JavaScript — 无原生 ASAN/UBSAN 覆盖 | 内存安全问题无法自动检测 | liboqs C 交叉验证作为补偿 |
| 非恒定时间 — BigInt/展开循环可能有分支 | 存在时序侧信道泄漏风险 | Barrett reduction 已减少风险; C 端口远期 |
| JS 引擎 GC — 密钥可能残留在堆中 | 冷启动攻击面较大 | v4 探索 WebAssembly GC 或手动擦除 |
| 无硬件 TVLA | 无法物理验证侧信道 | Q4 2026 ChipWhisperer 计划 |
| 无形式化证明 | ML-KEM 本身未经形式化验证 | TLA+ 模型覆盖 Path C-2 K3 强密钥独立性 |
---
| 限制 | 影响 |
|:---|:---|
| BigInt 实现,非恒定时间 | 存在时序侧信道泄漏 |
| k-masking (k' = k + r·N) 缓解了 SPA,但未消除 | 需要硬件 TVLA 验证 |
| JS 平台限制 ⚠️ | 详见 SM2 TVLA 分析 |
### 7.1 SM2 多签名教学包
packages/sm2-multisig/ 实现了基于宁建廷等(2024)方案的广播多签名教学示例——共享 nonce + 线性响应聚合 + 聚合公钥验证。
Yuchen Xiao, Lei Zhang, Yafang Yang, Wei Wu, **Jianting Ning**, Xinyi Huang. *Provably Secure Multi-Signature Scheme Based on the Standard SM2 Signature Scheme*. CSI 89:103819, 2024.
边界声明:教学版演示聚合原理;完整可证明安全构造含 (1+d)⁻¹ 因子(EUF-CMA / bijective ROM / ECDLP),请参照论文。测试覆盖:SM3 KAT、3 方聚合、n=1 退化、2 方 ID 绑定、篡改拒绝。
---
| 模块 | 状态 | 安全声明 |
|:---|:---|:---|
| LookingGlass v2 (Rust/WASM) | 默认关闭 | ⚠️ 仅逆向工程难度屏障,不提升 LWE 安全强度 |
| VWZ 签名 (Rust/WASM) | 默认关闭 | ⚠️ 仅代数构造原型,未经过密码分析社区审查 |
| DMTH (已归档) | 纯研究 | ⚠️ 方向性错误 (d>3 可被全局合并),已修正为 v2 等变 LWE |
| Cheshire Cat (已归档) | 纯研究 | ⚠️ 理论原型,无工程实现 |
默认关闭策略 (2026-06-28 四层理由):
1. 安全隔离 — 实验模块不应污染 ML-KEM+SLH-DSA 通信链路
2. 工程稳定 — WASM 体积/多层张量延迟未穷尽
3. 文档自洽 — 官网始终只展示默认启用的 FIPS 标准链路
4. 兼容性兜底 — 老旧浏览器/防火墙可能不适应复杂张量运算
---
| 依赖 | 用途 | 风险 |
|:---|:---|:---|
| @noble/hashes | SHA3/SHAKE fallback | 文档完备 · PG/OCB |
| crypto.subtle (browser) | WebCrypto SHA3 | 浏览器原生 |
| crypto (Node.js) | Node 内置 SHA3 | 标准 Node API |
所有依赖均可通过 keccak 内联实现兜底,无外部强制依赖链。
---
对于 FIBEMATE 这类后量子密码全栈工程平台,代码安全与运行稳定性属于最高优先级核心约束,优先级高于新功能迭代、研究模块拓展。
### 10.1 量化对比
普通业务软件中安全与稳定性占比约 10-25%;在 FIBEMATE 中,代码安全 + 稳定性占据项目可信度的 65%。其余 35% 为架构设计、文档体系、硬件原型等非代码资产。
即使架构思路先进、文档完善、硬件原型亮眼,底层代码安全与稳定性存在硬伤,项目直接丧失可信基础。
### 10.2 稳定性与代码安全的区别
| 维度 | 稳定性 | 代码安全 |
|:---|:---|:---|
| 定义 | 合法输入下持续正确运行,无随机崩溃、无偶发失败、跨平台一致 | 抵御恶意输入,无漏洞泄漏密钥,无密码逻辑缺陷 |
| 典型事故 | 偶发 KEM 往返失败、WASM Safari 随机报错 | 畸形密文触发越界读取、时序侧信道泄漏、nonce 截断 |
| 检测方式 | KAT、多环境回归、压力测试 | fuzz、ASAN/UBSAN、TVLA、交叉验证 |
| 失败后果 | 通信中断(良性)或加密失效(恶性) | 加密被破解、密钥泄漏(多为静默发生) |
| 权重 | 0.6 | 0.4 |
### 10.3 风险传导
密码库的安全缺陷具备强传染性:任何人基于 FIBEMATE 搭建上层系统,自动继承底层全部缺陷。即使明确声明"仅工程演示",公开代码必然被复用。
历史案例:
### 10.4 工程推论
1. KAT 测试不充分 — 只能证明"合法输入下正常运行",无法验证恶意输入和边界条件
2. 实验代码严格隔离 — Feature flag 控制,不让 VWZ/LookingGlass 污染可信密码路径
3. 所有修改必须全量回归 — 一行 modMul 或压缩函数修改可能引入静默逻辑缺陷
4. 跨库交叉验证为强制门禁 — 任何密码核心逻辑变更必须通过 noble + liboqs 双端交叉验证
5. 稳定性优先于安全性 — 当二者冲突时,优先保证稳定性(权重 0.6),安全性次之(0.4)
---
任何使用者必须遵守以下约束,违规使用产生的安全风险由使用者自行承担:
1. 禁止将本项目用于涉密、金融、政务、核心基础设施等安全关键场景
2. 禁止手动开启 VWZ、LookingGlass 实验组件用于正式加密通信
3. 禁止直接基于自定义 ML-KEM 实现搭建商用系统
4. 所有测试数据、安全结论仅适用于当前 v3.3-preview 版本,后续迭代未核验前不做复用
---
| 项目 | 时间 | 说明 |
|:---|:---|:---|
| ~~编译期 Feature Flag 隔离~~ | ~~2026-08-20~~ | ✅ 2026-08-25 完成:CI 门禁脚本 + 条件 require 验证(P0-01) |
| ML-KEM 标准对齐固化 | 2026-08-25 | 跨库交叉验证 CI 门禁(P0) |
| ~~废弃 TLS Path A 清理~~ | ~~2026-08-20~~ | ✅ 2026-08-25 完成:代码已清除 + 复盘文档 docs/path-a-postmortem.md(P0-03) |
| 第三方安全审计 | 待定 | 最大杠杆项(7.8→8.5) |
| Bus Factor ≥ 2 | 8.31 后 | 开源招募 |
| 物理 TVLA (ChipWhisperer) | Q4 2026 | 硬件侧信道实测(P0) |
| 恒定时间实现 | Q1 2027 | 可能 C/Rust 重写核心 |
| HSM 集成 | 远期 | PKCS#11 / TPM 支持 |
---
**核心原则**: 诚实陈述安全边界。不夸大、不暗示、不隐藏。
配套文件: [风险分级整改清单](./risk-rectification.md) · [THREAT_MODEL.md](./THREAT_MODEL.md) · [design-decisions.md](./design-decisions.md)