skradfasket/pqcproto_cpp20
GitHub: skradfasket/pqcproto_cpp20
一个用 C++20 编写的传输层无关后量子认证密钥交换协议核心,专注于握手逻辑的验证、审计与学术研究。
Stars: 0 | Forks: 0
# pqcproto (C++20) — MATH 410 协议核心脚手架
本仓库提供了一个使用 **C++20** 编写的、与传输层无关的认证密钥交换核心,并带有 **C ABI 包装器**。
当前基线范围:
- KEM 通过 **liboqs**:`ML-KEM-768`、`NTRU-HPS-2048-677`
- 数字签名通过 **liboqs**:`ML-DSA-65`
- 密钥调度通过 **libsodium**:`HKDF-SHA256`
- 证明 AEAD 通过 **libsodium**:`XChaCha20-Poly1305`
- 显式套件目录、跟踪钩子、场景线束和拆分测试
- 暂无传输层代码
该项目的目标是首先构建 *协议核心*,保持后端和套件选择的显式化,并将传输层集成推迟到核心、线束和审计体系稳定之后再进行。
## 审计与最终报告文档
有关审计、审查和最终论文的准备工作,请参见:
- [docs/PROTOCOL_MAP.md](docs/PROTOCOL_MAP.md):
将传输层无关的协议流程映射到具体的代码层面。
- [docs/SECURITY_AUDIT.md](docs/SECURITY_AUDIT.md):
总结了当前的安全目标、信任假设、验证证据、
局限性、秘密处理或日志记录说明,以及未来的生产环境工作。
- [docs/VALIDATION_ARTIFACTS.md](docs/VALIDATION_ARTIFACTS.md):
解释了如何复现和解释验证矩阵、JSONL 报告、
汇总器输出以及近期的本地验证构件。
这些文档旨在支持审计或审查工作,以及 MATH 409 或
MATH 410 最终论文的准备工作。它们并非生产环境的部署声明。
## 依赖项 (WSL Ubuntu/Debian)
```
sudo apt update
sudo apt install -y build-essential cmake ninja-build pkg-config git libsodium-dev
```
### liboqs
如果您尚未安装 `liboqs`:
```
git clone --depth 1 https://github.com/open-quantum-safe/liboqs.git
cd liboqs
cmake -S . -B build -GNinja -DCMAKE_BUILD_TYPE=Release -DOQS_USE_OPENSSL=OFF
cmake --build build
sudo cmake --install build
sudo ldconfig
```
## 已确认的 WSL 快速入门
本仓库在当前里程碑下经过验证的本地检查点环境
(除了明确限制版本的地方,并非严格的精确要求):
- `liboqs 0.15.0`
- `libsodium 1.0.22`
- `cmake 3.28.3`
- `ninja 1.11.1`
- `g++ 13.3.0`
当前严格的版本限制:
- 要求 `libsodium >= 1.0.19`,因为 HKDF 后端使用了 `crypto_kdf_hkdf_sha256_*`。
- OpenSSL 对比路径要求已发现的 `OpenSSL >= 3.5`
如果您需要 OpenSSL 对比套件,而您默认的系统 OpenSSL 版本低于 `3.5`,
请明确指定 CMake 使用合适的安装路径:
```
cmake -S . -B build -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DOPENSSL_ROOT_DIR=/path/to/openssl-prefix
# 或
cmake -S . -B build -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_PREFIX_PATH=/path/to/openssl-prefix
```
如果您只想在带有较旧 OpenSSL 的机器上运行基线 `liboqs` + `libsodium` 路径:
```
cmake -S . -B build -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DPQCPROTO_ENABLE_OPENSSL_COMPARISON=OFF
```
在该检查点环境中确认可用的确切 WSL 构建、测试和 CLI 验证步骤:
```
sudo apt update
sudo apt install -y build-essential cmake ninja-build pkg-config git libsodium-dev
# 如果尚未安装 liboqs:
git clone --depth 1 https://github.com/open-quantum-safe/liboqs.git
cd liboqs
cmake -S . -B build -GNinja -DCMAKE_BUILD_TYPE=Release -DOQS_USE_OPENSSL=OFF
cmake --build build
sudo cmake --install build
sudo ldconfig
cd ..
cmake -S . -B build -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo
cmake --build build
ctest --test-dir build --output-on-failure
./build/pqcprotoctl --help
./build/pqcprotoctl --list-suites
./build/pqcprotoctl --list-kems
./build/pqcprotoctl --list-sigs
./build/pqcprotoctl kem --kem liboqs:ML-KEM-768
./build/pqcprotoctl sig --sig liboqs:ML-DSA-65
./build/pqcprotoctl kem --kem openssl:ML-KEM-768
./build/pqcprotoctl sig --sig openssl:ML-DSA-65
./build/pqcprotoctl handshake \
--suite baseline.liboqs-libsodium.ml-kem-768.ml-dsa-65.hkdf-sha256.xchacha20-poly1305 \
--verification-mode strict_profile \
--seed 410 \
--verbose
./build/pqcprotoctl handshake \
--suite baseline.liboqs-libsodium.ntru-hps-2048-677.ml-dsa-65.hkdf-sha256.xchacha20-poly1305 \
--verification-mode strict_profile \
--json
./build/pqcprotoctl handshake \
--suite interop.openssl.ml-kem-768.ml-dsa-65.hkdf-sha256.chacha20-poly1305 \
--verification-mode strict_profile \
--seed 411 \
--verbose
```
## 构建 + 测试
```
cmake -S . -B build -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo
cmake --build build
ctest --test-dir build --output-on-failure
```
## 验证矩阵
当前里程碑已验证的矩阵为:
- 基线构建和测试:
`RelWithDebInfo`、`PQCPROTO_ENABLE_OPENSSL_COMPARISON=OFF`
- 启用 OpenSSL 的构建和测试:
`RelWithDebInfo`、`PQCPROTO_ENABLE_OPENSSL_COMPARISON=ON`
- 启用 Sanitizer 的基线构建和测试:
`Debug`、`PQCPROTO_ENABLE_SANITIZERS=ON`、`PQCPROTO_ENABLE_OPENSSL_COMPARISON=OFF`
- 启用 Sanitizer 的 OpenSSL 构建和测试:
`Debug`、`PQCPROTO_ENABLE_SANITIZERS=ON`、`PQCPROTO_ENABLE_OPENSSL_COMPARISON=ON`
- 对抗性 JSON 活动摘要:
启用 Sanitizer 的 OpenSSL 构建下的 `test_scenarios`,通过
`scripts/pqcproto_test_report_summary.py` 进行汇总
使用辅助脚本端到端运行完整的矩阵:
```
./scripts/run_validation_matrix.sh
```
如果您的系统 OpenSSL 版本低于 `3.5`,请让脚本指向合适的安装路径:
```
OPENSSL_ROOT_DIR=/path/to/openssl-prefix \
CMAKE_PREFIX_PATH=/path/to/openssl-prefix \
./scripts/run_validation_matrix.sh
```
该脚本是保守且快速失败的:
- 它按顺序配置、构建和测试每个矩阵行
- 如果任何配置、构建、测试或报告步骤失败,它会立即停止
- 它在启用 Sanitizer 的 OpenSSL 构建目录下
写入对抗性 JSONL 活动和文本摘要
上次验证行的预期构件:
- `build-asan-openssl/test_scenarios.jsonl`
- `build-asan-openssl/test_scenarios.summary.txt`
用于不使用完整矩阵脚本的直接 Sanitizer 工作流:
```
cmake -S . -B build-asan -GNinja \
-DCMAKE_BUILD_TYPE=Debug \
-DPQCPROTO_ENABLE_SANITIZERS=ON \
-DPQCPROTO_ENABLE_OPENSSL_COMPARISON=OFF
cmake --build build-asan
ctest --test-dir build-asan --output-on-failure
cmake -S . -B build-asan-openssl -GNinja \
-DCMAKE_BUILD_TYPE=Debug \
-DPQCPROTO_ENABLE_SANITIZERS=ON \
-DPQCPROTO_ENABLE_OPENSSL_COMPARISON=ON \
-DOPENSSL_ROOT_DIR=/path/to/openssl-prefix \
-DCMAKE_PREFIX_PATH=/path/to/openssl-prefix
cmake --build build-asan-openssl
ctest --test-dir build-asan-openssl --output-on-failure
ASAN_OPTIONS=detect_leaks=0 PQCPROTO_TEST_REPORT_MODE=json \
./build-asan-openssl/test_scenarios \
| python3 scripts/pqcproto_test_report_summary.py
```
当 `PQCPROTO_ENABLE_SANITIZERS=ON` 时,CTest 运行会使用
`ASAN_OPTIONS=detect_leaks=0` 禁用泄漏检测,以避免此环境中已知的
LeakSanitizer ptrace 限制。常规的构建和测试保持不变。
## 运行 CLI 演示
```
./build/pqcprotoctl --list-suites
./build/pqcprotoctl --list-kems
./build/pqcprotoctl --list-sigs
./build/pqcprotoctl kem --kem liboqs:ML-KEM-768
./build/pqcprotoctl kem --kem liboqs:NTRU-HPS-2048-677
./build/pqcprotoctl kem --kem openssl:ML-KEM-768
./build/pqcprotoctl sig --sig liboqs:ML-DSA-65
./build/pqcprotoctl sig --sig openssl:ML-DSA-65
./build/pqcprotoctl handshake \
--suite baseline.liboqs-libsodium.ml-kem-768.ml-dsa-65.hkdf-sha256.xchacha20-poly1305 \
--verification-mode strict_profile \
--seed 410 \
--verbose
./build/pqcprotoctl handshake \
--suite baseline.liboqs-libsodium.ntru-hps-2048-677.ml-dsa-65.hkdf-sha256.xchacha20-poly1305 \
--verification-mode strict_profile \
--json
./build/pqcprotoctl handshake \
--suite interop.openssl.ml-kem-768.ml-dsa-65.hkdf-sha256.chacha20-poly1305 \
--verification-mode strict_profile \
--seed 411 \
--verbose
```
## 安装 (库 + 头文件)
```
sudo cmake --install build
sudo ldconfig
```
此操作会安装:
- `libpqcproto.so`
- 头文件至 `/usr/local/include/pqcproto` 目录下
- `pqcprotoctl` 至 `/usr/local/bin` 目录下
## C ABI 包装器
C API 声明于:
- `include/pqcproto/c_api.h`
可将其用于 C、Python ctypes 或其他语言。
## 备注
- 线束当前在运行时生成用于测试和演练的身份密钥。
- CLI 默认可使用安全随机性运行,或通过 `--seed` 使用确定性种子随机性运行。
- 验证默认设置为 `strict_profile`;`algorithm_compatible` 保留用于精确算法的比较工作。
- 可复现性检查固定于序列化的握手/证明构件以及通过语义查询的跟踪元数据,而不是基于总的 trace-list 身份。
- 旧的 C API 构建辅助程序仍然从 KEM + 签名句柄推断已实现的基线套件;该兼容路径是临时的,并在 C 头文件中作为此类情况进行了记录。
- OpenSSL 对比套件仅在构建启用对比路径并发现 `OpenSSL >= 3.5` 时才会实现。
- OpenSSL 对比套件有意采用了与基线 libsodium XChaCha 配置文件不同的构造。
- 请参阅 `MISSION.md`、`ARCHITECTURE.md`、`SUITES.md` 和 `ROADMAP.md` 以了解当前范围与推迟的工作。
标签:AEAD, Bash脚本, C++20, C ABI, HKDF, JSONLines, liboqs, libsodium, ML-DSA, ML-KEM, NTRU, OpenSSL, PQC, XChaCha20-Poly1305, 传输无关, 加密库, 协议核心, 后量子密码学, 安全测试工具, 密码学协议, 密钥交换, 对抗性验证, 抗量子计算, 数学建模, 本体建模, 网络安全, 逆向工具, 隐私保护, 零信任