PQCWorld/pqaudit
GitHub: PQCWorld/pqaudit
扫描代码库中易受量子计算攻击的加密算法,生成加密物料清单,助力团队在 Q-Day 前完成 PQC 迁移评估。
Stars: 1 | Forks: 0
# pqaudit
[](https://github.com/PQCWorld/pqaudit/actions/workflows/ci.yml)
[](https://www.npmjs.com/package/pqaudit)
[](LICENSE)
[](https://nodejs.org)
扫描代码库中易受量子计算攻击的加密算法。清晰了解在 [Q-Day](https://en.wikipedia.org/wiki/Q-day) 之前需要迁移的内容。

pqaudit 可检测 RSA、ECDSA、Ed25519、ECDH、DH 以及其他被 Shor 算法破解的算法的使用情况。它还能识别已经完成迁移的 PQC 使用情况(ML-KEM、ML-DSA、SLH-DSA),以便您跟踪迁移进度。支持以人类可读的文本、JSON、[CycloneDX CBOM](https://cyclonedx.org/capabilities/cbom/) 或用于 GitHub 代码扫描的 [SARIF](https://sarifweb.azurewebsites.net/) 格式输出。
## 为什么是现在
2026年3月31日,Google 发布的研究表明,破解 ECDSA-256 所需的[量子比特数比此前预估的少 20 倍](https://research.google/blog/safeguarding-cryptocurrency-by-disclosing-quantum-vulnerabilities-responsibly/) —— 大约需要 1,200 个逻辑量子比特和不到 500,000 个物理量子比特。NSA 的 CNSA 2.0 要求到 2027 年,所有新的国家安全系统必须采用 PQC。迁移窗口已经开启,但正在关闭。
## 安装
```
npx pqaudit ./my-project
```
或者全局安装:
```
npm install -g pqaudit
pqaudit ./my-project
```
## 用法
```
# 扫描当前目录,人类可读输出
pqaudit .
# 仅显示 Critical 和 High 级别的发现
pqaudit ./src --severity high
# 生成 CycloneDX CBOM
pqaudit . --format cbom --output cbom.json
# 为 GitHub Code Scanning 生成 SARIF
pqaudit . --format sarif --output results.sarif
# CI 模式 — 如果存在 Critical/High 级别的发现,则退出代码为 1
pqaudit . --ci
# 显示所有发现,包括低置信度的注释匹配
pqaudit . --min-confidence 0
# 显示每一次出现的情况,而不是按文件折叠
pqaudit . --no-dedupe
# 跳过 dependency scanning
pqaudit . --no-deps
# 使用自定义 rules
pqaudit . --rules ./my-rules.yaml
```
### 所有选项
| 标志 | 描述 | 默认值 |
|------|-------------|---------|
| `-f, --format ` | 输出格式:`text`、`json`、`cbom`、`sarif` | `text` |
| `-o, --output ` | 将输出写入文件 | stdout |
| `-s, --severity ` | 最低严重级别:`critical`、`high`、`medium`、`low`、`safe` | `safe` |
| `--min-confidence <0-100>` | 过滤掉低于此置信度阈值的发现结果 | `50` |
| `--no-dedupe` | 显示所有出现的位置,而不是按文件合并 | 开启合并 |
| `--no-deps` | 跳过 npm 依赖项扫描 | 扫描依赖项 |
| `--include ` | 要包含的 Glob 模式 | 所有源文件 |
| `--exclude ` | 要排除的附加 Glob 模式 | node_modules, dist 等 |
| `--rules ` | 自定义规则 YAML 文件的路径 | 内置规则 |
| `--ci` | 如果存在严重或高危的发现结果,则以退出码 1 退出 | off |
## 输出示例
```
pqaudit — Post-Quantum Cryptography Readiness Scanner
Scanned: ./my-project
NOT PQC READY — Quantum-vulnerable cryptography detected
Files scanned: 65 | Findings: 12
Critical: 7 High: 2 Medium: 1 Low: 0 Safe: 2
--- CRITICAL (7) ---
[!!] Ed25519 — Ed25519 signatures — vulnerable to Shor's algorithm (14 occurrences)
src/crypto/signing.ts:14
> import { sign, verify } from "@noble/ed25519";
Fix: ML-DSA-65 (FIPS 204) or hybrid Ed25519+ML-DSA-65
Confidence: 90% | Effort: moderate | Via: regex
[!!] RSA — RSA signature — vulnerable to quantum factoring (3 occurrences)
src/auth/jwt.ts:42
> jwt.sign(payload, key, { algorithm: "RS256" });
Fix: ML-DSA-65 (FIPS 204)
Confidence: 85% | Effort: complex | Via: regex
...
```
## 检测内容
### 严重(易受量子攻击 — 必须迁移)
| 算法 | 威胁 | 替代方案 |
|-----------|--------|-------------|
| RSA (任意密钥大小) | Shor 算法 | ML-KEM-768 / ML-DSA-65 |
| ECDSA / Ed25519 | 针对椭圆曲线的 Shor 算法 | ML-DSA-65 (FIPS 204) |
| ECDH / X25519 / DH | 针对密钥交换的 Shor 算法 | ML-KEM-768 (FIPS 203) |
| DSA | Shor 算法 | ML-DSA-65 (FIPS 204) |
### 高危(被量子计算削弱)
| 算法 | 威胁 | 替代方案 |
|-----------|--------|-------------|
| AES-128 | Grover 算法将其削弱至 64 位安全性 | AES-256 |
### 安全(已具备抗量子能力)
ML-KEM (Kyber), ML-DSA (Dilithium), SLH-DSA (SPHINCS+), AES-256, ChaCha20-Poly1305, SHA-256, SHA-3
## 输出格式
### CycloneDX CBOM
生成符合 CycloneDX 1.6 标准的[加密物料清单 (CBOM)](https://cyclonedx.org/capabilities/cbom/)。每项加密发现结果都会成为一个 `crypto-asset` 组件,包含 `cryptoProperties`、NIST 量子安全级别和证据位置。
```
pqaudit . --format cbom --output cbom.json
```
### SARIF (GitHub 代码扫描)
生成兼容 GitHub 代码扫描的 SARIF 2.1.0 输出。可通过 `github/codeql-action/upload-sarif` 上传。
```
pqaudit . --format sarif --output results.sarif
```
## GitHub Action
```
name: PQC Audit
on: [push, pull_request]
jobs:
pqaudit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20"
- run: npx pqaudit . --format sarif --output pqaudit.sarif --ci
- uses: github/codeql-action/upload-sarif@v3
if: always()
with:
sarif_file: pqaudit.sarif
category: pqaudit
```
## 依赖项扫描
pqaudit 会检查 `package.json` 中的已知加密库,并标记易受量子攻击的依赖项:
- `@noble/ed25519`, `@noble/secp256k1` — ECC 签名
- `tweetnacl`, `elliptic`, `node-rsa` — 各种非对称加密
- `jsonwebtoken`, `jose` — JWT 库(通常为 RSA/ECDSA)
- `@solana/web3.js`, `ethers`, `web3` — 区块链 (Ed25519/secp256k1)
- `@noble/post-quantum` — 标记为**安全**
## 自定义规则
规则在 YAML 中定义:
```
- id: MY_CUSTOM_RULE
description: "Custom quantum-vulnerable pattern"
severity: critical
category: signature
algorithm: MyAlgo
replacement: ML-DSA-65
effort: complex
languages: ["javascript", "typescript"]
patterns:
- "myVulnerableFunction\\("
- "import.*myVulnerableLib"
```
有关完整的规则 schema 以及如何提交新规则,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 检测方法
目前实现了 L0(正则表达式)检测。计划中:
- **L1**:通过 tree-sitter 进行基于 AST 的分析,以实现语义理解并减少误报
- **L2**:数据流/污点分析,用于通过调用链追踪加密数据
- **网络扫描**:TLS/SSH 端点分析
- **更多语言**:Cargo.toml, build.gradle, requirements.txt 依赖项扫描
## 贡献
有关提交规则、错误修复和新功能的指南,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 参考文献
- [NIST FIPS 203 — ML-KEM](https://csrc.nist.gov/pubs/fips/203/final)
- [NIST FIPS 204 — ML-DSA](https://csrc.nist.gov/pubs/fips/204/final)
- [NIST FIPS 205 — SLH-DSA](https://csrc.nist.gov/pubs/fips/205/final)
- [NSA CNSA 2.0 时间表](https://media.defense.gov/2022/Sep/07/2003071836/-1/-1/0/CSI_CNSA_2.0_FAQ_.PDF)
- [CycloneDX CBOM 规范](https://cyclonedx.org/capabilities/cbom/)
- [Google PQC 迁移时间表(2026年3月)](https://blog.google/innovation-and-ai/technology/safety-security/cryptography-migration-timeline/)
- [Google 量子漏洞研究(2026年3月)](https://research.google/blog/safeguarding-cryptocurrency-by-disclosing-quantum-vulnerabilities-responsibly/)
## 许可证
MIT
标签:CBOM, CI集成, CVE, CycloneDX, ECDH, ECDSA, Ed25519, GitHub代码扫描, GNU通用公共许可证, LNA, MITM代理, Node.js, npm, NSA CNSA 2.0, PQC, Q-Day, RSA, SARIF, Shor算法, 代码安全扫描, 后量子密码学, 安全基线检查, 密码学漏洞检测, 密码学迁移, 密钥交换, 抗量子密码, 数字签名, 暗色界面, 自动化攻击, 量子计算威胁, 错误基检测, 静态代码分析