nickharris808/pqc-mfb
GitHub: nickharris808/pqc-mfb
一个后量子密码学迁移失败基准测试工具,通过 322 个建模案例和 39 个失败家族为 PQC 实现提供覆盖率评分与回归检测。
Stars: 0 | Forks: 0
# PQC-MFB — 后量子迁移失败基准测试
[](LICENSE)
[](DATASET_CARD.md)
[](src/pqc_mfb/data/pqc_mfb.jsonl)
[](#the-39-families)
[](tests/)
**你的后量子迁移会崩溃吗?这里有 322 种它已经崩溃过的方式。**
涵盖 39 个失败家族和 10 个未修复设计的 322 个案例。只需一条命令即可为你的实现评分。天真的基准测试修复了 **312 个案例中的 0 个**。留下你的数字吧。
## 为什么会有这个项目
每个迁移到后量子密码学的人都在编写同样的一小撮 bug,而且它们大多不是密码学层面的 bug——它们是尺寸变化*重新引入*的状态机 bug。未绑定到密钥的降级。在重传时重新安装的密钥。跨越两个会话重组的片段序列。悄然将临时密钥的生命周期永久延长的漫游。
这些都有已发表的类似案例——KRACK、Dragonblood、FragAttacks——而后量子尺寸机制在常规路径上重新开启了它们,而不仅仅是在奇异的配置中。
以前并没有一种通用的方法来询问“我的实现是否处理了这些问题?”这就是其中一种方法。
## 安装
```
pip install pqc-mfb # once published
pip install -e . # from a clone, today
```
## 30秒快速入门
```
pqc-mfb info # what's in the benchmark
pqc-mfb score --baseline naive # the floor: 0/312
pqc-mfb score my_results.json -v # your implementation
```
## 实际示例 — 实际输出
```
$ pqc-mfb info
PQC-MFB — Post-Quantum Migration Failure Benchmark
cases 322
failures 312 (cases where the naive baseline breaks)
families 39
designs 10
$ pqc-mfb score --baseline naive
submission: naive baseline
coverage 0/312 (0.0%)
regressions 0
unanswered 0
families closed 0 of (38):
- algorithm_substitution
- ap_flood
- beacon_batch_replay
...
```
提交的内容是一个 JSON 对象,将案例 ID 映射到**你的**实现是否保持了不变量:
```
{
"naive_hybrid_akm::algorithm_substitution": true,
"naive_pqc_sae::offline_dictionary": false
}
```
## 评分
**覆盖率** = 已修复 / 312,基于未修复基准测试失败的案例计算。
**回归是硬性失败。** 有十个案例即使在未修复状态下也能通过。如果你在其中任何一个案例上失败,说明你破坏了原本正常工作的东西,无论覆盖率如何,你都不会通过。一个提交可以获得 100% 的覆盖率,但仍然是 `FAIL`(失败)。
**沉默不算数。** 你省略的案例是*未回答*,而不是已修复。
**零案例家族会按名称报告。** 总体覆盖率掩盖了形态。在遗漏所有漫游案例的情况下达到 90% 的覆盖率,与均匀地达到 90% 的覆盖率是不同的结果,评分器会指出你属于哪一种。
| 参考 | 覆盖率 | 回归 | 结果 |
|---|--:|--:|---|
| 天真基准(底线) | 0/312 — 0.0% | 0 | PASS |
| 参考上限 | 312/312 — 100.0% | 0 | PASS |
两者都是计算得出的,而不是断言的:`baselines/` 由测试套件重新生成,如果提交的数字发生偏移,测试就会失败。
## 39 个家族
降级与协商 — `algorithm_substitution`, `capability_spoof`, `forced_fallback`, `suite_rollback`, `mtu_downgrade`, `fec_downgrade`, `policy_substitution`, `eap_method_downgrade`, `eap_pqc_strip`, `combiner_downgrade`, `recovery_downgrade`, `sig_profile_substitution`。
安装与重放 — `krack_retransmission`, `resumption_replay`, `stale_credential_replay`, `puzzle_replay`, `roam_ticket_replay`, `group_key_injection`。
碎片化 — `fragment_splice`, `fragment_swap`, `compression_bomb`。
资源耗尽 — `ap_flood`, `flood_starvation`。
漫游与多链路 — `ft_roam_fs_erosion`, `roam_key_reuse`, `mlo_key_crosslink`, `mlo_misbind`。
密码与身份 — `offline_dictionary`, `online_guess`, `sae_role_confusion`, `kem_impersonation_no_confirm`。
密码学卫生 — `skipped_reencryption_check`, `single_family_break`, `owe_quantum_recoverable`, `beacon_forgery`, `beacon_batch_replay`, `cross_protocol_confusion`, `length_fingerprint`。
## 作为库使用
```
from pqc_mfb import load_cases, score_submission
cases = load_cases()
sub = {c.case_id: my_impl_holds(c.invariant, c.design) for c in cases}
sc = score_submission(sub, cases)
print(sc.coverage, sc.zero_families, sc.passed)
```
## 数据包含什么,不包含什么
每个案例都包含失败及其上下文:`case_id`、`design`、`family`、`invariant`、`is_failure`、`naive_detail`、`naive_held`、`prior_art_analogue`。
**故意保留的:** `repair_mechanism` 和 `repaired_detail`。它们构成了失败到机制的关联矩阵,这是最小覆盖计算的输入,属于闭源核心。你不需要它们来为实现评分——基准测试问的是你是否保持了不变量,而不是如何保持。参见 [`DATASET_CARD.md`](DATASET_CARD.md) 和 `src/pqc_mfb/build_dataset.py`,这是可重现的投影步骤,并断言保留的字段永远不会到达公开文件中。
## 范围
案例是针对**建模的**状态机执行的,而不是从发布的产品中捕获的。`prior_art_analogue` 命名了具有类似*形态*的已发表失败;它并不断言该案例逐字节重现了该 CVE,并且这**不是**针对任何供应商的漏洞披露。满分意味着你处理了 312 个建模案例——这是一个有用的信号,而不是安全认证。
## 测试
```
pip install -e ".[dev]" && pytest # 20 passed
```
## 来源
提取自一个专注于受限和无线设备后量子身份验证的研究实验室。配套工具:[`pqc-sizes`](https://github.com/nickharris808/pqc-sizes)(为什么碎片化现在是强制性的)、[`pqc-dos-embedded`](https://github.com/nickharris808/pqc-dos-embedded)(真实硬件上的一个失败家族)、[`farkas-check`](https://github.com/nickharris808/farkas-check)(设备上的边界验证)。
**基准测试告诉你哪些家族失败了。它不会告诉你如何修复它们。** 这正是闭源核心的作用。相关主题已包含在已提交的临时专利申请中。如需完整封装的商业用途,请发起 [GitHub Discussion](https://github.com/nickharris808) 或在此仓库提交一个 issue。
## PQC 迁移工具包
为将身份验证密钥交换迁移到后量子的团队提供的九个免费工具。它们**查找并测量**;它们不进行修复。
| 工具 | 功能 | 位置 |
|---|---|---|
| [pqc-sizes](https://github.com/nickharris808/pqc-sizes) | 尺寸、片段计数和双侧重组窗口 | PyPI |
| [pqc-sizes-js](https://github.com/nickharris808/pqc-sizes-js) | 适用于 Node 和浏览器的相同算法 | npm |
| [pqc-guard-action](https://github.com/nickharris808/pqc-guard-action) | 当窗口为空时使构建失败 | GitHub Action |
| [pqc-dos-embedded](https://github.com/nickharris808/pqc-dos-embedded) | 169 行 C 代码:真实 64 KB 设备上的失败 | source |
| [farkas-check](https://github.com/nickharris808/farkas-check) | 在设备上重新验证边界,无需 SMT 求解器 | source |
| [pqc-migration-mcp](https://github.com/nickharris808/pqc-migration-mcp) | 专为 AI agent 准备的六个 MCP 工具 | PyPI |
| **pqc-mfb** ← 你在这里 | 322 个案例 · 39 个失败家族 · 评分器 | PyPI |
| [pqc-mfb (data)](https://huggingface.co/datasets/nickh007/pqc-mfb) | 作为数据集的基准测试 | HF |
| [pqc-formal-corpus](https://huggingface.co/datasets/nickh007/pqc-formal-corpus) | 122 个命名的形式化结果,6 个证明器 | HF |
| [pqc-explorer](https://huggingface.co/spaces/nickh007/pqc-explorer) | 在你的浏览器中尝试,无需安装 | HF Space |
**从这里开始:** [`pqc-sizes`](https://github.com/nickharris808/pqc-sizes) 会在五秒钟内告诉你你的凭证是否分片,以及是否存在安全的上限。[`pqc-explorer`](https://huggingface.co/spaces/nickh007/pqc-explorer) 在浏览器中执行相同的操作。
### 闭源核心
修复这 39 个失败家族——降级绑定、重传安全安装、碎片化记录、漫游前向保密、多链路密钥分离、准入控制、组密钥绑定——是一个独立的专有代码库。相关主题已包含在已提交的临时专利申请中。
这种划分是经过测量的,而不是断言的:在复制噪声控制下,32 个修复机制中只有 **4 个**在外部是可区分的,因此发布这些检测器并不会泄露修复方法。
如需商业许可,请发起 [GitHub Discussion](https://github.com/nickharris808/pqc-sizes/discussions) 或在这些仓库中的任何一个提交 issue。
## 许可证
代码采用 Apache-2.0 ([LICENSE](LICENSE))。数据采用 CC-BY-4.0 ([LICENSE-DATA](LICENSE-DATA),条款详见 [DATASET_CARD.md](DATASET_CARD.md))。
请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
标签:AES-256, Python, 后量子密码学, 安全测试, 安全规则引擎, 攻击性安全, 无后门, 时序数据库, 漏洞评估, 状态机漏洞, 逆向工具