
コードベースをスキャンして量子攻撃に脆弱な暗号を検出します。Q-Dayの前にRSA、ECDSA、Ed25519、ECDHを検出します。CycloneDX CBOM + SARIF 出力。
コードベースをスキャンして、量子コンピュータに脆弱な暗号を検出します。Q-Day の前に移行が必要なものを明確に把握できます。

pqaudit は、RSA、ECDSA、Ed25519、ECDH、DH など、Shor のアルゴリズムで破られる暗号アルゴリズムの使用を検出します。また、すでに移行が完了した PQC の使用(ML-KEM、ML-DSA、SLH-DSA)も特定するため、移行の進捗を追跡できます。出力は、人間が読めるテキスト、JSON、CycloneDX CBOM、GitHub Code Scanning 向け SARIF、または自己完結型の HTML レポートとして生成されます。
2026年3月31日、Google は ECDSA-256 の解読に必要な量子ビット数が 従来の推定よりも 20 倍少ない こと、すなわち約 1,200 論理量子ビットと 50 万未満の物理量子ビットで十分であることを示す研究を発表しました。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
# 依存関係スキャンをスキップ
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
| フラグ | 説明 | デフォルト |
|---|---|---|
-f, --format <形式> | 出力形式: text, json, cbom, sarif, html | text |
-o, --output <ファイル> | 出力先ファイル | stdout |
-s, --severity <レベル> | 最低限表示する深刻度: critical, high, medium, low, safe | safe |
--min-confidence <0-100> | この信頼度閾値未満の結果をフィルタ | 50 |
--no-dedupe | ファイルごとにまとめず、すべての出現箇所を表示 | 重複排除オン |
--no-deps | 依存関係スキャンをスキップ | 依存関係スキャン |
--include <パターン...> | 含めるグロブパターン | すべてのソースファイル |
--exclude <パターン...> | 除外する追加グロブパターン | node_modules, distなど |
--rules <パス> | カスタムルール YAML ファイルへのパス | 組み込みルール |
--scan-endpoint <エンドポイント...> | プローブする TLS/SSH エンドポイント (host:port) | なし |
--network-timeout <ミリ秒> | ネットワーク接続タイムアウト | 5000 |
--ci | Critical または High の結果があれば終了コード 1 | オフ |
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: 98% | Effort: moderate | Via: ast
[!!] 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: 96% | Effort: complex | Via: ast
[!!] ECDSA — Certificate uses ECDSA 256-bit key — vulnerable to Shor's algorithm
tls://api.example.com:443
> ECDSA 256-bit key, TLSv1.3
Fix: Post-quantum certificate algorithms when available
Confidence: 100% | Effort: complex | Via: network
...
| アルゴリズム | 脅威 | 代替 |
|---|---|---|
| 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 |
| TLS 1.0/1.1, SSLv3 | 非推奨プロトコル | TLS 1.3 |
| SSH(ネットワーク経由で検出) | DH/ECDH 鍵交換 | PQ ハイブリッド鍵交換 |
ML-KEM(Kyber)、ML-DSA(Dilithium)、SLH-DSA(SPHINCS+)、AES-256、ChaCha20-Poly1305、SHA-256、SHA-3
CycloneDX 1.6 に準拠した 暗号部品表 (CBOM) を生成します。各暗号 findings は、cryptoProperties、NIST 量子セキュリティレベル、証拠位置を持つ crypto-asset コンポーネントになります。
pqaudit . --format cbom --output cbom.json
GitHub のコードスキャンと互換性のある SARIF 2.1.0 出力を生成します。github/codeql-action/upload-sarif を使用してアップロードします。
pqaudit . --format sarif --output results.sarif
視覚的なダッシュボード(深刻度内訳、PQC 対応スコア、findings テーブル)を含む自己完結型の HTML ファイル。外部依存なし、オフラインでも動作。
pqaudit . --format html --output report.html
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 は、5 つのエコシステムにわたって既知の暗号ライブラリのマニフェストファイルをチェックします。
| エコシステム | マニフェストファイル | パッケージ例 |
|---|---|---|
| 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 |
PQC 安全なライブラリ(@noble/post-quantum、pqcrypto、cloudflare/circl)は、インベントリ追跡のために safe としてフラグが付けられます。
ルールは 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"
完全なルールスキーマと新しいルールの提出方法については CONTRIBUTING.md を参照してください。
pqaudit は設定ファイルをスキャンして、量子脆弱な暗号設定を検出します。
sshd_config/ssh_config 内の RSA/ECDSA 鍵タイプ、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 を指定):
ネットワーク findings は信頼度 100%(観測された事実であり、パターンマッチではない)で、すべての出力形式でコード findings と一緒に表示されます。
pqaudit は 4 つの検出方法を使用します。
計画中:
ルールの提出、バグ修正、新機能に関するガイドラインについては CONTRIBUTING.md を参照してください。
MIT