L'apprentissage fédéré prend en charge le chiffrement homomorphique comme mesure de sécurité supplémentaire pour les données d'entraînement fédérées. Le chiffrement homomorphe est une forme de cryptographie à clé publique qui permet de calculer les données chiffrées sans les déchiffrer au préalable, ce qui signifie que les données peuvent être utilisées dans la modélisation sans être exposées au risque de découverte.
Avec le chiffrement homomorphe, les résultats des calculus restent sous forme chiffrée et lorsqu'ils sont déchiffrés, ils donnent une sortie identique à la sortie produite avec des calculus effectués sur des données non chiffrées. Il utilise une clé publique pour le chiffrement et une clé privée pour le déchiffrement.
Fonctionnement avec l'apprentissage fédéré
Le chiffrement homomorphique est une méthode de chiffrement facultative qui permet d'ajouter une sécurité et une confidentialité supplémentaires à une expérience d'apprentissage fédéré. Lorsque le chiffrement homomorphe est appliqué dans une expérience d'apprentissage fédéré, les parties envoient leurs mises à jour de modèle chiffrées de manière homomorphe à l'agrégateur. L'agrégateur ne dispose pas de la clé privée et ne peut voir que les mises à jour de modèle chiffrées de manière homomorphe. Par exemple, l'agrégateur ne peut pas effectuer d'ingénierie inverse des mises à jour de modèle pour découvrir des informations sur les données d'apprentissage des parties. L'agrégateur fusionne les mises à jour du modèle dans leur forme chiffrée, ce qui génère un modèle agrégé chiffré. Ensuite, l'agrégateur envoie le modèle agrégé chiffré aux parties participantes qui peuvent utiliser leur clé privée pour le déchiffrement et passe à la prochaine série d'entraînement. Seules les parties participantes peuvent déchiffrer les données de modèle.
Infrastructures et méthodes de fusion prises en charge
Le chiffrement entièrement homomorphique (FHE) prend en charge la méthode de fusion moyenne simple pour ces structures de modèle:
- Tensorflow
- PyTorch
- Classification Scikit-learn
- Régression Scikit-learn
Avant de commencer
Pour commencer à utiliser le chiffrement homomorphe, assurez-vous que votre expérimentation répond aux exigences suivantes:
La spécification matérielle doit être au minimum petite. En fonction du niveau de chiffrement que vous appliquez, vous pouvez avoir besoin d'une spécification matérielle plus importante pour prendre en charge la consommation de ressources causée par un chiffrement de données plus puissant. Voir le tableau des niveaux de chiffrement dans Configuration de l'agrégateur.-La spécification logicielle est
fl-rt23.1-py3.10
.FHE est pris en charge dans le client Python version 1.0.263 ou ultérieure. Toutes les parties doivent utiliser la même version de client Python .
Exigences applicables aux parties
Chaque partie doit:
- S'exécute sur un système Linux x86 .
- Configurez avec un certificat racine qui identifie une autorité de certification uniforme pour toutes les parties.
- Configurez une paire de clés publique et privée RSA avec les attributs décrits dans le tableau suivant.
- Configurez avec un certificat de la partie émise par l'autorité de certification. La clé publique RSA doit être incluse dans le certificat de la partie.
Des clés de chiffrement publiques et privées homomorphes sont générées et distribuées automatiquement et en toute sécurité entre les parties pour chaque expérience. Seules les parties participant à une expérimentation ont accès à la clé privée générée pour l'expérimentation. Pour prendre en charge le mécanisme de génération et de distribution automatique, les parties doivent être configurées avec les certificats et les clés RSA spécifiés précédemment.
Exigences relatives à la clé RSA
Attribut | Exigence |
---|---|
Taille de la clé | 4096 bits |
Exposant public | 65537 |
Mot de passe | Aucun |
Algorithme de hachage | SHA256 |
Format de fichier | Les fichiers de clés et de certificats doivent être au format "PEM" |
Configuration de l'agrégateur (admin)
Lorsque vous créez une expérimentation d'apprentissage fédéré, procédez comme suit:
- Dans l'onglet Configurer , cochez la case "Activer le chiffrement homomorphique".
- Choisissez small ou une valeur supérieure pour Hardware specification. En fonction du niveau de chiffrement que vous appliquez, vous pouvez avoir besoin d'une spécification matérielle plus importante pour prendre en charge la consommation de ressources pour le chiffrement homomorphe.
- Veillez à télécharger un modèle initial non chiffré lorsque vous sélectionnez le fichier de modèle pour Spécification du modèle.
- Sélectionnez "Moyenne simple (chiffrée)" pour la méthode Fusion. Cliquez sur Suivant.
- Cochez la case Afficher les paramètres avancés dans l'onglet Définir les hyperparamètres .
- Sélectionnez le niveau de chiffrement dans Niveau de chiffrement.
Les niveaux de chiffrement plus élevés augmentent la sécurité et la précision et nécessitent une consommation de ressources plus élevée (par exemple, calcul, mémoire, bande passante du réseau). La valeur par défaut est le niveau de chiffrement 1.
Voir le tableau suivant pour la description des niveaux de chiffrement:
Niveau | Sécurité | Précision |
---|---|---|
1 | Elevé | Bon |
2 | Elevé | Elevé |
3 | Très élevé | Bon |
4 | Très élevé | Elevé |
La sécurité est la force du chiffrement, généralement mesurée par le nombre d'opérations qu'un agresseur doit effectuer pour briser le chiffrement.
La précision est la précision des résultats du système de chiffrement. Des niveaux de précision plus élevés réduisent la perte de précision du modèle en raison du chiffrement.
Connexion à l'agrégateur (partie)
Les étapes suivantes montrent uniquement la configuration requise pour le chiffrement homomorphe. Pour un tutoriel pas à pas sur l'utilisation du chiffrement homomorphique dans l'apprentissage fédéré, voir Exemple FHE.
Pour savoir comment créer un script général de connecteur de partie de bout en bout, voir Connexion à l'agrégateur (partie).
Installez le client Python avec FHE à l'aide de la commande suivante:
pip install 'ibm_watsonx_ai[fl-rt23.1-py3.10,fl-crypto]'
Configurez la partie comme suit:
party_config = { "local_training": { "info": { "crypto": { "key_manager": { "key_mgr_info": { "distribution": { "ca_cert_file_path": "path of the root certificate file identifying the certificate authority", "my_cert_file_path": "path of the certificate file of the party issued by the certificate authority", "asym_key_file_path": "path of the RSA key file of the party" } } } } } } } }
Exécutez le script de connecteur de partie après la configuration.
Ressources supplémentaires
Rubrique parent: Apprentissage fédéré