<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Lattice on kenji.blog</title><link>http://kenji.blog/fr/tags/lattice/</link><description>Recent content in Lattice 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/tags/lattice/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></channel></rss>