Corvus Drop est un laboratoire et un systÚme d'échange de fichiers sécurisés de bout en bout (E2EE) entiÚrement codé from scratch en pur Python.
Afin de répondre à une exigence académique et d'ingénierie stricte, aucune bibliothÚque cryptographique prédéfinie (telle que cryptography, PyCryptodome, pyOpenSSL, etc.) n'est utilisée. Toutes les structures de données, les algorithmes de chiffrement symétrique par flux, l'arithmétique modulaire sur les courbes elliptiques et les signatures numériques sont écrits et exécutés au niveau applicatif à partir des principes mathématiques fondamentaux.
Le projet est divisé en deux sections autonomes représentant les deux hÎtes communicants :
Corvus Drop/
âââ đ client/ # --- CĂTĂ CLIENT (Host A) ---
â âââ client.py # Script client CLI de simulation E2EE & upload
â âââ interface.py # Interface premium Streamlit (ECC Lab & Inspecteur HTTPS)
â âââ custom_crypto.py # Moteur de calcul cryptographique autonome (Host A)
â âââ ca_cert.pem # Copie du certificat de confiance de la Root CA (gĂ©nĂ©rĂ©)
â
âââ đ server/ # --- CĂTĂ SERVEUR (Host B) ---
âââ server.py # Serveur FastAPI d'Ă©change de fichiers (HTTP port 8080)
âââ pki_setup.py # Script d'initialisation de la PKI customisĂ©e
âââ custom_crypto.py # Moteur de calcul cryptographique autonome (Host B)
âââ ca_cert.pem # Certificat de la Root CA (gĂ©nĂ©rĂ©)
âââ ca_private_key.pem # ClĂ© privĂ©e Root CA chiffrĂ©e par KDF (gĂ©nĂ©rĂ©e)
âââ server_cert.pem # Certificat du serveur signĂ© par ECDSA custom (gĂ©nĂ©rĂ©)
âââ server_private_key.pem # ClĂ© privĂ©e asymĂ©trique du serveur (gĂ©nĂ©rĂ©e)
âââ đ server_storage/ # Coffre-fort de stockage sĂ©curisĂ© du serveur
L'algorithme de chiffrement symétrique par flux ChaCha20 (RFC 7539) est implémenté de bout en bout :
- Matrice d'Ătat (64 octets) : ComposĂ©e de 4 constantes prĂ©dĂ©finies, de la clĂ© symĂ©trique de 32 octets (256 bits), d'un compteur de bloc de 4 octets et d'un nonce de 12 octets (96 bits).
-
Quart de Ronde (Quarter-Round) : Opérations arithmétiques pures sur des registres de 32 bits basées sur l'addition modulo
$2^{32}$ , le OU exclusif (XOR) et les rotations binaires vers la gauche ($<<< 16$ ,$<<< 12$ ,$<<< 8$ ,$<<< 7$ ). - Rondes de Chiffrement : 20 rondes alternant les colonnes et les diagonales pour assurer une diffusion et une confusion parfaites.
L'infrastructure à clés publiques (PKI) repose sur la courbe elliptique standard NIST P-256 (
- Addition de Points et Doublement de Points gérant le point à l'infini.
-
Multiplication Scalaire (méthode Double-and-Add) pour calculer le produit
$Q = d \cdot G$ en temps logarithmique stable. -
ParamÚtres NIST P-256 codés en dur avec une précision exacte (Modulo premier
$P$ , Ordre du sous-groupe$N$ , Générateur de base $G(x, y)$).
Les certificats sont signés numériquement en générant un couple de valeurs
- Calcul du condensat cryptographique via un algorithme de hachage SHA-256.
- Choix d'un nonce éphémÚre aléatoire
$k \in [1, N-1]$ . - Calcul du point de courbe
$R = k \cdot G = (x_1, y_1)$ et définition de$r = x_1 \pmod N$ . - Calcul de
$s = k^{-1} \cdot (Hash(Msg) + d \cdot r) \pmod N$ . - La vérification du certificat s'effectue en validant que le point
$U = (Hash(Msg) \cdot s^{-1}) \cdot G + (r \cdot s^{-1}) \cdot Q$ a pour abscisse$x_u$ tel que$x_u \pmod N == r$ .
Pour se conformer aux standards de haute sécurité, les clés privées d'autorité racine sont chiffrées sur le disque :
- Dérivation (KDF) : Implémentation du standard PBKDF2 avec HMAC-SHA256 pour dériver une clé forte de 256 bits à partir d'un mot de passe utilisateur et d'un sel aléatoire de 16 octets (1000 itérations).
- Chiffrement : La clé ECC privée dérivée est stockée au format PEM chiffrée par le flux ChaCha20.
Installez les bibliothÚques minimales nécessaires pour le serveur API et l'interface utilisateur Streamlit :
pip install fastapi uvicorn requests streamlitAvant de démarrer le serveur, vous devez générer vos autorités de confiance et les clés d'échange :
- Ouvrez un terminal et placez-vous dans le dossier
server/:cd server - Exécutez le script d'initialisation :
python pki_setup.py
Important
SĂ©curisation Forte (KDF) : Le script vous demandera de dĂ©finir un mot de passe robuste (minimum 8 caractĂšres). La clĂ© d'autoritĂ© racine (ca_private_key.pem) sera alors chiffrĂ©e par KDF + ChaCha20 avant d'ĂȘtre Ă©crite sur le disque.
Le certificat public ca_cert.pem est automatiquement synchronisé vers le sous-dossier client/ pour valider la simulation PKI.
Le serveur stocke les fichiers cryptés et expose l'interface d'administration.
- Toujours dans le dossier
server/, lancez le serveur FastAPI :python server.py
- Le serveur s'active instantanément à l'adresse http://127.0.0.1:8080. Vous pouvez visualiser l'interface de contrÎle web directement dans votre navigateur.
Ce test automatique vérifie la validité mathématique du chiffrement ChaCha20 et la connectivité réseau.
- Ouvrez un nouveau terminal et déplacez-vous dans le dossier
client/:cd client - Lancez le script client :
python client.py
- Appuyez sur Entrée lorsqu'il vous le demande pour envoyer le fichier. Le client effectue les opérations suivantes :
- GénÚre une clé symétrique ChaCha20 cryptographique de 256 bits.
- Chiffre le fichier localement en ajoutant un nonce unique de 12 octets en tĂȘte du fichier.
- Téléverse le fichier sur le serveur.
- RécupÚre le fichier chiffré depuis le serveur et le déchiffre à l'identique !
Le client graphique premium rassemble toutes les interfaces interactives.
- Dans le dossier
client/, lancez Streamlit :streamlit run interface.py
- L'interface s'ouvre à l'adresse par défaut http://localhost:8501.
-
đ Inspecteur HTTPS RĂ©el : Renseignez le nom de domaine de n'importe quel grand site (ex:
google.comougithub.com) dans le premier onglet. L'application établira un handshake TLS standard et analysera la validité de son certificat sans dépendances externes. -
đ PKI & Certificats ECC :
- Générez une Root CA ECC en définissant un mot de passe fort (KDF activée).
- Ămettez un certificat pour votre serveur en entrant le mot de passe dĂ©fini prĂ©cĂ©demment pour dĂ©verrouiller la Root CA active (validation de signature ECDSA en temps rĂ©el !).
- Analysez le certificat généré via le drag-and-drop de l'Inspecteur de Certificat customisé pour lire les coordonnées du point elliptique et les signatures ECDSA
$(r, s)$ .
- đ Gestion des ClĂ©s : GĂ©nĂ©rez ou dĂ©finissez votre clĂ© de chiffrement symĂ©trique ChaCha20 de 256 bits.
- đ€ Upload / Download : Envoyez n'importe quel document en clair, observez-le chiffrĂ© sur le tableau de bord du serveur, puis tĂ©lĂ©chargez-le et restaurez-le de maniĂšre transparente Ă l'aide de l'onglet de tĂ©lĂ©chargement.
- Confidentialité : Les clés privées générées ne quittent jamais leurs dossiers respectifs.
- SĂ©curitĂ© Ă l'arrĂȘt (At Rest) : La clĂ© privĂ©e de la Root CA est chiffrĂ©e via notre ChaCha20 avec dĂ©rivation KDF PBKDF2 de 1000 rounds.
- Automatisation : La clé privée du serveur est stockée en clair sur le serveur pour permettre l'amorçage automatique (bootstrapping standard d'un serveur cloud), sécurisée par les permissions NTFS/POSIX de la machine.