\documentclass[a4paper,french,12pt]{article} \title{Algèbre non linéaire} \author{} \date{Dernière compilation~: \today{} à \currenttime} \usepackage{styles} \usepackage{tikz} \usetikzlibrary{shapes.multipart} \DeclareMathOperator\pgcd{pgcd} \usepackage{xcolor,colortbl} \definecolor{Red}{rgb}{1,0.2,0.2} \newcolumntype{r}{>{\columncolor{Red}}c} \begin{document} \maketitle \tableofcontents \clearpage \section{Arithmétique} Nous nous intéressons à la division euclidienne, sur nombres entiers strictement positifs. \begin{equation*} a = bq + r \quad\text{ avec } 0 \leq r < b \end{equation*} Quand $r = 0$, $a$ est un \emph{multiple} de $b$ et $b$ est un \emph{diviseur} de $a$. On notera $b|a$. À part 1, tout nombre $n$ a au moins 2 diviseurs, 1 et $n$. Certains nombres n'en ont \emph{que} deux. Ce sont des nombres \emph{premiers}~: $2,3,5,7,11,13,17,19,23,29,31,37,41,43,47\ldots$ \subsection{Théorême fondamental de l'arithmétique} Tout nombre entier se décompose sous forme de produit de puissances de nombres premiers qui est unique. \begin{align*} 10 &= 2 \times 5 \\ 16 &= 2 \times 2 \times 2 \times 2 \\ &= 2^4 \\ 54 &= 2 \times 3 \times 3 \times 3 \\ &= 2 \times 3^3 \\ 54 &= 2 \times 2 \times 13 \times 3 \\ &= 2^2 \times 13 \end{align*} \subsection{PGCD de $a$ et $b$} Le Plus Grand Commun Diviseur se note de manière équivalente~: $\pgcd(a,b)$ ou $a \wedge b$. \begin{align*} 54 &= 2 \times 3 \times 3 \times 3 \\ 52 &= 2 \times 2 \times 13 \\ &\implies \pgcd(52, 54) = 2 \end{align*} Si le PGCD de deux nombres est égal à 1, ils sont premiers entre eux. Deux nombres premiers entre eux ne sont pas forcément individuellement premiers. \begin{align*} 3 \times 7 &= 21 &\text{n'est pas premier} \\ 5 \times 11 &= 55 &\text{n'est pas premier} \\ \pgcd(21,55) &= 1 &\implies \text{ ils sont premiers entre eux} \end{align*} Pour calculer le PGCD de deux nombres, on commence par les décomposer séparément. C'est cette décomposition qui est lente, d'autant plus quand on ajoute des chiffres aux nombres à décomposer. \subsection{Algorithme d'Euclide} \begin{center} \begin{tabularx}{0.5\linewidth}{YYY} \toprule $a$ & $b$ & $r$ \\ \toprule $a$ & $b$ & $r$ \\ \midrule $b$ & $r$ & $r'$ \\ \midrule $r$ & $r'$ & $r''$ \\ \midrule $r'$ & $r''$ & $\ldots$ \\ \bottomrule \end{tabularx} \end{center} À chaque ligne, on calcule la division euclidienne de $a$ par $b$. Les restes calculés dans la colonne $r$ sont décroissants. Il suffit donc de s'arrêter quand on obtient 0. Exemple~: \begin{center} \begin{tabularx}{0.5\linewidth}{YYYl} \toprule $a$ & $b$ & $r$ & \\ \toprule 247 & 134 & 113 & \\ \midrule 134 & 113 & 21 & \\ \midrule 113 & 21 & 8 & \\ \midrule 21 & 8 & 5 & \\ \midrule 8 & 5 & 3 & \\ \midrule 5 & 3 & 2 & \\ \midrule 3 & 2 & $\boxed{1}$ & $\leftarrow$ le PGCD est là \\ \midrule 2 & 1 & 0 \\ \bottomrule \end{tabularx} \end{center} Le PGCD est le dernier reste, avant 0. \subsection{Identité de Bezout} \begin{equation*} \forall \; a, b \in \mathbb{N} : \exists\, (u,v) \in \mathbb{Z} \; / \; a \times u + b \times v = \pgcd(a,b) \end{equation*} \begin{align*} \left. \begin{array}{ll} a &= 247 \\ b &= 134 \\ \end{array} \right\} \exists\, (u,v)\; /\; 247u + 134v = \pgcd(247,134) = 1 \end{align*} \subsection{Algorithme d'Euclide étendu} \begin{enumerate} \item Initialisation~: \\ Se fait sur deux lignes. $u$ étant le coefficient de Bezout de $a$ et $v$ le coefficient de Bezout de $b$, on met leur cases à 1. \item Séquence~: \\ On calcule $q$ avec la division euclidienne. Puis, la ligne $i$ = ligne $(i-2) - q \times$ ligne $(i-1)$. \end{enumerate} \begin{center} \begin{tabularx}{0.5\linewidth}{YYYY} \toprule $r$ & $u$ & $v$ & $q$ \\ \toprule $a$ & 1 & 0 & \\ \midrule $b$ & 0 & 1 & $q$ \\ \midrule $a-q\times b$ & $1 - q \times 0$ & $0 - q \times 1$ & \\ \midrule $\vdots$ & & & \\ $\downarrow$ & & & \\ \midrule 0 & & & \\ \bottomrule \end{tabularx} \end{center} Exemple~: \begin{center} \begin{tabularx}{\linewidth}{YYYY} \toprule $r$ & $u$ & $v$ & $q$ \\ \toprule 247 & 1 & 0 & \\ \midrule 134 & 0 & 1 & 1 \\ \midrule 113 & $1 - (1 \times 0)$ & $0 - (1 \times 1)$ & 1 \\ & = 1 & = -1 & \\ \midrule 21 & -1 & 2 & 5 \\ \midrule 8 & $ 1 - (5 \times -1)$ & $-1 - (5 \times -2)$ & 2 \\ & $ = 6$ & $= -11$ & \\ \midrule 5 & -13 & 24 & 1 \\ \midrule 3 & 19 & -35 & 1 \\ \midrule 2 & -32 & 59 & 1 \\ \midrule 1 & 51 & -94 & 2 \\ \bottomrule 0 & -134 & 247 & \\ \bottomrule \end{tabularx} \end{center} On a donc~: \begin{align*} a \times u + b \times v &= \pgcd(a,b) \\ 247 \times 51 + 134 \times (-94) &= 1 \\ 12597 - 12596 &= 1 \end{align*} \subsection{L'ensemble $\frac{\mathbb{Z}}{n\mathbb{Z}}$} $\mathbb{N}, \mathbb{Z}, \mathbb{Q}, \mathbb{R}, \mathbb{C}$ Choisissons $n \geq 2$. $r$ est le reste de la division euclidienne de $a$ par $n$. On peut regrouper les nombres qui ont le même reste quand ils sont divisés par $n$. Par exemple, pour $n=11$~: \begin{align*} a &= 5 &r = 5 \\ a &= 14 &r =3 \\ a &= 16 &r = 5 \\ a &= 27 &r = 5 \end{align*} Il y a 11 restes possibles (de 0 à 10), donc 11 ``familles'' de nombres. Famille pour $r=5 : \{5, 16, 27, \ldots\}$. On note cette famille $\overline{5}$. \begin{equation*} \frac{\mathbb{Z}}{11\mathbb{Z}} = \{ \overline{0}, \overline{1}, \overline{2}, \overline{3}, \overline{4}, \overline{5}, \overline{6}, \overline{7}, \overline{8}, \overline{9}, \overline{10} \} \end{equation*} $\frac{\mathbb{Z}}{n\mathbb{Z}}$ possède $n$ éléments, de $\overline{0}$ à $\overline{n - 1}$. Calculs dans $\frac{\mathbb{Z}}{n\mathbb{Z}}$~: modulo $n$. Addition~: $\oplus$~: \begin{equation*} \overline{a}\oplus\overline{b} = \overline{(a + b)[n]} \end{equation*} Multiplication~: $\otimes$~: \begin{equation*} \overline{a}\otimes\overline{b} = \overline{(a \times b)[n]} \end{equation*} Au sens formel, la soustraction et la division n'existent pas. La soustraction n'est que l'addition avec son opposé. La division n'est que la multiplication avec son inverse. Pour $n=14$~: $\left(\frac{\mathbb{Z}}{14\mathbb{Z}}, \oplus, \otimes\right)$ \begin{align*} \overline{1} \oplus \overline{8} &= \overline{9} \\ \overline{5} \oplus \overline{11} &= \textcolor{red}{\overline{16}} = \overline{16[14]} = \overline{2} &\quad \text{ on ne note pas } \overline{16} \text{ car on n'a que jusqu'à } \overline{13} \\ \overline{3} \oplus \overline{11} &= \overline{0} &\quad \overline{3} \text{ et } \overline{11} \text{ sont opposés } \\ \text{quel est l'opposé de } \overline{6} \text{~? C'est } \overline{8} : \\ \overline{6} \oplus \overline{8} &= \overline{0} \\ \\ \overline{0} \otimes \overline{12} &= \overline{0} \\ \overline{3} \otimes \overline{3} &= \overline{9} \\ \overline{7} \otimes \overline{3} &= \overline{7} \\ \overline{6} \otimes \overline{7} &= \overline{42[14]} = \overline{0} \\ \overline{13} \otimes \overline{13} &= \overline{1} & \overline{13} \text{ est l'inverse de } \overline{13} \\ \overline{3} \otimes \overline{5} &= \overline{1} & \overline{3} \text{ est l'inverse de } \overline{5} \\ & & \overline{5} \text{ est l'inverse de } \overline{3} \\ \overline{6} \text{ et } \overline{7} \text{ n'ont pas d'inverse dans } \frac{\mathbb{Z}}{14\mathbb{Z}} \end{align*} Comment savoir si un élément a un inverse~? \begin{equation*} \text{dans } \frac{\mathbb{Z}}{n\mathbb{Z}}, \overline{a} \text{ est inversible } \implies \pgcd(a,n) = 1 \end{equation*} Exemples~: Pour $n=7$~: \hfill \begin{tabularx}{0.6\linewidth}{YYY} \toprule Élément & PGCD & Inverse~? \\ \toprule $\overline{0}$ & 0 & non \\ \midrule $\overline{1}$ & 1 & oui \\ \midrule $\overline{2}$ & 1 & oui \\ \midrule $\overline{3}$ & 1 & oui \\ \midrule $\overline{4}$ & 1 & oui \\ \midrule $\overline{5}$ & 1 & oui \\ \midrule $\overline{6}$ & 1 & oui \\ \bottomrule \end{tabularx} Pour $n=10$~: \hfill \begin{tabularx}{0.6\linewidth}{YYY} \toprule Élément & PGCD & Inverse~? \\ \toprule $\overline{0}$ & 0 & jamais \\ \midrule $\overline{1}$ & 1 & toujours \\ \midrule $\overline{2}$ & 2 & non \\ \midrule $\overline{3}$ & 1 & oui \\ \midrule $\overline{4}$ & 2 & non \\ \midrule $\overline{5}$ & 5 & non \\ \midrule $\overline{6}$ & 2 & non \\ \midrule $\overline{7}$ & 1 & oui \\ \midrule $\overline{8}$ & 2 & non \\ \midrule $\overline{9}$ & 1 & toujours \\ \bottomrule \end{tabularx} \paragraph{Inverse} \begin{equation*} \overline{a} \text{ est inversible dans } \frac{\mathbb{Z}}{n\mathbb{Z}} \iff \pgcd(a,n) = 1 \end{equation*} Ils sont donc premiers entre eux. En utilisant Bezout~: \begin{align*} \exists \, (u,v) \in \mathbb{Z} \, / \, au+nv = 1 &\implies a[n] \times u[n] + n[n] \times v[n] = 1[n] \\ &\implies a[n] \times u[n] = 1 \quad \text{ car } n[n] = 0 \\ &\implies \overline{a} \otimes \overline{u[n]} = \overline{1} \\\\ \overline{u[n]} \text{ est l'inverse de } \overline{a} \text{ dans } \frac{\mathbb{Z}}{n\mathbb{Z}} \left\{ \begin{array}{l} \text{Si $u$ est positif, } u[n] = u \\ \text{Si $u$ est négatif, } u[n] = u+n \\ \end{array} \right. \end{align*} \begin{multicols}{2} Exemple~: $\overline{7}$ est-il inversible dans $\frac{\mathbb{Z}}{15\mathbb{Z}}$~? $u=-2$, $u+n = 13$ donc l'inverse de $\overline{7}$ est $\overline{13}$. \begin{tabularx}{\linewidth}{YYY} \toprule r & u & q \\ \midrule 15 & 0 & \\ 7 & 1 & 2 \\ 1 & -2 & 7 \\ 0 & & \\ \end{tabularx} \end{multicols} \section{Éléments de cryptographie} \begin{center} \begin{tikzpicture} \node (src) at (0,0) {émetteur}; \node (kc) at (5,1.5) {$k_c$}; \node [rectangle,draw,thick] (chiff) at (5,0) {\parbox{2.5cm}{\centering fonction de \\ chiffrement}}; \draw [-latex] (kc) -- (chiff); \node (kd) at (10,1.5) {$k_d$}; \node [rectangle,draw,thick] (dechiff) at (10,0) {\parbox{2.5cm}{\centering fonction de \\ déchiffrement}}; \draw [-latex] (kd) -- (dechiff); \node (dst) at (15,0) {destinataire}; \draw [-latex] (src) -- (chiff) node[above,midway]{\parbox{2cm}{\centering$m$ \\ message \\ en clair}}; \draw [-latex] (chiff) -- (dechiff) node[above,midway]{\parbox{2cm}{\centering$c$ \\ message \\ chiffré}} node[below,midway]{\parbox{2cm}{\centering canal \\ public}} ; \draw [-latex] (dechiff) -- (dst) node[above,midway]{\parbox{2cm}{\centering$m$ \\ message \\ en clair}}; \end{tikzpicture} \end{center} Les fonctions sont publiques. Cela leur permet notamment d'être bien testées. Il faut donc un élément qui peut rester privé~: les clés de chiffrement et de déchiffrement. Pour déchiffrer un message, il suffit de connaître le message chiffré (public), la fonction de déchiffrement (public) et la clé de déchiffrement. Cette clé est donc l'unique élément privé, et c'est son partage qui va poser problème. \subsection{Chiffrement de César} Alphabet~: \begin{equation*} \begin{array}{lllll} a & b & c & \cdots & z \\ 0 & 1 & 2 & \cdots & 25 \\ \end{array} \end{equation*} Fonction de chiffrement~: \begin{equation*} c = (m + k)[26] \end{equation*} Fonction de déchiffrement~: \begin{equation*} m = c - k \end{equation*} \subsection{Chiffrement symmétrique} Si l'on connaît la clé de chiffrement ($k_c$), on connaît la clé de déchiffrement ($k_d$). $k_d$ est donc la ressource critique. Les clés sont secrètes. Enigma, utilisé par les Allemands pendant la Seconde Guerre Mondiale, est symmétrique. \subsection{Chiffrement affine} \begin{multicols}{2} On a un alphabet de $n$ symboles. \\ Par exemple ici $n=6$. \begin{tabularx}{\linewidth}{YY} & $\frac{\mathbb{Z}}{6\mathbb{Z}}$ \\ \\ a & $\overline{0}$ \\ b & $\overline{1}$ \\ c & $\overline{2}$ \\ x & $\overline{3}$ \\ ! & $\overline{4}$ \\ - & $\overline{5}$ \\ \end{tabularx} \end{multicols} Clé~: \begin{equation*} k_c = (\overline{a}, \overline{b}) \end{equation*} Chiffrement~: \begin{equation*} c = (\overline{a} \otimes m) \oplus \overline{b} \end{equation*} Donc~: \begin{equation*} \text{xab!} \implies \bar{3} \bar{0} \bar{1} \bar{4} \end{equation*} \begin{tabularx}{\linewidth}{YYYYY} xab! & $\overline{3}$ & $\overline{0}$ & $\overline{1}$ & $\overline{4}$ \\ $(\overline{a}\otimes m) \oplus \overline{b}$ & $\downarrow$ & $\downarrow$ & $\downarrow$ & $\downarrow$ \\ & $(\overline{5}\otimes \overline{3}) \oplus \overline{2}$ & $(\overline{5}\otimes \overline{0}) \oplus \overline{2}$ & $(\overline{5}\otimes \overline{1}) \oplus \overline{2}$ & $(\overline{5}\otimes \overline{4}) \oplus \overline{2}$ \\ & $=\overline{5}$ & $=\overline{2}$ & $=\overline{1}$ & $=\overline{4}$ \\ & $\downarrow$ & $\downarrow$ & $\downarrow$ & $\downarrow$ \\ & - & c & b & $!$ \\ \end{tabularx} On a donc \texttt{xab!} $\rightarrow$ \texttt{-cb!}. \begin{align*} &c = am + b &&c = \overline{a} \otimes m \oplus \overline{b} \\ &c - b = am &&c \oplus (\overline{-b}) = \overline{a} \otimes m \\ &\frac{c - b}{a} = m &&\overline{a}^{-1} \otimes (c \oplus (\overline{-b})) = m \end{align*} \begin{equation*} m = \overline{a}^{-1} \otimes c \oplus (\overline{a}^{-1} \otimes (\overline{-b})) \end{equation*} \begin{equation*} k_c : (\overline{a}, \overline{b}), \overline{a} \text{ inversible} \end{equation*} \begin{equation*} k_d : (\overline{a}^{-1}, \overline{a}^{-1} \otimes (\overline{-b})) \end{equation*} \subsection{Digrammes~: 2 caractères ou symboles} 2 caractères, en clair $\rightarrow$ 2 caractères, chiffrés. Par exemple~: \begin{align*} \begin{array}{l} \text{et} \rightarrow \text{cx} \\ \text{er} \rightarrow \text{dp} \\ \end{array} \end{align*} Le changement d'un seul des deux caractères change les \emph{deux} caractères chiffrés. Cela évite les analyses fréquentielles. \paragraph{Clé de chiffrement~: $(A,B)$} \begin{itemize} \item A est une matrice $2 \times 2$ dans $\frac{\mathbb{Z}}{n\mathbb{Z}}$. Il doit être inversible. \item B est un vecteur colonne. \end{itemize} \begin{align*} m = \begin{pmatrix} m_1 \\ m_2 \end{pmatrix} \quad A = \begin{pmatrix} a & b \\ c & d \end{pmatrix} \quad b = \begin{pmatrix} b_1 \\ b_2 \end{pmatrix} \end{align*} \paragraph{Chiffrement} \begin{equation*} c = A \otimes m \oplus B \end{equation*} \begin{align*} \begin{pmatrix} a & b \\ c & d \end{pmatrix} \begin{pmatrix} m_1 \\ m_2 \end{pmatrix} + \begin{pmatrix} b_1 \\ b_2 \end{pmatrix} = \begin{pmatrix} c_1 \\ c_2 \end{pmatrix} \end{align*} \section{RSA} Nommée d'après les initiales de ses inventeurs (Rivest, Shamir, Adleman), le RSA est un chiffrement asymmétrique, contrairement à ceux vus jusqu'ici. Les chiffrements symmétriques l'étaient parce qu'on arrivait à résoudre l'équation de chiffrement. La simplicité de cette résolution vient du fait qu'il s'agissait d'équations linéaires. Pour RSA, nous allons voir des équations non linéaires. \subsection{Chiffrement (clé publique)~: $(n,e)$} \begin{equation*} c = m^e [n] \end{equation*} \begin{itemize} \item Peut-on chiffrer et déchiffrer~? \item La sécurité des transmissions est-elle assurée~? \item Peut-on faire les calculs ``rapidement''~? Par exemple, calculer $17^{27}[34]$. Multiplier 17 par lui-même 26 fois, puis faire le modulo, est trop gourmand, et crée des chiffres souvent trop grands pour être représentés fidèlement. On peut aussi faire le modulo à chaque étape. Cela crée des nombres plus petits, mais le temps de calcul devient vite très long. On a en fait une \emph{complexité linéaire}~: le temps de calcul est proportionnel à $e$. \end{itemize} Calcul rapide de $23^{27}[34]$~: \begin{itemize} \item Décomposer $e=27$ en puissances de 2 \begin{align*} \left. \begin{array}{ll} 27 &= 16 + 11 \\ &= 16 + 8 + 3 \\ &= 16 + 8 + 2 + 1 \\ \end{array} \right\} \implies 23^{27} = 23^{16+8+2+1} \\ \\ \implies 23^{16+8+2+1} = 23^{16} \times 23^{8} \times 23^{2} \times 23 \end{align*} \item Simplifier la puissance \begin{align*} \left. \begin{array}{ll} (a^b)^2 &= a^b \times a^b = a^{2b} \\ a^2 &= a^2 \\ a^4 &= (a^2)^2 \\ a^8 &= (a^4)^2 \\ a^{16} &= (a^8)^2 \\ \end{array} \right\} \begin{array}{ll} 23^2 [34] &= (23 \times 23) [34] = 19 \\ 23^4 [34] &= (19 \times 19) [34] = 21 \\ 23^8 [34] &= (21 \times 21) [34] = 33 \\ 23^{16} [34] &= (33 \times 33) [34] = 1 \\ \end{array} \\ (23 \times 19 \times 21 \times 33 \times 1) [34] = 5 \times 1 = 5 \end{align*} \end{itemize} La complexité est maintenant logarithmique. \subsection{Déchiffrement (clé privée)~: $(n,d)$} \begin{center} \begin{tikzpicture} \node [rectangle,draw,thick] (src) at (-5,0) {\parbox{4cm}{\centering émetteur \\ partie privée \\ information privée \\ clé privée $(n,d)$ }} ; \node [rectangle,draw,thick] (public) at (0,0) {\parbox{4cm}{\centering espace publique \\ clé publique $(n,e)$ \\ formule de chiffrement }} ; \node [rectangle,draw,thick] (dst) at (5,0) {\parbox{4cm}{\centering destinataire \\ partie privée \\ message en clair $m$ \\ $c = m^e [n]$ }} ; \draw [-latex] (src) -- (public); \draw (dst.south) -- (5,-2); \draw (5,-2) -- (-5,-2) node[above,midway]{$c$}; \draw [-latex] (-5,-2) -- (src); \end{tikzpicture} \end{center} On connaît $n,e,c$. On sait que $c=m^e [n]$. Pour trouver $m$ à partir de $n$, $e$ et $c$, on a besoin du logarithme discret. En théorie de la complexité, il s'agit d'un \emph{problème difficile}. On ne sait pas le résoudre efficacement. La solution mathématique existe, mais il faudrait plusieurs milliards d'années pour la résoudre. Pour déchiffrer, on va utiliser une clé privée $(n,d)$. Le calcul est alors exactement le même que pour le chiffrement~: \begin{equation*} m = c^d [n] \end{equation*} En recevant $c$ (rappel~: $c = m^e [n]$)~: \begin{align*} c^d [n] &= (m^e [n])^d [n] \\ &= m^{ed} [n] \end{align*} Or, pour déchiffrer, il faut obtenir le message en clair, donc \emph{il faut que} $m^{ed} [n] = m [n]$. On ne peut donc pas choisir $e$ et $d$ au hasard. $e$ et $d$ sont liés. \subsection{$\varphi(n)$~: Indicatrice d'Euler} Dans $\frac{\mathbb{Z}}{n\mathbb{Z}}$~: \begin{tabular}{cc|cccccrc} \multicolumn{2}{c}{$n=7$} & \multicolumn{7}{c}{puissances} \\ \toprule élément & est-il inversible~? & 1 & 2 & 3 & 4 & 5 & 6 & 7 \\ \midrule $\overline{0}$ & jamais & $\overline{0}$ & $\overline{0}$ & $\overline{0}$ & $\overline{0}$ & $\overline{0}$ & $\overline{0}$ & $\overline{0}$ \\ $\overline{1}$ & toujours & $\overline{1}$ & $\overline{1}$ & $\overline{1}$ & $\overline{1}$ & $\overline{1}$ & $\overline{1}$ & $\overline{1}$ \\ $\overline{2}$ & oui & $\overline{2}$ & $\overline{4}$ & $\overline{1}$ & $\overline{2}$ & $\overline{4}$ & $\overline{1}$ & $\overline{2}$ \\ $\overline{3}$ & oui & $\overline{3}$ & $\overline{2}$ & $\overline{6}$ & $\overline{4}$ & $\overline{5}$ & $\overline{1}$ & $\overline{3}$ \\ $\overline{4}$ & oui & $\overline{4}$ & $\overline{2}$ & $\overline{1}$ & $\overline{4}$ & $\overline{2}$ & $\overline{1}$ & $\overline{4}$ \\ $\overline{5}$ & oui & $\overline{5}$ & $\overline{4}$ & $\overline{6}$ & $\overline{2}$ & $\overline{3}$ & $\overline{1}$ & $\overline{5}$ \\ $\overline{6}$ & oui & $\overline{6}$ & $\overline{1}$ & $\overline{6}$ & $\overline{1}$ & $\overline{6}$ & $\overline{1}$ & $\overline{6}$ \\ \bottomrule \end{tabular} \begin{itemize} \item 6 éléments inversibles \item toutes les puissances 6 des éléments valent $\overline{1}$ \item toutes les puissances 7 des éléments sont ces éléments \end{itemize} On constate que si un élément à $n$ éléments inversibles, toutes les puissances $n$ valent $\overline{1}$. Le nombre d'éléments inversibles $\frac{\mathbb{Z}}{n\mathbb{Z}}$ se note $\varphi(n)$, l'indicatrice d'Euler. \begin{equation} \label{eq:phi1} \text{Si $p$ est un nombre premier, } \varphi(p) = p - 1 \end{equation} \begin{equation} \label{eq:phi2} \text{Si $p$ est premier et } k \geq 2, \quad \varphi(p^k) = (p-1)\cdot p^{(k-1)} \end{equation} \begin{equation} \label{eq:phi3} \text{Si $a$ et $b$ sont premiers entre eux } (\pgcd(a,b)=1), \quad \varphi(ab) = \varphi(a) \times \varphi(b) \end{equation} Ces trois règles vont nous permettre de trouver le nombre d'éléments inversibles très rapidement. Exemples~: Règle~\eqref{eq:phi1}~: \begin{align*} \varphi(2) = 2 - 1 = 1 \end{align*} Règle~\eqref{eq:phi2}~: \begin{align*} \varphi(81) = \varphi(3^4) = (3-1) \times 3^{(4-1)} = 2 \times 3^3 = 54 \end{align*} Règle~\eqref{eq:phi3}~: \begin{align*} \varphi(15) = \varphi(3 \times 5) &= \varphi(3) \times \varphi(5) \\ &= 2 \times 4 \\ &= 8 \end{align*} Ceci implique que, par exemple~: \begin{align*} \text{Dans } \frac{\mathbb{Z}}{200\mathbb{Z}}\;: \varphi(200) = 80 \implies 80 \text{ éléments inversibles} \\ \overline{37} \text{ est inversible} \\ \quad \overline{37}^{80} &= \overline{1} & 37^{80}[200] &= 1 \\ \quad \overline{37}^{81} &= \overline{37} & 37^{81}[200] &= 37 \\ \end{align*} Si $n$ est le produit de deux nombres premiers $p$ et $q$, alors~: \begin{equation} \label{eq:rsa} \forall a \in [1, n-1] \quad a^{\varphi(n)}[n] = 1, \quad a^{(\varphi(n) + 1)}[n] = a \end{equation} \eqref{eq:rsa} est le théorême fondamental de RSA\@. \subsection{$\varphi(n)$ appliqué à l'identité de Bezout} Le fonctionnement de RSA se base sur $\varphi(n)$ appliqué à l'identité de Bezout. Pour rappel~: \begin{equation*} \forall \; (a,b) \in \mathbb{N}^2 : \exists\, (u,v) \in \mathbb{Z}^2 \; / \; a \times u + b \times v = \pgcd(a,b) \end{equation*} Soit $n=p \times q$ \quad on a $\varphi(n)$ \quad on choisit $e \; / \pgcd(e, \varphi(n)) = 1$ En appliquant Bezout à $e$ et $\varphi(n)$~: \begin{equation*} \exists\, (d,k) \; / \; e \cdot d + k \cdot \varphi(n) = 1 \end{equation*} \begin{align*} \text{Soit } a \in [1,n-1] \quad &a^{(ed + k\varphi(n))} = a^1 \\ \iff & a^{ed} \times a^{k\varphi(n)} = a \\ \iff & a^{ed} \times (a^{\varphi(n)})^k = a \\ \iff & a^{ed}[n] \times (a^{\varphi(n)}[n])^k = a \quad\text{ or d'après RSA~: } a^{\varphi(n)}[n] = 1 \\ \text{donc } & a^{ed}[n] \times 1^k = a \\ \iff & a^{ed}[n] = a \end{align*} \begin{equation*} \text{alors } \exists\, d\; /\; \forall\; a \in [1,n-1] \quad a^{ed}[n] = a \end{equation*} \hfill où $d$ est le coefficient de Bezout associé à $e$. \begin{center} \begin{tikzpicture} \node[label=below:\parbox{2cm}{\centering \small message \\ en clair}] (a1) at (0,0) {\large $a$}; \node[ label=below:\parbox{2cm}{\centering \small message \\ chiffré}, label=above:{\small $e$ = clé de chiffrement} ] (chiff) at (3,0) {\large $a^e[n]$}; \draw[-latex] (a1) -- (chiff); \node[label=above:{\small $d$ = clé de déchiffrement}] (dechiff) at (8,0) {\large $(a^e[n])^d[n] = a^{ed}[n]$}; \draw[-latex] (chiff) -- (dechiff); \node[label=below:\parbox{2cm}{\centering \small message \\ en clair}] (a2) at (11,0) {\large $a$}; \draw[-latex] (dechiff) -- (a2); \end{tikzpicture} \end{center} \begin{itemize} \item $(n,e)$ est la clé publique \item $(n,d)$ est la clé privée \end{itemize} Hypothèses~: \begin{itemize} \item $n = p \times q$ \hfill données publiques \item $\pgcd(e, \varphi(n)) = 1$ \hfill \textcolor{red}{données privées} \end{itemize} \begin{center} \begin{tikzpicture} \node[rectangle,thick, draw] (alice) at (0,0) { \parbox{4cm}{\centering Alice \\ $n_A,e_A,\textcolor{red}{d_A}$} }; \node (key) at (5,2) { \parbox{3cm}{$(n_A,e_A)$ \\ \small ``Pour m'envoyer un message, utilisez $(n_A,e_A)$''} }; \draw[-latex] (alice) -- (key); \node[rectangle,thick, draw] (bob) at (10,0) { \parbox{4cm}{\centering Bob \\ $c=\textcolor{red}{m}^{e_A}[n_A]$} }; \draw[-latex] (bob) -- (alice) node[below,midway]{$c$}; \end{tikzpicture} \end{center} Si je veux intercepter $c$, je connais $c, n_A, e_A$, je sais que $c=m^{e_A}[n_A]$ mais ce n'est pas une équation linéaire. Je ne peux pas trouver $m$ en calcul direct. Seule la clé \textcolor{red}{$d_A$} permet de déchiffrer. Pour trouver $d_A$~: c'est le coefficient de Bezout de $e_A$ quand on utilise Bezout en $e_A$ et $\varphi(n_A)$. Je dois donc faire la décomposition en facteurs premiers de $n_A$. \begin{align*} \varphi(n_A) = \varphi(p \times q) &= \varphi(p) \times \varphi(q) \\ &= (p-1)(q-1) \end{align*} Donc $d_A$ est calculé à partir de $p$ et $q$. \subsection{Signature de message} \begin{center} \begin{tikzpicture} \node[rectangle,thick,draw,red] (alice) at (0,0) { \parbox{4cm}{\centering Alice \\ $d_A$} }; \node[rectangle,thick,draw,blue] (bob) at (10,0) { \parbox{4cm}{\centering Bob \\ $d_B$ \\ preuve d'identité} }; \node (alicekey) at (3.5,1) {$(n_A,e_A)$}; \node (bobkey) at (6.5,1) {$(n_B,e_B)$}; \node (bobcode) at (6,0) {$AC_B$}; \draw[-latex] (alice) -- (alicekey); \draw[-latex] (bob) -- (bobkey); \draw[-latex] (bob) -- (bobcode); \end{tikzpicture} \end{center} Bob publie un code d'authentification $AC_B$. Sa signature se fait en deux étapes~: \begin{enumerate} \item Il calcule $AC_B^{d_B}[n_B] = V$. Cette valeur $V$, seul Bob est capable de la produire. \item Il la chiffre avec la clé d'Alice~: $(n_A, e_A)$. \end{enumerate} On a donc $(S_{B\rightarrow A})$, la signature de Bob à Alice. Pour vérifier la signature, Alice va aussi procéder en deux étapes~: \begin{enumerate} \item Elle reçoit $(S_{B\rightarrow A})$, qu'elle déchiffre avec $(n_A, d_A)$, ce qui lui donne $V$. \item Elle fait le calcul $V^{e_B}[n_B]$, ce qui doit lui donner $AC_B$. \end{enumerate} Pour signer un message, il faut donc savoir deux choses~: \begin{enumerate} \item Qui fabrique la signature~? Qui s'authentifie~? $\rightarrow$ l'émetteur utilise \textcolor{red}{sa clé privée}. \item Qui est le destinataire~? $\rightarrow$ l'émetteur utilise \textcolor{blue}{la clé publique du destinataire}. \end{enumerate} $t$ veut s'authentifier auprès de $s$. \textcolor{red}{$(n_t,d_t)$} et \textcolor{blue}{$(n_s,e_s)$}. \begin{center} \begin{tabularx}{0.3\linewidth}{YY} \toprule \multicolumn{2}{c}{$S$ et $T$} \\ \midrule $(n_s,e_s)$ & $(n_t,e_t)$ \\ \midrule \textcolor{red}{$d_s$} & \textcolor{blue}{$d_t$} \\ \midrule $AC_s$ & $AC_t$ \\ \bottomrule \end{tabularx} \end{center} \begin{center} \begin{tikzpicture} \draw[help lines, dashed] (0,0) grid (7,5); \draw[-latex] (0,0) -- (7,0); \draw[-latex] (0,0) -- (0,5); \node at (2.5,3) {$n_s$}; \draw[thick] (2,0) -- (2,2.5) plot[domain=2:3]({\x}, {2.5}) (3,2.5) -- (3,0) ; \node at (4.5,4) {$n_t$}; \draw[thick] (4,0) -- (4,3.5) plot[domain=4:5]({\x}, {3.5}) (5,3.5) -- (5,0) ; \node (act) at (0.5,2) {$AC_t$}; \draw[-latex] (act) -- (2,2); \draw[-latex,red] (2,2) -- (3,1) node[below,midway]{$e_s$}; \draw[-latex] (3,1) -- (4,1); \draw[-latex,blue] (4,1) -- (5,3) node[above,midway]{$d_t$}; \node (sts) at (6.5,3) {$S_{t\rightarrow s}$}; \draw[-latex] (5,3) -- (sts); \node (emetteur) at (0,-0.5) { \parbox{2cm}{\centering émetteur \\ $t$} }; \node (destinataire) at (7,-0.5) { \parbox{2cm}{\centering destinataire \\ $s$} }; \draw[-latex,red] (emetteur) -- (destinataire) node[below,midway]{ \parbox{2.5cm}{\centering construit sa \\ signature} }; \end{tikzpicture} \end{center} \section{ElGamal} \subsection{Groupe cyclique} On utilise plusieurs puissances dans un \emph{groupe cyclique}. On travaille dans $\frac{\mathbb{Z}}{p\mathbb{Z}}$ avec $p$ premier. Tous les éléments sauf $\overline{0}$ sont alors inversibles. Si on se limite aux éléments inversibles, on a l'ensemble $(\mathbb{F}_p^*, \otimes)$. Par exemple, pour $p=7\,: \frac{\mathbb{Z}}{7\mathbb{Z}}$ sauf $\overline{0}$~: $\{\overline{1}, \overline{2}, \overline{3}, \overline{4}, \overline{5}, \overline{6}\}$. Il y a au moinss un élément qui génère tous les autres par $\otimes$. On peut multiplier l'élément par lui-même (modulo $p$) autant de fois que l'on veut, on va finir par retomber au point de départ (une fois arrivé sur $\overline{1}$). \begin{center} \begin{tabular}{l|l} \toprule $\overline{1}$ & $\overline{1}, \overline{1}, \overline{1}, \overline{1} \ldots$ \\ \midrule $\overline{2}$ & $\overline{2}, \overline{4}, \overline{1}, \overline{2}, \overline{4}, \overline{1} \ldots$ \\ \midrule $\overline{3}$ & $\overline{3}, \overline{2}, \overline{6}, \overline{4}, \overline{5}, \overline{1} \ldots$ \\ \bottomrule \end{tabular} \end{center} Dans cet exemple, un tel générateur est $\overline{3}$. Un tel groupe s'appelle un \emph{groupe cyclique}. \begin{equation*} \forall\, p \text{ premier } > 3, (\mathbb{F}_p^*, \otimes) \text{ est un groupe cyclique} \end{equation*} \subsection{Génération des clés} Ici encore, $e$ sera la clé publique et $d$ la clé privée. Dans $\mathbb{F}_p^*$, on calcule modulo $p$. Pour choisir des clés pour ElGamal~: \begin{itemize} \item On choisit un nombre premier $p$ pour calculer dans $\mathbb{F}_p^*$. \item On trouve un générateur $g$~: un élément qui génère les autres par $\otimes$. \item On choisit $d$ entier, tel que $1