mingulov/pkcs11-check
GitHub: mingulov/pkcs11-check
一款 CLI 优先的 PKCS#11 测试套件,通过子进程隔离和标准化测试向量对密码模块进行合规性验证、CVE 回归检测和安全评估。
Stars: 0 | Forks: 0
# pkcs11-check
一款 CLI 优先的 PKCS#11 测试套件,具备段错误生存能力、接口强制指定以及 pytest 插件。
## 功能介绍
pkcs11-check 针对 PKCS#11 模块(硬件 HSM、软件 token、智能卡)运行全面的测试。它能捕获:
- **崩溃和段错误** — 基于单文件的子进程隔离可从 SIGSEGV 中恢复
- **CKR 返回码违规** — 根据 OASIS PKCS#11 标准检查不同的规范条件
- **CVE 回归** — 针对 NSS、SoftHSM2、TPM2、OpenCryptoki 中已知 CVE 的测试
- **安全策略违规** — Tookan 论文向量、属性模糊测试、填充预言机检测
- **接口协商错误** — v2.40/v3.0/v3.1/v3.2 自动回退机制
## 快速开始
```
# 安装
git clone https://github.com/mingulov/pkcs11-check
cd pkcs11-check
uv sync
# 针对 SoftHSM2 运行
bash local-builds/build.sh softhsm2
bash local-builds/test.sh softhsm2
# 针对 Kryoptic 运行(v3.2 带 PQC)
bash local-builds/build.sh kryoptic
bash local-builds/test.sh kryoptic
# 针对系统 NSS 运行
bash local-builds/test.sh nss-softokn
```
### 通过 PyPI 安装
```
pip install pkcs11-check
pkcs11-check fetch-data all # download test vectors (~800 MB)
pkcs11-check test --module /path/to/module.so --pin 1234
```
## 测试套件
测试分类:
| 类别 | 描述 |
|----------|-------------|
| 核心密码学 | AES、RSA、ECDSA、EdDSA、HMAC、摘要 |
| Wycheproof | 来自 C2SP 的边缘测试用例向量 |
| PQC (v3.2) | ML-KEM、ML-DSA、SLH-DSA |
| CKR 合规性 | 根据 OASIS 规范验证返回码 |
| CVE 回归 | 已知漏洞测试 |
| 安全性 | 属性模糊测试、Tookan、句柄复用 |
| 压力测试 | 多线程、资源耗尽 |
## 支持的模块
| 模块 | 版本 | 状态 |
|--------|---------|--------|
| SoftHSM2 | 2.7.0 | 完全支持 |
| Kryoptic | 1.5.0+PQC | 完全支持 (v3.2) |
| NSS softokn | system | 加密服务 (插槽 0) |
| OpenCryptoki | 3.26 | 仅限 Docker |
| pkcs11-mock | 2.0.0 | 存根测试 |
| tpm2-pkcs11 | 1.9.0 | 硬件 TPM |
| BouncyHSM | 2.0.1 | 仅限 Docker |
| qryptotoken | 0.4.1 | 仅限 Docker |
## v0.1.0 中的已知限制
- 目前尚未实现 SO 登录,因此通过 `CKU_SO` 工作流
使用 `CKA_TRUSTED=True` 导入可信证书的功能尚未被完全覆盖。
- CloudHSM/Thales 的带内 IV 配置文件、代理/加载器的可变参数
保留检查,以及更广泛的可变输出模拟器目标,
已被列入 v0.1.0 之后的互操作性工作计划中。
## 架构
```
src/pkcs11_check/
raw/ — pure ctypes PKCS#11 binding (v2.40-v3.2, PQC)
cli/ — typer CLI (test, info, version commands)
core/ — module loader, isolation runner, preflight
testcases/ — test files (the product)
ckr/ — CKR return code compliance tests
plugin.py — pytest plugin (markers, fixtures, collection)
fixtures.py — p11_session, p11_module, p11_config
config.py — four-layer config (CLI > env > TOML > defaults)
local-builds/ — build scripts for soft token providers
docker/ — Docker test targets
```
## 核心特性
- **`pkcs11_check.raw`** — 纯 Python ctypes 绑定,支持 v2.40/v3.0/v3.1/v3.2 接口协商,包含 50 多种 PQC 机制和全部 68 个标准函数
- **`--isolation file`** 模式在独立的子进程中运行每个测试文件 — 崩溃不会终止整个测试套件
- **`--ckr-strict`** 模式强制执行精确的 OASIS 规范 CKR 代码(而不仅仅是“任意错误”)
- **Wycheproof + ACVP 向量** — 与 C2SP 和 NIST 测试向量进行交叉验证
## 文档
- `docs/architecture.md` — 代码库结构和测试编写指南
- `docs/commands.md` — 构建、测试和 Docker 命令
- `docs/module-issues.md` — 各模块的错误和特性
- `docs/mechanism-output-parameters.md` — 生成的 IV/nonce/tag 输出参数覆盖范围
- `docs/docker-provider-results.md` — 发布的 Docker 提供者源码和结果快照
- `docs/todo.md` — 公开路线图和已知限制
- `docs/cve-regression.md` — CVE 覆盖范围跟踪
- `docs/file-isolation.md` — 隔离运行器设计
- `docs/docker-artifacts.md` — Docker 测试运行器约定
## 许可证
根据以下任一许可证授权:
- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT license ([LICENSE-MIT](LICENSE-MIT) 或 http://opensource.org/licenses/MIT)
由您自行选择。
### 第三方声明
pkcs11-check 捆绑了来自
`latchset/pkcs11-headers` 的公共领域 PKCS#11 v3.2 头文件,其 `fetch-data` 命令会从
C2SP 和 NIST 下载测试向量。请参阅
[`THIRD_PARTY_LICENSES.md`](THIRD_PARTY_LICENSES.md) 以获取完整列表和
各来源的许可证条款。
标签:ACVP, AES, ASM汇编, CISA项目, CVE测试, ECDSA, EdDSA, HMAC, HSM, Kryoptic, ML-DSA, ML-KEM, NSS, OASIS, OpenCryptoki, PKCS#11, PQC, Pytest插件, Python, RSA, SLH-DSA, SoftHSM2, Tookan, TPM2, v2.40, v3.0, v3.1, v3.2, Wycheproof, 压力测试, 合规性测试, 后量子密码学, 填充预言机检测, 子域名变形, 子进程隔离, 安全测试, 安全策略验证, 安全规则引擎, 密码学, 密码标准, 密码模块测试, 属性模糊测试, 并发测试, 手动系统调用, 接口协商, 攻击性安全, 无后门, 智能卡, 段错误恢复, 漏洞回归测试, 硬件安全模块, 请求拦截, 资源耗尽测试, 软令牌, 逆向工具