Details zum technischen Stack
Details zum technischen Stack
Detaillierter technischer Stack und Abhängigkeiten des DuoKey PQC Scanners
Kerntechnologie
Version: Stable (neueste empfohlen)
Warum Rust?
Speichersicherheit
Keine Garbage Collection, Garantien für Speichersicherheit zur Kompilierzeit
Leistung
Zero-Cost-Abstraktionen, vergleichbar mit C/C++
Nebenläufigkeit
Furchtlose Nebenläufigkeit dank Ownership-System
Plattformübergreifend
Erstklassige Unterstützung für Linux, macOS, Windows
- Moderne Werkzeuge: Cargo-Paketmanager, rustfmt, clippy
- Starkes Typsystem: Verhindert viele Fehlerklassen bereits zur Kompilierzeit
Abhängigkeiten
rustls (v0.23+)
Reine Rust-Implementierung von TLS 1.2/1.3, zusammen mit rustls-pemfile für das Laden von PEM verwendet.
Funktionen:
- Keine OpenSSL-Abhängigkeit
- Speichersicheres TLS
- Moderne Cipher-Suites
- TLS-1.3-Unterstützung
x509-parser (v0.16+)
X.509-Zertifikatsparsing
Fähigkeiten:
- DER-/PEM-Zertifikate parsen
- Öffentliche Schlüssel extrahieren
- Zertifikatsketten validieren
- OID-Parsing
der & pem (v0.7+ / v3.0+)
Low-Level-Kodierung/-Dekodierung von DER- und PEM-Daten.
tokio (v1.35+)
Asynchrone Runtime (mit vollem Funktionsumfang aktiviert).
Verwendete Funktionen:
fs: Asynchrone Dateisystemoperationennet: TCP-/TLS-Netzwerksync: Channels, Mutexetime: Timer, Timeoutsmacros:#[tokio::main]rt-multi-thread: Multithreaded-Runtime
clap (v4.5+)
Parsing von Befehlszeilenargumenten (unter Verwendung der Features derive, env und cargo).
Funktionen:
- Derive-Makros zur einfachen CLI-Definition
- Unterbefehle
- Unterstützung von Umgebungsvariablen
- Shell-Vervollständigungen
- Hilfe-Generierung
serde (v1.0+)
Serialisierungs-Framework, gepaart mit serde_json und serde_yaml für die JSON- und YAML-Ausgabeformate.
Unterstützte Formate:
- JSON (Standardausgabe)
- YAML (menschenlesbar)
- Benutzerdefiniertes SARIF-Format
tracing (v0.1+)
Strukturiertes Logging, wobei tracing-subscriber (env-filter-Feature) die Log-Ausgabe und -Filterung übernimmt.
Funktionen:
- Strukturiertes, kontextbezogenes Logging
- Mehrere Log-Level
- Filterung nach Modul
- Unterstützung von JSON-Ausgabe
anyhow & thiserror (v1.0+)
Verwendung:
anyhow: Fehler auf Anwendungsebenethiserror: Benutzerdefinierte Fehler auf Bibliotheksebene
walkdir (v2.4+)
Rekursive Verzeichnisdurchquerung
Funktionen:
- Effizientes rekursives Scannen
- Behandlung symbolischer Links
- Filterung
- Zugriff auf Metadaten
rayon (v1.8+)
Datenparallelität
Anwendungsfälle:
- Parallele Dateiverarbeitung
- Nebenläufige Zertifikatsanalyse
- Multithreaded-Scanning
pcap (v2.0+)
Paketerfassung (libpcap-Wrapper)
Plattformabhängigkeiten:
- Linux:
libpcap-dev - macOS: Integriertes libpcap
- Windows: WinPcap oder Npcap
pnet (v0.35+)
Paket-Parsing
Funktionen:
- TCP-/IP-Paket-Parsing
- Protokollunterstützung für Layer 2-4
- Helfer zur Stream-Wiederzusammensetzung
indicatif (v0.17+)
Fortschrittsbalken
ratatui (v0.26+)
Terminal-UI-Framework, zusammen mit crossterm für die Terminalsteuerung verwendet.
Verwendet für:
- Echtzeitanzeige im Netzwerkmodus
- Interaktive Statistiken
- Statusüberwachung
Build-System
Das Projekt wird mit Cargo gebaut. Das Paket wird unter dem Namen dke-scanner-agent in Version 1.0.0 veröffentlicht, zielt auf die 2021-Edition ab und ist dual unter MIT oder Apache-2.0 lizenziert. Es erzeugt eine Binärdatei namens dke-scanner-agent und eine wiederverwendbare Bibliothek namens pqc_scanner.
Die Laufzeitabhängigkeiten sind nach Zweck gruppiert:
| Gruppe | Crates |
|---|---|
| Core | tokio, anyhow, thiserror |
| Krypto | rustls, x509-parser, der, pem |
| CLI | clap |
| Serialisierung | serde, serde_json, serde_yaml |
| Logging | tracing, tracing-subscriber |
| Dateisystem | walkdir |
| Parallelität | rayon |
| Netzwerk | pcap, pnet |
| UI | indicatif, ratatui, crossterm |
Zu den Entwicklungsabhängigkeiten gehören criterion für Benchmarking und tempfile für Tests. Das Release-Profil ist auf Größe und Geschwindigkeit abgestimmt: maximale Optimierungsstufe, Link-Time-Optimierung, eine einzige Codegen-Einheit und entfernte Debug-Symbole.
Plattformspezifische Abhängigkeiten
Systempakete:
# Ubuntu/Debian
sudo apt-get install libpcap-dev pkg-config build-essential
# RHEL/CentOS
sudo yum install libpcap-devel
# Arch
sudo pacman -S libpcap
Systempakete:
# libpcap ist in macOS enthalten
# Optional: Homebrew für Entwicklungswerkzeuge
brew install pkg-config
Voraussetzungen:
- Visual Studio Build Tools oder MSVC
- Npcap (für Paketerfassung): https://npcap.com/
# Npcap installieren
choco install npcap
Kompilierung
cargo build --release
Ausgabe: target/release/dke-scanner-agent
Leistungsmerkmale
Binärgröße
| Build-Typ | Größe | Beschreibung |
|---|---|---|
| Debug | ~50 MB | Nicht optimiert mit Debug-Symbolen |
| Release | ~8 MB | Optimiert, Symbole entfernt |
| Release + UPX | ~3 MB | Mit UPX komprimiert |
Speicherverbrauch
| Modus | Typisch | Spitze |
|---|---|---|
| Agent | 30 MB | 50 MB |
| Dateisystem | 50 MB | 100 MB |
| Domain | 40 MB | 80 MB |
| Netzwerk | 60 MB | 150 MB |
CPU-Auslastung
- Einzelthread-Parsing: 1 Kern
- Paralleler Dateisystem-Scan: Alle Kerne
- Netzwerkerfassung: 1-2 Kerne
Testabhängigkeiten
Tests stützen sich auf eine kleine Gruppe von nur zur Entwicklung verwendeten Crates:
| Crate | Zweck |
|---|---|
| criterion | Benchmarking |
| tempfile | Temporäre Dateien für Tests |
| mockall | Mocking-Framework |
| proptest | Property-basiertes Testen |
CI/CD-Integration
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
Versionsanforderungen
| Abhängigkeit | Mindestversion | Empfohlen |
|---|---|---|
| Rust | 1.70 | Neueste stable |
| Cargo | 1.70 | Neueste |
| libpcap | 1.9.0 | 1.10.0+ |