mokkunsuzuki-code/stage376
GitHub: mokkunsuzuki-code/stage376
该项目实现了基于 ML-DSA-65 与 Sigstore 双签名、RFC 3161 时间戳验证及 PQC 降级防护的生产级证明验证门。
Stars: 0 | Forks: 0
# Stage375:生产级 ML-DSA-65 双签名验证与降级防护门
Stage375 扩展了 Stage374,通过为已通过 Sigstore、Cosign、GitHub Actions OIDC 和 Rekor 签名并验证的同一个 Stage373 证明 blob 添加真实的 ML-DSA-65 签名和验证。
## 目的
Stage374 确立了:
- GitHub Actions OIDC 身份
- Cosign 签名
- Sigstore bundle 验证
- Rekor 包含验证
- 具体的 Rekor 日志位置
- `external_transparency_bound: true`
Stage375 增加了:
- 真实的 ML-DSA-65 密钥对
- ML-DSA-65 签名
- ML-DSA-65 签名验证
- 公钥指纹验证
- 与 Stage374 Sigstore 签名的精确目标绑定
- 逻辑证明哈希一致性
- fail-closed PQC 降级防护
## 双签名模型
同一个 Stage373 文件通过两条独立的签名轨道进行签名:
1. Stage374 Sigstore / Cosign / Rekor
2. Stage375 ML-DSA-65
两个签名都必须针对:
`docs/final-acceptance-attestation/stage373_final_acceptance_attestation.json`
预期的 blob SHA256:
`6ecf58d0070d8db920744b7d32331e01e8e1aef2eded02dde428b80def79d5e6`
预期的逻辑证明 SHA256:
`d54b7524ced420f664da9d370985585d649ce80584b64bdf87342f89dbfde89f`
## 初始状态
在 GitHub Actions ML-DSA 工作流运行之前:
- `decision: mldsa_execution_pending`
- `mldsa_signature_verified: false`
- `dual_signature_target_matches: false`
- `pqc_downgrade_prevented: false`
## 成功状态
在完成 ML-DSA 签名和验证之后:
- `decision: quantum_safe_dual_signature_verified`
- `sigstore_signature_verified: true`
- `rekor_inclusion_verified: true`
- `mldsa_signature_verified: true`
- `dual_signature_target_matches: true`
- `pqc_downgrade_prevented: true`
## 降级防护
Stage375 使用:
- `pqc_required: true`
- `downgrade_policy: fail_closed`
在 ML-DSA 执行开始后,缺失、无效、已移除或不匹配的 ML-DSA 签名将导致 `block`(拦截)。
当 PQC 策略处于活动状态时,仅有有效的 Sigstore 签名是不够的。
## 密钥保护
ML-DSA 私钥:
- 在本地创建
- 保留在 `private/stage375-mldsa/` 目录下
- 被 `.gitignore` 排除
- 被排除在 Git 之外,并可能保留在本地私有目录中;生产工作流通过加密的 GitHub Actions secret 接收副本
- 在 GitHub Actions runner 内临时重构
- 其临时的 runner 副本会在上传 artifact 之前被删除
- 绝不会在 GitHub Pages 或代码库中发布
公钥和 ML-DSA 签名可以公开。
## OpenSSL
Stage375 在 GitHub Actions 中使用 OpenSSL 3.5.7 LTS。
OpenSSL 3.5 引入了原生的 ML-DSA-44、ML-DSA-65 和 ML-DSA-87 支持。
此阶段声明使用了 FIPS 204 ML-DSA 算法。
它并未声明自定义构建的 OpenSSL 二进制文件是经过 FIPS 140 验证的加密模块。
## 公开证据
- `docs/mldsa-production/stage375_mldsa65_input.json`
- `docs/mldsa-production/stage375_mldsa65_public_key.pem`
- `docs/mldsa-production/stage375_mldsa65_signature.bin`
- `docs/mldsa-production/stage375_mldsa65_execution_receipt.json`
- `docs/mldsa-production/stage375_dual_signature_verification_result.json`
- `docs/mldsa-production/stage375_dual_signature_verification_summary.txt`
## 安全边界
Stage375 不发布:
- ML-DSA 私钥
- ML-DSA seeds
- OIDC token
- GitHub token
- 原始 QKD 密钥材料
- 原始时间戳二进制文件
- 自由格式的 shell 命令
## 许可证
MIT 许可证。
## 当前验证状态
Stage375 完成了真实的 ML-DSA-65 签名和验证。
当前结果:
- `decision: quantum_safe_dual_signature_verified`
- `sigstore_signature_verified: true`
- `rekor_inclusion_verified: true`
- `mldsa_signature_verified: true`
- `dual_signature_target_matches: true`
- `pqc_downgrade_prevented: true`
- GitHub Actions 运行:`29327350883`
- OpenSSL 版本:`3.5.7`
- ML-DSA 签名大小:`3309 bytes`
Stage374 的 Sigstore/Rekor 签名和 Stage375 的 ML-DSA-65 签名针对的是同一个 Stage373 证明 blob。
ML-DSA 私钥未被发布。本地开发副本可能保留在被 Git 忽略的 `private/stage375-mldsa/` 目录中,而生产工作流使用加密的 GitHub Actions secret。
标签:CVE, OpenSSL, Sigstore, 可信时间戳, 后量子密码学, 安全测试工具, 密码学, 手动系统调用, 数字签名