密码创新仓PQCP(Pioneer Quotable Crypto Provider),为标准化过程中的先进算法提供良好创新环境,并联合学术界、产业界共同推动创新后量子算法的行业落地验证,加速其标准化进程。
当前访问频次受限,请登录后继续访问
pqcp
PQCP 意为 Pioneer Quotable Crypto Provider
本项目提供一个支持后量子及新一代密码算法的 OpenHTLS 提供者。
⚠️ 实验性软件——不建议用于生产环境。 PQCP 包含 原型实现。我们会尽力避免安全漏洞。 参见 SECURITY.md。
特性
- 后量子算法
- 后量子 KEM(密钥封装机制)算法
- 后量子数字签名算法
- 后量子算法的密钥管理
- 新一代哈希算法
- 新一代对称算法
- 后量子证书
- 后量子协议
构建
前置条件
- CMake 3.10 或更高版本
- 支持 C11 的 C 编译器
- OpenHiTLS 开发文件
构建说明
mkdir build
cd build
cmake ..
make
算法选择
build_pqcp.sh 支持在构建时进行算法选择。
- 构建所有算法:
bash ./build_pqcp.sh
- 仅启用指定算法:
bash ./build_pqcp.sh --enable scloudplus polarlac
- 禁用特定算法:
bash ./build_pqcp.sh --disable hiae
受支持的命令行算法名称会规范化为小写,其中 - 以 _ 表示,例如:
aigis_sig(src/Aigis-sig)scloudpluspolarlaccomposite_signhiaenev
NEV 实现
NEV 遵循与 HiAE 相同的源码布局:公共头文件位于
src/nev/include,而实现文件位于 src/nev/src。运行时参数化实现在所有受支持的目标上默认构建;当 ARMv8 汇编不可用时,会采用其可移植 C 路径。其 Hash/KDF 后端可配置,默认使用 openHiTLS
SHA3/Keccak 核心:
bash ./build_pqcp.sh # SHA3 (default)
bash ./build_pqcp.sh --nev-hash-backend sm3 # ICCS SM3 Hash/KDF
现有 ICCS 已知答案向量仅适用于 SM3 配置。
默认 SHA3 配置用于集成与性能
测试,不会与这些 ICCS 向量进行核对。
若要针对全部 12 个 ICCS 参数集 KAT 验证 SM3 配置:
bash ./build_pqcp.sh --nev-hash-backend sm3
cd testcode/script
bash ./build_pqcp_sdv.sh run-tests=test_suite_sdv_pqcp_nev no-demo
bash ./execute_sdv.sh test_suite_sdv_pqcp_nev
SDV 构建会拒绝显式请求的 NEV ICCS KAT,除非所选 provider 构建记录了 SM3 后端;对于其他后端,all-suite 运行会跳过该 KAT。
在 AArch64 上,可通过以下方式启用 NEON 实现中的 ARMv8 汇编路径:
bash ./build_pqcp.sh --nev-neon
由此生成的 Provider 会进行运行时 Advanced SIMD 检测,并在 ASIMD 不可用时回退到同一 NEON 实现中的可移植 C 路径。若直接使用 CMake,请使用 -DPQCP_NEV_ENABLE_NEON=ON。
对于实现 ARMv8.2 FEAT_SHA3 的 CPU,请在配置 PQCP 之前,构建所链接的 openHiTLS 依赖,并启用其加速的 Keccak 后端:
cd ../openhitls_ngcc/testcode/script
bash build_hitls.sh shared \
add-options=-DHITLS_ASM_ARMV8 \
add-options=-DHITLS_CRYPTO_SHA3_ARMV8_EXT
cd ../../../pqcp
bash ./build_pqcp.sh --hitls_dir ../openhitls_ngcc --nev-neon
HITLS_CRYPTO_SHA3_ARMV8_EXT 是编译期选择项,仅可在部署 CPU 支持 FEAT_SHA3 时使用。SHA3 后端会对其非压缩 NEV 封装与解封装使用双 lane Keccak 路径。
在支持 SVE2 的 AArch64 系统上,可选的 SVE2 构建会在编译期选择 SVE2 NEV 多项式、NTT、采样和编解码内核,以及本地多流 SHA3/SHAKE 置换。它不会执行 SVE2 HWCAP 或向量长度探测:启用该选项即明确承诺所有目标 CPU 均支持 SVE2。
bash ./build_pqcp.sh \
--hitls_dir ../openhitls_ngcc \
--nev-sve2
等效的 PQCP CMake 选项为 -DPQCP_NEV_ENABLE_SVE2=ON;它需要
PQCP_NEV_ENABLE_NEON=ON 以及 SHA3 后端。SVE2 实现
从 PQCP 的汇编源码编译而来,不需要来自 openHiTLS 的 SHA3-SVE2 宏
或头文件。若需构建仅启用 NEON 的二进制文件,请保持 PQCP_NEV_ENABLE_SVE2
关闭;若需构建可移植 C 构建,请保持两个加速开关均关闭。
NTT 与主要多项式内核专门针对 256 位向量长度进行优化。因此,启用 SVE2 也是在编译期承诺目标将以 SVE VL=256 运行。如果目标还支持 FEAT_SVE_SHA3,请使用以下方式启用混合 SHA3 后端:
bash ./build_pqcp.sh \
--hitls_dir ../openhitls_ngcc \
--nev-sve2-sha3
对应的附加 CMake 选项是
-DPQCP_NEV_ENABLE_SVE2_SHA3=ON。它使用紧凑的 FEAT_SHA3 NEON 置换
处理一条或两条流,并使用 RAX1 SVE2 置换处理四流密钥生成阶梯。
它不会执行运行时特性检测,因此只能在所有部署 CPU 均支持 FEAT_SVE_SHA3 时启用。基础
--nev-sve2 路径仍可用于不具备该可选扩展的 256 位 SVE2 CPU。
使用 CMake 时,可通过
-DPQCP_NEV_HASH_BACKEND=SHA3 或 -DPQCP_NEV_HASH_BACKEND=SM3 选择集成后端。
若要集成其他实现,请选择 CUSTOM,并提供一个或多个源文件:
cmake -S . -B build \
-DHITLS_ROOT_PATH=../openhitls7 \
-DPQCP_NEV_HASH_BACKEND=CUSTOM \
-DPQCP_NEV_CUSTOM_HASH_SOURCES=/path/to/nev_hash_backend.c \
-DPQCP_NEV_CUSTOM_HASH_INCLUDE_DIRS=/path/to/include
所需的自定义接口在
src/nev/src/nev_symmetric_backend.h 中声明。自定义后端需提供
NEV_KdfRate、NEV_Hash、NEV_Hash2、NEV_Kdf、NEV_KdfAbsorb 和
NEV_KdfSqueezeBlocks;返回的 KDF 速率不得超过 168 字节。
NEV 基准测试
将 NEV 提供者基准测试与提供者一同构建:
cmake -S . -B build \
-DHITLS_ROOT_PATH=../openhitls7 \
-DPQCP_BUILD_NEV_BENCHMARK=ON
cmake --build build --target pqcp_nev_benchmark
命令行选项遵循 openHiTLS 基准测试约定。例如,对某一参数集的三种 KEM 操作进行基准测试,或对每个参数集仅进行封装:
./build/testcode/benchmark/pqcp_nev_benchmark -p nev-512-769-c -t 1000
./build/testcode/benchmark/pqcp_nev_benchmark -a nev-Encaps -s 1
当提供者未位于 CMake 构建目录中时,请使用 -m /path/to/provider/directory。使用 -h 运行可列出所有选项。
Aigis-Sig+ KAT
Aigis-Sig+ 的 KAT 向量和测试源码已包含在本仓库中,并可通过标准的 PQCP SDV 流程发现。从干净克隆开始,构建提供者并运行其 61 个测试用例套件:
bash ./build_pqcp.sh --enable aigis_sig
bash ./testcode/script/build_pqcp_sdv.sh no-demo \
run-tests=test_suite_sdv_pqcp_aigis_sig
cd testcode/script
bash ./execute_sdv.sh test_suite_sdv_pqcp_aigis_sig
该套件涵盖 SHA3-I、SHA3-II、SHA3-III、SM3-I、SM3-II 和 SM3-III 密钥生成、字节级精确的固定长度签名、标准零填充验证、导入密钥互操作性,以及公开 provider API 生命周期检查。Aigis-Sig+ 签名采用参数集允许的最大长度(参数集 I、II 和 III 分别为 2015、4533 和 9134 字节);无填充的紧凑编码和非零填充均会被拒绝。常规 build_pqcp.sh 依赖流程会准备所需的 openHiTLS 构建;不需要父仓库文件或预生成的本地测试输出。
用法
要在 OpenHiTLS 中使用此 provider:
- 设置 provider 路径:
CRYPT_EAL_ProviderSetLoadPath(libCtx, "/path/to/providers");
- 加载 provider:
CRYPT_EAL_ProviderLoad(libCtx, BSL_SAL_LIB_FMT_SO, "pqcp", NULL, NULL);
支持的算法
- KEM:Scloud+、PolarLAC、NEV
- 数字签名:
- 对称密码(AEAD):HiAE
- MAC:HiAE-MAC
许可证
本项目采用与 OpenHiTLS 相同的许可条款。