<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>FHE on kenji.blog</title><link>http://kenji.blog/fr/tags/fhe/</link><description>Recent content in FHE on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>fr</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 11 Sep 2026 11:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/fr/tags/fhe/index.xml" rel="self" type="application/rss+xml"/><item><title>Qu'est-ce que le chiffrement homomorphe complet (FHE) ? Explication de la clé de la sécurité de nouvelle génération</title><link>http://kenji.blog/fr/p/fully-homomorphic-encryption-fhe-explained/</link><pubDate>Fri, 11 Sep 2026 11:00:00 +0900</pubDate><guid>http://kenji.blog/fr/p/fully-homomorphic-encryption-fhe-explained/</guid><description>&lt;img src="http://kenji.blog/p/fully-homomorphic-encryption-fhe-explained/img/eyecatch.jpg" alt="Featured image of post Qu'est-ce que le chiffrement homomorphe complet (FHE) ? Explication de la clé de la sécurité de nouvelle génération" />&lt;p>Alors que le cloud computing et les technologies d&amp;rsquo;IA s&amp;rsquo;imposent comme les fondations de notre société, le compromis entre la « confidentialité des données » et l&amp;rsquo;« utilisation des données » est devenu l&amp;rsquo;un des défis les plus importants. Bien qu&amp;rsquo;il y ait une demande croissante pour que les IA analysent des données hautement confidentielles dans le cloud, telles que des données médicales, des informations financières ou des données biométriques personnelles, de nombreuses entreprises hésitent à envoyer leurs données à l&amp;rsquo;extérieur en raison de préoccupations liées à la sécurité.&lt;/p>
&lt;p>Les technologies de chiffrement traditionnelles (telles qu&amp;rsquo;AES et RSA) excellent à protéger les données stockées (Data at Rest) et les données en transit sur le réseau (Data in Transit). Cependant, &lt;strong>lorsque le serveur effectue des traitements (calculs)&lt;/strong> sur les données, comme des recherches ou de l&amp;rsquo;apprentissage automatique (Data in Use), &lt;strong>il est nécessaire de déchiffrer au préalable les données pour les ramener en texte clair&lt;/strong>. Si le serveur est piraté au moment du déchiffrement, ou si un administrateur interne malveillant jette un coup d&amp;rsquo;œil aux données, cela conduit directement à une fuite d&amp;rsquo;informations.&lt;/p>
&lt;p>La technologie de rêve qui surmonte cette faiblesse fondamentale du « déchiffrement lors du traitement » est le &lt;strong>Chiffrement Homomorphe Complet (Fully Homomorphic Encryption : FHE)&lt;/strong>. L&amp;rsquo;utilisation du FHE permet d&amp;rsquo;effectuer des calculs sur les données tout en les gardant chiffrées, sans jamais les déchiffrer, et de renvoyer uniquement le texte chiffré du résultat au client.&lt;/p>
&lt;p>Dans cet article, nous expliquerons en profondeur le FHE, clé de la sécurité de nouvelle génération, de son concept à son histoire, en passant par la percée révolutionnaire de Craig Gentry, ses bases mathématiques (comme le Ring-LWE), son plus grand défi qu&amp;rsquo;est le « bruit » et sa solution (le bootstrapping), jusqu&amp;rsquo;aux dernières bibliothèques d&amp;rsquo;implémentation.&lt;/p>
&lt;hr>
&lt;h2 id="1-quest-ce-que-le-chiffrement-homomorphe--concepts-de-base">1. Qu&amp;rsquo;est-ce que le chiffrement homomorphe ? Concepts de base
&lt;/h2>&lt;p>« Homomorphe » est un terme d&amp;rsquo;algèbre qui désigne la propriété de pouvoir mapper des ensembles ayant une certaine structure tout en préservant la structure de leurs opérations. Dans la théorie de la cryptographie, l&amp;rsquo;« homomorphisme » est la propriété selon laquelle &lt;strong>les opérations dans l&amp;rsquo;espace du texte clair correspondent aux opérations dans l&amp;rsquo;espace du texte chiffré&lt;/strong>.&lt;/p>
&lt;p>Exprimé par une formule mathématique simple, soit $E(\cdot)$ la fonction de chiffrement et $D(\cdot)$ la fonction de déchiffrement pour les textes clairs $m_1$ et $m_2$. Si $\circ$ est une opération (comme l&amp;rsquo;addition ou la multiplication) sur les textes clairs, et $\diamond$ une opération sur les textes chiffrés, la relation suivante est établie :&lt;/p>
$$ D(E(m_1) \diamond E(m_2)) = m_1 \circ m_2 $$
&lt;p>En d&amp;rsquo;autres termes, déchiffrer le résultat de l&amp;rsquo;application d&amp;rsquo;une certaine opération $\diamond$ sur les textes chiffrés $E(m_1)$ et $E(m_2)$ donnera exactement le même résultat que l&amp;rsquo;opération $\circ$ appliquée sur les textes clairs d&amp;rsquo;origine.&lt;/p>
&lt;h3 id="flux-de-données-dans-le-cloud-computing">Flux de données dans le cloud computing
&lt;/h3>&lt;p>L&amp;rsquo;architecture de traitement dans le cloud utilisant le FHE est complètement différente des architectures traditionnelles. Le diagramme ci-dessous illustre le flux de traitement de données sécurisé tirant parti du FHE.&lt;/p>
&lt;div class="mermaid">graph TD
A["Client (Détient la clé privée)"] -->|1. Chiffre le texte clair x : E(x)| B["Serveur Cloud (Uniquement données chiffrées)"]
B -->|2. Applique la fonction f en gardant le chiffrement : E(f(x))| B
B -->|3. Texte chiffré du résultat du calcul E(y)| A
A -->|4. Déchiffre avec la clé privée : y = f(x)| A
style A fill:#d4edda,stroke:#28a745
style B fill:#f8d7da,stroke:#dc3545&lt;/div>
&lt;p>Le serveur reçoit les données chiffrées $E(x)$, mais ne possédant pas la clé privée, il lui est absolument impossible d&amp;rsquo;en connaître le contenu. Cependant, en utilisant les propriétés du FHE, il peut appliquer une fonction $f$ (par exemple, un modèle d&amp;rsquo;inférence d&amp;rsquo;apprentissage automatique) au texte chiffré pour générer $E(f(x))$. Le client le reçoit et le déchiffre avec sa propre clé privée, obtenant ainsi le résultat souhaité $y = f(x)$.&lt;/p>
&lt;hr>
&lt;h2 id="2-lhistoire-de-lévolution-du-chiffrement-homomorphe--phe-she-fhe">2. L&amp;rsquo;histoire de l&amp;rsquo;évolution du chiffrement homomorphe : PHE, SHE, FHE
&lt;/h2>&lt;p>Le chiffrement homomorphe n&amp;rsquo;a pas atteint sa forme « complète » actuelle en une seule fois. Il est largement classé en trois étapes selon le type et le nombre d&amp;rsquo;opérations réalisables.&lt;/p>
&lt;h3 id="chiffrement-partiellement-homomorphe-phe--partially-homomorphic-encryption">Chiffrement Partiellement Homomorphe (PHE : Partially Homomorphic Encryption)
&lt;/h3>&lt;p>Le PHE est un schéma de chiffrement permettant d&amp;rsquo;effectuer &lt;strong>soit des additions, soit des multiplications&lt;/strong>, de manière illimitée. En réalité, des chiffrements possédant cette propriété existent depuis longtemps.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Chiffrement RSA (homomorphisme vis-à-vis de la multiplication)&lt;/strong>
Le chiffrement RSA possède involontairement un homomorphisme multiplicatif. Soit les textes clairs $m_1, m_2$ et la clé publique $(e, N)$ :
$$ E(m_1) = m_1^e \pmod N $$
$$ E(m_2) = m_2^e \pmod N $$
En les multipliant :
$$ E(m_1) \times E(m_2) = (m_1 \cdot m_2)^e \pmod N = E(m_1 \times m_2) $$
Ainsi, la multiplication des textes chiffrés correspond à la multiplication des textes clairs.&lt;/li>
&lt;li>&lt;strong>Chiffrement de Paillier (homomorphisme vis-à-vis de l&amp;rsquo;addition)&lt;/strong>
Inventé en 1999, le chiffrement de Paillier possède un homomorphisme pour l&amp;rsquo;addition. Il est utilisé de manière pratique dans des applications telles que le vote électronique (où les votes chiffrés sont comptés, et seul le résultat final est déchiffré).&lt;/li>
&lt;/ul>
&lt;h3 id="chiffrement-quelque-peu-homomorphe-she--somewhat-homomorphic-encryption">Chiffrement Quelque Peu Homomorphe (SHE : Somewhat Homomorphic Encryption)
&lt;/h3>&lt;p>C&amp;rsquo;est une méthode permettant d&amp;rsquo;exécuter &lt;strong>à la fois&lt;/strong> des additions et des multiplications, mais avec &lt;strong>une limite sur le nombre d&amp;rsquo;opérations (la profondeur du circuit)&lt;/strong>. En raison de l&amp;rsquo;accumulation du « bruit » (expliqué plus tard), effectuer plus d&amp;rsquo;un certain nombre de multiplications rend le déchiffrement impossible. Le chiffrement BGN (Boneh-Goh-Nissim) de 2005 en est un exemple, mais il a ses limites pour effectuer des calculs pratiques complexes (comme le deep learning).&lt;/p>
&lt;h3 id="chiffrement-homomorphe-complet-fhe--fully-homomorphic-encryption">Chiffrement Homomorphe Complet (FHE : Fully Homomorphic Encryption)
&lt;/h3>&lt;p>Il s&amp;rsquo;agit d&amp;rsquo;un schéma de chiffrement permettant d&amp;rsquo;effectuer à la fois l&amp;rsquo;addition et la multiplication &lt;strong>un nombre illimité de fois&lt;/strong>. Semblable à la complétude de Turing en théorie de l&amp;rsquo;information, pouvoir combiner infiniment des additions (équivalentes au XOR) et des multiplications (équivalentes au AND) signifie qu&amp;rsquo;en principe, n&amp;rsquo;importe quelle fonction ou algorithme calculable peut être exécuté tout en restant chiffré.&lt;/p>
&lt;p>Le FHE a longtemps été considéré comme le « Saint Graal de la cryptographie », et certains disaient même qu&amp;rsquo;il pourrait être irréalisable. Cependant, en 2009, &lt;strong>Craig Gentry&lt;/strong>, alors étudiant en doctorat à l&amp;rsquo;Université de Stanford, a proposé le premier schéma FHE utilisant les réseaux idéaux (Ideal Lattices), bouleversant ainsi le monde.&lt;/p>
&lt;hr>
&lt;h2 id="3-les-bases-mathématiques-du-fhe--le-problème-lwe-et-ring-lwe">3. Les bases mathématiques du FHE : le problème LWE et Ring-LWE
&lt;/h2>&lt;p>La plupart des schémas FHE actuellement dominants sont basés sur le &lt;strong>problème LWE (Learning With Errors)&lt;/strong>, un défi mathématique de la « cryptographie fondée sur les réseaux (Lattice-based Cryptography) », également connue sous le nom de cryptographie post-quantique.&lt;/p>
&lt;h3 id="compréhension-intuitive-du-problème-lwe">Compréhension intuitive du problème LWE
&lt;/h3>&lt;p>Résoudre un système d&amp;rsquo;équations linéaires est facile en utilisant l&amp;rsquo;élimination de Gauss ou des méthodes similaires.&lt;/p>
$$ \begin{cases} 3s_1 + 4s_2 + 2s_3 \equiv 12 \pmod{17} \\ 1s_1 + 9s_2 + 5s_3 \equiv 8 \pmod{17} \\ \vdots \end{cases} $$
&lt;p>Mais que se passe-t-il si l&amp;rsquo;on ajoute une très petite « erreur (bruit) aléatoire » $e$ au résultat de ces équations ?&lt;/p>
$$ \begin{cases} 3s_1 + 4s_2 + 2s_3 + e_1 \equiv 13 \pmod{17} \\ 1s_1 + 9s_2 + 5s_3 + e_2 \equiv 7 \pmod{17} \\ \vdots \end{cases} $$
&lt;p>Le simple ajout de cette erreur $e$ transforme le problème de la découverte du vecteur de variables secrètes $\vec{s}$ en un problème NP-difficile, complexe à déchiffrer même en utilisant les supercalculateurs actuels ou les ordinateurs quantiques. C&amp;rsquo;est le problème LWE.&lt;/p>
&lt;h3 id="le-problème-ring-lwe-rlwe">Le problème Ring-LWE (RLWE)
&lt;/h3>&lt;p>Comme le problème LWE standard implique des opérations matricielles, la taille des clés est extrêmement importante (atteignant parfois des gigaoctets) et l&amp;rsquo;efficacité des calculs est faible. Pour résoudre ce problème, le &lt;strong>problème Ring-LWE (RLWE)&lt;/strong> utilisant des opérations sur des anneaux de polynômes a été introduit.&lt;/p>
&lt;p>Dans le RLWE, les éléments appartiennent à l&amp;rsquo;anneau polynomial $R_q = \mathbb{Z}_q[x] / (x^N + 1)$ (où $N$ est une puissance de 2 et $q$ est un nombre premier servant de modulo).
Soit $s(x)$ le polynôme représentant la clé privée, $a(x)$ un polynôme aléatoire et $e(x)$ un petit polynôme de bruit, la clé publique sera la paire suivante :&lt;/p>
$$ (a(x), b(x)) \quad \text{where} \quad b(x) = -a(x) \cdot s(x) + e(x) \pmod q $$
&lt;p>Lors du chiffrement, on utilise les propriétés de ces polynômes pour encoder le texte clair $m(x)$ et générer le texte chiffré.&lt;/p>
&lt;hr>
&lt;h2 id="4-le-plus-grand-obstacle--le--bruit--et-le-bootstrapping-de-gentry">4. Le plus grand obstacle : le « bruit » et le Bootstrapping de Gentry
&lt;/h2>&lt;p>Le concept le plus important pour comprendre le FHE est la &lt;strong>« gestion du bruit »&lt;/strong>.&lt;/p>
&lt;p>Dans les chiffrements basés sur LWE/RLWE, on introduit intentionnellement un petit « bruit (erreur) » pour garantir la sécurité.
En termes généraux, le processus de déchiffrement d&amp;rsquo;un texte chiffré $c$ d&amp;rsquo;un texte clair $m$ peut être exprimé par l&amp;rsquo;équation suivante :&lt;/p>
$$ D(c) = (c \cdot s) \pmod q = m + \text{noise} $$
&lt;p>Lors du déchiffrement, le texte clair correct $m$ est obtenu en éliminant ce &lt;code>noise&lt;/code> par un processus tel que l&amp;rsquo;arrondi. Cependant, effectuer des opérations homomorphes (en particulier la multiplication) entre des textes chiffrés amplifie considérablement ce bruit.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Addition homomorphe&lt;/strong> : Le bruit augmente de manière additive ($e_1 + e_2$). C&amp;rsquo;est une augmentation relativement modérée.&lt;/li>
&lt;li>&lt;strong>Représentation mathématique de l&amp;rsquo;homomorphisme par addition homomorphe&lt;/strong> :
$$ E(m_1) \oplus E(m_2) = E(m_1 + m_2) $$&lt;/li>
&lt;li>&lt;strong>Multiplication homomorphe&lt;/strong> : Le bruit explose de manière multiplicative (car il implique des termes comme $e_1 \times e_2$). Après seulement quelques multiplications, le bruit dépasse le seuil $q/2$, ce qui rend l&amp;rsquo;arrondi correct impossible et entraîne un échec de déchiffrement.&lt;/li>
&lt;li>&lt;strong>Représentation mathématique de l&amp;rsquo;homomorphisme par multiplication homomorphe&lt;/strong> :
$$ E(m_1) \otimes E(m_2) = E(m_1 \times m_2) $$&lt;/li>
&lt;/ul>
&lt;p>C&amp;rsquo;est la raison pour laquelle le FHE est resté longtemps irréalisable, se limitant au SHE (avec un nombre d&amp;rsquo;opérations restreint).&lt;/p>
&lt;h3 id="la-magie-du-bootstrapping">La magie du Bootstrapping
&lt;/h3>&lt;p>La contribution géniale de Craig Gentry a été d&amp;rsquo;inventer une méthode de réduction de bruit appelée &lt;strong>« bootstrapping »&lt;/strong>. Ce fut un changement de paradigme en cryptographie.&lt;/p>
&lt;p>Intuitivement, il s&amp;rsquo;agit d&amp;rsquo;une opération où l&amp;rsquo;« on &amp;lsquo;déchiffre&amp;rsquo; le texte chiffré tout en le gardant à l&amp;rsquo;état chiffré pour le nettoyer et le placer dans un nouveau texte chiffré avant qu&amp;rsquo;il ne soit submergé de bruit et ne se corrompe ».&lt;/p>
&lt;ol>
&lt;li>Supposons qu&amp;rsquo;il y ait un texte chiffré avec un bruit élevé, $C_{noisy}$.&lt;/li>
&lt;li>Le client remet au préalable au serveur sa clé privée $sk$ « chiffrée avec la clé publique » $E_{pk}(sk)$ (appelée clé de bootstrapping).&lt;/li>
&lt;li>Le serveur exécute homomorphiquement un &lt;strong>circuit de déchiffrement (Decryption Circuit)&lt;/strong> sur $C_{noisy}$.&lt;/li>
&lt;li>Concrètement, il effectue un « déchiffrement dans l&amp;rsquo;espace chiffré » sur $E_{pk}(C_{noisy})$ en utilisant $E_{pk}(sk)$.&lt;/li>
&lt;li>Bien que ce circuit de déchiffrement lui-même soit une opération homomorphe et génère donc un nouveau bruit, le bruit du nouveau texte chiffré produit, $C_{fresh}$, est réinitialisé à un « niveau fixe » constant.&lt;/li>
&lt;/ol>
&lt;div class="mermaid">graph LR
A["Texte chiffré à haut bruit C_noisy"] --> B["Circuit de déchiffrement homomorphe (Eval_Dec)"]
C["Clé privée chiffrée E(sk)"] --> B
B --> D["Texte chiffré à faible bruit C_fresh"]
style B fill:#ffeeba,stroke:#ffc107&lt;/div>
&lt;p>En exécutant périodiquement ce bootstrapping au cours des calculs, il est théoriquement devenu possible de calculer des circuits d&amp;rsquo;une profondeur infinie (réalisant ainsi le FHE). Cependant, dans le schéma initial de Gentry, le coût de calcul du processus de bootstrapping était désespérément élevé, prenant de quelques dizaines de minutes à plusieurs heures pour chaque exécution.&lt;/p>
&lt;hr>
&lt;h2 id="5-générations-de-fhe-et-évolution-des-principaux-schémas">5. Générations de FHE et évolution des principaux schémas
&lt;/h2>&lt;p>Afin de rendre le FHE pratique, les cryptographes du monde entier ont rivalisé pour améliorer les algorithmes. Actuellement, le FHE est principalement classé en quatre générations ou familles.&lt;/p>
&lt;h3 id="2ème-génération--opérations-exactes-sur-les-entiers-bgv-bfv">2ème Génération : Opérations exactes sur les entiers (BGV, BFV)
&lt;/h3>&lt;p>Apparus entre 2011 et 2012, il s&amp;rsquo;agit des schémas &lt;strong>BGV (Brakerski-Gentry-Vaikuntanathan)&lt;/strong> et &lt;strong>BFV (Brakerski/Fan-Vercauteren)&lt;/strong>. Ils sont basés sur le RLWE et sont adaptés à l&amp;rsquo;arithmétique modulaire sur les nombres entiers (calculs exacts).
Leur particularité est de supporter des techniques de traitement par lots (Batching) telles que SIMD (Single Instruction, Multiple Data), ce qui permet de regrouper des milliers d&amp;rsquo;emplacements de données dans un seul énorme texte chiffré polynomial pour effectuer des calculs parallèles en une seule fois.&lt;/p>
&lt;h3 id="3ème-génération--accélération-du-bootstrapping-gsw-fhew-tfhe">3ème Génération : Accélération du Bootstrapping (GSW, FHEW, TFHE)
&lt;/h3>&lt;p>Le schéma &lt;strong>GSW (Gentry-Sahai-Waters)&lt;/strong> de 2013 a simplifié la structure du FHE. Et son développement a conduit au &lt;strong>TFHE (Fast Fully Homomorphic Encryption over the Torus)&lt;/strong>, qui est l&amp;rsquo;un des schémas dominants aujourd&amp;rsquo;hui.
La caractéristique du TFHE est que son bootstrapping est extrêmement rapide (de l&amp;rsquo;ordre de la milliseconde). Il excelle dans les opérations au niveau des portes (circuits logiques tels que AND, XOR), et la taille de son texte chiffré étant relativement petite, il est adapté à l&amp;rsquo;évaluation rapide de n&amp;rsquo;importe quel circuit logique.&lt;/p>
&lt;h3 id="4ème-génération--spécialisation-dans-les-calculs-approchés-et-lapprentissage-automatique-ckks">4ème Génération : Spécialisation dans les calculs approchés et l&amp;rsquo;apprentissage automatique (CKKS)
&lt;/h3>&lt;p>Le schéma &lt;strong>CKKS (Cheon-Kim-Kim-Song)&lt;/strong> proposé par Cheon et al. en 2017 est actuellement considéré comme la technologie ultime pour la protection de la vie privée dans l&amp;rsquo;IA et l&amp;rsquo;apprentissage automatique.
Contrairement aux FHE précédents qui se concentraient sur les « calculs entiers exacts », CKKS supporte les &lt;strong>« calculs approchés de nombres à virgule flottante »&lt;/strong> tout en conservant le chiffrement. Il offre des performances écrasantes dans les calculs de nombres réels où de petites erreurs sont tolérées, comme la formation ou l&amp;rsquo;inférence des réseaux de neurones.&lt;/p>
&lt;p>Le tableau ci-dessous résume comment choisir un schéma en fonction de l&amp;rsquo;objectif.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Nom du Schéma&lt;/th>
&lt;th style="text-align:left">Type de Données Préféré&lt;/th>
&lt;th style="text-align:left">Cas d&amp;rsquo;Utilisation Recommandés&lt;/th>
&lt;th style="text-align:left">Caractéristiques&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>BFV / BGV&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Entiers (Integer)&lt;/td>
&lt;td style="text-align:left">Calculs statistiques exacts, agrégation de données financières, recherche dans des bases de données&lt;/td>
&lt;td style="text-align:left">Haut débit grâce au traitement par lots SIMD&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>CKKS&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Nombres réels (Real/Complex)&lt;/td>
&lt;td style="text-align:left">Apprentissage automatique (DNN, régression logistique), traitement du signal&lt;/td>
&lt;td style="text-align:left">Accélération par calculs approchés, redimensionnement&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>TFHE&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Valeurs booléennes (Boolean)&lt;/td>
&lt;td style="text-align:left">N&amp;rsquo;importe quel circuit logique, recherche de chaînes de caractères, évaluation de fonctions non linéaires&lt;/td>
&lt;td style="text-align:left">Bootstrapping ultra-rapide (de l&amp;rsquo;ordre de la milliseconde)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="6-pratique--bibliothèques-fhe-et-code-conceptuel">6. Pratique : Bibliothèques FHE et code conceptuel
&lt;/h2>&lt;p>Aujourd&amp;rsquo;hui, il existe de nombreuses bibliothèques open-source permettant d&amp;rsquo;utiliser le FHE sans nécessiter une connaissance approfondie de la cryptographie.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Microsoft SEAL (Simple Encrypted Arithmetic Library)&lt;/strong> : Une bibliothèque C++ supportant BFV, BGV et CKKS. C&amp;rsquo;est l&amp;rsquo;une des normes de l&amp;rsquo;industrie. Son binding Python, &lt;strong>TenSEAL&lt;/strong>, est très populaire parmi les ingénieurs en IA.&lt;/li>
&lt;li>&lt;strong>Zama (Concrete)&lt;/strong> : Un framework basé sur TFHE. Il peut être écrit en Rust/Python et fournit la fonctionnalité de compiler des modèles PyTorch existants pour les exécuter sur le FHE (Concrete ML).&lt;/li>
&lt;li>&lt;strong>OpenFHE&lt;/strong> : Le successeur de PALISADE, c&amp;rsquo;est une bibliothèque C++ complète qui supporte tous les principaux schémas.&lt;/li>
&lt;/ul>
&lt;h3 id="exemple-de-programmation-fhe-avec-python-tenseal">Exemple de programmation FHE avec Python (TenSEAL)
&lt;/h3>&lt;p>Ici, nous présentons un exemple conceptuel de code Python utilisant le schéma CKKS pour additionner et multiplier des vecteurs de nombres réels tout en les gardant chiffrés.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">tenseal&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">ts&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 1. Configuration du contexte (incluant la génération des clés)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Utilise le schéma CKKS et définit le degré du polynôme à 8192&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">context&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">context&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">SCHEME_TYPE&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">CKKS&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">poly_modulus_degree&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">8192&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">coeff_mod_bit_sizes&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">60&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">40&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">40&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">60&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">context&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">generate_galois_keys&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">context&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">global_scale&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="o">**&lt;/span>&lt;span class="mi">40&lt;/span> &lt;span class="c1"># Facteur d&amp;#39;échelle pour les nombres réels&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2. Côté client : Chiffrement des données&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">vector1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mf">1.5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">vector2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mf">2.0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Convertit les vecteurs en texte clair en textes chiffrés (initialement exécuté côté client)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc_v1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ckks_vector&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">context&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">vector1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc_v2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ckks_vector&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">context&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">vector2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 3. Côté serveur : Opérations tout en gardant le chiffrement (Protection des Data in Use)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Le serveur ne connaît pas le texte clair, mais peut effectuer des additions et des multiplications&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc_add&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_v1&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">enc_v2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc_mul&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_v1&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">enc_v2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 4. Côté client : Déchiffrement des résultats&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Seul le client possédant la clé privée peut voir le résultat&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">res_add&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_add&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">decrypt&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">res_mul&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_mul&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">decrypt&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Résultat de l&amp;#39;addition déchiffrée : &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">res_add&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Exemple de sortie : [3.5000001, 5.5000001, 7.5000002] (Comprend de légères erreurs dues au calcul approché)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Résultat de la multiplication déchiffrée : &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">res_mul&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Exemple de sortie : [3.0000002, 7.5000005, 14.0000003]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Comme on peut le voir dans le code ci-dessus, les opérateurs Python normaux comme &lt;code>enc_v1 + enc_v2&lt;/code> peuvent être surchargés pour écrire des calculs entre des textes chiffrés de manière intuitive. Du côté du serveur, l&amp;rsquo;opération vectorielle est réalisée sans jamais connaître le contenu du vecteur.&lt;/p>
&lt;hr>
&lt;h2 id="7-les-défis-du-fhe--performances-et-accélération-matérielle">7. Les défis du FHE : Performances et Accélération Matérielle
&lt;/h2>&lt;p>Le FHE offre une sécurité théoriquement parfaite, mais son plus grand défi en matière d&amp;rsquo;application pratique est la &lt;strong>« surcharge de performances »&lt;/strong>.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Surcharge de calcul&lt;/strong> : Comparés aux calculs en texte clair, les calculs sur les textes chiffrés sont des milliers à des dizaines de milliers de fois plus lents sur un CPU. La multiplication de polynômes et le bootstrapping nécessitent d&amp;rsquo;énormes calculs de FFT (Transformée de Fourier Rapide) et de NTT (Transformée Théorique des Nombres).&lt;/li>
&lt;li>&lt;strong>Expansion de la taille des données (Ciphertext Expansion)&lt;/strong> : Quelques octets de texte clair peuvent devenir plusieurs mégaoctets une fois chiffrés. Cela exerce une forte pression sur la bande passante de la mémoire et du réseau.&lt;/li>
&lt;/ol>
&lt;h3 id="approches-de-résolution-basées-sur-le-matériel">Approches de résolution basées sur le matériel
&lt;/h3>&lt;p>Pour surmonter cette surcharge, des accélérateurs matériels dédiés au FHE (supportant ASIC, FPGA, GPU) sont en cours de développement dans le monde entier.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Accélération GPU&lt;/strong> : Des efforts sont en cours pour paralléliser les calculs NTT et le bootstrapping à l&amp;rsquo;aide de GPU puissants de NVIDIA et d&amp;rsquo;autres, rapportant des accélérations de plusieurs dizaines de fois par rapport aux implémentations logicielles (par exemple : 100x.ai, le backend CUDA TFHE-rs de Zama).&lt;/li>
&lt;li>&lt;strong>Projet DARPA DPRIVE&lt;/strong> : La Defense Advanced Research Projects Agency (DARPA) mène un projet de développement matériel dédié appelé « DPRIVE (Data Protection in Virtual Environments) » visant à ramener la vitesse de calcul du FHE à un niveau équivalent à celui du traitement en texte clair (une surcharge inférieure à 10 fois), avec la participation d&amp;rsquo;entreprises telles qu&amp;rsquo;Intel, Microsoft et Intellectual Ventures.&lt;/li>
&lt;li>&lt;strong>L&amp;rsquo;émergence du FPU (FHE Processing Unit)&lt;/strong> : Des startups comme Cornami et Optalysys se lancent dans le développement de puces dédiées au FHE utilisant l&amp;rsquo;informatique optique ou des architectures en silicium spécialisées.&lt;/li>
&lt;/ul>
&lt;p>Dans un avenir proche, tout comme pour les NPU (Neural Processing Unit) en IA, nous pourrions voir une époque où les « FPU » deviendront des équipements standard dans les serveurs et les infrastructures cloud.&lt;/p>
&lt;hr>
&lt;h2 id="8-cas-dutilisation-attendus">8. Cas d&amp;rsquo;utilisation attendus
&lt;/h2>&lt;p>Maintenant que le FHE atteint des vitesses pratiques, des innovations disruptives sont attendues dans les domaines suivants :&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Protection de la vie privée dans le domaine médical et l&amp;rsquo;analyse génomique&lt;/strong> :
En utilisant le FHE pour former l&amp;rsquo;IA dans le cloud sur des dossiers médicaux et des données ADN de patients provenant de plusieurs hôpitaux tout en conservant les données chiffrées, il est possible de développer des modèles de diagnostic du cancer très précis et de nouveaux médicaments sans violer les lois sur la vie privée (comme HIPAA ou le RGPD).&lt;/li>
&lt;li>&lt;strong>Détection des fraudes et lutte contre le blanchiment d&amp;rsquo;argent (AML) dans les institutions financières&lt;/strong> :
Des banques concurrentes pourraient effectuer des analyses interbancaires en croisant leurs données à l&amp;rsquo;état chiffré, sans révéler les informations des comptes de leurs clients ou l&amp;rsquo;historique de leurs transactions, ce qui permettrait de détecter d&amp;rsquo;énormes réseaux de transferts frauduleux.&lt;/li>
&lt;li>&lt;strong>API d&amp;rsquo;inférence d&amp;rsquo;IA sécurisée (MaaS : Model as a Service)&lt;/strong> :
Les utilisateurs chiffrent leur propre voix, l&amp;rsquo;image de leur visage ou leurs requêtes avant de les envoyer à des services d&amp;rsquo;IA (tels que des LLM comme ChatGPT). Le fournisseur d&amp;rsquo;IA génère une réponse sans jamais connaître l&amp;rsquo;entrée de l&amp;rsquo;utilisateur, et la renvoie sous forme de texte chiffré. Cela dissipe complètement la crainte que « l&amp;rsquo;IA apprenne ou s&amp;rsquo;approprie des informations personnelles ».&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="9-conclusion--lavenir-de-la-cryptographie-se-dirige-vers-le--calcul-invisible-">9. Conclusion : L&amp;rsquo;avenir de la cryptographie se dirige vers le « calcul invisible »
&lt;/h2>&lt;p>Tout comme l&amp;rsquo;invention de la cryptographie à clé publique (RSA) dans les années 1970 a rendu possible des communications sécurisées sur Internet (comme le HTTPS), l&amp;rsquo;invention du FHE par Craig Gentry constitue l&amp;rsquo;une des étapes les plus importantes de l&amp;rsquo;histoire de la cryptographie.&lt;/p>
&lt;p>Aujourd&amp;rsquo;hui, le Chiffrement Homomorphe Complet (FHE) est sorti de la théorie des laboratoires, et des entreprises telles que Microsoft, IBM, Intel, Google et de nombreuses startups se font une concurrence féroce pour le rendre pratique. Bien que des défis liés aux coûts de calcul et à la taille des données subsistent, grâce au raffinement des algorithmes et à l&amp;rsquo;évolution des accélérateurs matériels, les performances continuent de s&amp;rsquo;améliorer à un rythme dépassant la loi de Moore.&lt;/p>
&lt;p>Dans quelques années, « effectuer des calculs sur des données tout en les gardant chiffrées » ne sera plus quelque chose de spécial, mais deviendra une bonne pratique standard en matière de protection des données dans les services cloud. Le FHE est la clé de la sécurité de nouvelle génération qui réalise &lt;strong>l&amp;rsquo;équilibre ultime entre la vie privée et l&amp;rsquo;utilisation des données&lt;/strong> dans une société axée sur les données.&lt;/p></description></item></channel></rss>