Authentifier les SuperNodes

Lors de l’exécution d’une Fédération Flower (voir Communication réseau de Flower) il est fondamental qu’un mécanisme d’authentification soit disponible entre le SuperLink et les SuperNodes qui s’y connectent. Flower dispose de deux mécanismes différents pour authentifier les SuperNodes qui se connectent à un SuperLink en cours d’exécution :

  • Authentification automatique : Dans ce mode, le SuperLink vérifie la signature basée sur l’heure dans chaque requête des SuperNodes pour empêcher les attaques par impersonation et replay. L’objectif de ce mode est de confirmer l’identité des SuperNodes connectés ; cependant, il ne restreint pas les SuperNodes qui peuvent se connecter au SuperLink. Par conséquent, tout SuperNode peut se connecter au SuperLink.

  • Authentification gérée par CLI : Ce mode fonctionne de manière similaire à l’authentification automatique mais nécessite le démarrage du SuperLink avec la flag --enable-supernode-auth. Pour connecter un SuperNode au SuperLink, son clé publique doit être enregistrée d’abord en utilisant le Flower CLI. Seuls les SuperNodes enregistrés sont autorisés à se connecter au SuperLink, ce qui rend ce mode plus sécurisé en limitant les connexions aux SuperNodes autorisés uniquement.

Le mode d’authentification automatique fonctionne directement et ne nécessite donc aucune configuration. D’un autre côté, le mode d’authentification géré par l’interface de ligne de commande est plus sophistiqué et la présentation de ce guide rappelle comment il fonctionne et comment il peut être utilisé. L’authentification des SuperNodes gérée par l’interface de ligne de commande de Flower utilise un mécanisme basé sur les signatures pour vérifier l’identité de chaque SuperNode et n’est disponible que lorsque les connexions chiffrées (SSL/TLS) sont activées :

  • Chaque SuperNode doit déjà posséder un couple unique de clés publiques/privées elliptiques.

  • Le SuperLink (serveur) maintient une liste blanche des clés publiques EC pour tous les SuperNodes (clients) fiables, gérée via l’interface de ligne de commande Flower.

  • Un SuperNode signe un timestamp avec sa clé privée et envoie le timestamp signé au SuperLink.

  • Le SuperLink vérifie la signature et le timestamp à l’aide de la clé publique du SuperNode.

Note

Ce guide s’appuie sur la mise en place de l’application Flower présentée dans le guide Activer les connexions TLS et l’étend pour introduire l’authentification des nœuds dans la connexion SuperLink ↔ SuperNode.

Note

Ce guide couvre l’authentification des SuperNodes gérée par l’interface de ligne de commande pour un SuperLink auto-hébergé. Pour enregistrer les SuperNodes dans le tableau de bord SuperGrid et les ajouter à une fédération de déploiement, voir Connecter des SuperNodes à la grille SuperGrid.

Astuce

Voir l’exemple Flower Authentication pour un exemple complet autonome sur la mise en place des TLS et de l’authentification des nœuds.

Générer les clés d’authentification

Pour établir un mécanisme d’authentification par lequel seuls les SuperNodes autorisés peuvent se connecter à un SuperLink en cours d’exécution, il faut créer un ensemble de paires de clés pour les SuperLink et les SuperNodes.

Nous avons préparé un script qui peut être utilisé pour générer ce type de clés. Même si l’utilisation de ces dernières est acceptable pour la prototypage, nous vous recommandons de suivre les normes établies dans votre équipe/organisation et de générer les clés et de les partager avec les parties correspondantes. Référez-vous à la section Générer des clés publiques et privées pour l’authentification des SuperNodes dans l’exemple lié en haut de ce guide.

# In the example directory, generate the public/private key pairs
# along side the TLS certificates.
$ python generate_creds.py

Cela générera les clés dans un nouveau répertoire keys/. Par défaut, il crée une paire de clés pour le SuperLink et une pour chaque SuperNode. Copiez ce répertoire dans le répertoire de votre application (par exemple, un répertoire généré plus tôt via flwr new).

Inscrire des SuperNodes

Une fois votre SuperLink en cours d’exécution, le prochain pas consiste à inscrire les SuperNodes qui seront autorisés à se connecter à elle. Ce processus est géré par le Flower CLI à l’aide des clés publiques générées précédemment pour chaque SuperNode que vous prévoyez de connecter au SuperLink.

Tout d’abord, assurez-vous que votre fichier de configuration Flower a un profil de connexion SuperLink qui pointe vers votre instance de SuperLink et qui inclut un champ root-certificates avec la voie du certificat CA utilisé pour lancer le SuperLink. Par exemple :

config.toml
[superlink.local-deployment]
address = "127.0.0.1:9093"
root-certificates = "/absolute/path/to/certificates/ca.crt"

Vous pouvez vérifier que votre connexion est correctement configurée en exécutant une commande flwr ls :

$ flwr ls local-deployment

📄 Listing all runs...
┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━┳━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓
┃ Run ID  Federation  App  Status  Elapsed  Status Changed @ ┃
┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━╇━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩
└────────┴────────────┴─────┴────────┴─────────┴──────────────────┘

Astuce

Vous pouvez configurer votre profil local-deployment en tant que défaut afin de ne pas avoir à spécifier explicitement ce dernier dans chaque commande CLI Flower qui nécessite une connexion avec le SuperLink. Pour cela et plus d’informations sur la configuration de Flower, veuillez consulter le guide the Flower Configuration.

Avec un CLI Flower correctement configuré, passons à l’inscription des deux SuperNodes :

# flwr supernode register <supernode-pub-key> <superlink>
$ flwr supernode register keys/supernode_credentials_1.pub local-deployment

Ensuite, inscrivez également le deuxième SuperNode :

$ flwr supernode register keys/supernode_credentials_2.pub local-deployment

Vous pouvez lister les SuperNodes enregistrés à l’aide de la commande suivante :

# flwr supernode list <superlink>
$ flwr supernode list local-deployment

Cela affichera les ID des SuperNodes que vous venez d’enregistrer ainsi que leur statut. Vous devriez voir une table similaire à celle-ci :

┏━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┓
┃       Node ID         Owner    Status    Elapsed     Status Changed @   ┃
┡━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━┩
│ 16019329408659850374  none   registered            N/A                  │
├──────────────────────┼───────┼────────────┼──────────┼──────────────────────┤
│ 8392976743692794070   none   registered            N/A                  │
└──────────────────────┴───────┴────────────┴──────────┴──────────────────────┘

Le statut des SuperNodes changera après qu’ils se seront connectés au SuperLink. Passons et lançons les SuperNodes.

Activer l’authentification des nœuds dans SuperNode

La connexion d’un SuperNode à un SuperLink qui a l’authentification des nœuds activée nécessite de passer un argument supplémentaire (c’est-à-dire la clé privée du SuperNode) en plus du certificat TLS.

Note

Pour activer également TLS pour l’API AppIo sur les SuperNodes, veuillez consulter Launching the SuperNodes with TLS.

$ flower-supernode \
    --root-certificates certificates/ca.crt \
    --superlink 127.0.0.1:9092 \
    --clientappio-api-address 127.0.0.1:9094 \
    --node-config="partition-id=0 num-partitions=2" \
    --auth-supernode-private-key keys/supernode_credentials_1
Comprendre la commande
  • --auth-supernode-private-key: La clé privée de ce SuperNode.

Suivez la même procédure pour lancer le deuxième SuperNode en passant sa clé privée correspondante :

$ flower-supernode \
    --root-certificates certificates/ca.crt \
    --superlink 127.0.0.1:9092 \
    --clientappio-api-address 127.0.0.1:9095 \
    --node-config="partition-id=1 num-partitions=2" \
    --auth-supernode-private-key keys/supernode_credentials_2

Après avoir connecté les deux Supernodes, vous pouvez vérifier le statut des Supernodes à nouveau. Vous remarquerez que leur statut est maintenant online :

$ flwr supernode list local-deployment

┏━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┓
┃       Node ID         Owner  Status   Elapsed    Status Changed @   ┃
┡━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━┩
│ 16019329408659850374  none   online   1m 35s   2025-10-13 13:40:47Z │
├──────────────────────┼───────┼─────────┼─────────┼──────────────────────┤
│ 8392976743692794070   none   online   79s      2025-10-13 13:52:21Z │
└──────────────────────┴───────┴─────────┴─────────┴──────────────────────┘

Désinscrire des SuperNodes

Avertissement

C’est une opération destructive. La désinscription d’un SuperNode est permanente et ne peut pas être annulée. Si vous souhaitez reconnecter un SuperNode, un nouveau paquet de clés est nécessaire.

À tout moment, vous pouvez désinscrire un SuperNode du SuperLink (même s’il n’a jamais été connecté). Cela empêchera le SuperNode de faire des requêtes futures vers le SuperLink. En d’autres termes, il ne sera plus autorisé à récupérer/envoyer ou participer à des runs en cours ou futurs. La désinscription d’un SuperNode peut être effectuée via le Flower CLI comme suit :

# flwr supernode unregister <node-id> <superlink>
$ flwr supernode unregister 16019329408659850374 local-deployment

Le commande ci-dessus désinscrit le premier SuperNode. Vous pouvez vérifier cela en listant les SuperNodes à nouveau :

$ flwr supernode list . local-deployment

📄 Listing all nodes...
┏━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┓
┃       Node ID         Owner  Status   Elapsed    Status Changed @   ┃
┡━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━┩
│ 8392976743692794070   none   online   79s      2025-10-13 13:52:21Z │
└──────────────────────┴───────┴─────────┴─────────┴──────────────────────┘

Si vous passez la flag --verbose à la commande précédente, vous verrez que le statut du SuperNode désinscrit a changé en unregistered. Par défaut, les SuperNodes non inscrits sont masqués car ils ne peuvent plus se reconnecter au SuperLink. C’est-à-dire, si vous souhaitez reconnecter un deuxième SuperNode, un nouveau paquet de clés EC est nécessaire.

$ flwr supernode list local-deployment --verbose

📄 Listing all nodes...
┏━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┓
┃       Node ID         Owner     Status     Elapsed    Status Changed @   ┃
┡━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━┩
│ 16019329408659850374  none   online        1m 35s   2025-10-13 13:40:47Z │
├──────────────────────┼───────┼──────────────┼─────────┼──────────────────────┤
│ 8392976743692794070   none   unregistered  79s      2025-10-13 13:52:21Z │
└──────────────────────┴───────┴──────────────┴─────────┴──────────────────────┘

Avertissement de sécurité

La sécurité du système repose sur les crédits du SuperLink et chaque SuperNode. Il est donc essentiel de sécuriser et stocker en toute sécurité les informations pour éviter des risques de sécurité tels que les attaques d’impersonnification de l’infrastructure de clés publiques (PKI). Le mécanisme d’authentification des nœuds implique également une interaction humaine, veuillez donc vous assurer que toutes les communications sont effectuées dans un cadre sécurisé en utilisant des méthodes de communication fiables.

Conclusion

Vous devriez maintenant avoir appris à démarrer un SuperLink Flower longue durée et un SuperNode avec l’authentification des nœuds activée. Vous devriez également connaître l’importance de la clé privée et la stocker en toute sécurité pour minimiser les risques.

Note

Veuillez consulter le Exécuter Flower à l’aide de Docker documentation pour apprendre à configurer une fédération où chaque composant s’exécute dans son propre conteneur Docker. Vous pouvez également utiliser TLS et d’autres fonctionnalités de sécurité dans Flower telles que l’implémentation d’un mécanisme d’authentification des SuperNodes.