スキャナーアーキテクチャ
スキャナーアーキテクチャ
DuoKey PQC Scanner は、Tokio、Clap、Rustls 上に構築されたネイティブ Rust CLI ツールです。10 個のスキャンコマンド、Rayon による並列実行、および JSON、YAML、HTML、ANSI ターミナル、CycloneDX CBOM 形式での出力を備えた単一のバイナリとして提供されます。
PQC スキャナーアーキテクチャ
ポスト量子暗号の検出とリスク評価のための高性能な Rust CLI
インフラストラクチャスキャナー
非同期 I/O高度なスキャナー
拡張可能PQC 対応状況評価
量子脆弱性スコアリングと移行ロードマップを含む完全な暗号インベントリ
高レベルのデータフロー
すべてのスキャンは、CLI の呼び出しからレポートの出力まで、同じ 5 段階のパイプラインに従います。
CLI 解析 (clap 4.5)
ユーザーは 10 個のサブコマンド(filesystem、domain、agent、network、serve、ci、sourcecode、compliance、servicenow、cbom)のいずれかを呼び出します。Clap は引数を解析し、入力を検証し、対応するスキャナーにディスパッチします。
スキャナーの実行
選択されたスキャナーは、生の暗号データ(TLS ハンドシェイク、証明書ファイル、ソースコードパターン、クラウド KMS メタデータ、または SSH ホスト鍵)を収集します。スキャナーは非同期 I/O に Tokio を、CPU 並列のファイル走査に Rayon を使用します。
パーサー層 (PEM / DER / PKCS#12)
生データは、PEM、DER、PKCS#12、Windows 証明書ストア、および CBOM 向けの形式固有のパーサーに渡され、x509-parser および schannel クレートを使用して証明書メタデータ、鍵アルゴリズム、署名スキームを抽出します。
リスクスコアリング (0〜10)
解析された各検出結果はリスクスコアリングエンジンを通過し、0 から 10 までの量子リスクスコアが割り当てられ、重大度レベル(Critical から Info まで)にマッピングされ、優先度(P0 から P4 まで)が割り当てられ、人間が読める理由と推奨事項が生成されます。
出力のフォーマット
スコア付けされた ScanResult は、選択された出力フォーマッター(JSON、YAML、HTML、ANSI ターミナル、または CycloneDX 1.7 CBOM)によってシリアライズされ、ファイルまたは stdout に書き込まれます。
バイナリのエントリポイントは、構造化ロギングのための tracing サブスクライバーとともに Tokio 非同期ランタイムを初期化します。すべてのスキャナー操作は非同期優先であり、CPU バウンドの解析は Rayon スレッドプールにオフロードされます。
モジュール階層
スキャナーは、それぞれが単一の責任を持つ、焦点を絞った一連の機能領域に編成されています。
| 領域 | 責任 |
|---|---|
| CLI | 10 個の Clap サブコマンド -- filesystem、domain、agent、network、serve、ci、sourcecode、compliance、servicenow、cbom |
| Core | 中心的なデータ構造(Finding、ScanResult、RiskAssessment)と量子リスクスコアリングエンジン |
| Scanners | filesystem、domain/TLS、agent、network、ソースコード、クラウド KMS、SSH、Fortinet、パケットキャプチャ、サブドメインのデータコレクター |
| Parsers | PEM、DER、PKCS#12、Windows 証明書ストア(schannel)、CycloneDX CBOM の形式パーサー |
| Output | レポートジェネレーター -- JSON、YAML、ANSI ターミナル、HTML、CycloneDX 1.7 CBOM エクスポート |
| Server | REST API、WebSocket サポート、認証(OIDC / API キー)を備えた Axum 0.7 ウェブサーバー |
| Compliance | 8 以上のコンプライアンスフレームワーク、ギャップ分析、レポート生成(HTML/PDF/JSON) |
| Integrations | 自動インシデントと CMDB 同期を備えた ServiceNow REST API、JFrog Artifactory 統合 |
| Configuration | 認証モード、CORS、レート制限、入力検証 |
| Entrypoint | Tokio 非同期エントリポイント、tracing の初期化、CLI ディスパッチ |
CLI コマンド
CLI は Clap 4.5 の derive マクロで構築されています。各サブコマンドは専用のスキャナーまたはサービスにマッピングされます。
| コマンド | 説明 |
|---|---|
| filesystem | ローカルパスで証明書とキーストアをスキャンする(PEM、DER、PKCS#12、JKS) |
| domain | Rustls を介して TLS エンドポイントに接続し、ハンドシェイク、暗号スイート、証明書を検査する |
| agent | システム全体の暗号インベントリ -- 証明書、キーストア、SSH 鍵、クラウド KMS |
| network | 暗号トラフィックの受動的ネットワークキャプチャ(未実装) |
| serve | REST API と WebSocket エンドポイントを公開する Axum ウェブサーバーを起動する |
| ci | GitHub Actions、GitLab CI、Azure DevOps 向けの SARIF 出力を備えた CI/CD パイプラインモード |
| sourcecode | 8 つのプログラミング言語にわたる 150 以上の検出ルールによる静的解析 |
| compliance | 8 以上の規制フレームワークに対してコンプライアンスチェックを実行し、ギャップ分析を生成する |
| servicenow | 検出結果を ServiceNow にプッシュする -- インシデントを自動作成し、CMDB と同期する |
| cbom | CycloneDX 1.7 暗号部品表を解析または生成する |
中心的なデータ構造
すべてのスキャン結果は同じデータモデルを共有します。これにより、どのスキャナーがデータを生成したかに関係なく、一貫した出力が保証されます。
Finding は、スキャン中に発見された単一の暗号資産を表します。
| フィールド | 型 | 説明 |
|---|---|---|
| id | String | 検出結果の一意の識別子 |
| finding_type | Enum | Certificate、Keystore、Key、ConfigFile、または SshKey |
| source | String | この検出結果を生成したスキャナー |
| location | String | 資産が見つかったファイルパス、URL、またはホスト名 |
| certificate | Option<CertificateInfo> | 解析された証明書メタデータ(サブジェクト、発行者、アルゴリズム、鍵サイズ、有効性) |
| keystore | Option<KeystoreInfo> | キーストア形式と含まれるエントリ |
| risk_assessment | RiskAssessment | 量子脆弱性のスコアリングと推奨事項 |
| tls_info | Option<TlsInfo> | TLS プロトコルバージョン、暗号スイート、ハンドシェイクの詳細 |
すべての検出結果は、リスクスコアリングエンジンによって量子脆弱性についてスコア付けされます。
| フィールド | 型 | 説明 |
|---|---|---|
| quantum_vulnerable | bool | 資産が量子コンピュータで破られるアルゴリズムを使用しているかどうか |
| quantum_risk_score | f64 (0〜10) | 0 = リスクなし(純粋な PQC)、10 = 最大リスク(RSA-1024、DSA-1024) |
| severity | Enum | Critical、High、Medium、Low、または Info |
| priority | Enum | P0(直ちに)、P1(緊急)、P2(計画的)、P3(監視)、P4(情報提供) |
| reasons | Vec<String> | 割り当てられたスコアに対する人間が読める説明 |
| recommendations | Vec<String> | 脆弱性を修復するための実行可能な手順 |
リスクスコアは優先度にマッピングされます: P0(スコア 9〜10、例: RSA-1024、MD5 署名)、P1(7〜8、例: RSA-2048、SHA-1)、P2(5〜6、例: RSA-3072)、P3(2〜4、例: RSA-4096、ECDSA P-384)、P4(0〜1、例: ハイブリッドまたは純粋な PQC アルゴリズム)。
すべてのスキャン操作によって返される最上位の出力構造です。
| フィールド | 型 | 説明 |
|---|---|---|
| scan_metadata | ScanMetadata | スキャナーのバージョン、スキャンモード、日付、ホスト名、期間(秒) |
| findings | Vec<Finding> | スキャン中に発見されたすべての暗号資産 |
| summary | ScanSummary | 重大度、検出結果の種類、アルゴリズムごとに集計されたカウント |
| recommendations | Vec<String> | すべての検出結果に基づく最上位の修復ガイダンス |
スキャナーモジュール
各スキャナーは、特定のソースから生の暗号データを収集する自己完結型のコンポーネントです。スキャナーは非同期(tokio)であり、該当する場合は並列ファイル走査に rayon を使用します。
walkdir クレートを使用してディレクトリを再帰的に走査し、拡張子とマジックバイトによって証明書とキーストアのファイルを検出します。PEM、DER、PKCS#12、JKS 形式をサポートします。ファイルは対応する形式パーサーによって処理されます。
検出戦略:
- ファイル拡張子の照合(
.pem、.crt、.cer、.der、.p12、.pfx、.jks、.key) - バイナリ形式のマジックバイト署名検出
- 構成可能なディレクトリの深さと除外パターン
- Rayon スレッドプールによる並列ファイル I/O
rustls 0.23 ベースのクライアントを使用して TLS エンドポイントに接続します。プロトコルバージョン、暗号スイートのネゴシエーション、サーバー証明書チェーン、鍵交換パラメータを含む完全な TLS ハンドシェイクをキャプチャします。WhoisXML API 統合によるサブドメイン列挙をサポートします。
複数のサブスキャナーの結果を組み合わせて、システム全体の暗号インベントリを実行します。ファイルシステム証明書、Windows 証明書ストア(schannel クレート経由)、SSH ホスト鍵、クラウド KMS メタデータ(AWS KMS、Azure Key Vault、GCP Cloud KMS 向け)が含まれます。
8 つのプログラミング言語をカバーする 150 以上の検出ルールを備えた静的解析エンジンです。ソースツリーを走査し、正規表現ベースのパターン照合を適用して、脆弱な暗号関数呼び出し(例: RSA_generate_key、ECDSA_sign、ハードコードされた鍵)を検出します。
機能:
- 検出パターンの定義(アルゴリズム、関数名、重大度)
- ファイル走査とルール照合エンジン
- CI/CD 統合のための SARIF 出力形式
- GitHub、GitLab、Azure DevOps リポジトリのコネクター
パーサー層
パーサーは、生のバイナリまたはテキストデータを構造化された CertificateInfo および KeystoreInfo オブジェクトに変換します。これらはスキャナーによって呼び出され、形式固有です。
| パーサー | クレート | 処理される形式 |
|---|---|---|
| PEM | x509-parser | Base64 エンコードされた証明書、秘密鍵、CSR |
| DER | x509-parser | バイナリエンコードされた X.509 証明書(.der、.cer) |
| PKCS#12 | x509-parser | パスワード保護された証明書/鍵バンドル(.p12、.pfx) |
| Windows 証明書ストア | schannel | Windows の LocalMachine および CurrentUser 証明書ストア |
| CBOM | serde | CycloneDX 暗号部品表(JSON 入力) |
リスクスコアリングエンジン
リスクスコアリングエンジンは、各検出結果を 0 から 10 の量子脆弱性スケールで評価します。スコアリングでは、アルゴリズムファミリー、鍵サイズ、署名スキーム、およびコンテキスト要因が考慮されます。
| スコア範囲 | 優先度 | 重大度 | アルゴリズムの例 |
|---|---|---|---|
| 9 - 10 | P0(直ちに) | Critical | RSA-1024、DSA-1024、MD5 署名、DES、3DES |
| 7 - 8 | P1(緊急) | High | RSA-2048、ECDSA P-256、SHA-1 署名 |
| 5 - 6 | P2(計画的) | Medium | RSA-3072、Diffie-Hellman 2048 ビット |
| 2 - 4 | P3(監視) | Low | RSA-4096、ECDSA P-384、ECDSA P-521 |
| 0 - 1 | P4(情報提供) | Info | ML-KEM、ML-DSA、SLH-DSA、ハイブリッド PQC アルゴリズム |
出力フォーマッター
スキャナーは 5 つの出力バックエンドを提供します。CLI の --format フラグにより、どのフォーマッターが ScanResult をレンダリングするかを選択します。
| 形式 | ユースケース |
|---|---|
| JSON | パイプライン、API、統合向けの機械可読出力 |
| YAML | 構成管理向けの人間が読める構造化出力 |
| ターミナル (ANSI) | インタラクティブな使用向けの重大度ハイライト付きの色分けされたコンソール出力 |
| HTML | 関係者と共有するための自己完結型 HTML レポート |
| CycloneDX CBOM | CycloneDX 1.7 暗号部品表のエクスポート |
CI モード(ci コマンド)は SARIF 出力を生成します。これは標準の出力フォーマッターとは異なります。SARIF は GitHub Code Scanning、GitLab SAST、Azure DevOps と直接統合されます。
Axum ウェブサーバー
serve コマンドは Axum 0.7 ウェブサーバーを起動します。
- REST API -- スキャンのトリガー、結果の取得、構成の管理のためのエンドポイント
- WebSocket -- 接続されたクライアントへのリアルタイムのスキャン進捗ストリーミング
- 認証 -- OIDC および API キーモード
- CORS -- ブラウザベースのダッシュボード向けの構成可能なクロスオリジンポリシー
- レート制限 -- 悪用を防ぐためのリクエストスロットリング
コンプライアンスエンジン
コンプライアンスエンジンは、8 以上の規制および業界フレームワークに対してスキャン検出結果を評価します。
| コンポーネント | 目的 |
|---|---|
| Checker | フレームワーク固有のルールに対して検出結果を評価する |
| Frameworks | フレームワークの定義 -- NIST、BSI TR-02102、CNSA 2.0、PCI DSS、FIPS 140-3、ETSI、ISO 27001、SOC 2 |
| Gap Analyzer | 現在のポスチャと目標のコンプライアンス状態との間のギャップを特定する |
| Report Generator | HTML、PDF、JSON 形式でコンプライアンスレポートを生成する |
| PDF Parser | カスタムの組織ポリシー PDF から要件を抽出する |
統合
REST API を介してスキャン検出結果を ServiceNow にプッシュします。P0/P1 の検出結果に対する自動インシデント作成、発見された暗号資産の CMDB 同期、スケジュールされた同期ワークフローをサポートします。servicenow CLI コマンドは、スキャンとプッシュの完全なサイクルをトリガーします。
機能:
- 脆弱性データをプッシュするための REST API 統合
- 重大度のしきい値に基づく自動インシデント作成
- 暗号資産インベントリの CMDB 同期
- 構成可能な同期頻度(継続的、スケジュール、オンデマンド)

ServiceNow ダッシュボードは、重大度別の量子脆弱資産、コンプライアンスステータス、修復の進捗状況を表示します。
主要な依存関係
| クレート | バージョン | 目的 |
|---|---|---|
| tokio | 1.x | 並行 I/O 操作のための非同期ランタイム |
| clap | 4.5 | derive マクロによる CLI 引数解析 |
| serde / serde_json / serde_yaml | 1.x | JSON、YAML、構成ファイルのシリアライズとデシリアライズ |
| rustls | 0.23 | ドメインスキャン用の TLS クライアント実装(OpenSSL 依存なし) |
| x509-parser | 0.16+ | X.509 証明書と CRL の解析 |
| walkdir | 2.x | ファイルシステムスキャン用の再帰的ディレクトリ走査 |
| rayon | 1.x | データ並列の CPU バウンド処理(ファイル解析、ルール照合) |
| reqwest | 0.12+ | クラウド KMS API、ServiceNow、git プロバイダー統合用の HTTP クライアント |
| axum | 0.7 | serve コマンド用の非同期ウェブフレームワーク(REST + WebSocket) |
| tracing | 0.1 | 構造化ロギングと診断 |
| schannel | 0.1 | SChannel API を介した Windows 証明書ストアアクセス |
スキャナーは OpenSSL への依存が一切ありません。TLS 操作は rustls を使用し、証明書解析は x509-parser を使用します。これにより、サプライチェーン脆弱性のクラス全体が排除され、クロスプラットフォームビルドが簡素化されます。
アーキテクチャの原則
単一バイナリ
プラットフォームごとに 1 つのネイティブ実行可能ファイルとして提供されます。ランタイム依存関係なし、JVM なし、Python インタプリタなし。コピーして実行するだけです。
非同期優先
すべてのネットワーク I/O は Tokio 非同期を使用します。CPU バウンドの作業(ファイル解析、ルール照合)は、最大のスループットのために Rayon スレッドプールにオフロードされます。
OpenSSL ゼロ
Rustls と x509-parser による純粋な Rust の TLS。暗号操作のための C ライブラリ依存関係はありません。
モジュール式スキャナー
各スキャンコマンドは独立したモジュールです。既存のコードを変更することなく、新しいスキャナーを追加できます。