PQCWorld/pqaudit

GitHub: PQCWorld/pqaudit

扫描代码库中易受量子计算攻击的加密算法,生成加密物料清单,助力团队在 Q-Day 前完成 PQC 迁移评估。

Stars: 1 | Forks: 0

# pqaudit [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/e01befe1ec160102.svg)](https://github.com/PQCWorld/pqaudit/actions/workflows/ci.yml) [![npm](https://img.shields.io/npm/v/pqaudit)](https://www.npmjs.com/package/pqaudit) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![Node.js](https://img.shields.io/node/v/pqaudit)](https://nodejs.org) 扫描代码库中易受量子计算攻击的加密算法。清晰了解在 [Q-Day](https://en.wikipedia.org/wiki/Q-day) 之前需要迁移的内容。 ![pqaudit 演示](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/77dc874e8b160104.gif) 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算法, 代码安全扫描, 后量子密码学, 安全基线检查, 密码学漏洞检测, 密码学迁移, 密钥交换, 抗量子密码, 数字签名, 暗色界面, 自动化攻击, 量子计算威胁, 错误基检测, 静态代码分析