扫描代码库中的量子脆弱加密。清晰了解在 Q-Day 之前需要迁移的内容。

pqaudit 检测 RSA、ECDSA、Ed25519、ECDH、DH 及其他被肖尔算法破解的算法使用情况。它还识别已迁移的 PQC(后量子密码)使用(ML-KEM、ML-DSA、SLH-DSA),以便跟踪迁移进度。输出格式支持人类可读文本、JSON、CycloneDX CBOM、用于 GitHub 代码扫描的 SARIF,或自包含的 HTML 报告。
2026 年 3 月 31 日,谷歌发布研究表明,破解 ECDSA-256 所需的量子比特数比此前估计少 20 倍——大约 1,200 个逻辑量子比特和不到 500,000 个物理量子比特。NSA 的 CNSA 2.0 要求在 2027 年前为新国家安全系统强制部署 PQC。迁移窗口已经开启,但正在关闭。
npx pqaudit ./my-project
或全局安装:
npm install -g pqaudit
pqaudit ./my-project
# 扫描当前目录,输出人类可读结果
pqaudit .
# 仅显示严重和高级发现
pqaudit ./src --severity high
# 生成 CycloneDX CBOM
pqaudit . --format cbom --output cbom.json
# 生成适用于 GitHub 代码扫描的 SARIF
pqaudit . --format sarif --output results.sarif
# CI 模式 — 如果存在严重/高级发现则退出码为 1
pqaudit . --ci
# 显示所有发现,包括低置信度的注释匹配
pqaudit . --min-confidence 0
# 显示每个出现位置,而不是按文件折叠
pqaudit . --no-dedupe
# 跳过依赖扫描
pqaudit . --no-deps
# 使用自定义规则
pqaudit . --rules ./my-rules.yaml
# 扫描 TLS/SSH 端点的量子脆弱加密
pqaudit . --scan-endpoint api.example.com:443 --scan-endpoint git.example.com:22
# 仅扫描端点(不进行代码扫描)
pqaudit --scan-endpoint example.com:443 --scan-endpoint example.com:22
pqaudit — 后量子密码就绪扫描器
已扫描:./my-project
未准备好 PQC — 检测到量子脆弱加密
扫描文件数:65 | 发现数:12
严重:7 高级:2 中等:1 低:0 安全:2
--- 严重 (7) ---
[!!] Ed25519 — Ed25519 签名 — 易受肖尔算法攻击 (14 次出现)
src/crypto/signing.ts:14
> import { sign, verify } from "@noble/ed25519";
修复:ML-DSA-65 (FIPS 204) 或混合 Ed25519+ML-DSA-65
置信度:98% | 工作量:中等 | 来源:AST
[!!] RSA — RSA 签名 — 易受量子因式分解攻击 (3 次出现)
src/auth/jwt.ts:42
> jwt.sign(payload, key, { algorithm: "RS256" });
修复:ML-DSA-65 (FIPS 204)
置信度:96% | 工作量:复杂 | 来源:AST
[!!] ECDSA — 证书使用 ECDSA 256 位密钥 — 易受肖尔算法攻击
tls://api.example.com:443
> ECDSA 256 位密钥,TLSv1.3
修复:可用的后量子证书算法
置信度:100% | 工作量:复杂 | 来源:网络
...
| 算法 | 威胁 | 替代方案 |
|---|---|---|
| AES-128 | Grover 算法将强度降至 64 位 | AES-256 |
| TLS 1.0/1.1, SSLv3 | 过时协议 | TLS 1.3 |
| SSH(通过网络检测) | DH/ECDH 密钥交换 | 后量子混合密钥交换 |
ML-KEM (Kyber)、ML-DSA (Dilithium)、SLH-DSA (SPHINCS+)、AES-256、ChaCha20-Poly1305、SHA-256、SHA-3
生成符合 CycloneDX 1.6 的密码学物料清单。每个密码学发现作为一个 crypto-asset 组件,包含 cryptoProperties、NIST 量子安全等级和证据位置。
pqaudit . --format cbom --output cbom.json
生成与 GitHub 代码扫描兼容的 SARIF 2.1.0 输出。通过 github/codeql-action/upload-sarif 上传。
pqaudit . --format sarif --output results.sarif
自包含的 HTML 文件,包含可视化仪表板——严重性分布、PQC 就绪评分和发现表格。无外部依赖,可离线工作。
pqaudit . --format html --output report.html
name: PQC 审计
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 检查五个生态系统的清单文件中的已知密码学库:
PQC 安全库(@noble/post-quantum、pqcrypto、cloudflare/circl)会被标记为安全,用于资产清单跟踪。
规则以 YAML 定义:
- id: MY_CUSTOM_RULE
description: "自定义量子脆弱模式"
severity: critical
category: signature
algorithm: MyAlgo
replacement: ML-DSA-65
effort: complex
languages: ["javascript", "typescript"]
patterns:
- "myVulnerableFunction\\("
- "import.*myVulnerableLib"
参见 CONTRIBUTING.md 了解完整规则模式及如何提交新规则。
pqaudit 扫描配置文件中量子脆弱的加密设置:
sshd_config/ssh_config 中的 DH/ECDH 密钥交换无扩展名的配置文件(Dockerfile、sshd_config、ssh_config)会被自动检测并扫描。
探测活跃的 TLS 和 SSH 端点的量子脆弱加密配置:
pqaudit --scan-endpoint api.example.com:443 --scan-endpoint git.example.com:22
TLS 端点(任意端口,或指定 tls://host:port):
SSH 端点(端口 22 自动检测,或指定 ssh://host:port):
网络发现置信度为 100%(观察到的事实,而非模式匹配),并会与代码发现一同出现在所有输出格式中。
pqaudit 使用四种检测方法:
计划中:
参见 CONTRIBUTING.md 了解提交规则、错误修复和新功能的指南。
MIT
| 标志 | 描述 | 默认值 |
|---|
-f, --format <格式> | 输出格式:text、json、cbom、sarif、html | text |
-o, --output <文件> | 将输出写入文件 | 标准输出 |
-s, --severity <等级> | 最低严重级别:critical、high、medium、low、safe | safe |
--min-confidence <0-100> | 过滤低于此置信度阈值的发现 | 50 |
--no-dedupe | 显示所有出现位置,而不是按文件折叠 | 启用去重 |
--no-deps | 跳过依赖扫描 | 扫描依赖 |
--include <模式...> | 包含的 glob 模式 | 所有源文件 |
--exclude <模式...> | 额外的排除 glob 模式 | node_modules、dist 等 |
--rules <路径> | 自定义规则 YAML 文件路径 | 内置规则 |
--scan-endpoint <端点...> | 要探测的 TLS/SSH 端点(host:port) | 无 |
--network-timeout <毫秒> | 网络连接超时 | 5000 |
--ci | 如果存在严重或高级发现,则退出码为 1 | 关闭 |
| 算法 | 威胁 | 替代方案 |
|---|
| RSA(任意密钥大小) | 肖尔算法 | ML-KEM-768 / ML-DSA-65 |
| ECDSA / Ed25519 | 椭圆曲线上的肖尔攻击 | ML-DSA-65 (FIPS 204) |
| ECDH / X25519 / DH | 密钥交换上的肖尔攻击 | ML-KEM-768 (FIPS 203) |
| DSA | 肖尔算法 | ML-DSA-65 (FIPS 204) |
| 生态系统 | 清单文件 | 示例包 |
|---|
| npm | package.json | @noble/ed25519、node-rsa、jsonwebtoken、ethers |
| Rust | Cargo.toml | ed25519-dalek、rsa、ring、p256、pqcrypto |
| Go | go.mod | golang.org/x/crypto、cloudflare/circl |
| Python | requirements.txt、pyproject.toml | cryptography、pycryptodome、paramiko |
| Java | build.gradle、pom.xml | BouncyCastle、Google Tink |