<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Security on kenji.blog</title><link>http://kenji.blog/fr/categories/security/</link><description>Recent content in Security on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>fr</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 11 Sep 2026 21:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/fr/categories/security/index.xml" rel="self" type="application/rss+xml"/><item><title>L'intuition mathématique de la cryptographie basée sur les réseaux (Lattice-based cryptography)</title><link>http://kenji.blog/fr/p/lattice-based-cryptography-math-intuition/</link><pubDate>Fri, 11 Sep 2026 21:00:00 +0900</pubDate><guid>http://kenji.blog/fr/p/lattice-based-cryptography-math-intuition/</guid><description>&lt;img src="http://kenji.blog/p/lattice-based-cryptography-math-intuition/img/eyecatch.jpg" alt="Featured image of post L'intuition mathématique de la cryptographie basée sur les réseaux (Lattice-based cryptography)" />&lt;h1 id="1-introduction--laube-de-la-cryptographie-post-quantique-pqc-et-lessor-de-la-cryptographie-basée-sur-les-réseaux">1. Introduction : L&amp;rsquo;aube de la cryptographie post-quantique (PQC) et l&amp;rsquo;essor de la cryptographie basée sur les réseaux
&lt;/h1>&lt;p>L&amp;rsquo;infrastructure numérique de la société moderne repose sur des technologies de cryptographie à clé publique telles que le chiffrement RSA et la cryptographie sur les courbes elliptiques (ECC). Ces méthodes cryptographiques basent leur sécurité sur la difficulté mathématique de problèmes tels que le &amp;ldquo;problème de la factorisation en nombres premiers&amp;rdquo; ou le &amp;ldquo;problème du logarithme discret&amp;rdquo;, qui sont considérés comme impossibles à résoudre efficacement (nécessitant un temps exponentiel) par les ordinateurs classiques conventionnels.&lt;/p>
&lt;p>Cependant, en 1994, l&amp;rsquo;algorithme de Shor, publié par Peter Shor, a provoqué une onde de choc dans le monde de la cryptographie. Cet algorithme a prouvé mathématiquement qu&amp;rsquo;une fois qu&amp;rsquo;un ordinateur quantique à grande échelle sera réalisé, il pourra résoudre les problèmes de factorisation en nombres premiers et de logarithme discret en un temps polynomial. Cela signifie que la cryptographie à clé publique largement utilisée aujourd&amp;rsquo;hui deviendra complètement décryptable à l&amp;rsquo;avenir.&lt;/p>
&lt;p>Pour contrer cette &amp;ldquo;menace quantique (Quantum Threat)&amp;rdquo;, il est devenu urgent de rechercher de nouvelles méthodes cryptographiques difficiles à décrypter, même avec un ordinateur quantique. C&amp;rsquo;est le domaine appelé &amp;ldquo;Cryptographie Post-Quantique (Post-Quantum Cryptography : PQC)&amp;rdquo; ou &amp;ldquo;Cryptographie résistante aux ordinateurs quantiques&amp;rdquo;.&lt;/p>
&lt;p>Il existe plusieurs candidats prometteurs pour la PQC, tels que la cryptographie basée sur les fonctions de hachage, sur les codes, sur des polynômes multivariés et sur les isogénies. Parmi eux, celle qui attire actuellement le plus l&amp;rsquo;attention et qui est au cœur du processus de standardisation PQC par le NIST (Institut national des normes et de la technologie des États-Unis) est la &amp;ldquo;cryptographie basée sur les réseaux (Lattice-based cryptography)&amp;rdquo;. Comparée à d&amp;rsquo;autres méthodes, la cryptographie basée sur les réseaux se distingue par une vitesse de traitement très élevée pour le chiffrement et le déchiffrement. De plus, elle possède une caractéristique remarquable en théorie cryptographique : une preuve de sécurité extrêmement solide basée sur la réduction de la &amp;ldquo;complexité dans le pire des cas (Worst-case complexity)&amp;rdquo; à la &amp;ldquo;complexité en moyenne (Average-case complexity)&amp;rdquo;.&lt;/p>
&lt;p>Dans cet article, nous partirons de la définition mathématique du &amp;ldquo;réseau (Lattice)&amp;rdquo; qui est à la base de cette cryptographie, pour expliquer en profondeur les problèmes difficiles sur les réseaux tels que le SVP (Problème du vecteur le plus court) et le CVP (Problème du vecteur le plus proche), ainsi que le problème LWE (Learning With Errors) qui est le cœur de la cryptographie moderne sur les réseaux. Nous utiliserons des formules mathématiques, des intuitions géométriques et des exemples numériques concrets.&lt;/p>
&lt;h1 id="2-définition-mathématique-et-intuition-géométrique-du-réseau-lattice">2. Définition mathématique et intuition géométrique du réseau (Lattice)
&lt;/h1>&lt;h2 id="21-espace-vectoriel-et-réseau">2.1 Espace vectoriel et réseau
&lt;/h2>&lt;p>En mathématiques, un &amp;ldquo;réseau (Lattice)&amp;rdquo; est un ensemble de points discrets disposés de manière régulière dans un espace vectoriel réel à $n$ dimensions $\mathbb{R}^n$. Il ressemble à un espace vectoriel (Vector Space) étudié en algèbre linéaire, mais il présente une différence cruciale. Alors qu&amp;rsquo;un espace vectoriel est un espace continu représenté par des combinaisons linéaires de vecteurs de base avec des &amp;ldquo;coefficients réels&amp;rdquo;, un réseau est un espace discret représenté par des combinaisons linéaires de vecteurs de base avec des &amp;ldquo;coefficients entiers&amp;rdquo;.&lt;/p>
&lt;p>Donnons une définition mathématique rigoureuse. Considérons $n$ vecteurs linéairement indépendants ($n \le m$) $\mathbf{b}_1, \mathbf{b}_2, \dots, \mathbf{b}_n$ dans un espace vectoriel réel à $m$ dimensions $\mathbb{R}^m$. La matrice dont les colonnes sont ces vecteurs est notée $B = [\mathbf{b}_1, \mathbf{b}_2, \dots, \mathbf{b}_n] \in \mathbb{R}^{m \times n}$. On appelle $B$ la &amp;ldquo;base (Basis)&amp;rdquo; du réseau.&lt;/p>
&lt;p>Le réseau $\mathcal{L}(B)$ généré par cette base $B$ est défini comme suit :&lt;/p>
$$
\mathcal{L}(B) = \left\{ \sum_{i=1}^{n} x_i \mathbf{b}_i \mathrel{\bigg|} x_i \in \mathbb{Z} \right\} = \{ B \mathbf{x} \mid \mathbf{x} \in \mathbb{Z}^n \}
$$
&lt;p>Ce qui est important ici, c&amp;rsquo;est que les coefficients $x_i$ sont restreints aux entiers $\mathbb{Z}$ et non aux nombres réels $\mathbb{R}$. Par conséquent, au lieu de former un nombre infini de points continus dans l&amp;rsquo;espace, cela forme un &amp;ldquo;ensemble de points discrets&amp;rdquo; semblables à des intersections espacées uniformément.&lt;/p>
&lt;h2 id="22-image-géométrique">2.2 Image géométrique
&lt;/h2>&lt;p>Considérons l&amp;rsquo;exemple du plan bidimensionnel $\mathbb{R}^2$. Si nous choisissons les vecteurs de base $\mathbf{b}_1 = \begin{pmatrix} 1 \\ 0 \end{pmatrix}$ et $\mathbf{b}_2 = \begin{pmatrix} 0 \\ 1 \end{pmatrix}$, le réseau généré par ceux-ci est l&amp;rsquo;ensemble de toutes les coordonnées entières $(x, y) \in \mathbb{Z}^2$ sur le plan cartésien. C&amp;rsquo;est le &amp;ldquo;réseau carré&amp;rdquo; le plus simple.&lt;/p>
&lt;p>Cependant, les réseaux ne sont pas toujours orthogonaux. Par exemple, si nous considérons la base $\mathbf{b}_1 = \begin{pmatrix} 2 \\ 1 \end{pmatrix}$ et $\mathbf{b}_2 = \begin{pmatrix} 1 \\ 3 \end{pmatrix}$, les points générés ressembleront aux intersections d&amp;rsquo;une maille déformée en biais.&lt;/p>
&lt;h2 id="23-non-unicité-de-la-base-et-transformation-unimodulaire">2.3 Non-unicité de la base et transformation unimodulaire
&lt;/h2>&lt;p>Il existe une propriété importante liée au fondement de la sécurité de la cryptographie sur les réseaux : &amp;ldquo;Il existe une infinité de bases qui génèrent le même réseau&amp;rdquo;.&lt;/p>
&lt;p>Par exemple, la base $\mathbf{b}_1 = (1, 0)^T, \mathbf{b}_2 = (0, 1)^T$ qui génère le réseau $\mathbb{Z}^2$, génère exactement le même réseau $\mathbb{Z}^2$ si nous utilisons la base $\mathbf{b}'_1 = (1, 1)^T, \mathbf{b}'_2 = (2, 3)^T$.&lt;/p>
&lt;p>Une condition nécessaire et suffisante pour qu&amp;rsquo;une base $B$ et une autre base $B'$ génèrent le même réseau est l&amp;rsquo;existence d&amp;rsquo;une matrice à coefficients entiers $U \in \mathbb{Z}^{n \times n}$ avec un déterminant $\det(U) = \pm 1$, telle que
&lt;/p>
$$ B' = B U $$
&lt;p>
Une telle matrice $U$ est appelée &amp;ldquo;matrice unimodulaire (Unimodular matrix)&amp;rdquo;.&lt;/p>
&lt;p>L&amp;rsquo;idée fondamentale dans son application à la cryptographie est d&amp;rsquo;utiliser une &amp;ldquo;bonne base (une base proche de l&amp;rsquo;orthogonalité, composée de vecteurs courts)&amp;rdquo; comme clé privée, et une &amp;ldquo;mauvaise base (une base avec des vecteurs extrêmement obliques les uns par rapport aux autres et très longs)&amp;rdquo; comme clé publique. Calculer une bonne base à partir d&amp;rsquo;une mauvaise base devient extrêmement difficile à mesure que la dimension augmente. C&amp;rsquo;est l&amp;rsquo;intuition fondamentale de la cryptographie basée sur les réseaux.&lt;/p>
&lt;h1 id="3-problèmes-mathématiquement-difficiles-dans-les-réseaux">3. Problèmes mathématiquement difficiles dans les réseaux
&lt;/h1>&lt;p>La sécurité de la cryptographie basée sur les réseaux repose sur la difficulté de résoudre certains problèmes mathématiques sur les réseaux. Nous présentons ici les deux problèmes les plus fondamentaux et célèbres.&lt;/p>
&lt;h2 id="31-problème-du-vecteur-le-plus-court-shortest-vector-problem-svp">3.1 Problème du vecteur le plus court (Shortest Vector Problem: SVP)
&lt;/h2>&lt;p>Le SVP est le problème le plus classique et célèbre de la théorie des réseaux.&lt;/p>
&lt;p>&lt;strong>Définition (SVP) :&lt;/strong>
Étant donné une base de réseau arbitraire $B$, trouver le vecteur $\mathbf{v}$ non nul appartenant à ce réseau $\mathcal{L}(B)$ qui a la norme euclidienne (longueur) minimale.&lt;/p>
&lt;p>Mathématiquement, c&amp;rsquo;est le problème de trouver $\mathbf{v}$ tel que $\min_{\mathbf{v} \in \mathcal{L}(B) \setminus \{\mathbf{0}\}} \| \mathbf{v} \|$. Cette longueur minimale est notée $\lambda_1(\mathcal{L})$ et est appelée le &amp;ldquo;premier minimum successif (First successive minimum) du réseau&amp;rdquo;.&lt;/p>
&lt;p>En basse dimension, comme en 2 ou 3 dimensions, vous pouvez trouver le vecteur le plus court à l&amp;rsquo;œil nu en dessinant un graphique, ou bien le résoudre efficacement en utilisant l&amp;rsquo;algorithme de réduction de base de Gauss. Cependant, lorsque la dimension $n$ atteint des centaines ou des milliers de dimensions, il est connu que résoudre strictement le SVP est un problème NP-difficile.&lt;/p>
&lt;p>Dans les systèmes cryptographiques réels, on utilise le SVP approché ($\gamma$-SVP), qui consiste à trouver un &amp;ldquo;vecteur approximativement court&amp;rdquo; au lieu du vecteur strictement le plus court. Lorsque le facteur d&amp;rsquo;approximation $\gamma$ est de taille polynomiale, ce problème est toujours considéré comme extrêmement difficile.&lt;/p>
&lt;h2 id="32-problème-du-vecteur-le-plus-proche-closest-vector-problem-cvp">3.2 Problème du vecteur le plus proche (Closest Vector Problem: CVP)
&lt;/h2>&lt;p>Le CVP est également un problème extrêmement important dans la cryptographie sur les réseaux.&lt;/p>
&lt;p>&lt;strong>Définition (CVP) :&lt;/strong>
Étant donné une base de réseau arbitraire $B$ et un vecteur cible arbitraire $\mathbf{t} \in \mathbb{R}^m$ dans l&amp;rsquo;espace (qui n&amp;rsquo;est pas nécessairement un point du réseau), trouver le point du réseau $\mathbf{v} \in \mathcal{L}(B)$ qui est le plus proche de $\mathbf{t}$.&lt;/p>
&lt;p>Mathématiquement, c&amp;rsquo;est le problème de trouver un point du réseau $\mathbf{v}$ tel que $\min_{\mathbf{v} \in \mathcal{L}(B)} \| \mathbf{v} - \mathbf{t} \|$.&lt;/p>
&lt;p>Le CVP, tout comme le SVP, est NP-difficile en haute dimension. Du point de vue des applications cryptographiques, le problème LWE décrit ci-dessous est étroitement lié à une variante spéciale de ce CVP (Bounded Distance Decoding: BDD).&lt;/p>
&lt;h2 id="33-pourquoi-est-il-impossible-de-les-résoudre-en-haute-dimension--limites-de-lll-et-bkz">3.3 Pourquoi est-il impossible de les résoudre en haute dimension ? (Limites de LLL et BKZ)
&lt;/h2>&lt;p>L&amp;rsquo;algorithme LLL (algorithme de Lenstra-Lenstra-Lovász) est un algorithme célèbre pour résoudre les problèmes de réseau en haute dimension. L&amp;rsquo;algorithme LLL fonctionne en temps polynomial et peut réduire (Reduction) la base du réseau en une &amp;ldquo;bonne base&amp;rdquo; dans une certaine mesure. Cependant, le vecteur le plus court que l&amp;rsquo;algorithme LLL peut trouver a un facteur d&amp;rsquo;approximation exponentiel ($2^{\mathcal{O}(n)}$) par rapport à la longueur du vrai vecteur le plus court, ce qui ne suffit pas pour briser la sécurité de la cryptographie.&lt;/p>
&lt;p>En utilisant des algorithmes de réduction de base plus puissants comme l&amp;rsquo;algorithme BKZ (Block Korkine-Zolotarev), qui est une amélioration de LLL, il est possible de trouver des vecteurs plus courts, mais la complexité de calcul augmente de manière exponentielle par rapport à la taille du bloc. Dans la cryptographie sur les réseaux, des paramètres de sécurité (comme la taille de la dimension $n$) sont déterminés en estimant le temps d&amp;rsquo;exécution de cet algorithme BKZ. Avec les paramètres standard actuels de la PQC, la dimension $n$ est choisie avec des valeurs de 500 à plus de 1000, et on estime qu&amp;rsquo;il faudrait un temps supérieur à l&amp;rsquo;âge de l&amp;rsquo;univers pour la déchiffrer, même avec des superordinateurs ou de futurs ordinateurs quantiques.&lt;/p>
&lt;h1 id="4-formulation-mathématique-du-problème-lwe-learning-with-errors">4. Formulation mathématique du problème LWE (Learning With Errors)
&lt;/h1>&lt;p>La majeure partie de la cryptographie moderne sur les réseaux est basée sur le &amp;ldquo;problème LWE (Learning With Errors)&amp;rdquo; proposé par Oded Regev en 2005. La beauté du problème LWE réside dans la simplicité de sa formulation et dans sa solide preuve mathématique basée sur &amp;ldquo;la réduction de la complexité dans le pire des cas à la complexité en moyenne&amp;rdquo;.&lt;/p>
&lt;h2 id="41-système-déquations-linéaires-sans-bruit">4.1 Système d&amp;rsquo;équations linéaires sans bruit
&lt;/h2>&lt;p>Pour comprendre le problème LWE, considérons d&amp;rsquo;abord un simple système d&amp;rsquo;équations linéaires sans bruit.
Supposons qu&amp;rsquo;il existe un vecteur secret inconnu $\mathbf{s} \in \mathbb{Z}_q^n$ (chaque composante est un entier de $0$ à $q-1$). Ici, $q$ est un nombre premier.&lt;/p>
&lt;p>Nous choisissons des vecteurs de coefficients aléatoires $\mathbf{a}_1, \mathbf{a}_2, \dots \in \mathbb{Z}_q^n$ et calculons le produit scalaire avec le vecteur secret $\mathbf{s}$ modulo $q$.
$b_1 = \langle \mathbf{a}_1, \mathbf{s} \rangle \pmod q$
$b_2 = \langle \mathbf{a}_2, \mathbf{s} \rangle \pmod q$
$\vdots$&lt;/p>
&lt;p>Si l&amp;rsquo;on nous donne un nombre suffisant (plus de $n$) de paires $(\mathbf{a}_i, b_i)$, nous pouvons facilement restaurer le vecteur secret $\mathbf{s}$ en utilisant l&amp;rsquo;&amp;ldquo;élimination de Gauss (Gaussian elimination)&amp;rdquo; en algèbre linéaire. C&amp;rsquo;est un problème qui peut être facilement résolu en temps polynomial.&lt;/p>
&lt;h2 id="42-définition-du-problème-lwe--ajout-de-bruit">4.2 Définition du problème LWE : Ajout de bruit
&lt;/h2>&lt;p>Alors, que se passe-t-il si nous ajoutons un léger &amp;ldquo;bruit (erreur)&amp;rdquo; à ce problème ?
C&amp;rsquo;est là l&amp;rsquo;essence du problème LWE.&lt;/p>
&lt;p>Pour un vecteur secret inconnu $\mathbf{s} \in \mathbb{Z}_q^n$, nous ajoutons une petite erreur $e_i \in \mathbb{Z}_q$ au résultat de chaque équation.
$b_i = \langle \mathbf{a}_i, \mathbf{s} \rangle + e_i \pmod q$&lt;/p>
&lt;p>Ici, $e_i$ est une petite valeur entière dont la moyenne est 0 et l&amp;rsquo;écart-type est relativement faible (par exemple, choisie à partir d&amp;rsquo;une distribution gaussienne discrète, similaire à une distribution normale).
L&amp;rsquo;information fournie est une liste de paires de vecteurs aléatoires $\mathbf{a}_i$ et de $b_i$ calculés en ajoutant l&amp;rsquo;erreur.
$( \mathbf{a}_1, b_1 ), ( \mathbf{a}_2, b_2 ), \dots, ( \mathbf{a}_m, b_m )$&lt;/p>
&lt;p>C&amp;rsquo;est beaucoup plus clair lorsqu&amp;rsquo;on l&amp;rsquo;exprime sous forme de matrice.
En utilisant une matrice aléatoire $A \in \mathbb{Z}_q^{m \times n}$, un vecteur secret $\mathbf{s} \in \mathbb{Z}_q^n$, et un vecteur d&amp;rsquo;erreur $\mathbf{e} \in \mathbb{Z}_q^m$, on peut écrire :
&lt;/p>
$$ \mathbf{b} = A \mathbf{s} + \mathbf{e} \pmod q $$
&lt;p>
Seuls $A$ et $\mathbf{b}$ sont fournis. Le &amp;ldquo;problème de recherche LWE (Search LWE problem)&amp;rdquo; consiste à trouver $\mathbf{s}$ à partir de cela.&lt;/p>
&lt;p>Puisque l&amp;rsquo;erreur $e_i$ est introduite, si l&amp;rsquo;on essaie d&amp;rsquo;utiliser l&amp;rsquo;élimination de Gauss, l&amp;rsquo;erreur s&amp;rsquo;amplifiera de manière exponentielle lors de l&amp;rsquo;addition et de la soustraction d&amp;rsquo;équations, et il deviendra impossible d&amp;rsquo;arriver à la bonne réponse. À première vue, cela ressemble à un simple système d&amp;rsquo;équations linéaires, mais l&amp;rsquo;ajout de ce petit bruit fait bondir le niveau de difficulté au stade NP-difficile.&lt;/p>
&lt;h2 id="43-problème-de-décision-lwe-decision-lwe">4.3 Problème de décision LWE (Decision LWE)
&lt;/h2>&lt;p>Une variante du problème de recherche LWE, appelée &amp;ldquo;problème de décision LWE (Decision LWE problem)&amp;rdquo;, est fréquemment utilisée dans les preuves en théorie cryptographique.&lt;/p>
&lt;p>Le problème de décision LWE est le problème de déterminer, étant donné une liste d&amp;rsquo;échantillons obtenus à partir des deux distributions suivantes, de quelle distribution elle provient.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Distribution LWE&lt;/strong> : $(A, \mathbf{b} = A\mathbf{s} + \mathbf{e} \pmod q)$ calculé intentionnellement.&lt;/li>
&lt;li>&lt;strong>Distribution aléatoire uniforme&lt;/strong> : $(A, \mathbf{u})$ constitué d&amp;rsquo;une matrice $A$ et d&amp;rsquo;un vecteur $\mathbf{u}$ choisis de manière totalement aléatoire.&lt;/li>
&lt;/ol>
&lt;p>Étonnamment, si les paramètres du problème LWE sont choisis de manière appropriée, les paires obtenues à partir de la distribution LWE deviennent &amp;ldquo;informatiquement indiscernables (Computationally Indistinguishable)&amp;rdquo; des paires de données totalement aléatoires. Cette propriété est la raison pour laquelle la cryptographie basée sur LWE peut générer &amp;ldquo;un texte chiffré indiscernable de nombres aléatoires&amp;rdquo;.&lt;/p>
&lt;h2 id="44-réduction-de-la-complexité-du-pire-des-cas-à-la-complexité-en-moyenne-théorème-de-regev">4.4 Réduction de la complexité du pire des cas à la complexité en moyenne (Théorème de Regev)
&lt;/h2>&lt;p>La plus grande réalisation d&amp;rsquo;Oded Regev a été de lier mathématiquement la difficulté de ce problème LWE à la difficulté des problèmes de réseaux susmentionnés (SVP et CVP).&lt;/p>
&lt;p>En utilisant la réduction quantique (Quantum reduction), il a prouvé que &amp;ldquo;s&amp;rsquo;il existe un algorithme en temps polynomial capable de résoudre le problème LWE en moyenne (pour des $A$ et $\mathbf{e}$ choisis aléatoirement), alors il existe un algorithme quantique en temps polynomial capable de résoudre le Gap-SVP pour le pire des cas (le cas le plus difficile) de n&amp;rsquo;importe quel réseau.&amp;rdquo; (Plus tard, une réduction classique a également été démontrée par Peikert et al.).&lt;/p>
&lt;p>C&amp;rsquo;est une propriété de rêve en théorie cryptographique. En effet, elle dissipe la crainte que &amp;ldquo;la cryptographie puisse être brisée parce que nous avons peut-être choisi par hasard une clé faible (une partie du cas moyen)&amp;rdquo;, et fournit la puissante garantie que &amp;ldquo;si le LWE moyen peut être résolu, alors tous les problèmes difficiles des réseaux peuvent être résolus (donc LWE est absolument difficile)&amp;rdquo;.&lt;/p>
&lt;div class="mermaid">graph TD
A["Problèmes de réseau dans le pire des cas (Gap-SVP, SIVP)"] -->|Réduction quantique/classique| B["Problème LWE en moyenne"]
B -->|Construction cryptographique| C["Systèmes cryptographiques basés sur LWE (PKE, KEM, FHE)"]
style A fill:#ffcccc,stroke:#ff0000,stroke-width:2px,color:#000
style B fill:#ccffcc,stroke:#00aa00,stroke-width:2px,color:#000
style C fill:#ccccff,stroke:#0000ff,stroke-width:2px,color:#000&lt;/div>
&lt;h1 id="5-construction-du-cryptosystème-à-clé-publique-basé-sur-lwe-cryptosystème-de-regev">5. Construction du cryptosystème à clé publique basé sur LWE (Cryptosystème de Regev)
&lt;/h1>&lt;p>Maintenant que nous avons compris la difficulté du problème LWE, examinons le cryptosystème à clé publique de base proposé par Oded Regev pour voir comment il est utilisé pour le chiffrement et le déchiffrement. Nous expliquerons ici le mécanisme le plus fondamental de chiffrement d&amp;rsquo;un message d&amp;rsquo;un bit $M \in \{0, 1\}$.&lt;/p>
&lt;h2 id="51-génération-de-clé-key-generation">5.1 Génération de clé (Key Generation)
&lt;/h2>&lt;ol>
&lt;li>En tant que paramètres du système, déterminez le module premier $q$, la dimension $n$, et le nombre d&amp;rsquo;équations $m$ ($m > n \log q$).&lt;/li>
&lt;li>En tant que clé privée, choisissez aléatoirement un vecteur $\mathbf{s} \in \mathbb{Z}_q^n$.&lt;/li>
&lt;li>Générez une matrice aléatoire $A \in \mathbb{Z}_q^{m \times n}$.&lt;/li>
&lt;li>Choisissez un petit vecteur d&amp;rsquo;erreur $\mathbf{e} \in \mathbb{Z}_q^m$ à partir d&amp;rsquo;une distribution d&amp;rsquo;erreur telle que la distribution gaussienne discrète.&lt;/li>
&lt;li>Calculez le vecteur $\mathbf{b} = A \mathbf{s} + \mathbf{e} \pmod q$.&lt;/li>
&lt;li>La clé publique (Public Key) sera $(A, \mathbf{b})$.&lt;/li>
&lt;li>La clé secrète (Secret Key) sera $\mathbf{s}$.&lt;/li>
&lt;/ol>
&lt;p>La clé publique est littéralement une &amp;ldquo;instance du problème LWE&amp;rdquo;. Puisque trouver la clé secrète $\mathbf{s}$ à partir de la clé publique $(A, \mathbf{b})$ équivaut à résoudre le problème de recherche LWE, la sécurité est garantie.&lt;/p>
&lt;h2 id="52-chiffrement-encryption">5.2 Chiffrement (Encryption)
&lt;/h2>&lt;p>Alice utilise la clé publique de Bob $(A, \mathbf{b})$ pour chiffrer un message d&amp;rsquo;un bit $M \in \{0, 1\}$.&lt;/p>
&lt;ol>
&lt;li>Choisissez un vecteur binaire aléatoire (dont les composantes sont 0 ou 1) $\mathbf{r} \in \{0, 1\}^m$.&lt;/li>
&lt;li>Comme première partie du texte chiffré, calculez le vecteur $\mathbf{u} = A^T \mathbf{r} \pmod q$. ($A^T$ est la matrice transposée de $A$. C&amp;rsquo;est-à-dire que nous additionnons les lignes de $A$ dont la composante correspondante de $\mathbf{r}$ est 1).&lt;/li>
&lt;li>Comme deuxième partie du texte chiffré, calculez le scalaire $v = \mathbf{b}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor \pmod q$.
(Si le message $M$ est 0, n&amp;rsquo;ajoutez rien ; s&amp;rsquo;il est $1$, ajoutez exactement la moitié de $q$, soit $\lfloor \frac{q}{2} \rfloor$).&lt;/li>
&lt;li>Le texte chiffré (Ciphertext) sera $(\mathbf{u}, v)$.&lt;/li>
&lt;/ol>
&lt;p>L&amp;rsquo;intuition derrière le chiffrement est de prendre la &amp;ldquo;somme d&amp;rsquo;un sous-ensemble aléatoire&amp;rdquo; par rapport à la matrice $A$ et au vecteur $\mathbf{b}$ de la clé publique. En raison de la difficulté du problème de décision LWE, ce texte chiffré $(\mathbf{u}, v)$ semble indiscernable de vecteurs totalement aléatoires et de nombres uniformément aléatoires (Sécurité sémantique : Semantic Security).&lt;/p>
&lt;div class="mermaid">flowchart LR
M["Message M dans {0,1}"] --> Enc
PK["Clé publique (A, b)"] --> Enc
r["Vecteur binaire aléatoire r"] --> Enc
subgraph Enc ["Processus de chiffrement"]
direction TB
u_calc["u = A^T * r mod q"]
v_calc["v = b^T * r + M * floor(q/2) mod q"]
end
Enc --> CT["Texte chiffré (u, v)"]&lt;/div>
&lt;h2 id="53-déchiffrement-decryption">5.3 Déchiffrement (Decryption)
&lt;/h2>&lt;p>Bob déchiffre le texte chiffré $(\mathbf{u}, v)$ en utilisant sa clé secrète $\mathbf{s}$.&lt;/p>
&lt;ol>
&lt;li>Calculez la valeur suivante : $D = v - \mathbf{s}^T \mathbf{u} \pmod q$&lt;/li>
&lt;li>Si le résultat calculé est proche de $0$, le message est de $M=0$, s&amp;rsquo;il est proche de $\lfloor \frac{q}{2} \rfloor$, le message est de $M=1$.&lt;/li>
&lt;/ol>
&lt;p>Montrons mathématiquement pourquoi cela permet le déchiffrement.
Rappelez-vous que $\mathbf{b} = A \mathbf{s} + \mathbf{e}$.&lt;/p>
$$
\begin{aligned}
v - \mathbf{s}^T \mathbf{u} &amp;= (\mathbf{b}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor) - \mathbf{s}^T (A^T \mathbf{r}) \\
&amp;= ((A \mathbf{s} + \mathbf{e})^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor) - \mathbf{s}^T A^T \mathbf{r} \\
&amp;= (\mathbf{s}^T A^T \mathbf{r} + \mathbf{e}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor) - \mathbf{s}^T A^T \mathbf{r} \\
&amp;= \mathbf{e}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor \pmod q
\end{aligned}
$$
&lt;p>Ici, le terme $\mathbf{s}^T A^T \mathbf{r}$ s&amp;rsquo;est parfaitement annulé et a disparu de l&amp;rsquo;équation !
Ce qui reste, c&amp;rsquo;est $\mathbf{e}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor$.&lt;/p>
&lt;p>$\mathbf{e}$ est un vecteur de bruit dont les composantes sont très petites, et $\mathbf{r}$ est un vecteur binaire dont les composantes sont 0 ou 1. Par conséquent, leur produit scalaire $\mathbf{e}^T \mathbf{r}$ restera également une valeur relativement faible (si les paramètres sont choisis de manière appropriée).&lt;/p>
&lt;ul>
&lt;li>Si $M=0$, le résultat sera $\mathbf{e}^T \mathbf{r}$, qui est une petite valeur proche de $0$.&lt;/li>
&lt;li>Si $M=1$, le résultat sera $\mathbf{e}^T \mathbf{r} + \lfloor \frac{q}{2} \rfloor$, qui sera situé autour de la moitié de $q$, soit $\lfloor \frac{q}{2} \rfloor$.&lt;/li>
&lt;/ul>
&lt;p>Si les paramètres sont conçus de sorte que la valeur absolue de l&amp;rsquo;erreur $\mathbf{e}^T \mathbf{r}$ soit inférieure à $\frac{q}{4}$, Bob peut déterminer (déchiffrer) avec précision le message $M$ en regardant simplement si le résultat du calcul est plus proche de $0$ ou de $\lfloor \frac{q}{2} \rfloor$. C&amp;rsquo;est le mécanisme élégant par lequel la cryptographie basée sur LWE fonctionne.&lt;/p>
&lt;div class="mermaid">flowchart LR
CT["Texte chiffré (u, v)"] --> Dec
SK["Clé secrète s"] --> Dec
subgraph Dec ["Processus de déchiffrement"]
direction TB
calc["Calculer D = v - s^T * u mod q"]
check["Vérifier si D est plus proche de 0 ou de q/2"]
end
calc --> check
Dec --> M_out["Message récupéré M"]&lt;/div>
&lt;h1 id="6-exemple-jouet-toy-example-de-chiffrement-lwe-avec-des-valeurs-numériques-spécifiques">6. Exemple jouet (Toy Example) de chiffrement LWE avec des valeurs numériques spécifiques
&lt;/h1>&lt;p>Il est difficile de comprendre seulement avec une liste de formules mathématiques, alors établissons des paramètres numériques très petits et suivons les calculs du chiffrement au déchiffrement.
(* Dans un système cryptographique réel, pour assurer la sécurité, $n$ est de 500 ou plus et $q$ est de plusieurs milliers).&lt;/p>
&lt;p>&lt;strong>【Paramétrage】&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Module $q = 17$ (Un nombre premier. Les valeurs seront donc de $0$ à $16$).&lt;/li>
&lt;li>Dimension $n = 2$&lt;/li>
&lt;li>Nombre d&amp;rsquo;équations $m = 4$&lt;/li>
&lt;li>Supposons que nous chiffrons le message $M = 1$.&lt;/li>
&lt;li>Montant du décalage du message : $\lfloor \frac{q}{2} \rfloor = \lfloor \frac{17}{2} \rfloor = 8$&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>【1. Phase de génération de clé】&lt;/strong>
Bob choisit aléatoirement une clé secrète $\mathbf{s}$, une matrice $A$, et un vecteur d&amp;rsquo;erreur $\mathbf{e}$.
&lt;/p>
$$ \mathbf{s} = \begin{pmatrix} 3 \\ 4 \end{pmatrix} \in \mathbb{Z}_{17}^2 $$
$$ A = \begin{pmatrix} 2 &amp; 15 \\ 1 &amp; 8 \\ 14 &amp; 5 \\ 9 &amp; 10 \end{pmatrix} \in \mathbb{Z}_{17}^{4 \times 2} $$
$$ \mathbf{e} = \begin{pmatrix} 1 \\ -1 \\ 0 \\ 2 \end{pmatrix} \equiv \begin{pmatrix} 1 \\ 16 \\ 0 \\ 2 \end{pmatrix} \pmod{17} $$
&lt;p>Ensuite, calculez la clé publique $\mathbf{b}$.
&lt;/p>
$$ A \mathbf{s} = \begin{pmatrix} 2 &amp; 15 \\ 1 &amp; 8 \\ 14 &amp; 5 \\ 9 &amp; 10 \end{pmatrix} \begin{pmatrix} 3 \\ 4 \end{pmatrix} = \begin{pmatrix} 2\times 3 + 15\times 4 \\ 1\times 3 + 8\times 4 \\ 14\times 3 + 5\times 4 \\ 9\times 3 + 10\times 4 \end{pmatrix} = \begin{pmatrix} 6 + 60 \\ 3 + 32 \\ 42 + 20 \\ 27 + 40 \end{pmatrix} = \begin{pmatrix} 66 \\ 35 \\ 62 \\ 67 \end{pmatrix} $$
&lt;p>
Nous calculons cela modulo 17. (par exemple, $66 = 17 \times 3 + 15$)
&lt;/p>
$$ A \mathbf{s} \pmod{17} = \begin{pmatrix} 15 \\ 1 \\ 11 \\ 16 \end{pmatrix} $$
&lt;p>
Ajoutez le vecteur d&amp;rsquo;erreur $\mathbf{e}$.
&lt;/p>
$$ \mathbf{b} = A \mathbf{s} + \mathbf{e} = \begin{pmatrix} 15 \\ 1 \\ 11 \\ 16 \end{pmatrix} + \begin{pmatrix} 1 \\ 16 \\ 0 \\ 2 \end{pmatrix} = \begin{pmatrix} 16 \\ 17 \\ 11 \\ 18 \end{pmatrix} \equiv \begin{pmatrix} 16 \\ 0 \\ 11 \\ 1 \end{pmatrix} \pmod{17} $$
&lt;p>La clé publique est $A$ et $\mathbf{b} = (16, 0, 11, 1)^T$.&lt;/p>
&lt;p>&lt;strong>【2. Phase de chiffrement】&lt;/strong>
Alice chiffre le message $M = 1$.
Choisissez un vecteur aléatoire $\mathbf{r}$. Ici, supposons $\mathbf{r} = (1, 0, 1, 0)^T$.&lt;/p>
&lt;p>Calculez $\mathbf{u}$.
&lt;/p>
$$ \mathbf{u} = A^T \mathbf{r} = \begin{pmatrix} 2 &amp; 1 &amp; 14 &amp; 9 \\ 15 &amp; 8 &amp; 5 &amp; 10 \end{pmatrix} \begin{pmatrix} 1 \\ 0 \\ 1 \\ 0 \end{pmatrix} = \begin{pmatrix} 2 \times 1 + 14 \times 1 \\ 15 \times 1 + 5 \times 1 \end{pmatrix} = \begin{pmatrix} 16 \\ 20 \end{pmatrix} \equiv \begin{pmatrix} 16 \\ 3 \end{pmatrix} \pmod{17} $$
&lt;p>Calculez $v$.
&lt;/p>
$$ \mathbf{b}^T \mathbf{r} = (16, 0, 11, 1) \begin{pmatrix} 1 \\ 0 \\ 1 \\ 0 \end{pmatrix} = 16 \times 1 + 11 \times 1 = 27 \equiv 10 \pmod{17} $$
&lt;p>
Ajoutez la valeur $\lfloor 17/2 \rfloor = 8$ correspondant au message $M=1$.
&lt;/p>
$$ v = \mathbf{b}^T \mathbf{r} + M \cdot 8 = 10 + 1 \times 8 = 18 \equiv 1 \pmod{17} $$
&lt;p>Alice envoie le texte chiffré $(\mathbf{u}, v) = \left( \begin{pmatrix} 16 \\ 3 \end{pmatrix}, 1 \right)$ à Bob.&lt;/p>
&lt;p>&lt;strong>【3. Phase de déchiffrement】&lt;/strong>
Après avoir reçu le texte chiffré, Bob le déchiffre en utilisant la clé secrète $\mathbf{s} = (3, 4)^T$.
Formule de déchiffrement : calculez $D = v - \mathbf{s}^T \mathbf{u} \pmod{17}$.&lt;/p>
$$ \mathbf{s}^T \mathbf{u} = (3, 4) \begin{pmatrix} 16 \\ 3 \end{pmatrix} = 3 \times 16 + 4 \times 3 = 48 + 12 = 60 \equiv 9 \pmod{17} $$
$$ D = v - \mathbf{s}^T \mathbf{u} = 1 - 9 = -8 \pmod{17} $$
&lt;p>Ici, dans le monde modulo 17, $-8$ est égal à $9$ ($-8 + 17 = 9$).
Déterminez si la valeur obtenue $D = 9$ est plus proche de $0$ ou de $8$ ($\lfloor 17/2 \rfloor$).
Étant donné que $9$ est clairement plus proche de $8$ que de $0$, Bob a pu restaurer correctement $M = 1$ !&lt;/p>
&lt;p>Pourquoi est-ce devenu $9$ ? Rappelons la preuve précédente.
La partie d&amp;rsquo;erreur est $\mathbf{e}^T \mathbf{r} = (1, -1, 0, 2) (1, 0, 1, 0)^T = 1 \times 1 + 0 \times 1 = 1$.
Par conséquent, le résultat du calcul est $\mathbf{e}^T \mathbf{r} + M \cdot 8 = 1 + 8 = 9$, et il est confirmé que la valeur théorique a été calculée.&lt;/p>
&lt;h1 id="7-évolution-vers-une-application-pratique--ring-lwe-et-module-lwe">7. Évolution vers une application pratique : Ring-LWE et Module-LWE
&lt;/h1>&lt;p>Le problème LWE standard (Standard LWE) expliqué jusqu&amp;rsquo;à présent possède une preuve de sécurité très solide, mais présente un défaut fatal dans la pratique. C&amp;rsquo;est &amp;ldquo;la taille énorme de la clé&amp;rdquo; et le &amp;ldquo;coût de calcul élevé&amp;rdquo;.&lt;/p>
&lt;p>Dans le Standard LWE, la clé publique contient une énorme matrice $A \in \mathbb{Z}_q^{m \times n}$. Lorsque le paramètre $n$ atteint des centaines ou des milliers, la taille de cette matrice atteint plusieurs mégaoctets, ce qui est trop lourd pour être envoyé et reçu à chaque fois dans les protocoles de communication Internet (tels que TLS). De plus, la multiplication d&amp;rsquo;une matrice et d&amp;rsquo;un vecteur nécessite une complexité de calcul de $\mathcal{O}(n^2)$.&lt;/p>
&lt;p>Pour résoudre ce problème, on a introduit &amp;ldquo;Ring-LWE (RLWE)&amp;rdquo; et &amp;ldquo;Module-LWE (MLWE)&amp;rdquo;, qui intègrent une structure algébrique appelée anneaux de polynômes (Polynomial rings) dans le réseau.&lt;/p>
&lt;h2 id="71-intuition-de-ring-lwe">7.1 Intuition de Ring-LWE
&lt;/h2>&lt;p>Dans Ring-LWE, les vecteurs et les matrices sont remplacés par des éléments (polynômes) sur l&amp;rsquo;anneau de polynômes $\mathcal{R}_q = \mathbb{Z}_q[X]/(X^n + 1)$. (Ici, $n$ est choisi comme une puissance de 2).&lt;/p>
&lt;p>Alors que la clé publique de Standard LWE était la matrice $A$, Ring-LWE utilise un seul polynôme $a(x)$. La clé secrète $s(x)$ et l&amp;rsquo;erreur $e(x)$ deviennent également des polynômes.
L&amp;rsquo;équation est la suivante :
&lt;/p>
$$ b(x) = a(x) \cdot s(x) + e(x) \pmod q $$
&lt;p>Comme il s&amp;rsquo;agit d&amp;rsquo;une multiplication de polynômes, la complexité de calcul peut être considérablement réduite à $\mathcal{O}(n \log n)$ en utilisant la &amp;ldquo;Transformation Numérique Théorique (Number Theoretic Transform: NTT)&amp;rdquo;, qui est similaire à la Transformation de Fourier Rapide (FFT). De plus, puisque la taille de la clé publique est également réduite d&amp;rsquo;une matrice à un seul polynôme, la taille des données est réduite à $\mathcal{O}(n)$. Cela apporte un avantage écrasant en termes de bande passante de communication.&lt;/p>
&lt;p>D&amp;rsquo;un point de vue mathématique, Ring-LWE ne repose pas sur un réseau général, mais se réduit à un problème sur un réseau doté d&amp;rsquo;une symétrie spéciale appelé &amp;ldquo;réseau idéal (Ideal Lattice)&amp;rdquo;.&lt;/p>
&lt;h2 id="72-module-lwe-et-normalisation-du-nist-kyber--ml-kem">7.2 Module-LWE et normalisation du NIST (Kyber / ML-KEM)
&lt;/h2>&lt;p>Ring-LWE est efficace, mais il y avait quelques inquiétudes quant au fait que la structure algébrique spéciale du réseau idéal puisse devenir un indice pour de futures attaques. Ainsi, le &amp;ldquo;Module-LWE (MLWE)&amp;rdquo; a été créé en prenant le meilleur des deux mondes : la sécurité conservatrice de Standard LWE et l&amp;rsquo;efficacité de Ring-LWE.&lt;/p>
&lt;p>Dans Module-LWE, nous considérons de petites matrices et des vecteurs dont les éléments sont des polynômes. En d&amp;rsquo;autres termes, nous traitons des modules sur l&amp;rsquo;anneau.
Actuellement, &amp;ldquo;CRYSTALS-Kyber&amp;rdquo; (nom standardisé : ML-KEM), qui a été sélectionné par le NIST comme norme pour l&amp;rsquo;algorithme d&amp;rsquo;échange de clés PQC (KEM), est construit précisément sur la difficulté de ce problème Module-LWE.&lt;/p>
&lt;h1 id="8-pourquoi-est-ce-sûr-face-aux-ordinateurs-quantiques-">8. Pourquoi est-ce sûr face aux ordinateurs quantiques ?
&lt;/h1>&lt;p>Enfin, abordons le point essentiel : &amp;ldquo;Pourquoi considère-t-on que la cryptographie basée sur les réseaux ne sera pas brisée même avec des ordinateurs quantiques ?&amp;rdquo;&lt;/p>
&lt;p>L&amp;rsquo;algorithme de Shor, grâce auquel les ordinateurs quantiques brisent le chiffrement RSA et la cryptographie sur les courbes elliptiques, est essentiellement un algorithme qui résout le &amp;ldquo;problème du sous-groupe caché (Hidden Subgroup Problem: HSP)&amp;rdquo;. La structure mathématique derrière RSA et ECC (groupes abéliens finis) présente une périodicité, et en utilisant une opération spécifique à l&amp;rsquo;algorithme quantique appelée Transformée de Fourier Quantique (QFT), cette période (le sous-groupe caché) peut être extraite en une seule fois.&lt;/p>
&lt;p>Cependant, les problèmes de réseaux sont fondamentalement différents. Bien que les réseaux aient également une périodicité, ce qui est requis dans SVP et CVP sont des propriétés géométriques non linéaires telles que &amp;ldquo;la distance la plus courte&amp;rdquo; ou &amp;ldquo;la suppression du bruit&amp;rdquo;. Même si nous appliquons la &amp;ldquo;Transformée de Fourier quantique sur un groupe abélien&amp;rdquo; comme l&amp;rsquo;algorithme de Shor tel quel, nous ne pouvons pas extraire efficacement les informations utiles qui seraient la solution au problème du réseau. Jusqu&amp;rsquo;à présent, aucun algorithme quantique capable de résoudre SVP ou LWE en temps polynomial n&amp;rsquo;a été découvert, et on croit largement que même avec la capacité de calcul parallèle des ordinateurs quantiques, seuls des moyens de résolution proches d&amp;rsquo;une recherche par force brute (une accélération de l&amp;rsquo;ordre de la racine carrée grâce à l&amp;rsquo;algorithme de Grover) sont valables.&lt;/p>
&lt;h1 id="9-conclusion">9. Conclusion
&lt;/h1>&lt;p>Dans cet article, nous avons expliqué en détail l&amp;rsquo;intuition mathématique de la cryptographie sur les réseaux, en commençant par la définition géométrique du réseau, la formulation du problème LWE, et jusqu&amp;rsquo;à la construction d&amp;rsquo;une cryptographie à clé publique.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Le réseau (Lattice)&lt;/strong> est un espace discret représenté par des combinaisons linéaires à coefficients entiers de vecteurs de base, et il devient difficile de trouver une &amp;ldquo;bonne base&amp;rdquo; proche de l&amp;rsquo;orthogonalité dans les dimensions élevées (SVP).&lt;/li>
&lt;li>&lt;strong>Le problème LWE (Learning With Errors)&lt;/strong> est le problème de la résolution d&amp;rsquo;équations linéaires simultanées avec du bruit, ce qui est lié à la difficulté du problème du pire cas du réseau, fournissant ainsi une base solide de sécurité.&lt;/li>
&lt;li>En utilisant le problème LWE, le chiffrement et le déchiffrement (&lt;strong>Cryptosystème de Regev&lt;/strong>) sont réalisés grâce à un mécanisme ingénieux d&amp;rsquo;ajout et de suppression intentionnelle de bruit.&lt;/li>
&lt;li>Dans les protocoles réels, &lt;strong>Ring-LWE&lt;/strong> et &lt;strong>Module-LWE&lt;/strong> utilisant des anneaux de polynômes sont adoptés pour améliorer l&amp;rsquo;efficacité de la communication et la vitesse de calcul, et servent de base au &lt;strong>ML-KEM&lt;/strong> standard du NIST.&lt;/li>
&lt;/ol>
&lt;p>À l&amp;rsquo;approche du changement de paradigme informatique sans précédent que représentent les ordinateurs quantiques, il est très romantique de penser que la &amp;ldquo;cryptographie sur les réseaux&amp;rdquo;, née des profondeurs de l&amp;rsquo;algèbre linéaire classique et de la théorie des nombres, soutiendra la fondation de la sécurité Internet de demain. Les mathématiques qui sous-tendent la cryptographie sur les réseaux ne sont en aucun cas trop complexes, et avec des connaissances de base en algèbre linéaire et en probabilités, vous pouvez parfaitement comprendre sa belle structure. Nous espérons que cet article vous aidera à comprendre la cryptographie basée sur les réseaux, qui est au cœur de la PQC.&lt;/p></description></item><item><title>Le fonctionnement des preuves à divulgation nulle de connaissance (ZKP) et leurs applications récentes dans le Web3 et la sécurité</title><link>http://kenji.blog/fr/p/zero-knowledge-proofs-zkp-web3-security/</link><pubDate>Fri, 11 Sep 2026 19:00:00 +0900</pubDate><guid>http://kenji.blog/fr/p/zero-knowledge-proofs-zkp-web3-security/</guid><description>&lt;img src="http://kenji.blog/p/zero-knowledge-proofs-zkp-web3-security/img/eyecatch.jpg" alt="Featured image of post Le fonctionnement des preuves à divulgation nulle de connaissance (ZKP) et leurs applications récentes dans le Web3 et la sécurité" />&lt;h2 id="introduction">Introduction
&lt;/h2>&lt;p>Dans la société numérique moderne, la confidentialité des données et l&amp;rsquo;évolutivité sont devenues deux des enjeux les plus importants. Face aux risques croissants de fuite et d&amp;rsquo;utilisation abusive des informations personnelles, il y a une forte demande pour une technologie qui permette de « prouver que l&amp;rsquo;on possède une information sans la révéler à l&amp;rsquo;autre partie ». C&amp;rsquo;est ce que réalise la &lt;strong>preuve à divulgation nulle de connaissance (Zero-Knowledge Proof : ZKP)&lt;/strong>.&lt;/p>
&lt;p>La preuve à divulgation nulle de connaissance est un concept de théorie cryptographique proposé pour la première fois dans les années 1980 par Shafi Goldwasser, Silvio Micali et Charles Rackoff, mais qui est longtemps resté au stade de la recherche théorique. Cependant, avec l&amp;rsquo;émergence de la technologie blockchain et du Web3, la situation a radicalement changé. Le ZKP est soudainement apparu sur le devant de la scène comme une « baguette magique » permettant de résoudre simultanément les problèmes d&amp;rsquo;évolutivité (limites de capacité de traitement) et de confidentialité (le fait que toutes les transactions soient publiques) auxquels sont confrontées les blockchains publiques comme Ethereum.&lt;/p>
&lt;p>Dans cet article, nous explorerons en détail et en profondeur les concepts fondamentaux des preuves à divulgation nulle, les mécanismes mathématiques et cryptographiques profonds des &lt;strong>zk-SNARKs&lt;/strong> et &lt;strong>zk-STARKs&lt;/strong> actuellement dominants, ainsi que des exemples d&amp;rsquo;applications récentes dans le Web3 et la sécurité, tels que les ZK-Rollups et l&amp;rsquo;identité décentralisée (DID).&lt;/p>
&lt;hr>
&lt;h2 id="quest-ce-que-la-preuve-à-divulgation-nulle-de-connaissance-zkp-">Qu&amp;rsquo;est-ce que la preuve à divulgation nulle de connaissance (ZKP) ?
&lt;/h2>&lt;p>La preuve à divulgation nulle de connaissance (ZKP) désigne un protocole dans lequel un prouveur (Prover) prouve à un vérificateur (Verifier) qu&amp;rsquo;une certaine proposition est vraie, de telle manière qu&amp;rsquo;« aucune information autre que la véracité de cette proposition ne soit transmise ».&lt;/p>
&lt;h3 id="les-3-exigences-que-le-zkp-doit-satisfaire">Les 3 exigences que le ZKP doit satisfaire
&lt;/h3>&lt;p>Pour être considéré comme un ZKP, le protocole doit satisfaire strictement aux trois propriétés suivantes :&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Complétude (Completeness)&lt;/strong>
Si la proposition est vraie et que le prouveur et le vérificateur suivent tous deux correctement le protocole, le vérificateur doit accepter la preuve (Accept) avec une probabilité écrasante.&lt;/li>
&lt;li>&lt;strong>Solidité (Soundness)&lt;/strong>
Si la proposition est fausse, même un prouveur malveillant doté d&amp;rsquo;une puissance de calcul extrême ne pourra (sauf probabilité négligeable) tromper le vérificateur pour lui faire accepter la preuve.&lt;/li>
&lt;li>&lt;strong>Divulgation nulle (Zero-Knowledge)&lt;/strong>
Si la proposition est vraie, le vérificateur ne peut obtenir du processus de preuve aucune information autre que le fait que « la proposition est vraie ». Du point de vue du vérificateur, cela est prouvé par la définition mathématique qu&amp;rsquo;il est possible de simuler le processus de preuve (qu&amp;rsquo;il existe un simulateur).&lt;/li>
&lt;/ol>
&lt;h3 id="preuves-interactives-et-preuves-non-interactives">Preuves interactives et preuves non interactives
&lt;/h3>&lt;p>Il existe deux types de ZKP : les &lt;strong>preuves interactives&lt;/strong>, dans lesquelles le prouveur et le vérificateur communiquent plusieurs fois, et les &lt;strong>preuves non interactives&lt;/strong>, dans lesquelles le prouveur envoie les données de la preuve une seule fois pour terminer le processus.&lt;/p>
&lt;h4 id="preuves-interactives-interactive-zkp">Preuves interactives (Interactive ZKP)
&lt;/h4>&lt;p>Les premiers ZKP ont été conçus comme des protocoles interactifs. La célèbre parabole de la « grotte d&amp;rsquo;Ali Baba » en est un exemple. Le déroulement général du protocole est le suivant :&lt;/p>
&lt;div class="mermaid">sequenceDiagram
participant Prover as "Prover (Prouveur)"
participant Verifier as "Verifier (Vérificateur)"
Note over Prover, Verifier: "Flux de base du protocole de preuve interactive"
Prover->>Verifier: "1. Envoyer l'engagement (Commitment)"
Verifier->>Prover: "2. Envoyer un défi aléatoire (Challenge)"
Prover->>Verifier: "3. Calculer et envoyer la réponse (Response)"
Note over Verifier: "Vérifier la réponse (Verification)"
Verifier-->>Prover: "4. Accepter ou rejeter (Accept / Reject)"
Note over Prover, Verifier: "※ Répéter cela des dizaines de fois pour augmenter la certitude"&lt;/div>
&lt;p>Cette méthode est puissante, mais elle exige que le vérificateur soit en ligne et s&amp;rsquo;avère peu pratique à appliquer à des systèmes distribués asynchrones comme la blockchain. Dans une blockchain, n&amp;rsquo;importe qui doit pouvoir vérifier une preuve passée à tout moment.&lt;/p>
&lt;h4 id="transformation-de-fiat-shamir-fiat-shamir-heuristic-et-non-interactivité">Transformation de Fiat-Shamir (Fiat-Shamir Heuristic) et non-interactivité
&lt;/h4>&lt;p>La &lt;strong>transformation de Fiat-Shamir&lt;/strong> est une méthode révolutionnaire pour convertir une preuve interactive en une preuve non interactive (Non-Interactive Zero-Knowledge Proof : NIZK).&lt;/p>
&lt;p>Au lieu du « défi aléatoire » envoyé par le vérificateur, le prouveur génère lui-même un « défi pseudo-aléatoire » à l&amp;rsquo;aide de son propre engagement et de la valeur de hachage des informations publiques. En supposant qu&amp;rsquo;une fonction de hachage cryptographique (par exemple SHA-256 ou Keccak) agisse comme un oracle aléatoire, le prouveur ne peut ni prédire ni manipuler le défi à l&amp;rsquo;avance, ce qui lui permet de compléter la preuve en envoyant un seul message tout en maintenant une sécurité équivalente à celle d&amp;rsquo;une preuve interactive.&lt;/p>
&lt;hr>
&lt;h2 id="détails-techniques-des-zk-snarks">Détails techniques des zk-SNARKs
&lt;/h2>&lt;p>Actuellement, les &lt;strong>zk-SNARKs&lt;/strong> (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge) sont les ZKP les plus largement utilisés. Comme leur nom l&amp;rsquo;indique, ils possèdent la propriété de divulgation nulle (zk), offrent des preuves de très petite taille et rapides à vérifier (Succinct), sont non interactifs (Non-Interactive) et constituent un argument de connaissance (Argument of Knowledge).&lt;/p>
&lt;p>Le fondement des zk-SNARKs repose sur la géométrie algébrique avancée et la théorie cryptographique. Ils convertissent l&amp;rsquo;exécution ou le calcul d&amp;rsquo;un programme en la vérification d&amp;rsquo;une équation polynomiale spécifique.&lt;/p>
&lt;h3 id="1-conversion-en-circuit-arithmétique-et-r1cs-rank-1-constraint-system">1. Conversion en circuit arithmétique et R1CS (Rank-1 Constraint System)
&lt;/h3>&lt;p>Tout d&amp;rsquo;abord, tout calcul que l&amp;rsquo;on souhaite prouver (un algorithme ou la logique d&amp;rsquo;un contrat intelligent) est converti en un &lt;strong>circuit arithmétique (Arithmetic Circuit)&lt;/strong> composé de portes d&amp;rsquo;addition et de multiplication.&lt;/p>
&lt;p>Ensuite, ce circuit arithmétique est converti en un ensemble d&amp;rsquo;équations matricielles appelé &lt;strong>R1CS (Rank-1 Constraint System)&lt;/strong>. Le R1CS est le problème de trouver, pour un vecteur de variables $x$, des matrices $A, B, C$ qui satisfont la contrainte suivante :&lt;/p>
$$ (A \cdot x) \circ (B \cdot x) = C \cdot x $$
&lt;p>Où $\circ$ représente le produit de Hadamard (produit élément par élément). Cette contrainte garantit que toutes les portes logiques (en particulier les portes de multiplication) du circuit sont calculées correctement.&lt;/p>
&lt;h3 id="2-conversion-en-qap-quadratic-arithmetic-program">2. Conversion en QAP (Quadratic Arithmetic Program)
&lt;/h3>&lt;p>Puisqu&amp;rsquo;il existe un nombre infini de contraintes matricielles R1CS, il serait très inefficace de les vérifier individuellement. Par conséquent, à l&amp;rsquo;aide de l&amp;rsquo;interpolation de Lagrange, ces contraintes sont compressées en une seule équation polynomiale. C&amp;rsquo;est ce qu&amp;rsquo;on appelle le &lt;strong>QAP (Quadratic Arithmetic Program)&lt;/strong>.&lt;/p>
&lt;p>Par la conversion en QAP, le problème à prouver se réduit à la question : « Un polynôme spécifique $P(x)$ est-il divisible par un autre polynôme connu $Z(x)$ ? ».&lt;/p>
$$ P(x) = L(x) \cdot R(x) - O(x) $$
&lt;p>Ici, $L(x), R(x), O(x)$ sont des combinaisons des polynômes correspondant respectivement à chaque ligne des matrices $A, B, C$. Si le prouveur connaît la bonne solution (Witness), la valeur de $P(x)$ sera de 0 à chaque racine (point d&amp;rsquo;évaluation), ce qui signifie que $P(x)$ aura le polynôme cible $Z(x)$ comme facteur. En d&amp;rsquo;autres termes, il existe un polynôme $H(x)$ tel que l&amp;rsquo;équation suivante soit satisfaite :&lt;/p>
$$ P(x) = H(x) \cdot Z(x) $$
&lt;p>Le vérificateur peut vérifier instantanément que l&amp;rsquo;ensemble du calcul a été effectué correctement en vérifiant simplement si cette équation $P(s) = H(s) \cdot Z(s)$ tient pour un point secret aléatoire $s$. C&amp;rsquo;est le secret de la « concision (Succinct) ».&lt;/p>
&lt;h3 id="3-cryptographie-sur-les-courbes-elliptiques-et-couplages-bilinear-pairings">3. Cryptographie sur les courbes elliptiques et couplages (Bilinear Pairings)
&lt;/h3>&lt;p>Cependant, si le vérificateur connaît le point secret $s$, il devient possible pour le prouveur de forger de faux polynômes pour satisfaire l&amp;rsquo;équation (effondrement de la solidité). Par conséquent, il est nécessaire d&amp;rsquo;effectuer le calcul tout en gardant $s$ chiffré (en utilisant le chiffrement homomorphe) afin que personne ne le connaisse.&lt;/p>
&lt;p>Ceci est réalisé grâce aux &lt;strong>couplages sur courbes elliptiques (Bilinear Pairings)&lt;/strong>.
Le couplage $e$ est une fonction spéciale qui permet, à partir de deux valeurs chiffrées, de calculer une valeur équivalente au chiffrement de leur produit.&lt;/p>
$$ e(g_1^a, g_2^b) = e(g_1, g_2)^{ab} $$
&lt;p>Le prouveur, sans connaître $s$ lui-même, calcule les valeurs chiffrées des polynômes $P(s)$ et $H(s)$ en utilisant des valeurs chiffrées des puissances de $s$ (appelées CRS : Common Reference String). Le vérificateur utilise la fonction de couplage pour vérifier si la relation $P(s) = H(s) \cdot Z(s)$ tient, tout en conservant les valeurs sous forme chiffrée.&lt;/p>
&lt;h3 id="4-configuration-de-confiance-trusted-setup">4. Configuration de confiance (Trusted Setup)
&lt;/h3>&lt;p>La plus grande faiblesse des zk-SNARKs (en particulier des premiers comme Groth16) est la nécessité d&amp;rsquo;un processus pour générer le point secret $s$, appelé &lt;strong>configuration de confiance (Trusted Setup)&lt;/strong>. Si le générateur de $s$ conservait sa valeur au lieu de la détruire, il pourrait générer n&amp;rsquo;importe quelle fausse preuve (problème des déchets toxiques ou Toxic Waste).&lt;/p>
&lt;p>Pour éviter cela, on organise une cérémonie appelée « Ceremony » utilisant le calcul multiparti (MPC - Multi-Party Computation). De nombreux participants collaborent pour fournir de l&amp;rsquo;aléatoire, et tant qu&amp;rsquo;au moins un participant détruit honnêtement sa propre valeur aléatoire, la sécurité de l&amp;rsquo;ensemble du système est préservée. Cependant, la recherche pour éliminer cette dépendance se poursuit depuis des années.&lt;/p>
&lt;hr>
&lt;h2 id="détails-techniques-des-zk-starks">Détails techniques des zk-STARKs
&lt;/h2>&lt;p>Les &lt;strong>zk-STARKs&lt;/strong> (Zero-Knowledge Scalable Transparent Argument of Knowledge) sont apparus comme une réponse à la dépendance à la configuration de confiance et au risque que la cryptographie sur courbes elliptiques soit brisée par les ordinateurs quantiques.&lt;/p>
&lt;p>Développés par Eli Ben-Sasson et d&amp;rsquo;autres, les STARKs se caractérisent, comme leur nom « Transparent » l&amp;rsquo;indique, par le fait qu&amp;rsquo;ils ne nécessitent aucune configuration de confiance, et comme « Scalable » (évolutif) l&amp;rsquo;indique, par le fait que la taille de la preuve et le temps de vérification restent efficaces même lorsque la complexité du calcul augmente.&lt;/p>
&lt;h3 id="1-engagements-polynomiaux-et-protocole-fri">1. Engagements polynomiaux et protocole FRI
&lt;/h3>&lt;p>Les zk-STARKs fondent leur sécurité &lt;strong>uniquement sur des fonctions de hachage&lt;/strong>, et non sur la cryptographie des courbes elliptiques. Par conséquent, ils possèdent les propriétés d&amp;rsquo;une cryptographie post-quantique (Post-Quantum Cryptography).&lt;/p>
&lt;p>La vérification du calcul est effectuée en utilisant les propriétés de polynômes unidimensionnels ou multidimensionnels, après que le calcul ait été converti dans un format appelé AIR (Algebraic Intermediate Representation). Le cœur des STARKs réside dans le protocole &lt;strong>FRI (Fast Reed-Solomon Interactive Oracle Proof of Proximity)&lt;/strong>.&lt;/p>
&lt;p>Le protocole FRI est une technique permettant de vérifier « si une certaine fonction est suffisamment proche d&amp;rsquo;un polynôme d&amp;rsquo;un degré spécifique (Proximity) ». Le prouveur s&amp;rsquo;engage sur les valeurs du polynôme en tant que feuilles d&amp;rsquo;un arbre de Merkle (Merkle Tree) (engagement polynomial).&lt;/p>
&lt;div class="mermaid">graph TD
Root["Racine de Merkle (Engagement)"] --> Node0["Nœud 0"]
Root --> Node1["Nœud 1"]
Node0 --> Leaf0["P(x_0)"]
Node0 --> Leaf1["P(x_1)"]
Node1 --> Leaf2["P(x_2)"]
Node1 --> Leaf3["P(x_3)"]&lt;/div>
&lt;p>Le vérificateur demande la révélation de quelques points aléatoires et utilise des preuves de Merkle pour confirmer qu&amp;rsquo;ils sont inclus dans l&amp;rsquo;engagement. En répétant cela récursivement, il est garanti avec une probabilité écrasante que le degré du polynôme d&amp;rsquo;origine est effectivement faible.&lt;/p>
&lt;h3 id="comparaison-entre-zk-snarks-et-zk-starks">Comparaison entre zk-SNARKs et zk-STARKs
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Caractéristique&lt;/th>
&lt;th style="text-align:left">zk-SNARKs&lt;/th>
&lt;th style="text-align:left">zk-STARKs&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Hypothèse cryptographique&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Courbes elliptiques, couplages&lt;/td>
&lt;td style="text-align:left">Fonctions de hachage résistantes aux collisions&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Configuration de confiance&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Requise (Plonk etc. sont universels)&lt;/td>
&lt;td style="text-align:left">Non requise (Transparent)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Résistance quantique&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Non&lt;/td>
&lt;td style="text-align:left">Oui&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Taille de la preuve&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Très petite (~200 octets)&lt;/td>
&lt;td style="text-align:left">Assez grande (des dizaines de Ko)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Coût de calcul de la génération de preuve&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Élevé&lt;/td>
&lt;td style="text-align:left">Relativement plus faible que les SNARKs&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Coût de vérification (Frais de gaz)&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Très faible (constant)&lt;/td>
&lt;td style="text-align:left">Faible (augmente de manière logarithmique)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Ces dernières années, des « SNARKs ne nécessitant pas de configuration de confiance, ou nécessitant une seule configuration » tels que Plonk ou Halo2 sont apparus, et la frontière entre les SNARKs et les STARKs devient progressivement floue, mais la différence fondamentale dans l&amp;rsquo;approche mathématique reste importante.&lt;/p>
&lt;hr>
&lt;h2 id="applications-récentes-des-preuves-à-divulgation-nulle-dans-le-web3-et-la-sécurité">Applications récentes des preuves à divulgation nulle dans le Web3 et la sécurité
&lt;/h2>&lt;p>Passé de la théorie à la pratique, le ZKP révolutionne actuellement le Web3 et la cybersécurité.&lt;/p>
&lt;h3 id="1-la-mise-à-léchelle-ultime-dethereum-par-les-zk-rollups">1. La mise à l&amp;rsquo;échelle ultime d&amp;rsquo;Ethereum par les ZK-Rollups
&lt;/h3>&lt;p>Les blockchains de couche 1 (L1) comme Ethereum sont confrontées à des contraintes importantes en matière d&amp;rsquo;évolutivité (le trilemme), car elles privilégient la décentralisation et la sécurité. La solution de couche 2 (L2) définitive à ce problème est constituée par les &lt;strong>ZK-Rollups&lt;/strong>.&lt;/p>
&lt;p>Dans un ZK-Rollup, des milliers de transactions sont exécutées et traitées hors chaîne (L2), et un « seul ZKP (Proof of Validity) » est généré pour montrer qu&amp;rsquo;elles ont toutes été exécutées correctement. Le contrat intelligent sur la chaîne L1 n&amp;rsquo;a plus qu&amp;rsquo;à vérifier cette preuve.&lt;/p>
&lt;div class="mermaid">flowchart LR
Users["Utilisateurs (Envoi Tx)"] --> Sequencer["Séquenceur (Collecte/Exécution Tx)"]
Sequencer --> Prover["Prouveur (Génération ZKP)"]
Sequencer --> L1Contract["Contrat intelligent L1 (Publication données Tx)"]
Prover --> L1Contract["Soumission ZKP (Preuve)"]
L1Contract --> Verify["Vérification et mise à jour de l'état"]&lt;/div>
&lt;p>Le plus grand avantage des ZK-Rollups, contrairement aux Optimistic Rollups (comme Arbitrum ou Optimism), est qu&amp;rsquo;aucune période de contestation (généralement 7 jours) n&amp;rsquo;est requise pour les preuves de fraude (Fraud Proofs). Puisque l&amp;rsquo;exactitude est garantie de manière cryptographique, le retrait des fonds (Finalité) vers la L1 est complété dès que la preuve est vérifiée. Actuellement, des projets comme zkSync, Starknet, Scroll ou Polygon zkEVM se livrent une concurrence acharnée, et la réalisation de &lt;strong>zkEVM&lt;/strong> compatibles avec l&amp;rsquo;EVM (Ethereum Virtual Machine) stimule une croissance rapide de l&amp;rsquo;écosystème.&lt;/p>
&lt;h3 id="2-identité-préservant-la-confidentialité-zkp-for-identity">2. Identité préservant la confidentialité (ZKP for Identity)
&lt;/h3>&lt;p>L&amp;rsquo;authentification personnelle dans le monde numérique est également fondamentalement transformée par le ZKP.
Par exemple, pour répondre à la question « Avez-vous plus de 18 ans ? », les systèmes traditionnels exigent de présenter un permis de conduire ou un passeport, ce qui transmet également des informations personnelles inutiles telles que le nom et l&amp;rsquo;adresse.&lt;/p>
&lt;p>Avec le ZKP, sur la base d&amp;rsquo;un certificat numérique émis par un organisme public (Verifiable Credential), il devient possible de &lt;strong>prouver mathématiquement uniquement le fait&lt;/strong> que « d&amp;rsquo;après ma date de naissance, j&amp;rsquo;ai plus de 18 ans à la date d&amp;rsquo;aujourd&amp;rsquo;hui ». Le vérificateur n&amp;rsquo;a besoin que de vérifier la signature du certificat et le ZKP, et ne peut pas connaître la date de naissance ni l&amp;rsquo;identité de l&amp;rsquo;utilisateur.&lt;/p>
&lt;p>Même dans les projets de preuve d&amp;rsquo;humanité (Proof of Personhood) comme Worldcoin, au lieu de stocker et de partager directement les données de l&amp;rsquo;iris, un mécanisme employant le ZKP est utilisé pour prouver uniquement « qu&amp;rsquo;il s&amp;rsquo;agit d&amp;rsquo;un être humain unique ».&lt;/p>
&lt;h3 id="3-contrats-intelligents-confidentiels-et-utilisation-en-entreprise">3. Contrats intelligents confidentiels et utilisation en entreprise
&lt;/h3>&lt;p>La nature publique des blockchains (« toutes les données sont publiques ») constituait un obstacle majeur pour les entreprises souhaitant traiter des transactions confidentielles et des informations sur les chaînes d&amp;rsquo;approvisionnement sur la blockchain.&lt;/p>
&lt;p>En utilisant la technologie ZKP (par exemple des réseaux axés sur la confidentialité comme Aleo et Aztec), il est possible de graver uniquement la validité des mises à jour de l&amp;rsquo;état sur la chaîne publique, tout en gardant les valeurs d&amp;rsquo;entrée et de sortie des transactions, voire la logique même du contrat intelligent exécuté, sous forme chiffrée. Cela empêche le front-running (MEV) dans la finance décentralisée (DeFi) et permet la construction de réseaux de consortiums confidentiels entre entreprises, tout en bénéficiant de la haute sécurité de la chaîne publique.&lt;/p>
&lt;hr>
&lt;h2 id="défis-futurs-et-perspectives-du-zkp">Défis futurs et perspectives du ZKP
&lt;/h2>&lt;p>Le ZKP est indéniablement une technologie fondamentale de la prochaine génération, mais il reste quelques défis.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Coût de calcul de la génération de preuve et accélération matérielle&lt;/strong>
La génération de ZKP nécessite des opérations polynomiales massives, des FFT (transformées de Fourier rapides) et des MSM (multiplications multi-scalaires). Actuellement, la recherche avance rapidement sur le développement de matériel dédié (FPGA ou ASIC) pour accélérer cette génération de preuves, ce que l&amp;rsquo;on appelle le &lt;strong>minage ZKP&lt;/strong> (Réseau de Prouveurs).&lt;/li>
&lt;li>&lt;strong>Standardisation et amélioration de l&amp;rsquo;expérience développeur (DX)&lt;/strong>
Des langages dédiés pour écrire des circuits ZKP tels que Circom, Cairo, Noir et Leo se multiplient. Des normes unifiées pour les rassembler et la maturation de compilateurs capables de générer automatiquement des circuits ZKP à partir de Rust ou C++ existants seront la clé pour l&amp;rsquo;adoption du ZKP par les ingénieurs logiciels en général.&lt;/li>
&lt;/ol>
&lt;h2 id="conclusion">Conclusion
&lt;/h2>&lt;p>La preuve à divulgation nulle de connaissance (ZKP) a évolué d&amp;rsquo;une simple « technologie pour accroître l&amp;rsquo;anonymat des cryptomonnaies » vers une « technologie à usage général qui redéfinit la confiance (Trust) sur l&amp;rsquo;ensemble d&amp;rsquo;Internet ». Les petites preuves calculées dans les profondeurs des équations et de la théorie cryptographique élargissent infiniment l&amp;rsquo;évolutivité de la blockchain et agissent comme un bouclier robuste pour protéger notre vie privée.&lt;/p>
&lt;p>Vers la véritable adoption massive du Web3 et la construction d&amp;rsquo;un Internet de nouvelle génération sécurisé et privé, la preuve à divulgation nulle de connaissance continuera de fonctionner comme la pièce la plus vitale. Il faudra garder un œil sur l&amp;rsquo;évolution future de la technologie ZKP.&lt;/p>
&lt;hr>
&lt;p>&lt;em>Références et liens connexes&lt;/em>&lt;/p>
&lt;ul>
&lt;li>Groth, J. (2016). &amp;ldquo;On the Size of Pairing-based Non-interactive Arguments&amp;rdquo;&lt;/li>
&lt;li>Ben-Sasson, E., et al. (2018). &amp;ldquo;Scalable, transparent, and post-quantum secure computational integrity&amp;rdquo;&lt;/li>
&lt;li>Blog de Vitalik Buterin sur les zk-SNARKs et zk-STARKs&lt;/li>
&lt;/ul></description></item><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>