Détails de la pile technique
Détails de la pile technique
Pile technique détaillée et dépendances du DuoKey PQC Scanner
Technologie de base
Version : Stable (dernière version recommandée)
Pourquoi Rust ?
Sécurité mémoire
Aucun ramasse-miettes, garanties de sécurité mémoire à la compilation
Performance
Abstractions à coût nul, comparables à C/C++
Concurrence
Concurrence sans crainte grâce au système de propriété
Multiplateforme
Prise en charge de premier ordre pour Linux, macOS, Windows
- Outillage moderne : gestionnaire de paquets Cargo, rustfmt, clippy
- Système de types robuste : évite de nombreuses classes de bogues à la compilation
Dépendances
rustls (v0.23+)
Implémentation TLS 1.2/1.3 en Rust pur, utilisée conjointement avec rustls-pemfile pour le chargement PEM.
Fonctionnalités :
- Aucune dépendance OpenSSL
- TLS sûr en mémoire
- Suites de chiffrement modernes
- Prise en charge de TLS 1.3
x509-parser (v0.16+)
Analyse de certificats X.509
Capacités :
- Analyser les certificats DER/PEM
- Extraire les clés publiques
- Valider les chaînes de certificats
- Analyse des OID
der & pem (v0.7+ / v3.0+)
Encodage/décodage de bas niveau des données DER et PEM.
tokio (v1.35+)
Runtime asynchrone (activé avec son jeu complet de fonctionnalités).
Fonctionnalités utilisées :
fs: opérations de système de fichiers asynchronesnet: réseau TCP/TLSsync: canaux, mutextime: minuteurs, délais d'expirationmacros:#[tokio::main]rt-multi-thread: runtime multithreadé
clap (v4.5+)
Analyse des arguments de la ligne de commande (en utilisant les fonctionnalités derive, env et cargo).
Fonctionnalités :
- Macros derive pour une définition CLI simple
- Sous-commandes
- Prise en charge des variables d'environnement
- Complétions shell
- Génération de l'aide
serde (v1.0+)
Framework de sérialisation, associé à serde_json et serde_yaml pour les formats de sortie JSON et YAML.
Formats pris en charge :
- JSON (sortie par défaut)
- YAML (lisible par l'humain)
- Format SARIF personnalisé
tracing (v0.1+)
Journalisation structurée, avec tracing-subscriber (fonctionnalité env-filter) gérant la sortie et le filtrage des journaux.
Fonctionnalités :
- Journalisation structurée et contextuelle
- Plusieurs niveaux de journalisation
- Filtrage par module
- Prise en charge de la sortie JSON
anyhow & thiserror (v1.0+)
Utilisation :
anyhow: erreurs au niveau applicatifthiserror: erreurs personnalisées au niveau bibliothèque
walkdir (v2.4+)
Parcours récursif de répertoires
Fonctionnalités :
- Analyse récursive efficace
- Gestion des liens symboliques
- Filtrage
- Accès aux métadonnées
rayon (v1.8+)
Parallélisme de données
Cas d'usage :
- Traitement parallèle de fichiers
- Analyse concurrente de certificats
- Analyse multithreadée
pcap (v2.0+)
Capture de paquets (wrapper libpcap)
Dépendances de plateforme :
- Linux :
libpcap-dev - macOS : libpcap intégré
- Windows : WinPcap ou Npcap
pnet (v0.35+)
Analyse de paquets
Fonctionnalités :
- Analyse de paquets TCP/IP
- Prise en charge des protocoles de couches 2 à 4
- Aides au réassemblage de flux
indicatif (v0.17+)
Barres de progression
ratatui (v0.26+)
Framework d'interface terminal, utilisé avec crossterm pour le contrôle du terminal.
Utilisé pour :
- Affichage en temps réel du mode réseau
- Statistiques interactives
- Surveillance de l'état
Système de build
Le projet est construit avec Cargo. Le paquet est publié sous le nom dke-scanner-agent en version 1.0.0, cible l'édition 2021 et est sous double licence MIT ou Apache-2.0. Il produit un binaire nommé dke-scanner-agent et une bibliothèque réutilisable nommée pqc_scanner.
Les dépendances d'exécution sont regroupées par objectif :
| Groupe | Crates |
|---|---|
| Core | tokio, anyhow, thiserror |
| Crypto | rustls, x509-parser, der, pem |
| CLI | clap |
| Sérialisation | serde, serde_json, serde_yaml |
| Journalisation | tracing, tracing-subscriber |
| Système de fichiers | walkdir |
| Parallélisme | rayon |
| Réseau | pcap, pnet |
| UI | indicatif, ratatui, crossterm |
Les dépendances de développement incluent criterion pour l'évaluation des performances et tempfile pour les tests. Le profil de release est optimisé pour la taille et la vitesse : niveau d'optimisation maximal, optimisation au moment de l'édition de liens, une seule unité de génération de code et symboles de débogage supprimés.
Dépendances spécifiques à la plateforme
Paquets système :
# Ubuntu/Debian
sudo apt-get install libpcap-dev pkg-config build-essential
# RHEL/CentOS
sudo yum install libpcap-devel
# Arch
sudo pacman -S libpcap
Paquets système :
# libpcap is included with macOS
# Optional: Homebrew for development tools
brew install pkg-config
Prérequis :
- Visual Studio Build Tools ou MSVC
- Npcap (pour la capture de paquets) : https://npcap.com/
# Install Npcap
choco install npcap
Compilation
cargo build --release
Sortie : target/release/dke-scanner-agent
Caractéristiques de performance
Taille du binaire
| Type de build | Taille | Description |
|---|---|---|
| Debug | ~50 Mo | Non optimisé avec symboles de débogage |
| Release | ~8 Mo | Optimisé, symboles supprimés |
| Release + UPX | ~3 Mo | Compressé avec UPX |
Utilisation de la mémoire
| Mode | Typique | Pic |
|---|---|---|
| Agent | 30 Mo | 50 Mo |
| Système de fichiers | 50 Mo | 100 Mo |
| Domaine | 40 Mo | 80 Mo |
| Réseau | 60 Mo | 150 Mo |
Utilisation du CPU
- Analyse monothread : 1 cœur
- Analyse parallèle du système de fichiers : tous les cœurs
- Capture réseau : 1-2 cœurs
Dépendances de test
Les tests reposent sur un petit ensemble de crates réservées au développement :
| Crate | Objectif |
|---|---|
| criterion | Évaluation des performances |
| tempfile | Fichiers temporaires pour les tests |
| mockall | Framework de mocking |
| proptest | Tests basés sur les propriétés |
Intégration 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
Exigences de version
| Dépendance | Version minimale | Recommandée |
|---|---|---|
| Rust | 1.70 | Dernière stable |
| Cargo | 1.70 | Dernière |
| libpcap | 1.9.0 | 1.10.0+ |