exocognosis/lattice-aggregation
GitHub: exocognosis/lattice-aggregation
一个面向审计的Rust研究脚手架,探索将数千名验证者的后量子格密码签名聚合成单一标准大小签名的交互式阈值协议可行性。
Stars: 1 | Forks: 0
# lattice-aggregation
**面向审计的阈值后量子签名聚合研究脚手架**
用于 **ML-DSA-65** (NIST FIPS 204 / Dilithium) 的交互式阈值聚合,旨在将数千名验证者的贡献压缩为一个标准大小的签名。
- 具有确定性 transcript 的 type-state 协议
- 具有真实 ML-DSA-65 大小输出的模拟后端
- 透明的假设矩阵、证明义务和发布门控
- **研究阶段**:作为研究工件发布,而非生产级密码学
[当前状态](#current-status) • [复现证据](#reproduce-evidence) • [已知限制](#known-limitations) • [假设评估](scripts/assess_lattice_hypothesis.py) • [安全模型](SECURITY.md) • [声明矩阵](docs/cryptography/claims-matrix.md)



## 当前状态
本代码库可作为研究工件和探索性实现发布。它适合作为技术白皮书的配套、面向审计的原型,以及用于原生阈值 ML-DSA-65 聚合研究的可复现证据脚手架。
它不可作为生产级密码学、已完成的阈值 ML-DSA 构造、经 FIPS/CAVP/ACVTS 验证的实现,或已完成且兼容标准验证者的聚合签名方案发布。
当前已合并至 main 分支的评估状态为:`partially_proven`。五个被追踪的假设标准目前均为 `partially_met`;目前没有任何一个被归类为已完全证明或被证伪。
## 复现证据
在复现证据时请使用全新的 target 目录,这样本地构建工件就不会掩盖陈旧的状态:
```
cargo fmt --all -- --check
python3 -m unittest script_tests.test_assess_lattice_hypothesis
python3 scripts/assess_lattice_hypothesis.py --out artifacts/hypothesis/latest --offline --target-dir /tmp/lattice-aggregation-publish-evidence
CARGO_NET_OFFLINE=true CARGO_TARGET_DIR=/tmp/lattice-aggregation-publish-evidence cargo test --features production-mldsa65-coordinator --test production_provider --test production_rejection_equivalence --test production_selected_backend --test proof_documentation_manifest
CARGO_NET_OFFLINE=true CARGO_TARGET_DIR=/tmp/lattice-aggregation-publish-evidence cargo test --features production-mldsa65-coordinator
```
这些命令可复现当前的脚手架和文档证据。通过这些测试并不能终结密码学定理、选定生产后端,也不能确立生产级的 ML-DSA 安全性。
## 发布标签
`v0.1.0` 仍是历史性的协议一致性标签。下一个干净的公开研究标签应仅在本 README 状态、假设评估、文档清单和发布边界措辞合并到 `main` 分支后才创建。
推荐的下一个标签名称:`v0.2.0-research-preview`。
标签必须指向已合并的 `main` 提交,包含用于复现的评估输出路径,并且除非完全满足[发布就绪检查表](docs/benchmarks/release-readiness-checklist.md),否则应避免使用生产就绪的表述。
## 亟待解决的问题
随着 L1 区块链为后量子时代做准备,迁移到 NIST 标准化的基于格的密码学(如 FIPS 204 ML-DSA)带来了严重的可扩展性损耗。与传统的 BLS 签名方案不同,由于结构化的格秘密、掩码向量和交互式拒绝采样,ML-DSA 签名在原生层面上无法进行代数组合或聚合。
为每个验证者简单粗暴地存储一个 ML-DSA 签名会导致线性的 `O(N)` 状态和带宽增长。对于大型验证者集合,这造成了一种不可接受的权衡:要么限制验证者参与以保持性能,要么接受网络拥堵和存储膨胀以换取后量子安全性。
## 提议的框架
`lattice-aggregation` 是一个用于探索零妥协目标的研究脚手架:交互式阈值 ML-DSA-65 签名聚合。
该目标架构探讨大型验证者法定人数是否能够共同生成一个单一、标准大小的 ML-DSA-65 签名。如果所需的证明义务能够闭环,验证路径将保持向后兼容:未经修改的 NIST 风格验证者只需在一个 epoch 的阈值公钥下检查一个签名,而无需知道该签名是由多方协议生成的。
为了使该声明具备可审查性,该框架对五个安全边界的“Epsilon 残差账本”进行了建模。在声称属于生产级密码学之前,必须对这些边界进行隔离:
- 跨验证者集合、会话和消息的 transcript 与 Fiat-Shamir 挑战绑定
- 匹配单签名者分布所需的掩码向量和拒绝采样残差
- 跨 DKG、部分签名、聚合和证据路径的私钥份额隔离
- 由交互式参与者引入的选择性中止和活跃度偏差
- 字节级验证者兼容性、域分离和标准 ML-DSA-65 编码约束
## 定理闭环后的实际意义
如果假设得到证明,通过审查后的阈值后端实现,并针对标准 ML-DSA 验证进行了验证,该架构将解锁以下几个分布式系统优势:
- **验证者可扩展性目标(`O(1)` 验证占用空间)。** 将 10,000 多名验证者的共识密码学证明压缩为一个约 3.3 KB 的 ML-DSA-65 签名,将验证和存储成本与验证者数量解耦。
- **零开销抗量子目标。** 允许 L1 区块链采用后量子安全性,而无需在网络带宽和持久状态方面付出通常的格多重签名代价。
- **向后兼容的验证路径。** 允许轻客户端、跨链桥和硬件钱包使用现成的 ML-DSA 验证代码来验证后量子网络共识,而不是依赖定制的阈值验证者模块。
- **超高效的互操作性目标。** 用单一的原生 ML-DSA 验证检查取代庞大的多重签名验证集或昂贵的零知识封装,用于桥接和跨链共识证明。
## 为什么会有这个代码库
阈值后量子签名不仅仅是原语的替换。一个可信的验证者集成必须明确以下几个边界:
- 在 Fiat-Shamir 挑战之前提交了哪些 transcript 字段
- 哪些验证者贡献了承诺和部分份额
- 哪些格式错误、重复、陈旧或跨会话的消息被拒绝
- 哪些状态转换在构造上是不可能的
- 哪些网络、共识和超时效应不属于密码学核心
- 哪些声明目前已实现、目前是模拟的,或者仍然是证明义务
本代码库将这些边界转化为 Rust API、测试、网络类型、actor 脚手架和审计文档。
## 这里的独特之处
- **协议优先的阈值 ML-DSA 架构。** 该 crate 专注于围绕阈值 ML-DSA-65 的审查者可见边界,而不是将协议假设埋藏在不透明的后端中。
- **type-state 签名会话。** 会话阶段被编码在 API 中,这样调用者就无法在承诺之前进行聚合、为无效会话生成分片,或者意外跳过验证路径。
- **确定性 transcript 绑定。** 测试可以断言稳定的会话标识符、挑战派生、验证者集合、承诺和部分份额关系,而无需依赖实时的密码学随机性。
- **生产形态的模拟输出。** 模拟后端保留了 ML-DSA-65 大小的公钥和签名,这使得序列化、存储、适配器和基准测试路径保持现实性,同时避免了虚假的生产安全性声明。
- **审计包加上证明交叉索引。** 文档将协议阶段映射到代码、测试、可信计算库假设、攻击面、侧信道边界和未决的证明义务。
- **分布式验证者适配器边界。** Async actor、P2P、共识、证据和超时 trait 展示了阈值签名者如何位于更大的验证者堆栈中,而不会将网络效应转移到核心协议模型中。
## 目前已实现的内容
- `lattice-aggregation` 软件包,Rust 库名称为 `lattice_aggregation`
- 位于 [src/protocol.rs](src/protocol.rs) 的阈值签名会话状态机
- 位于 [src/backend.rs](src/backend.rs) 的后端 trait 和确定性模拟后端
- 位于 [src/aggregation.rs](src/aggregation.rs) 的部分份额聚合边界
- 位于 [src/dkg.rs](src/dkg.rs) 的模拟 DKG 脚手架
- 位于 [src/adapter/](src/adapter/) 的 async actor、网络消息、共识/P2P trait 和证据类型
- 位于 [src/crypto/](src/crypto/) 和 [src/low_level/](src/low_level/) 的插值、可验证秘密分享支持和多项式实验
- 位于 [tests/](tests/) 的针对模拟流程、验证、transcript 确定性、序列化、type-state 编译失败和文档链接完整性的回归测试覆盖
- 位于 [docs/audit/](docs/audit/) 的审查者包以及位于 [docs/cryptography/](docs/cryptography/) 的密码学说明
- 非默认的 `hazmat-real-mldsa` 提供者验证一致性,包括有界的 NIST ACVP-Server FIPS204 ML-DSA-65 sigVer 样本测试夹具;这并不是阈值聚合验证或验证证据
- 针对 P1 标准验证者桥接软件包的由测试夹具支持的桥接一致性证据;这不是选定后端的聚合输出证据
- 针对 P1 的选定后端聚合输出工件门控;仅作为一致性/证明审查证据,而非选定后端的证明闭环,非生产级,非 CAVP/ACVTS 或 FIPS 验证,也非已完成的标准验证者兼容性证明
- 针对 P1 的真实标准提供者选定后端聚合输出软件包推导;它通过 `LocalAccept`、`AggregateAccept`、公共重算和桥接摘要证据绑定了一个由提供者验证的 ML-DSA-65 候选签名,但它不是真实的阈值聚合签名者或证明闭环
- 针对 P1 的选定后端阈值输出工件门控;这将阈值输出源证据绑定到聚合工件证书、签名者集合、尝试、transcript、公共重算和桥接摘要,仅供证明审查使用
- 针对 P1 的选定后端证明闭环工件包门控;这将已接受的阈值输出证书绑定到已审查的证明工件、完整的 KAT/验证工件槽位、拒绝分布审查、标准验证者兼容性和定理关联工件摘要占位符,仅供证明审查使用
## 明确的非声明
这不是生产级密码学。
本代码库目前不声明:
- 生产级的 ML-DSA 签名、阈值聚合验证或 CAVP/ACVTS 验证
- 生产级的阈值 ML-DSA 构造
- 选定的生产后端、生产发布路径或已完成的标准验证者兼容性证明
- 抗侧信道或恒定时间生产级行为
- 经过审计的分布式密钥生成
- FIPS 验证
- 生产级验证者密钥的共识安全性
当前的安全边界记录在 [SECURITY.md](SECURITY.md)、[密码学声明矩阵](docs/cryptography/claims-matrix.md) 和 [发布就绪检查表](docs/benchmarks/release-readiness-checklist.md) 中。
## 已知限制
- 原生阈值 ML-DSA 安全定理尚未闭环。
- 选定后端的聚合输出门控仅作为一致性/证明审查证据。
- 选定后端的证明闭环工件包门控仅作为一致性/证明审查证据,并非选定后端的证明闭环。
- 本代码库不包含经过审查的生产级阈值后端。
- 有界的 ACVP/FIPS204 测试夹具是提供者一致性证据,而非 CAVP/ACVTS 验证。
- 除非文档明确另有说明,否则当前的基准测试结果都是确定性模拟工件。
- 侧信道阻力、恒定时间生产级行为、DKG 强化、共识安全性和外部审计批准仍然是发布的阻碍因素。
- Falcon/LaBRADOR 风格的证明封装聚合被作为相关工作进行追踪,并被视为需要评估的备用架构,而非当前选定的后端。
## 假设闭环要求
仅当阈值 ML-DSA-65 格聚合协议输出的已接受聚合结果,在相同的公钥和消息下表现得如同中心化的 ML-DSA-65 签名一样,同时保持阈值可靠性、拒绝采样分布、贡献有效性、泄漏边界和不可伪造性归约声明时,顶级假设才算闭环。以下五个要求是 [scripts/assess_lattice_hypothesis.py](scripts/assess_lattice_hypothesis.py) 使用的闭环标准。
选择这些标准是因为它们涵盖了可能破坏该声明的最小安全面:掩码分布、拒绝等价性、中止/重试偏差、已接受部分贡献的有效性以及未经授权的聚合不可伪造性。仅仅通过实现测试是不够的;每一行都需要代码证据、证明工件和声明边界文档。
正式的论题和运行参数契约位于 [docs/cryptography/thesis-operating-parameters.md](docs/cryptography/thesis-operating-parameters.md) 中,机器可读的锚点位于 [docs/cryptography/thesis-operating-parameters.json](docs/cryptography/thesis-operating-parameters.json)。其论题 ID 为 `native-threshold-mldsa65-aggregation-p1`;其范围为 `仅限研究脚手架`。
最新的本地评估运行:
```
python3 scripts/assess_lattice_hypothesis.py --out artifacts/hypothesis/latest --offline --target-dir /tmp/lattice-aggregation-p1-production-full
```
最新的验证命令:
```
cargo fmt --all -- --check
python3 -m unittest script_tests.test_assess_lattice_hypothesis
CARGO_NET_OFFLINE=true CARGO_TARGET_DIR=/tmp/lattice-aggregation-doc-gates cargo test --test proof_documentation_manifest --test thesis_operating_parameters_manifest
CARGO_NET_OFFLINE=true CARGO_TARGET_DIR=/tmp/lattice-aggregation-p1-production-full cargo test --features production-mldsa65-coordinator --test production_provider --test production_rejection_equivalence --test production_selected_backend --test proof_documentation_manifest
CARGO_NET_OFFLINE=true CARGO_TARGET_DIR=/tmp/lattice-aggregation-p1-coordinator-full cargo test --features coordinator-assisted
CARGO_NET_OFFLINE=true CARGO_TARGET_DIR=/tmp/lattice-aggregation-p1-production-full cargo test --features production-mldsa65-coordinator
```
最新结果:所有列出的命令均在本地通过,评估命令将所有五个标准报告为 `partially_met`,整体假设判定为 `partially_proven`。这是脚手架和一致性进展的证据而非生产级密码学的闭环。
| 要求 | 为什么选择此要求 | 代码和测试证据 | 最新结果 | 判定 |
| --- | --- | --- | --- | --- |
| 聚合掩码匹配或非常接近中心化的 ML-DSA 掩码。 | 如果接受的聚合掩码来自可区分的分布,则阈值签名者无法兼容验证者。 | [src/production/mask_distribution.rs](src/production/mask_distribution.rs), [tests/production_mask_distribution.rs](tests/production_mask_distribution.rs), [docs/cryptography/mask-distribution-evidence.md](docs/cryptography/mask-distribution-evidence.md), [docs/cryptography/phase-1-noise-bound-model.md](docs/cryptography/phase-1-noise-bound-model.md). | 证据门控和闭环包检查已就绪;关于 `epsilon_mask` 的 Renyi 散度证据仍然是发布阻碍。 | 部分证明。 |
| 聚合拒绝检查与中心化的 ML-DSA 拒绝检查相匹配。 | ML-DSA 的安全性依赖于拒绝采样;聚合接受必须匹配中心化的拒绝行为,而不是接受仅限阈值的工件。 | [src/production/rejection_equivalence.rs](src/production/rejection_equivalence.rs), [src/production/provider.rs](src/production/provider.rs), [tests/production_rejection_equivalence.rs](tests/production_rejection_equivalence.rs), [tests/production_provider.rs](tests/production_provider.rs), [tests/fixtures/acvp_mldsa65_sigver_fips204_sample.json](tests/fixtures/acvp_mldsa65_sigver_fips204_sample.json), [tests/fixtures/p1_standard_verifier_bridge_fixture.json](tests/fixtures/p1_standard_verifier_bridge_fixture.json), [docs/cryptography/rejection-equivalence-evidence.md](docs/cryptography/rejection-equivalence-evidence.md). | P1 聚合重算工件门控、有界的 ACVP/FIPS204 样本向量提供者一致性、带有由测试夹具支持的桥接一致性证据的测试夹具桥接证据包、选定后端的聚合输出工件门控、真实标准提供者的聚合输出包证据、选定后端的阈值输出工件门控,以及选定后端的证明闭环工件包门控均已就绪,作为更严格的阻碍因素 2/标准 2 的发布门控。Batch 4 包添加了完整的 KAT/验证工件槽位和定理关联工件摘要,但这些门控是必要的,对于标准 2 的提升并不充分,且仅作为一致性/证明审查证据;证明闭环、完整的 KAT 覆盖率、经过审查的证明工件、CAVP/ACVTS 验证工件、拒绝分布保持、已完成的标准验证者兼容性以及外部审查仍处于待定状态。 | 部分证明。 |
| 选择性中止和重试不会使已接受的签名产生偏差。 | 交互式阈值签名允许参与者影响重试;接受的输出不得因中止时间或重试域重用而产生偏差。 | [src/production/abort_bias.rs](src/production/abort_bias.rs), [tests/production_abort_bias.rs](tests/production_abort_bias.rs), [docs/cryptography/abort-retry-bias-evidence.md](docs/cryptography/abort-retry-bias-evidence.md). | 重试域、泄漏、接受样本、阈值和审查工件门控已就绪;中止泄漏和重试偏差分布分析仍是证明义务。 | 部分证明。 |
| 每个被接受的部分贡献都是可靠的、上下文绑定的,并且针对所选的泄漏模型具有足够的隐藏性。 | 如果被接受的部分贡献可能是陈旧的、跨上下文的、格式错误的或超出了所选模型范围的泄漏,那么有效的聚合就毫无意义。 | [src/production/acceptance.rs](src/production/acceptance.rs), [src/production/partial_soundness.rs](src/production/partial_soundness.rs), [tests/production_acceptance.rs](tests/production_acceptance.rs), [tests/production_partial_soundness.rs](tests/production_partial_soundness.rs), [docs/cryptography/partial-soundness-evidence.md](docs/cryptography/partial-soundness-evidence.md). | 上下文绑定和有证明支持的验证者门控已就绪;生产级本地接受、部分验证和隐藏证明证据尚不完整。 | 部分证明。 |
| 每个未经授权的接受聚合输出都归约为基础的 ML-DSA 伪造或指定的阈值侧假设违例。 | 最终的安全定理必须将任何接受的未经授权输出归类为基础的 ML-DSA 突破或精确的阈值假设失败。 | [docs/cryptography/unauthorized-aggregate-reduction.md](docs/cryptography/unauthorized-aggregate-reduction.md), [tests/unauthorized_aggregate_reduction_manifest.rs](tests/unauthorized_aggregate_reduction_manifest.rs), [docs/cryptography/formal-security-theorem.md](docs/cryptography/formal-security-theorem.md), [docs/cryptography/proof-obligations.md](docs/cryptography/proof-obligations.md). | 归约清单指出了基础伪造和阈值侧案例,并具有分类器/模拟器/审查槽位;阈值不可伪造性归约仍然是一个目标,而不是已完成的证明。 | 部分证明。 |
当前的闭环判定:`partially_proven`。在最新的一次运行中,这五个要求均未被证伪,但在缺失的证明/后端工件和验证证据被提交并经过审查之前,没有一个能被完全证明。
## 快速开始
```
cargo test
```
运行包含的实验测试套件:
```
cargo run
```
该测试套件会打印 LaTeX 表格和兼容 PGFPlots 的 CSV 文件,用于涵盖小型、中型和对抗性集群配置的模拟阈值签名会话。
运行有界的大规模确定性模拟配置:
```
cargo run -- --profile large --format csv --no-wall-sleep
```
已提交的大规模模拟工件已在 [模拟基准测试结果](docs/benchmarks/simulation-results.md) 中建立索引。未来的真实世界基准测试声明必须遵循 [真实世界基准测试协议](docs/benchmarks/real-world-benchmark-protocol.md),并且在生产级阈值后端、外部验证者部署和经过审查的工件存在之前,仍将处于阻塞状态。
## 验证
CI 工作流会运行与审查者应当首先执行的核心检查相同的命令:
```
cargo fmt --all -- --check
cargo clippy --all-targets --all-features -- -D warnings
cargo test --all-features
```
文档清单测试也会验证面向审查者的文档锚点和本地 Markdown 链接:
```
cargo test --test proof_documentation_manifest --test thesis_operating_parameters_manifest
```
## 审查者入口
- [审计包](docs/audit/README.md):攻击面、可信计算库、依赖假设和高优先级审查路径
- [密码学声明矩阵](docs/cryptography/claims-matrix.md):已实现、已模拟、已计划或明确未声明的内容
- [论题和运行参数](docs/cryptography/thesis-operating-parameters.md):当前的 P1 论题 ID、运行假设、提升标准、失败标准和备用触发条件
- [协议代码交叉索引](docs/cryptography/protocol-code-crosswalk.md):每个协议阶段在代码和测试中的位置
- [证明实现交叉索引](docs/cryptography/proof-implementation-crosswalk.md):从证明义务到当前实现和测试覆盖率的映射
- [正式阈值 ML-DSA transcript](docs/cryptography/formal-threshold-mldsa-transcript.md):transcript 字段、绑定不变量和稳定锚点
- [侧信道和恒定时间边界](docs/cryptography/side-channel-boundary.md):当前的泄漏声明和生产级门控
- [发布就绪检查表](docs/benchmarks/release-readiness-checklist.md):在使用任何生产就绪措辞之前的门控
- [模拟基准测试结果](docs/benchmarks/simulation-results.md):已提交的确定性大规模模拟遥测数据
- [真实世界基准测试协议](docs/benchmarks/real-world-benchmark-protocol.md):任何真实世界基准测试声明之前所需的输入
## 代码库结构图
- [src/backend.rs](src/backend.rs):后端 trait 边界和确定性模拟后端
- [src/protocol.rs](src/protocol.rs):type-state 签名会话流程
- [src/aggregation.rs](src/aggregation.rs):部分份额聚合接口
- [src/dkg.rs](src/dkg.rs):模拟的分布式密钥生成脚手架
- [src/adapter/](src/adapter/):async actor、网络消息、共识和 P2P 适配器 trait,以及证据类型
- [src/crypto/](src/crypto/):插值和可验证秘密分享支持代码
- [src/low_level/](src/low_level/):较低级别实验使用的多项式原语
- [tests/](tests/):模拟、验证、transcript 确定性、type-state 和底层覆盖率
- [docs/audit/](docs/audit/):用于攻击面和可信计算库分析的审查者包
- [docs/cryptography/](docs/cryptography/):密码学说明、形式化模型和证明义务交叉索引
## 设计边界
该代码库将协议架构与密码学后端实现分离开来:
- 公共 API 明确了 transcript、验证者集合、阈值、承诺和部分份额关系
- 确定性模拟允许测试断言稳定的行为,而无需依赖实时的密码学随机性
- type-state 转换防止从无效的会话状态生成分片或聚合
- 适配器 trait 将网络和共识效应保持在核心协议模型之外
- 审计文档说明了审查者应该信任什么、什么是模拟的,以及哪些部分仍然需要生产级强化
## Feature 门控
- 默认启用 `simulated`,提供确定性的协议测试行为。
- `hazmat` 标记了不应被视为稳定生产 API 的底层实验性接口。
- `hazmat-real-mldsa` 启用了一个可选的 ML-DSA-65 提供者桥接和针对普通签名的有界 ACVP 样本向量一致性测试;它不是生产级的阈值后端。
## 路线图形态
近期的生产级阈值工作应通过文档化的各个门控推进:
- 定义生产后端边界和域分离的 transcript 契约
- 用经过外部审查的阈值 ML-DSA 机制替换确定性签名输出
- 添加带有证明的份额验证、投诉/证据处理和 DKG 强化
- 添加侧信道审查、恒定时间门控和生产级基准测试工件
- 在做出生产就绪声明之前,要求满足[发布就绪检查表](docs/benchmarks/release-readiness-checklist.md)
## 建议的 GitHub 主题
`rust`, `post-quantum`, `cryptography`, `threshold-signatures`, `ml-dsa`, `mldsa`, `dilithium`, `lattice-cryptography`, `distributed-systems`, `validator`, `consensus`, `protocol-engineering`, `security-audit`, `research`
## 贡献
贡献应保持声明准确。如果更改涉及密码学行为、transcript 构建、验证逻辑或网络格式,请包含测试并更新相关的审计说明。
在提交更大的更改之前,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 和 [SECURITY.md](SECURITY.md)。
标签:Rust, 区块链共识, 可视化界面, 后量子密码学, 学术研究, 密码学, 手动系统调用, 网络流量审计, 逆向工具, 通知系统, 阈值签名