Le problème
Banques, opérateurs télécoms et hôpitaux voient chacun une partie du paysage des menaces, et aucun ne peut partager son trafic réseau brut : la réglementation et la concurrence l'interdisent. Un modèle classique de détection d'intrusion exige un dépôt de données central — un point de défaillance unique et une cible de choix. L'apprentissage fédéré retourne le problème : le modèle voyage, pas les données. Chaque organisation entraîne localement et n'envoie que des mises à jour du modèle.
FedSentinel est un prototype de recherche que j'ai construit pour étudier ce que cette promesse coûte en pratique. Partager des mises à jour plutôt que des données ouvre de nouvelles surfaces d'attaque : un participant peut empoisonner le modèle, profiter du travail des autres sans contribuer, ou tenter de reconstruire les données d'entraînement d'autrui à partir des gradients. Le projet implémente ces attaques et les défenses publiées qui leur répondent, côte à côte, sur le framework Flower et PyTorch.
C'est un projet d'étude, pas un produit, et je préfère dire où il s'arrête. Le tableau de bord présenté plus bas est une interface de démonstration alimentée par des données simulées générées dans le navigateur ; ses chiffres illustrent ce que chaque module rapporte, ce ne sont pas des mesures. Le README donne des chiffres de benchmark sur NSL-KDD, un jeu de données de 1999 utile pour valider une méthode mais non représentatif du trafic actuel ; je ne les présente pas ici comme des résultats vérifiés, car le dépôt ne fournit pas les journaux d'exécution correspondants.
Les menaces contre l'entraînement lui-même, et leurs défenses
| Menace | Attaque implémentée | Défense implémentée |
|---|---|---|
| Un participant empoisonne le modèle | Inversion de signe, mise à l'échelle, Min-Max, manipulation du produit scalaire, inversion d'étiquettes, déclencheur de porte dérobée | Krum et Multi-Krum, moyenne tronquée, médiane par coordonnée, FLAME, FLTrust |
| Un participant ne contribue pas | Passager clandestin : mise à jour quasi nulle, rejeu, copie déguisée | Détecteur par norme de mise à jour et similarité cosinus ; score de contribution par valeur de Shapley |
| Le serveur apprend des données privées | Inférence d'appartenance (seuil de perte, modèle fantôme) | DP-SGD avec écrêtage des gradients et bruit gaussien, comptabilité RDP et GDP, agrégation sécurisée par masques appariés, chiffrement homomorphe CKKS (TenSEAL) |
| Les données sont reconstruites à partir du modèle | Inversion de modèle par requêtes répétées | Bruit sur les représentations internes, randomisation des sorties, budget de requêtes par source |
| Le détecteur est contourné | Exemples adverses PGD | Entraînement adverse avec lots mixtes, propres et perturbés |
| Une mise à jour est modifiée après coup | — | Engagement SHA-256 avec défi-réponse, TLS mutuel entre serveur et clients, journal d'audit chaîné par hachage |
Deux étiquettes que j'ai refusé d'utiliser
Il est facile de survendre un projet de sécurité avec le bon vocabulaire. Deux composants de FedSentinel portent un avertissement explicite dans la documentation du code et dans l'interface elle-même :
- Le schéma d'engagement sur les gradients n'est pas une preuve à divulgation nulle de connaissance. C'est un protocole engagement-défi-réponse construit sur SHA-256 et HMAC. Il lie un client à sa mise à jour et prouve la connaissance d'une clé ; il n'y a derrière ni circuit zk-SNARK ni zk-STARK.
- Le journal d'audit n'est pas une blockchain. C'est une liste en ajout seul, chaînée par hachage : altérer un bloc invalide toutes les empreintes suivantes. Il n'y a ni consensus, ni nœud distribué, ni contrat intelligent.


Au-delà de la boucle principale
- Modèles : un encodeur Transformer, un BiLSTM avec attention et un réseau d'attention sur graphe qui classe les connexions sur le graphe du réseau, pour repérer une activité coordonnée qu'un modèle par flux ne voit pas.
- Attaques inconnues : un auto-encodeur variationnel entraîné uniquement sur du trafic normal, combiné à une Isolation Forest ; une forte erreur de reconstruction signale ce qui n'a jamais été vu à l'entraînement.
- Participants hétérogènes : agrégation asynchrone (FedBuff) pondérée par l'ancienneté, modèles personnalisés (Ditto, pFedMe) et une variante fédérée de MAML.
- Cycle de vie : détection de dérive ADWIN, désapprentissage fédéré pour le droit à l'effacement, tatouage du modèle pour la propriété, compression des gradients, explications SHAP et LIME.
- Interfaces : une CLI à 12 commandes, un service FastAPI, Docker Compose, et une CI qui lance lint, tests et Bandit.
Le tableau de bord de démonstration
Une interface autonome de type centre de commande, construite avec Chart.js et sans framework, pour montrer comment un opérateur lirait le système. Comme indiqué plus haut, elle fonctionne sur des données simulées.










Ce que j'ai appris
- Confidentialité et robustesse tirent en sens opposés. L'agrégation robuste doit inspecter les mises à jour individuelles ; l'agrégation sécurisée existe pour les cacher. Choisir l'une contraint l'autre, et cet arbitrage est une décision de gouvernance autant que d'ingénierie.
- Nommer précisément un contrôle fait partie du contrôle. Appeler blockchain une chaîne de hachage n'aurait pas changé le code ; cela aurait changé ce qu'un lecteur croit qu'elle garantit.
- Implémenter un article est le moyen le plus rapide de trouver ce que son résumé omet — les hypothèses sur le nombre de participants honnêtes, et sur ce que le serveur est autorisé à voir.
- Ce que je ferais ensuite : enregistrer des exécutions de benchmark reproductibles sur un jeu de données récent (CICIDS2017 ou UNSW-NB15) et publier les journaux avec les chiffres.