nickharris808/pqc-sizes

GitHub: nickharris808/pqc-sizes

一个零依赖的纯算术工具,用于计算后量子密码学凭证在受限网络链路上的分片数量及双端重组内存窗口的可行性。

Stars: 0 | Forks: 0

# pqc-sizes [![license](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE) [![python](https://img.shields.io/badge/python-3.9%2B-blue.svg)](https://pypi.org/project/pqc-sizes/) [![tests](https://img.shields.io/badge/tests-26%20passing-brightgreen.svg)](tests/) [![deps](https://img.shields.io/badge/dependencies-none-brightgreen.svg)](pyproject.toml) **你的后量子凭证无法放入单个帧中。只需 5 秒钟,就能了解这会让你付出什么代价。** ``` $ pqc-sizes window --largest-object 12000 --budget 32768 --concurrency 3 EMPTY WINDOW: floor 12,000 B > ceiling 10,922 B (short by 1,078 B). No capacity cap is both feasible and safe. ``` 零依赖。纯算术运算。无密码学、无网络、无遥测。 ## 为什么需要这个工具 一个 X25519 共享密钥大小为 32 字节,刚好可以放入单个数据帧中。而一个 Category-3 级别的后量子凭证 —— 包括 KEM 公钥、KEM 密文、签名公钥、签名 —— 总共高达 **7,533 字节**,在 802.11 管理帧路径上会被拆分成 **20 个片段**。 这不仅是量变,更是结构性的质变。接收方现在必须在能够对状态进行身份验证*之前*,就持有受攻击者影响的部分状态。因此,系统需要对重组内存设定一个上限。而这个上限有**两个**边界,而不是一个: ``` floor = the largest legitimate object you must accept ceiling = global reassembly budget / worst-case concurrent contexts ``` 如果低于下限,你会拒绝诚实的对等节点。如果高于上限,并发会话会耗尽你的预算。**如果下限 > 上限,则该区间为空,任何上限都将失效** —— 这是一个设计层面的答案,而不是一个错误。 大多数团队会尝试设定单对象限制。这种思路是错误的:暴露程度等于保留时间 × 并发数,而不仅仅是保留时间。 ## 安装 ``` pip install pqc-sizes # once published pip install -e . # from a clone, today ``` ## 30 秒快速入门 ``` pqc-sizes credential --kem ML-KEM-768 --sig ML-DSA-65 # how big is it? pqc-sizes fragments wifi-mgmt-frag --kem ML-KEM-768 --sig ML-DSA-65 pqc-sizes sweep --largest-object 12000 --budget 32768 --max-concurrency 4 ``` ## 实战示例 —— 实际输出 ``` $ pqc-sizes credential --kem ML-KEM-768 --sig ML-DSA-65 credential: ML-KEM-768 + ML-DSA-65 ML-KEM-768 public key 1,184 B ML-KEM-768 ciphertext 1,088 B ML-DSA-65 public key 1,952 B ML-DSA-65 signature 3,309 B TOTAL 7,533 B $ pqc-sizes fragments wifi-mgmt-frag --kem ML-KEM-768 --sig ML-DSA-65 ML-KEM-768+ML-DSA-65 credential over wifi-mgmt-frag (384 B/frame): 20 fragments -> fragmentation is mandatory; the receiver holds partial, unauthenticated state across 20 frames $ pqc-sizes sweep --largest-object 12000 --budget 32768 --max-concurrency 4 contexts ceiling window -------------------------------------------- 1 32,768 ok 2 16,384 ok 3 10,922 EMPTY 4 8,192 EMPTY window becomes EMPTY at 3 concurrent contexts -- that is this device's derived concurrency limit. ``` **最后一行才是重点。** 你不需要通过实际上线并眼睁睁看着设备崩溃来发现并发上限。你可以通过一条命令将其推导出来。 ## 作为库使用 ``` from pqc_sizes import credential_bytes, fragments_for, reassembly_window credential_bytes("ML-KEM-768", "ML-DSA-65") # 7533 fragments_for(7533, 1500) # 6 (standard Ethernet) win = reassembly_window(largest_legitimate_object=12000, memory_budget=65536, concurrency=4) win.ceiling # 16384 win.is_empty # False win.admits(16385) # False -- one byte over the budget ``` 当区间为空时,`window` 会退出并返回状态码 **1**,因此可以直接无缝集成到 CI 中。 ## 包含内容 **算法** —— ML-KEM 512/768/1024, ML-DSA 44/65/87, Falcon 512/1024, SLH-DSA 128s/128f, Classic McEliece,外加用于对比的 X25519 和 ECDSA-P256。 **传输层** —— 802.11 管理帧片段 (384 B) 和 MSDU (2304 B),Ethernet (1500/9000 B),BLE ATT (251 B),Matter BTP (244 B),LoRaWAN DR0 (51 B),USB HID (64 B),CoAP/DTLS (1152 B)。或者直接传入原始字节数。 ## 适用范围 基于已发布的对象大小进行算术计算。它**不会**检查你的代码实现,不会进行任何密码学验证,也不会对你的协议做出任何安全声明。非空的窗口仅意味着存在一个上限*存在* —— 并不代表你的代码强制执行了它。 ## 测试 ``` pip install -e ".[dev]" && pytest # 26 passed ``` ## 背景来源 提取自一个专注于受限和无线设备后量子身份验证的研究实验室。此大小计算规则所提供的边界在 Lean 中经过了机器检查(`bounded`、`naive_unbounded`、`gated_le_naive`、`separation`),并且可以在没有求解器的设备上重新验证。 **此工具包仅告诉你该选择什么上限,但并不强制执行它。** 强制执行上限 —— 以及处理后量子迁移失败面的其他问题:降级攻击、密钥重装、分片拼接、漫游前向安全性、多链路密钥隔离 —— 这些是由闭源核心完成的。请参阅 [`pqc-dos-embedded`](https://github.com/nickharris808/pqc-dos-embedded),了解在 64 KB 设备上进行强制执行的具体情况。 相关技术内容已提交临时专利申请。 如需商业授权,请发起 [GitHub Discussion](https://github.com/nickharris808) 或提交 issue。 ## PQC 迁移工具包 为致力于将身份验证密钥交换迁移至后量子时代的团队提供的九款免费工具。它们专注于**发现并测量**问题;不负责修复。 | 工具 | 功能说明 | 获取位置 | |---|---|---| | **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 solver | source | | [pqc-migration-mcp](https://github.com/nickharris808/pqc-migration-mcp) | 面向 AI 智能体的六款 MCP 工具 | PyPI | | [pqc-mfb](https://github.com/nickharris808/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) 可以在 5 秒内告诉你你的凭证是否会被分片,以及是否存在安全的上限。[`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) 和 [CONTRIBUTING.md](CONTRIBUTING.md)。
标签:内存管理, 内核驱动, 后量子密码学, 文档结构分析, 网络分片, 网络协议, 计算工具, 逆向工具