justinwkUKM/pqc-benchmark-lab

GitHub: justinwkUKM/pqc-benchmark-lab

基于 Docker 的可复现后量子密码学 TLS 握手基准测试实验室,为组织从经典密码向 PQC 迁移提供数据驱动的决策依据。

Stars: 0 | Forks: 0

# TLS + PQC 基准测试实验室 一个可复现的基准测试实验室,用于评估跨以下模式的 TLS 迁移路径: - 经典密码学 - 混合经典密码学 + PQC - 纯后量子密码学 (PQC) 本项目帮助团队从一次性测试过渡到基于可重复证据的 rollout 决策。 ## 目录 - [重点分析(2026 年 4 月)](#featured-analysis-2026-pqc-handshake-benchmarks) - [本实验室存在的意义](#why-this-lab-exists) - [什么是 OQS 以及为什么使用它](#what-is-oqs-and-why-it-is-used) - [核心功能](#key-capabilities) - [仓库结构](#repository-structure) - [前置条件](#prerequisites) - [快速开始](#quick-start) - [初级指南](#beginner-guide-first-30-minutes) - [中级指南](#intermediate-guide-repeatable-engineering-benchmarks) - [高级指南](#advanced-guide-decisioning-regression-gates-and-ci) - [系统架构](#system-architecture) - [如何解读输出](#how-to-interpret-outputs) - [配置参考](#configuration-reference) - [CI 工作流](#ci-workflows) - [故障排除](#troubleshooting) - [可复现性清单](#reproducibility-checklist) - [额外工具](#extra-tooling-pqc-playground-and-interop) - [许可证](#license) - [安全与风险提示](#security-and-risk-notice) ## 重点分析:2026 PQC 握手基准测试 一份详细的示例分析,比较了经典模式与混合模式以及纯 PQC 模式之间的 TLS 握手性能。 ![PQC 基准测试热力图](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/d49371691e214334.png) ## 本实验室存在的意义 正在为后量子密码学做准备的机构需要回答一些实际问题: - 每种迁移模式的握手开销是多少? - 开销主要受网络影响还是受密码学计算影响? - 在受限的 profile 下会出现什么失败? - 哪种模式最适合当前的 rollout,而不仅仅是未来的目标状态? 本实验室提供可重复的数据,支持 profile 模拟、多会话运行、验收关卡、评分、趋势导出和 CI 自动化。 ## 什么是 OQS 以及为什么使用它 **OQS (Open Quantum Safe)** 提供 PQC 算法和集成(包括支持 OpenSSL 的技术栈),用于在广泛的平台默认设置可用之前进行实际的迁移测试。 本仓库使用启用了 OQS 的 Docker 镜像作为客户端/服务器路径,因此同一个测试框架可以基准测试以下内容: - 经典模式 - 混合模式 - PQC 并在一个可比较的框架中进行。 ## 系统架构 下图展示了从初始化到分析输出的实验室工作流: ``` flowchart TD U[User / CI] --> B[bootstrap.sh] B --> D[(Docker Compose)] D --> C["tls-client container
(OQS OpenSSL + curl)"] D --> S["tls-server container
(OQS NGINX)"] R[run_profiles.sh] --> P["Apply infra profile
(scripts/config_query.py)"] P --> M["Run mode matrix
(config/modes.csv)"] M --> L["Latency
run_latency.sh"] M --> H["Capture
capture_handshake.sh"] M --> Q["Concurrency
run_concurrency.sh"] M --> SP["Crypto speed
run_speed.sh"] L --> O[(results)] H --> O Q --> O SP --> O O --> G[generate_report.sh] G --> PH3[generate_phase3_analytics.py] PH3 --> SC[score_profiles.py] SC --> F[REPORT.md + SUMMARY.md + DECISION_BRIEF.md] ``` ## 核心功能 ### 1) 基础设施 profile 模拟 `config/infra_profiles.csv` 中的 profile 通过网络整形 (`tc`) 和容器限制来应用。 当前的 profile: - `dc_lan` - `cross_region` - `mobile_edge` - `constrained_cpu` - `burst_gateway` ### 2) 配置驱动的 TLS 模式矩阵 `config/modes.csv` 中的模式会被自动发现(仅限启用的行): - `classical` - `kex_pqc` - `cert_pqc` - `hybrid` - `pqc` - `hybrid_pqc_cert` ### 3) 套件 + 工作负载抽象 - `config/workloads.csv` 中的工作负载 - `config/suites.csv` 中的套件 - 运行器:`scripts/run_suite.sh` 这将运行编排与硬编码的 shell 参数解耦。 ### 4) 运行隔离和可追溯性 每次运行都在唯一的运行 ID 下隔离: - `results/runs//...` 并进行全局索引: - `results/runs/index.csv` - `results/latest-run.txt` ### 5) 报告和分析 每次运行的输出包括: - `SUMMARY.md` - `summary.csv` - `heatmap-p95.csv` - `compatibility-status.csv` - `ACCEPTANCE.md` - `statistical-summary.csv` - `handshake-size-breakdown.csv` - `DECISION_BRIEF.md` - `decision-scores.csv` ### 6) 验收关卡和回归防护 `check_acceptance.py` 评估: - 握手成功阈值 - 混合开销阈值 - 兼容性阻碍因素 - 可选的基线回归限制 阈值在 `config/slo.env` 中控制。 ### 7) 决策评分 `score_profiles.py` 使用 `config/scoring_profiles.yaml` 中的加权标准对模式进行排名: - performance (性能) - compatibility (兼容性) - resource cost (资源成本) - handshake size (握手大小) - security policy fit (安全策略契合度) ### 8) 面向仪表盘的趋势导出 `export_trends.py` 从 `results/runs/index.csv` 构建历史 CSV 数据: - latency timeseries (延迟时间序列) - compatibility timeseries (兼容性时间序列) - run overview timeseries (运行概览时间序列) ### 9) CI 自动化 GitHub Actions 会运行冒烟/完整测试套件并上传报告 artifacts: - `.github/workflows/bench-smoke.yml` - `.github/workflows/bench-full.yml` ### 10) PQC 生态系统工具 包括算法目录、可执行矩阵生成、playground 向量和互操作测试框架。 ## 仓库结构 ``` . ├── config/ │ ├── infra_profiles.csv │ ├── modes.csv │ ├── workloads.csv │ ├── suites.csv │ ├── slo.env │ └── scoring_profiles.yaml ├── docs/ │ ├── pqc_playground.md │ ├── pqc_interop.md │ └── adapter_contract.md ├── schema/ │ └── run_result.json ├── scripts/ │ ├── run_suite.sh │ ├── run_profiles.sh │ ├── validate_config.py │ ├── generate_profiles_report.py │ ├── generate_phase3_analytics.py │ ├── check_acceptance.py │ ├── score_profiles.py │ ├── export_trends.py │ ├── lab_doctor.sh │ ├── playground.sh │ ├── interop.sh │ └── ... ├── vectors/ │ ├── README.md │ ├── kem/ │ ├── sig/ │ └── catalog/ └── results/ ├── runs/ └── trends/ ``` ## 前置条件 - Docker Desktop(支持 Compose) - Python 3 - `openssl` - 可选:Wireshark - 可选:`tshark`(用于握手消息级别的大小调整) ## 快速开始 ``` ./scripts/bootstrap.sh ./scripts/lab_doctor.sh ./scripts/run_profiles.sh 3 50 5 off ``` 打开最新报告: ``` RUN_ID="$(cat results/latest-run.txt)" open "results/runs/${RUN_ID}/reports/SUMMARY.md" open "results/runs/${RUN_ID}/reports/ACCEPTANCE.md" ``` ## 初级指南(前 30 分钟) ### 目标 运行一次快速基准测试,了解决策是如何产生的。 ### 步骤 1. 验证环境: ./scripts/lab_doctor.sh 2. 运行冒烟测试套件: ./scripts/run_suite.sh --suite quick --sessions 1 3. 打开生成的报告: RUN_ID="$(cat results/latest-run.txt)" open "results/runs/${RUN_ID}/reports/ACCEPTANCE.md" open "results/runs/${RUN_ID}/reports/SUMMARY.md" ### 首先阅读什么 - `ACCEPTANCE.md`:Go/No-Go 结果。 - `SUMMARY.md`:profile x 模式的行为和增量。 - `summary.csv`:用于绘图的机器可读数据。 ### 心智模型 - 如果验收失败:将结果作为诊断使用,而不是作为 rollout 建议。 - 如果验收通过:比较权衡,然后进入评分环节。 ## 中级指南(可重复的工程基准测试) ### 目标 运行稳定的实验,以便在跨版本和环境中进行比较。 ### 1) 在长时间运行前验证配置 ``` python3 scripts/validate_config.py ``` ### 2) 使用确定性种子运行广泛套件 ``` ./scripts/run_suite.sh --suite broad_coverage --seed 1337 --run-id-prefix team-baseline ``` ### 3) 运行会话恢复 OFF/ON 对比 ``` ./scripts/run_resumption_ab.sh 1 50 5 ``` ### 4) 从配置调整场景 - 启用/禁用模式:`config/modes.csv` - Profile 行为:`config/infra_profiles.csv` - 工作负载强度和行为:`config/workloads.csv` - 套件组合:`config/suites.csv` ### 5) 为仪表盘导出趋势 ``` python3 scripts/export_trends.py --runs-index results/runs/index.csv --output-dir results/trends ``` ## 高级指南(决策制定、回归防护和 CI) ### 目标 实现基准测试治理的操作化:排名、回归控制、CI 质量关卡。 ### 1) 创建决策简报 ``` python3 scripts/score_profiles.py \ --summary-csv results/runs//reports/summary.csv \ --compat-csv results/runs//reports/compatibility-status.csv \ --preset balanced \ --output-md results/runs//reports/DECISION_BRIEF.md \ --output-csv results/runs//reports/decision-scores.csv ``` 可用的预设定义在 `config/scoring_profiles.yaml` 中: - `low-latency-edge` - `constrained-compute` - `compatibility-first` - `balanced` ### 2) 对基线强制执行回归防护 ``` python3 scripts/check_acceptance.py \ --results-dir results/runs/ \ --report-dir results/runs//reports \ --slo-file config/slo.env \ --baseline-summary-csv results/trends/baseline_smoke_summary.csv \ --baseline-compat-csv results/trends/baseline_smoke_compatibility.csv ``` ### 3) 构建能力感知的可执行矩阵 ``` ./scripts/catalog.sh snapshot --backends openssl,liboqs,python python3 scripts/build_matrix.py \ --capabilities results/catalog//capabilities.json \ --families kem,sig \ --backends openssl,liboqs,python \ --min-level 1 \ --output results/catalog//matrix.csv ``` ### 4) 集成 CI 工作流 - PR 冒烟测试套件:`.github/workflows/bench-smoke.yml` - 每夜/每周完整测试套件:`.github/workflows/bench-full.yml` ## 如何解读输出 请按以下顺序: 1. `ACCEPTANCE.md` - 策略阈值和阻碍因素的 PASS/FAIL 关卡。 2. `SUMMARY.md` - 按 profile/模式划分的执行行为和增量。 3. `DECISION_BRIEF.md` - 用于 rollout 建议上下文的加权排名。 4. CSV artifacts - `summary.csv`、`heatmap-p95.csv`、`statistical-summary.csv`、趋势导出。 分解启发式规则: - KEX 效应 = `kex_pqc - classical` - 证书效应 = `cert_pqc - classical` - 综合 PQC 效应 = `pqc - classical` - 迁移开销 = `hybrid - classical` ## 配置参考 ### `config/modes.csv` 模式目录(启用的行会自动进行基准测试)。 ### `config/infra_profiles.csv` 网络/资源模拟 profile 以及 profile 并发默认值。 ### `config/workloads.csv` 基准测试强度和行为(运行次数、预热、并行度、负载模式、keepalive 混合、模式排序)。 ### `config/suites.csv` 关联工作负载 + profile/模式过滤器 + 种子策略的命名套件组合。 ### `config/slo.env` 验收和回归阈值配置。 ### `config/scoring_profiles.yaml` 加权决策预设和策略目标级别。 ## CI 工作流 ### `bench-smoke.yml` 在 PR 和手动触发时运行快速测试套件,执行回归关卡,并上传报告。 ### `bench-full.yml` 每夜/每周运行更广泛的测试套件,并发布用于趋势分析的 artifacts。 ## 故障排除 如果算法名称与预期的镜像构建不同: ``` docker exec tls-client openssl list -groups docker exec tls-client openssl list -kem-algorithms docker exec tls-client openssl list -signature-algorithms ``` 如果环境检查失败: ``` ./scripts/lab_doctor.sh python3 scripts/validate_config.py ``` 如果运行输出看起来不一致: - 验证是否使用了固定种子(`--seed` 或 `RUN_SEED`) - 确保在运行窗口期间主机负载稳定 - 确认在 `docker-compose.yml` 中锁定了镜像 digest ## 可复现性清单 - 保持镜像按 digest 锁定(`docker-compose.yml`) - 保持明确的 SLO 阈值(`config/slo.env`) - 使用运行范围的 artifacts(`results/runs/`) - 至少运行 3 次会话以获得稳定的中位数 - 在运行前验证配置(`scripts/validate_config.py`) - 使用确定性种子以保证模式排序的可复现性 ## 额外工具(PQC playground 和互操作性) ### 演练场 使用 `scripts/playground.sh` 进行后端算法检查和比较。 参见 `docs/pqc_playground.md`。 ### 互操作测试框架 使用 `scripts/interop.sh` + `scripts/interop_runner.py` 进行跨后端互操作性验证和负面测试。 参见: - `docs/pqc_interop.md` - `docs/adapter_contract.md` ### 向量和目录 - 确定性支持向量:`vectors/README.md` - 算法元数据目录:`vectors/catalog/algorithms.json` ## 许可证 Apache-2.0。参见 `LICENSE`。 ## 安全与风险提示 本项目用于基准测试和研究工作流。在任何迁移或 rollout 决策之前,请先在您自己类似生产的环境中进行验证。
标签:curl, Cutter, DevSecOps, DNS解析, Docker, HTTPS, liboqs, meg, NGINX, OpenQuantumSafe, PQC, SSL/TLS, TLS握手, Web服务器安全, 上游代理, 信息安全, 内核驱动, 加密算法, 可重现性, 后量子密码学, 基准对比, 基准测试工具, 安全测试, 安全测试工具, 安全防御评估, 实验环境, 密码学, 密钥交换, 开源项目, 性能分析, 性能开销分析, 性能评估, 手动系统调用, 攻击性安全, 测试环境, 混合加密, 混合密码学, 系统迁移, 纯后量子, 网络协议, 网络安全, 网络延迟, 蓝队防御, 计算开销, 请求拦截, 负责任AI, 逆向工具, 隐私保护