mattmuldoon48/pqc-readiness-scanner
GitHub: mattmuldoon48/pqc-readiness-scanner
轻量级 Python CLI 工具,通过确定性规则扫描代码和配置中的量子脆弱加密指标,生成 PQC 迁移就绪报告以支持组织的加密资产普查和迁移规划。
Stars: 0 | Forks: 0
# PQC 就绪扫描器
一个轻量级的 Python CLI 工具,用于扫描代码或配置文件夹,查找易受量子攻击的加密技术的确定性证据,并生成后量子密码学就绪报告。
这是一个与量子相关的实用网络安全项目。它为迁移规划构建加密清单。它**不会**实现后量子算法,**不会**模拟量子计算,也**不是**生产级的加密审计。
## 为什么这很重要
RSA、ECDSA、ECDH、Ed25519 及相关的公钥系统是重要的迁移清单目标,因为具有密码学意义的量子计算机将威胁到它们的安全假设。组织需要在这些算法出现的位置进行排查,然后才能规划 PQC 或混合迁移。清单是第一步:证书、TLS 配置、JWT 签名、SSH 密钥、依赖项以及应用程序加密代码都有不同的所有者和迁移路径。
## 扫描内容
规则从 `src/pqc_scanner/rules/default_rules.yml` 加载,并与目标文件夹下的文本文件进行确定性匹配。默认规则包含以下指标:
- RSA 私钥和公钥 PEM 标记
- TLS 和证书配置中的 RSA
- ECDSA、ECDH、ECC 和命名的椭圆曲线
- Ed25519 和 EdDSA 引用
- OpenSSL 依赖项或配置使用
- JWT 算法,例如 `RS256`、`ES256` 和 `EdDSA`
- SSH 密钥引用,例如 `ssh-rsa` 和 `ecdsa-sha2-*`
- X.509 和证书引用
对于每个发现项,扫描器会记录规则 ID、文件路径、行号、匹配的片段、加密体系、使用类别、严重性、置信度、原因、建议、风险分数和风险等级。
## 安装
```
python -m venv .venv
source .venv/bin/activate
python -m pip install -e ".[dev]"
```
## 运行
```
python -m pqc_scanner scan examples/mock_enterprise_app --out reports/mock_enterprise_app
```
使用抑制(suppressions)和基线对比(baseline comparison):
```
python -m pqc_scanner scan examples/mock_enterprise_app \
--out reports/mock_enterprise_app \
--suppressions examples/mock_enterprise_app/.pqc-scanner-ignore.yml \
--baseline reports/previous/crypto_inventory.json
```
生成的文件:
- `crypto_inventory.json` — 机器可读的清单和摘要
- `pqc_readiness_report.md` — 人类可读的就绪报告
- `risk_summary.csv` — 适合电子表格处理的发现列表
- `pqc_findings.sarif` — 用于安全工具和代码扫描工作流的 SARIF 输出
- `baseline_diff.json` — 当提供 `--baseline` 时,进行新的/已解决的/未更改的发现对比
使用 `crypto_inventory.json` 作为自动化的真实数据源,`pqc_readiness_report.md` 用于审查人员交接,`risk_summary.csv` 用于排序和所有者分类,SARIF 用于代码扫描集成。
## 示例输出
```
PQC Readiness Scan Complete
Files scanned: 7
Findings: 39
Highest risk: 100
json: reports/mock_enterprise_app/crypto_inventory.json
markdown: reports/mock_enterprise_app/pqc_readiness_report.md
csv: reports/mock_enterprise_app/risk_summary.csv
sarif: reports/mock_enterprise_app/pqc_findings.sarif
```
Markdown 发现行示例:
| 风险 | 严重性 | 规则 | 位置 | 加密体系 | 类别 | 证据 |
| ---: | --- | --- | --- | --- | --- | --- |
| 100 | critical | rsa_private_key_marker | auth_service.py:10 | RSA | private_key | `-----BEGIN RSA PRIVATE KEY-----` |
## 风险评分
风险评分旨在简单且易于解释:
- 较高风险:私钥、TLS/证书配置、身份验证/JWT/签名以及类似生产环境的路径。
- 中等风险:依赖项和配置引用。
- 较低风险:文档、示例和 README 风格的提及。
评分有助于对清单审查进行分类;它们并不能作为可利用性的密码学证明。
## 抑制和基线
抑制文件是带有明确原因的 YAML 文档:
```
suppressions:
- rule_id: x509_certificate_reference
file_path: README.md
reason: Documentation-only mention in mock app README.
```
抑制应该具体且易于审查:基于 `rule_id`、`file_path` 或 `matched_text` 进行匹配,并确保所需的原因足够具体,以便后续审查人员能够决定该例外是否仍然适用。
基线模式将当前扫描与之前的 `crypto_inventory.json` 进行比较,并写入包含新增、已解决和未更改发现的 `baseline_diff.json`。
使用基线差异来审查工作流的变更:新的发现需要所有者进行分类,已解决的发现需要确认是删除了加密而不是重命名,未更改的发现应保留其现有的迁移所有者或抑制决定。
## 局限性与客观说明
- 非生产级加密审计。
- 不实现 PQC 算法。
- 不证明发现是否在运行时代码中可达。
- 不解析所有编程语言或二进制格式。
- 可能会遗漏生成的、加密的、远程的或动态组装的配置。
- 可能会误报良性的文档或虚假示例。
- 仅使用确定性的本地规则;不调用付费 API,也不进行外部 AI 调用。
使用这些输出内容与服务所有者、PKI 团队、平台团队和应用程序安全审查人员展开交流。
## 路线图
已完成:
- 用于安全工具集成的 SARIF 输出。
- 对已接受的发现提供允许列表/抑制支持。
- 基线/差异模式,用于随时间比较扫描结果。
- GitHub Actions CI。
未来计划:
- 添加可配置的严重性和风险评分权重。
- 添加文件类型感知的扫描器,用于 Terraform、Nginx、Python 和包清单。
- 为发现项添加所有者/团队元数据映射。
- 添加 Docker 镜像以实现可重复的 CLI 运行。
## 开发
```
pytest
python -m pqc_scanner scan examples/mock_enterprise_app --out reports/mock_enterprise_app
```
标签:Python, SamuraiWTF, 合规报告, 后量子密码学, 密码学审查, 文档结构分析, 无后门, 无线安全, 逆向工具