Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

đŸ›Ąïž Corvus Drop - Laboratoire de Cryptographie FROM SCRATCH

Python Version FastAPI Streamlit Cryptography

â„č À Propos du Projet

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.


📂 Structure du Projet

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

⚙ SpĂ©cifications Cryptographiques MathĂ©matiques

1. Chiffrement Symétrique : ChaCha20 From Scratch

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.

2. Cryptographie Asymétrique : ECC (NIST P-256)

L'infrastructure à clés publiques (PKI) repose sur la courbe elliptique standard NIST P-256 ($y^2 = x^3 - 3x + b \pmod P$) implémentée avec :

  • 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)$).

3. Signatures Numériques : ECDSA Customisé

Les certificats sont signés numériquement en générant un couple de valeurs $(r, s)$ :

  • 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$.

4. KDF & Sécurisation de Clé (PBKDF2-HMAC-SHA256)

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.

đŸ› ïž Guide de DĂ©marrage & Protocole de Test

📋 PrĂ©requis

Installez les bibliothÚques minimales nécessaires pour le serveur API et l'interface utilisateur Streamlit :

pip install fastapi uvicorn requests streamlit

Étape 1 : Initialiser la PKI CustomisĂ©e

Avant de démarrer le serveur, vous devez générer vos autorités de confiance et les clés d'échange :

  1. Ouvrez un terminal et placez-vous dans le dossier server/ :
    cd server
  2. 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.


Étape 2 : Lancer le Serveur API

Le serveur stocke les fichiers cryptés et expose l'interface d'administration.

  1. Toujours dans le dossier server/, lancez le serveur FastAPI :
    python server.py
  2. 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.

Étape 3 : Valider le Client CLI (Chiffrement et Upload)

Ce test automatique vérifie la validité mathématique du chiffrement ChaCha20 et la connectivité réseau.

  1. Ouvrez un nouveau terminal et déplacez-vous dans le dossier client/ :
    cd client
  2. Lancez le script client :
    python client.py
  3. 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 !

Étape 4 : Utiliser l'Interface Graphique Streamlit

Le client graphique premium rassemble toutes les interfaces interactives.

  1. Dans le dossier client/, lancez Streamlit :
    streamlit run interface.py
  2. L'interface s'ouvre à l'adresse par défaut http://localhost:8501.

🔬 ExpĂ©rimentations recommandĂ©es dans l'Interface Streamlit :

  1. 🌐 Inspecteur HTTPS RĂ©el : Renseignez le nom de domaine de n'importe quel grand site (ex: google.com ou github.com) dans le premier onglet. L'application Ă©tablira un handshake TLS standard et analysera la validitĂ© de son certificat sans dĂ©pendances externes.
  2. 📜 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)$.
  3. 🔑 Gestion des ClĂ©s : GĂ©nĂ©rez ou dĂ©finissez votre clĂ© de chiffrement symĂ©trique ChaCha20 de 256 bits.
  4. đŸ“€ 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.

đŸ›Ąïž RĂšgle de SĂ©curitĂ© OpĂ©rationnelle

  • 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.

About

đŸ›Ąïž SystĂšme d exchange de fichiers chiffrĂ©s de bout en bout (ChaCha20) avec PKI locale ECC (SECP384R1) protĂ©gĂ©e par KDF et canal TLS natif.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages