pqc-scan は、耐量子暗号(PQC)への移行準備を支援するRust製CLIです。
リポジトリ内の暗号利用パターンをスキャンし、量子時代に関連するリスクを検出し、チーム向けに実行可能な移行レポートを生成します。
多くの組織ではソフトウェアサプライチェーン可視化のためにSBOMを導入していますが、PQC移行では コードや設定における暗号利用の可視化 も必要です。
pqc-scan は、トリアージ、計画策定、CIに使える実践的な出力でその可視化を提供します。
ご自身で利用されているプロダクトのリポジトリを以下のコマンドでスキャンします。
pqc-scan scan /path/to/your-product --format all --out-dir /path/to/your-product/pqc-report --rules-dir /path/to/pqc-scan/rules生成されるファイル:
/path/to/your-product/pqc-report/report.json/path/to/your-product/pqc-report/report.html/path/to/your-product/pqc-report/report.md/path/to/your-product/pqc-report/report.sarif/path/to/your-product/pqc-report/cbom.json/path/to/your-product/pqc-report/dependency-sbom.json
cd /path/to/pqc-scan
cargo install --path crates/pqc_scan_cliその後、プロダクトリポジトリ側で実行します。
pqc-scan scan . --format all --out-dir ./pqc-report --rules-dir /path/to/pqc-scan/rulesインストール後に pqc-scan: command not found が表示される場合は、~/.cargo/bin が PATH に含まれているか確認してください。
インストールせず試す場合は、ソースから直接実行できます。
cargo run --manifest-path /path/to/pqc-scan/crates/pqc_scan_cli/Cargo.toml --bin pqc-scan -- scan /path/to/your-product --format all --out-dir /path/to/your-product/pqc-report --rules-dir /path/to/pqc-scan/rulestree-sitterとregexを使ったハイブリッドな検出- 重大度、信頼度、量子リスクタグのレポート出力
- 検出項目ごとの移行ガイダンス(ランタイム/言語に応じた推奨アクション)
- マッチ行をハイライトしたソーススニペット抽出(HTML + JSON)
- CBOMの出力(
cbom.json) - 依存関係インベントリの出力(
dependency-sbom.json) - GitHub Code Scanning向けSARIFを含むCI/CD向けの出力
| 成果物 | 目的 | 問い |
|---|---|---|
dependency-sbom.json |
ソフトウェア依存関係の棚卸し | 「どのパッケージ/ライブラリが含まれているか?」 |
cbom.json |
暗号利用の棚卸し | 「どのアルゴリズム/暗号利用があり、量子リスクは何か?」 |
実務での使い分け:
- SBOMデータでコンポーネント/パッケージの露出を追跡する。
- CBOMデータで暗号移行作業(JWT/TLS/PKI/SSHなど)の優先度を決める。
- SBOMとCBOMを併用し、PQC移行計画を進める。
tree_sitter_detectorregex_detectordependency_detectorcertificate_detectorkey_detector
- Java
- Go
- JavaScript
- TypeScript
- Python
- Rust
- Ruby
以下の依存関係/マニフェストファイルをスキャンします。
Cargo.toml,Cargo.lockGemfile,Gemfile.lock,gems.rb,gems.locked,*.gemspecpom.xml,build.gradle,build.gradle.kts,gradle.lockfilego.modpackage.json,package-lock.json,pnpm-lock.yamlrequirements.txt,Pipfile.lock,poetry.lock
下記フォーマットのSBOMをスキャンします。
- CycloneDX JSON(
*.cdx.json,*bom*.json) - SPDX JSON(
*.spdx.json,*sbom*.json)
下記フォーマットの証明書や鍵ファイルをスキャンします。
- 証明書ファイル:
.pem,.crt,.cer,.der,.p12,.pfx - 秘密鍵のマーカー:
BEGIN RSA PRIVATE KEYBEGIN PRIVATE KEYBEGIN OPENSSH PRIVATE KEY
下記ミドルウェアの設定ファイルをスキャンします。
- Kubernetes / Ingress
- nginx
- Apache httpd
- Envoy
- Istio
- HAProxy
- Traefik
- デフォルトルールは
rules/default/配下にあります。 - 現在の組み込みルール数: 100以上
CLIツールは以下の通り実行します。
pqc-scan scan <path> [--format json|html|md|sarif|all] [--out-dir ./pqc-report] [--rules-dir ./rules] [--fail-on high|critical] [--threads N]
pqc-scan rules list [--rules-dir ./rules]
pqc-scan rules show <rule-id> [--rules-dir ./rules]pqc-scan を自分のプロダクトリポジトリ内(pqc-scan リポジトリ外)で実行する場合は、--rules-dir に 絶対パス を指定してください。
pqc-scan scan . --format all --out-dir ./pqc-report --rules-dir /path/to/pqc-scan/rules# すべてのレポート形式を出力
pqc-scan scan . --format all --out-dir ./pqc-report --rules-dir /path/to/pqc-scan/rules
# SARIFのみ出力(GitHub Code Scanning向け)
pqc-scan scan . --format sarif --out-dir ./pqc-report --rules-dir /path/to/pqc-scan/rules
# CI失敗ゲート
pqc-scan scan . --fail-on high --rules-dir /path/to/pqc-scan/rules
# 1つのルール詳細を確認
pqc-scan rules show JWT_RS256 --rules-dir /path/to/pqc-scan/rules機械出力したJSON形式のレポートです。検出結果、メタデータ、推奨アクション、ソーススニペットを含みます。
人間にとってみやすいHTML形式のレポートです。以下を含みます。
- severityバッジ
- findingメタデータ
- ハイライト付きソーススニペット
- 推奨移行アクション
以下のスクリーンショットは、実際の report.html 出力例です。
ルール単位の集約表示、Occurrencesテーブル、ハイライト付きスニペット、Recommended Actions を確認できます。
監査メモ、Pull Request、成果物保管に適したポータブルなテキスト形式のレポートです。
コードスキャンプラットフォーム(GitHub Code Scanning 含む)向けのSARIF形式のレポートです。
アルゴリズム/位置/リスク/移行方針を含むCBOM(Cryptographic Bill of Materials)です。
マニフェストとSBOMファイルから抽出した依存関係インベントリです。
- 完全な秘密鍵情報は出力しません。
- 機微なスニペット出力はマスクします。
- リポジトリ走査時に
.gitignoreをチェックし記載のある成果物はスキャン対象外とします。 - デフォルト除外:
.git,node_modules,target,distはデフォルトでスキャン対象外とします。 - 2MB超のファイルはスキャン対象外とします。
pqc-scan は、ルールとヒューリスティクスに基づく ベストエフォートな静的解析 を行います。
トリアージと移行計画の高速化を目的としており、形式的証明ツールではありません。そのため、100%の検出精度は保証できません。
以下を前提に利用してください:
- 誤検知(False Positive)は発生し得ます。
- 見逃し(False Negative)は発生し得ます。
- 本番運用やコンプライアンス判断の前に、各環境での検証が必要です。
本ツールの結果は助言的な情報です。専門家レビュー、アーキテクチャ文脈、実行時/セキュリティ試験と組み合わせて評価してください。
- 静的スキャンのみでは、実行時の暗号ネゴシエーション経路を完全には推定できません。
- ライブラリ固有の挙動はバージョンや設定で変わる場合があります。
- 一部のパーサ非依存フォーマットはヒューリスティック検出であり、カスタムルールが必要になる場合があります。
ワークスペースクレート:
pqc_scan_cli: CLI解析とコマンドディスパッチpqc_scan_core: スキャンパイプライン、リスクエンジン、重複排除、推奨アクション付与pqc_scan_rules: YAMLルール読込とregexコンパイルpqc_scan_detectors: detector実装pqc_scan_report: JSON/HTML/Markdown/SARIF/CBOMライター
詳細は docs/architecture.md を参照してください。
サンプルワークフロー:
.github/workflows/pqc-scan.yml
このワークフローは、スキャナーのビルド、SARIFスキャン出力、GitHub Code ScanningへのSARIFアップロード、および dependency-sbom.json のartifactアップロードを実行します。
MIT
