技術スタックの詳細
技術スタックの詳細
DuoKey PQCスキャナーの詳細な技術スタックと依存関係
コアテクノロジー
バージョン: Stable(最新版を推奨)
なぜ Rust なのか?
メモリ安全性
ガベージコレクションなし、コンパイル時のメモリ安全性保証
パフォーマンス
ゼロコスト抽象化、C/C++ に匹敵
並行処理
所有権システムによる恐れのない並行処理
クロスプラットフォーム
Linux、macOS、Windows のファーストクラスサポート
- モダンなツール: Cargo パッケージマネージャー、rustfmt、clippy
- 強力な型システム: コンパイル時に多くの種類のバグを防止
依存関係
rustls(v0.23+)
ピュア Rust の TLS 1.2/1.3 実装。PEM の読み込みには rustls-pemfile と併用されます。
特徴:
- OpenSSL 依存なし
- メモリ安全な TLS
- モダンな暗号スイート
- TLS 1.3 サポート
x509-parser(v0.16+)
X.509 証明書の解析
機能:
- DER/PEM 証明書の解析
- 公開鍵の抽出
- 証明書チェーンの検証
- OID の解析
der & pem(v0.7+ / v3.0+)
DER および PEM データの低レベルなエンコード/デコード。
tokio(v1.35+)
非同期ランタイム(フル機能セットを有効化)。
使用している機能:
fs: 非同期ファイルシステム操作net: TCP/TLS ネットワーキングsync: チャネル、ミューテックスtime: タイマー、タイムアウトmacros:#[tokio::main]rt-multi-thread: マルチスレッドランタイム
clap(v4.5+)
コマンドライン引数の解析(derive、env、cargo の各機能を使用)。
特徴:
- 簡単な CLI 定義のための derive マクロ
- サブコマンド
- 環境変数のサポート
- シェル補完
- ヘルプの生成
serde(v1.0+)
シリアライゼーションフレームワーク。JSON および YAML 出力形式のために serde_json および serde_yaml と組み合わせて使用されます。
サポートされる形式:
- JSON(デフォルト出力)
- YAML(人間が読みやすい)
- カスタム SARIF 形式
tracing(v0.1+)
構造化ロギング。ログ出力とフィルタリングは tracing-subscriber(env-filter 機能)が処理します。
特徴:
- 構造化された文脈付きロギング
- 複数のログレベル
- モジュールごとのフィルタリング
- JSON 出力のサポート
anyhow & thiserror(v1.0+)
用途:
anyhow: アプリケーションレベルのエラーthiserror: ライブラリレベルのカスタムエラー
walkdir(v2.4+)
再帰的ディレクトリ走査
特徴:
- 効率的な再帰スキャン
- シンボリックリンクの処理
- フィルタリング
- メタデータへのアクセス
rayon(v1.8+)
データ並列処理
ユースケース:
- 並列ファイル処理
- 並行証明書分析
- マルチスレッドスキャン
pcap(v2.0+)
パケットキャプチャ(libpcap ラッパー)
プラットフォーム依存関係:
- Linux:
libpcap-dev - macOS: 組み込みの libpcap
- Windows: WinPcap または Npcap
pnet(v0.35+)
パケット解析
特徴:
- TCP/IP パケットの解析
- レイヤー 2〜4 プロトコルのサポート
- ストリーム再構成ヘルパー
indicatif(v0.17+)
プログレスバー
ratatui(v0.26+)
ターミナル UI フレームワーク。ターミナル制御のために crossterm と併用されます。
用途:
- ネットワークモードのリアルタイム表示
- インタラクティブな統計
- ステータス監視
ビルドシステム
プロジェクトは Cargo でビルドされます。パッケージは dke-scanner-agent という名前でバージョン 1.0.0 として公開され、2021 エディションを対象とし、MIT または Apache-2.0 のデュアルライセンスです。dke-scanner-agent という名前のバイナリと、pqc_scanner という名前の再利用可能なライブラリを生成します。
ランタイム依存関係は目的ごとにグループ化されています。
| グループ | クレート |
|---|---|
| Core | tokio, anyhow, thiserror |
| Crypto | rustls, x509-parser, der, pem |
| CLI | clap |
| Serialization | serde, serde_json, serde_yaml |
| Logging | tracing, tracing-subscriber |
| File system | walkdir |
| Parallelism | rayon |
| Network | pcap, pnet |
| UI | indicatif, ratatui, crossterm |
開発依存関係には、ベンチマーク用の criterion とテスト用の tempfile が含まれます。リリースプロファイルはサイズと速度のためにチューニングされており、最大の最適化レベル、リンク時最適化、単一の codegen ユニット、およびストリップされたデバッグシンボルを備えています。
プラットフォーム固有の依存関係
システムパッケージ:
# Ubuntu/Debian
sudo apt-get install libpcap-dev pkg-config build-essential
# RHEL/CentOS
sudo yum install libpcap-devel
# Arch
sudo pacman -S libpcap
システムパッケージ:
# libpcap is included with macOS
# Optional: Homebrew for development tools
brew install pkg-config
前提条件:
- Visual Studio Build Tools または MSVC
- Npcap(パケットキャプチャ用): https://npcap.com/
# Install Npcap
choco install npcap
コンパイル
cargo build --release
出力: target/release/dke-scanner-agent
パフォーマンス特性
バイナリサイズ
| ビルドタイプ | サイズ | 説明 |
|---|---|---|
| Debug | ~50 MB | デバッグシンボル付きの未最適化 |
| Release | ~8 MB | 最適化済み、ストリップ済み |
| Release + UPX | ~3 MB | UPX で圧縮 |
メモリ使用量
| モード | 通常 | ピーク |
|---|---|---|
| Agent | 30 MB | 50 MB |
| Filesystem | 50 MB | 100 MB |
| Domain | 40 MB | 80 MB |
| Network | 60 MB | 150 MB |
CPU 使用率
- シングルスレッド解析: 1 コア
- 並列ファイルシステムスキャン: 全コア
- ネットワークキャプチャ: 1〜2 コア
テスト依存関係
テストは、開発専用の少数のクレートに依存します。
| クレート | 目的 |
|---|---|
| criterion | ベンチマーク |
| tempfile | テスト用の一時ファイル |
| mockall | モックフレームワーク |
| proptest | プロパティベーステスト |
CI/CD 統合
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
- run: cargo test --all-features
- run: cargo clippy -- -D warnings
バージョン要件
| 依存関係 | 最小バージョン | 推奨 |
|---|---|---|
| Rust | 1.70 | 最新の stable |
| Cargo | 1.70 | 最新 |
| libpcap | 1.9.0 | 1.10.0+ |