summaryrefslogtreecommitdiffstats
path: root/exercices2b.tex
blob: 17f032c5b5ebd1ffa1a6e33a7fb0a67185b3cb80 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
%% This is a LaTeX document.  Hey, Emacs, -*- latex -*- , get it?
\documentclass[12pt]{article}
\usepackage[francais]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{times}
% A tribute to the worthy AMS:
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{amsthm}
%
\usepackage{mathrsfs}
\usepackage{wasysym}
\makeatletter\relax\let\Square\@undefined\relax\makeatother
\usepackage{bbding}
\usepackage{url}
%
\theoremstyle{definition}
\newtheorem{comcnt}{Tout}
\newcommand\exercice{%
\refstepcounter{comcnt}\bigbreak\noindent\textbf{Exercice~\thecomcnt.}}
\newcommand{\limp}{\mathrel{\Rightarrow}}
\newcommand{\liff}{\mathrel{\Longleftrightarrow}}
\newcommand{\pgcd}{\operatorname{pgcd}}
\newcommand{\ppcm}{\operatorname{ppcm}}
\newcommand{\signe}{\operatorname{signe}}
\newcommand{\tee}{\mathbin{\top}}
\newcommand{\Frob}{\operatorname{Frob}}
\newcommand{\dothis}{\leavevmode\hbox to0pt{\hskip-\parindent\HandRight{}\hskip0ptplus1fil}}
\DeclareUnicodeCharacter{00A0}{~}
%
\newif\ifcorrige
\corrigetrue
\newenvironment{corrige}%
{\ifcorrige\relax\else\setbox0=\vbox\bgroup\fi%
\smallbreak\noindent{\underbar{\textit{Corrigé.}}\quad}}
{{\hbox{}\nobreak\hfill\checkmark}%
\ifcorrige\relax\else\egroup\fi\par}
%
%
%
\begin{document}
\ifcorrige
\title{INFMDI720\\Exercices --- Corrigé\\{\normalsize Rappels mathématiques pour la cryptographie}}
\else
\title{INFMDI720\\Exercices\\{\normalsize Rappels mathématiques pour la cryptographie}}
\fi
\author{}
\date{}
\maketitle
\pretolerance=10000
\tolerance=8000

%
%
%

\setcounter{comcnt}{4}

\exercice

On admet que le polynôme $P(t) = t^8+t^4+t^3+t+1 \in \mathbb{F}_2[t]$
est irréductible.  On pose $F = \mathbb{F}_2[t]/(P)$.

On fait la convention suivante : un élément $a_0 + a_1 \bar t + \cdots
+ a_7 \bar t^7$ de $F$, où $a_0,\ldots,a_7 \in \{0,1\}$ sera
« représenté » par l'entier $a_0 + a_1 \times 2 + \cdots + a_7 \times
2^7$ entre $0$ et $255$.

\dothis Expliquer pourquoi cette convention a bien
un sens.

\begin{corrige}
On a des bijections successives entre
\begin{itemize}
\item $F = \mathbb{F}_2[t]/(P)$,
\item les polynômes de $\mathbb{F}_2[t]$ de degré $<8$ (via le reste
  de la division euclidienne par $P$),
\item les octuplets $(a_0,\ldots,a_7)$ d'éléments de $\mathbb{F}_2$
  (coefficients du polynôme),
\item les octuplets $(a_0,\ldots,a_7)$ d'éléments de $\{0,1\}$
  (chiffres de la représentation binaire d'un entier de $8$ bits),
\item les entiers entre $0$ et $255$,
\end{itemize}
qui se composent bien en une bijection comme indiqué.
\end{corrige}

\dothis Avec cette convention, quels sont par exemple les entiers
représentant les éléments $\bar t$ et $\bar t^7 + \bar t^6 + \bar t^5
+ \bar t^4 + \bar t^3 + \bar t$ de $F$ ?

\dothis Inversement, quels éléments de $F$ sont représentés par les
entiers $31$ et $64$ ?

\begin{corrige}
L'élément $\bar t$ de $F$ est représenté par l'entier $2^1 = 2$, et
$\bar t^7 + \bar t^6 + \bar t^5 + \bar t^4 + \bar t^3 + \bar t$ par
$2^7 + 2^6 + 2^5 + 2^4 + 2^3 + 2 = 250$.

Réciproquement, $31 = 2^4 + 2^3 + 2^2 + 2 + 1$ représente $\bar t^4 +
\bar t^3 + \bar t^2 + \bar t + 1$, et $64 = 2^6$ représente $\bar
t^6$.

Remarquons par ailleurs que $0$ et $1$ représentent $0$ et $1$, ce qui
épargne beaucoup de maux de tête.
\end{corrige}

On appelle $\oplus$ et $\otimes$ les opérations définies sur les
entiers entre $0$ et $255$ qui correspond aux opérations $+$ et
$\times$ sur $F$ (autrement dit : $a\oplus b$ est l'entier qui
représente la somme dans $F$ des éléments représentés par $a$ et $b$,
et de même $a\otimes b$ pour le produit ; ces opérations font donc de
$\{0,\ldots,255\}$ un corps isomorphe à $F$, puisqu'il s'agit juste
d'une représentation différente de la même chose).

\dothis Calculer par exemple $7\oplus 11$, puis $4\otimes 4$, et enfin
$141 \otimes 2$.

\begin{corrige}
L'entier $7 = 2^2 + 2 + 1$ représente $\bar t^2 + \bar t + 1$ et $11 =
2^3 + 2 + 1$ représente $\bar t^3 + \bar t + 1$, donc $7\oplus 11$ est
l'entier qui représente $(\bar t^2 + \bar t + 1) + (\bar t^3 + \bar t
+ 1) = \bar t^3 + \bar t^2$, c'est-à-dire $2^3 + 2^2 = 12$.
\end{corrige}

\dothis Expliquer pourquoi l'opération $\oplus$ est, sur les entiers
de 8 bits, l'opération \texttt{XOR} de « ou exclusif » (c'est-à-dire
l'opération calculée bit à bit par les règles : $\mathtt{XOR}(0,0) =
0$, $\mathtt{XOR}(0,1) = \mathtt{XOR}(1,0) = 1$ et $\mathtt{XOR}(1,1)
= 0$).  Le polynôme $P$ a-t-il joué un rôle ici ?

\begin{corrige}
L'addition dans $F$ se fait terme à terme sur les coefficients, comme
le \texttt{XOR}, donc il s'agit simplement de constater que l'addition
dans $\mathbb{F}_2$ est bien le \texttt{XOR} des bits, ce qui est
clair.  Le polynôme $P$ (à part peut-être son degré, et bien sûr le
fait qu'il est à coefficients dans $\mathbb{F}_2$) n'a joué aucun rôle
ici.

Remarquons au passage que $x \oplus x = 0$ pour tout $x$ (on a affaire
à un corps de caractéristique $2$), ce qui est clair sur le
\texttt{XOR}.
\end{corrige}

\dothis En distinguant les deux cas $x<128$ et $x\geq 128$, donner une
expression générale de $2 \otimes x$ (qui pourra utiliser l'opération
$\oplus$ de « ou exclusif »).  Expliquer où le polynôme $P$ a joué un
rôle.

\begin{corrige}
Si $x<128$ alors le bit $a_7$ de poids fort de $x$ est nul,
c'est-à-dire que l'élément de $F$ représenté par $x$ n'a pas de terme
en $\bar t^7$.  Pour le multiplier par $\bar t$ (représenté par $2$),
on décale simplement d'un cran tous les coefficients $a_0,\ldots,a_7$,
et puisque $a_7=0$ on a encore affaire à un polynôme de degré $<8$.
Ce décalage d'un cran correspond, sur l'écriture binaire, à une
multiplication par $2$, donc : $2\otimes x = 2x$ (multiplication
usuelle) lorsque $x<128$.

Si au contraire $x \geq 128$, alors le bit $a_7$ de poids fort de $x$
vaut $1$.  On peut écrire $x = x' \oplus 128$ où $x'$ (qui
vaut $x\oplus 128$) est constitué des autres bits de $x$ et vérifie
donc $x' < 128$.  On a donc $2 \otimes x = (2\otimes x') \oplus
(2\otimes 128)$ (puisque $\otimes$ est distributive sur $\oplus$ comme
$F$ est un corps), c'est-à-dire : $2\otimes x = 2(x\oplus 128) \oplus
27$ lorsque $x\geq 128$.  Le nombre $27 = 2^4 + 2^3 + 2 + 1$ dans
cette expression représente l'élément $\bar t^4+\bar t^3+\bar t+1$
donné par le reste de la division euclidienne de $t^8$ par $t$ (i.e.,
les termes de $P$ autres que le terme dominant $t^8$) : c'est le seul
endroit où $P$ intervient.
\end{corrige}

\dothis Écrire une fonction (dans un langage de programmation
quelconque) qui calcule $2 \otimes x$ en fonction de $x$.

\begin{corrige}
En C, par exemple :

\noindent
\texttt{uint8\_t multiplier\_par\_deux(uint8\_t x) \{\\\strut~~if (x\&0x80)
  return (x<{}<1)\char`^{0x1b}; else return x<{}<1;\\\}}

(On a écrit $27$ comme \texttt{0x1b}, le test à $128$ comme un « et
  logique » avec \texttt{0x80}, et la multiplication par $2$ par un
décalage vers la gauche de $1$ bit.  On a fait usage de types
non-signés de 8 bits exactement (\texttt{uint8\_t}), pour pouvoir
supposer que le décalage vers la gauche jetterait le bit débordant.)
\end{corrige}

\dothis Utiliser cette fonction, et notamment la distributivité
$\otimes$ sur $\oplus$, pour écrire une fonction calculant $x \otimes
y$ en général.

\begin{corrige}
Remarquons que si $y = b_0 + b_1 \times 2 + \cdots + b_7 \times 2^7$
où $b_i \in \{0,1\}$ sont les bits de $y$, alors on a aussi $y = b_0
\oplus (b_1 \otimes 2) \oplus \cdots \oplus (b_7 \otimes 2^{\otimes
  7})$ (où $2^{\otimes i}$ désigne $2\otimes \cdots \otimes 2$ avec
$i$ facteurs).  En effet, ceci est dû aux trois faits suivants :
\begin{itemize}
\item On a $2^{\otimes i} = 2^i$ si $0\leq i\leq 7$.  Ceci est dû au
  fait que $2\otimes x = 2x$ si $x<128$.
\item On a $b \otimes x = b x$ pour $b \in \{0,1\}$.  C'est évident
  (pour $\otimes$ comme pour $\times$, multiplier par $0$ donne $0$ et
  par $1$ donne l'identité).
\item Une somme de puissances de $2$ distinctes est aussi leur
  \texttt{XOR} (car il n'y a pas de retenues dans l'addition).
\end{itemize}
Dans ces conditions, on a donc $x \otimes y = (b_0 \otimes x) \oplus
(b_1 \otimes x \otimes 2) \oplus \cdots \oplus (b_7 \otimes x \otimes
2^{\otimes 7})$.  La fonction va donc calculer $x \otimes 2^{\otimes
  i}$ en appliquant successivement la fonction de doublement déjà
écrite, puis faire le \texttt{XOR} des différentes valeurs en question
pour lesquelles le bit $b_i$ correspondant de $y$ vaut $1$.  Cela
donne :

\noindent
\texttt{uint8\_t multiplier(uint8\_t x, uint8\_t y)
  \{\\\strut~~uint8\_t z = 0;\\\strut~~while (y) \{\\\strut~~~~if
  (y\&1) z \char`^= x;\\\strut~~~~x =
  multiplier\_par\_deux(x);\\\strut~~~~y >{}>=
  1;\\\strut~~\}\\\strut~~return z;\\\strut\}}
\end{corrige}

\dothis Calculer $250 \otimes 250$.

\begin{corrige}
Il faut écrire les quantités en binaire :

\begin{tabular}{rcc@{}c@{}c@{}c@{}c@{}c@{}c@{}c@{}lc}
$27$&$=$&\texttt{0}&\texttt{0}&\texttt{0}&\texttt{1}&\texttt{1}&\texttt{0}&\texttt{1}&\texttt{1}&${}_{(2)}$&\\\hline
$250$&$=$&\texttt{1}&\texttt{1}&\texttt{1}&\texttt{1}&\texttt{1}&\texttt{0}&\texttt{1}&\texttt{0}&${}_{(2)}$&\\
$250 \otimes 2$&$=$&\texttt{1}&\texttt{1}&\texttt{1}&\texttt{0}&\texttt{1}&\texttt{1}&\texttt{1}&\texttt{1}&${}_{(2)}$&$*$\\
$250 \otimes 2^2$&$=$&\texttt{1}&\texttt{1}&\texttt{0}&\texttt{0}&\texttt{0}&\texttt{1}&\texttt{0}&\texttt{1}&${}_{(2)}$&\\
$250 \otimes 2^3$&$=$&\texttt{1}&\texttt{0}&\texttt{0}&\texttt{1}&\texttt{0}&\texttt{0}&\texttt{0}&\texttt{1}&${}_{(2)}$&$*$\\
$250 \otimes 2^4$&$=$&\texttt{0}&\texttt{0}&\texttt{1}&\texttt{1}&\texttt{1}&\texttt{0}&\texttt{0}&\texttt{1}&${}_{(2)}$&$*$\\
$250 \otimes 2^5$&$=$&\texttt{0}&\texttt{1}&\texttt{1}&\texttt{1}&\texttt{0}&\texttt{0}&\texttt{1}&\texttt{0}&${}_{(2)}$&$*$\\
$250 \otimes 2^6$&$=$&\texttt{1}&\texttt{1}&\texttt{1}&\texttt{0}&\texttt{0}&\texttt{1}&\texttt{0}&\texttt{0}&${}_{(2)}$&$*$\\
$250 \otimes 2^7$&$=$&\texttt{1}&\texttt{1}&\texttt{0}&\texttt{1}&\texttt{0}&\texttt{0}&\texttt{1}&\texttt{1}&${}_{(2)}$&$*$\\\hline
$250 \otimes 250$&$=$&\texttt{0}&\texttt{0}&\texttt{0}&\texttt{0}&\texttt{0}&\texttt{0}&\texttt{1}&\texttt{0}&${}_{(2)}$&\\
\end{tabular}

(La première ligne est là pour simplifier le calcul de $2x' \oplus 27$
lorsqu'on en a besoin, et les $*$ indiquent les lignes dont le bit
correspondant de $y=250$ vaut $1$, ce sont celles dont on fait le
\texttt{XOR}.)

Le résultat est donc $250 \otimes 250 = 2$.
\end{corrige}

%
%
%

\exercice

Soit $q = p^d$ une puissance d'un nombre premier $p$.

(A) On appelle \emph{trace absolue} dans $\mathbb{F}_q$ (ou bien trace
dans $\mathbb{F}_q$ sur $\mathbb{F}_p$) l'application $\mathrm{tr}
\colon \mathbb{F}_q \to \mathbb{F}_q$ qui envoie un élément $x \in
\mathbb{F}_q$ sur la somme $\sum_{i=0}^{d-1} \Frob^i(x)$ des $d$
itérées consécutives du Frobenius, où comme d'habitude $\Frob^i(x)$
désigne $x^{p^i}$.

(0) Montrer que $\mathrm{tr}(x+y) = \mathrm{tr}(x) + \mathrm{tr}(y)$
pour tous $x,y \in \mathbb{F}_q$ et que $\mathrm{tr}(cx) =
c\,\mathrm{tr}(x)$ si $c \in \mathbb{F}_p$ et $x \in \mathbb{F}_q$.

(1) Montrer que $\mathrm{tr}$ prend en fait des valeurs dans
$\mathbb{F}_p$.  (On pourra pour cela chercher à calculer
$\Frob(\mathrm{tr}(x))$.)

(2) Expliquer pourquoi $\mathrm{tr}(x)$ est un polynôme de $x$ (dont
on calculera le degré).

(3) Montrer qu'il existe $x \in \mathbb{F}_q$ tel que $\mathrm{tr}(x)
\neq 0$.

(4) En déduire que $\mathrm{tr}$ prend toutes les valeurs
de $\mathbb{F}_p$ (i.e., qu'il s'agit d'une fonction surjective ; on
pourra par exemple commencer par montrer qu'elle prend la valeur $1$).

\smallbreak

(B) On appelle \emph{norme absolue} dans $\mathbb{F}_q$ (ou bien norme
dans $\mathbb{F}_q$ sur $\mathbb{F}_p$) l'application $\mathrm{N}
\colon \mathbb{F}_q \to \mathbb{F}_q$ qui envoie un élément $x \in
\mathbb{F}_q$ sur le produit $\prod_{i=0}^{d-1} \Frob^i(x)$ des $d$
itérées consécutives du Frobenius, où comme d'habitude $\Frob^i(x)$
désigne $x^{p^i}$.

(0) Montrer que $\mathrm{N}(xy) = \mathrm{N}(x)\,\mathrm{N}(y)$ pour
tous $x,y \in \mathbb{F}_q$.

(1) Montrer que $\mathrm{N}$ prend en fait des valeurs dans
$\mathbb{F}_p$.  (On pourra pour cela chercher à calculer
$\Frob(\mathrm{N}(x))$.)

(2) Exprimer $\mathrm{N}(x)$ comme une certaine puissance de $x$ (dont
on calculera l'exposant).

(3) Montrer que $\mathrm{N}(x) = 0$ si et seulement si $x=0$.

(4) Montrer que $\mathrm{N}$ prend toutes les valeurs
de $\mathbb{F}_p$ (i.e., qu'il s'agit d'une fonction surjective ; on
pourra considérer $\mathrm{N}(g)$ pour $g$ un élément primitif de
$\mathbb{F}_q^\times$, et montrer qu'il est d'ordre $p-1$ dans
$\mathbb{F}_p^\times$).

%
%
%
\end{document}