Table des matières

publicité
Table des matières
1 Algorithme de Berkekamp
1.1 Principe de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.1 Première étape . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.2 Seconde étape . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Démonstrations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.1 Elimination des facteurs multiples (première étape) . . . . . . .
1.2.2 Seconde étape (algorithme de Berlekamp) . . . . . . . . . . . .
1.2.3 Application : recherche de polynômes irréductibles de degré fixé
1.3 Factorisation de polynômes à coefficients entiers . . . . . . . . . . . . .
1.3.1 Théorème de Landau-Mignotte . . . . . . . . . . . . . . . . . .
1.3.2 Première méthode . . . . . . . . . . . . . . . . . . . . . . . . .
1.3.3 Seconde méthode . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
2
2
3
4
4
5
6
7
7
9
10
2 Cryptographie et codes correcteurs
2.1 Cryptographie à clé publique . . . . . . . . . .
2.1.1 Deux exemples de codes à clé publique
2.1.2 Le système RSA . . . . . . . . . . . . .
2.1.3 Sécurité de RSA . . . . . . . . . . . . .
2.1.4 Recherche de nombres premiers . . . . .
2.2 Codes correcteurs . . . . . . . . . . . . . . . . .
2.2.1 Vocabulaire de la théorie des codes . . .
2.2.2 Codes linéaires . . . . . . . . . . . . . .
2.2.3 Code cycliques . . . . . . . . . . . . . .
2.2.4 Un exemple : le code de Hamming . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
12
12
13
14
14
17
18
19
20
21
3 Elimination
3.1 Résultants à une indéterminée . . . . . . . . . . . . . . .
3.1.1 Définition et propriété principale . . . . . . . . .
3.1.2 Résultant et relations coefficients-racines . . . . .
3.1.3 Applications à l’arithmétique . . . . . . . . . . .
3.2 Elimination . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.1 Résultants de deux polynômes à n indéterminées
3.2.2 Théorème de Bézout . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
24
24
24
25
27
28
28
29
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Chapitre 1
Algorithme de Berkekamp
1.1
Principe de l’algorithme
Soit p un nombre premier et soit n ∈ N∗ . On pose q = pn . On cherche à factoriser un polynôme P non constant de Fq [X] en facteurs irréductibles. Comme Fq (le corps à q éléments) est
un corps, Fq [X] est euclidien, donc factoriel, par suite cette décomposition est essentiellement
unique. On peut utiliser un algorithme "naïf" : diviser le polynôme considéré par tous les polynômes de degré 1, puis de degré 2, . . ., puis les polynômes de degré deg(P ) − 1. Ces polynômes
étant en nombre fini, cet algorithme se termine en un nombre fini d’étapes. On est assuré que le
premier diviseur trouvé est irréductible. L’inconvénient est que cet algorithme est très lent. On
va présenter dans ce chapitre un algorithme plus performant, l’algorithme de Berlekamp. Nous
commençons par la description de l’algorithme.
Remarque. Sur un corps quelconque, il n’existe pas d’algorithme (même très lent) permettant de factoriser les polynômes. Par exemple, factoriser un polynôme de C[X] revient à calculer
ces racines et les travaux de Galois ont montré que ce n’était pas possible en toute généralité.
1.1.1
Première étape
Elle consiste à se ramener au cas d’un polynôme sans facteur multiple. Tout d’abord, on
vérifie si P ∈ Fq [X p ], c’est-à-dire si P = Q0 (X p ). Dans ce cas, Frobenius nous assure l’existence
d’un polynôme Q1 ∈ Fq [X] tel que P = Q1 (X)p . En réitérant éventuellement le procédé (si
k
Q1 ∈ Fq [X p ] . . .), on est finalement ramené à P (X) = P1 (X)p 1 , avec P1 ∈
/ Fq [X p ].
Remarques.
1. Si q = p, Q1 = Q0 .
2. Le degré de Q1 est le degré de P divisé par p, donc est inférieur strictement au degré de
P . Par suite, cette étape se termine en un nombre fini de passages pour trouver P1 .
On travaille ensuite sur P1 . On calcule Q1 = P1 ∧ P10 et on pose P1 = Q1 R1 . Alors R1 n’a
que des facteurs simples. Si Q1 n’est pas constant, on réitère l’ensemble de cette première étape
sur Q1 .
Remarques.
1. Comme P1 ∈
/ Fq [X p ], P10 6= 0 et donc le degré de Q1 est strictement inférieur au degré de
P1 .
2. En conséquence, cette étape se termine en un nombre fini de passages.
2
A la fin de cette première étape, on a décomposé P sous la forme :
k1
P = R1p
kl
. . . Rlp ,
où les Ri ∈ Fq [X] sont sans facteurs multiples.
1.1.2
Seconde étape
On est ainsi ramené à factoriser des polynômes sans facteur multiple, les Ri . On suppose donc
maintenant que P n’a que des facteurs simples. Son degré est noté N . L’idée est de chercher un
polynôme non constant H de degré < N tel que P divise H q − H.
Pour tout 0 ≤ j ≤ N − 1, on calcule le reste de la division euclidienne de (X qj ) par P . On le
N
−1
X
note
bi,j X i . Ces coefficients sont regroupés dans une matrice B = (bi,j )0≤i,j≤N −1 ∈ MN (Fq ).
i=0
Le résultat suivant permet de déterminer un polynôme H convenable :
Proposition 1 Soit H =
N
−1
X
hi X i ∈ Fq [X], de degré < N . Alors P divise H q − H si, et
i=0
seulement si :

h0
..
.

(B − IN ) 


 = 0,
hN −1
ce qui revient à dire que le vecteur colonne des coefficients hi est dans le noyau de B − IN .
Par suite, une résolution d’un système linéaire permet de déterminer un H convenable. On
utilise ensuite le résultat suivant :
Proposition 2 Soit P ∈ Fq [X], unitaire, et soit H ∈ Fq [X], tel que P divise H q −H. Alors :
Y
P =
P ∧ (H − λ),
λ∈Fq
L’algorithme de Berlekamp procède alors de la manière suivante : si B −IN est de rang N −1,
alors P est irréductible . Sinon, on choisit un polynôme H non constant tel que P divise H n − H
grâce au calcul du noyau de B − IN et la proposition précédente donne une factorisation de P en
facteurs non tous triviaux (ils sont tous de degré strictement inférieur au degré de p mais il est
possible que certains soient constants). En réitérant l’algorithme de Berlekamp sur les facteurs
trouvés, on finit par obtenir une décomposition en facteurs irréductibles de P .
Nous allons aussi montrer le résultat suivant :
Proposition 3 Si P n’a pas de facteurs carrés, le nombre de facteurs irréductibles de P est
N − rang(B − IN ).
Cette dernière proposition n’a pas d’intérêt lorsque l’on souhaite programmer Berlekamp,
mais servira souvent en pratique !
Remarques.
1. Lorsque k = N − rang(B − IN ) ≥ 3, on peut appliquer la proposition 3 avec k − 1 polynômes non constants et linéairement indépendants plutôt que de réappliquer l’algorithme
immédiatement aux facteurs trouvés. Ceci augmente les chances de trouver tous les facteurs
irréductibles en le minimum de calculs.
2. L’algorithme nécessite (entre autre) le calcul de q PGCD. Il n’est donc performant que
lorsque le cardinal du corps de base est petit.
3
1.2
Démonstrations
Nous allons maintenant démontrer la validité du procédé.
1.2.1
Elimination des facteurs multiples (première étape)
Nous allons utiliser le morphisme de Frobenius.
Proposition 4 Soit A un anneau unitaire commutatif de caractéristique p. L’application
suivante est un endomorphisme d’anneau :
A −→ A
F :
x −→ xp
Il est appelé endomorphisme de Frobenius.
Preuve. Il est immédiat que F (1) = 1 et F (xy) = F (x)F (y) pour tous x, y ∈ A, car A est
commutatif. Soient x, y ∈ A. Alors, par la formule du binôme :
p
F (x + y) = x +
p−1 X
p
k=1
k
y k xp−k + y p .
Si 1 ≤ k ≤ p − 1 :
p
k!(p − k)!
= p!.
k
Donc p | k!(p − k)! kp . D’autre part, comme 1 ≤ k ≤ p − 1, les facteurs de k! et de
(p − k)!
p
sont tous < p. Par Gauss, p ne divise pas k!(p − k)!. Toujours par Gauss, p divise k . Comme
car(A) = p, kp = 0 dans A et donc F (x + y) = F (x) + F (y).
2
Remarque. Le fait que p |
théorèmes de Sylow.
Proposition 5
p
k
si 1 ≤ k ≤ p − 1 joue un rôle important dans la preuve des
1. Si A = Fq , alors l’endomorphisme de Frobenius est un automorphisme.
2. Si A = Fp , alors l’automorphisme de Frobenius est l’identité.
3. Si A = Fpn , alors F n = Id.
Preuve. 1. Considérons Ker(F ). Il s’agit d’un idéal non nul de Fq (car F (1) = 1 6= 0), donc
est nul car Fq est un corps. Donc F est injectif. Comme Fq est fini, cette injection de Fq dans
lui-même est une bijection.
2. Il s’agit du petit théorème de Fermat.
n
3. Si x ∈ Fq , alors F n (x) = xp = xq . On sait que le corps fini Fq est l’ensemble des racines
de X q − X, donc F n (x) = x. Par suite, F n = Id.
2
Proposition 6 On considère A = Fq [X]. Alors l’endomorphisme de Frobenius de A est
injectif et son image est Fq [X p ]. En conséquence, si Q ∈ Fq [X p ], il existe un unique P ∈ Fq [X]
tel que Q(X) = P (X)p .
Preuve. Soit P (X) = a0 + . . . + ak X k ∈ Fq [X]. Alors :
F (P ) = ap0 + ap1 X p + . . . + apk X kp .
Supposons F (P ) = 0. Alors en identifiant les coefficients, ap0 = . . . = apk = 0 dans Fq , donc
a0 = . . . = ak = 0 : P = 0. Il est évident que Im(F ) ⊆ Fq [X p ]. Réciproquement, si Q(X) =
4
b0 + b1 X p . . . + bk X kp ∈ Fq [X p ], d’après la proposition 5, il existe ai ∈ Fq tel que bi = api pour
tout i, et alors Q = F (P ) ∈ Im(F ).
2
Remarque. Il n’est pas immédiat de trouver l’unique Q tel que tel que P = Qp si P ∈
Fq [X p ] : le problème est de trouver une racine p-ième des coefficients de P dans Fq . Le seul cas
où cela est évident est si n = 1. D’après le second point de la proposition 5, P (X p ) = P (X)p .
Voir le TD pour un exemple.
Ainsi, la première partie de l’étape 1 fonctionne et on est ramené à un polynôme ne vérifiant
pas Frobenius.
Proposition 7 Soit P ∈
/ Fq [X p ]. Posons P = (P ∧ P 0 )Q. Alors Q n’a que des facteurs
simples.
Preuve. Comme P ∈
/ Fq [X p ], P 0 6= 0 et est de degré strictement inférieur au degré de P , donc
0
P ∧ P 6= P et en conséquence, Q n’est pas constant. Par factorialité, on pose P = P1α1 . . . Pkαk
la décomposition en facteurs irréductibles de P . On obtient :
P0 =
=
k
X
αi Pi0 P1α1 . . . Piαi −1 . . . Pkαk
i=1
k
Y
!
αi −1
P1
i=1
|
k
X
!
αi P1 . . . Pi−1 Pi0 Pi+1 . . . Pk
.
i=1
{z
Q0 (X)
}
Il est clair que Q0 (X) divise P et P 0 donc divise P ∧P 0 : posons P ∧P 0 = Q0 R0 . Alors P = Q0 R0 Q.
Par suite, en divisant par Q0 , on obtient P1 . . . Pk = R0 Q, donc Q divise P1 . . . Pk . Par factorialité, Q n’a que des facteurs simples.
2
Remarque. Si αi est divisible par p, dans l’expression de P 0 on peut factoriser Pi (X) et donc
Q0 n’est pas nécessairement le PGCD de P et P 0 , contrairement à ce que l’on a en caractéristique
nulle. Par exemple, si P (X) = X p (X −1), P 0 (X) = X p et donc P ∧P 0 = X p alors que Q0 = X p−1 .
1.2.2
Seconde étape (algorithme de Berlekamp)
Nous allons ici démontrer les propositions 1, 2 et 3.
Soit A = Fq [X]/hP (X)i. Il s’agit d’une Fq -algèbre de dimension N , dont une base est donnée
N −1
).
par B = (1, X, . . . , X
On considère l’endomorphisme de Frobenius F de A et on pose φ = F n . Si x, y ∈ A, φ(x+y) =
φ(x) + φ(y). Si a ∈ Fq et x ∈ A, alors φ(ax) = F n (a)φ(x) = aφ(x), car a ∈ Fq (proposition 5-3).
Donc φ est Fq -linéaire. Sa matrice dans la base B est par définition la matrice B. En conséquence,
si H = h0 + . . . + hN −1 X N −1 ∈ Fq [X] :
q
P | H q − H ⇐⇒ H − H = 0 dans A
⇐⇒ (φ − Id)(H) = 0 dans A


h0


⇐⇒ (B − IN )  ...  = 0,
hN −1
ce qui démontre la proposition 1.
5
q
YMontrons maintenant la proposition 2. Soit H tel que P divise H − H. On pose Q =
P ∧ (H − λ). Si λ 6= µ, (H − λ) − (H − µ) = µ − λ est une constante non nulle, donc par
λ∈Fq
Bezout les polynômes H − λ sont deux-à-deux premiers entre eux. Il en est donc de même de
leurs diviseurs P ∧ (H − λ). Par suite, Q est le PPCM des P ∧ (H − λ). Comme pour tout λ,
P ∧ (H − λ) divise P , il en est de même de leur PPCM, donc Q divise P .
On sait que :
Y
(X − λ) = X q − X,
λ∈Fq
donc en substituant X = H, on obtient H q −H =
Y
(H −λ). Soit P = P1a1 . . . Pkak la décompo-
λ∈Fq
sition de P en facteurs irréductibles. Comme P divise H q − H et que les H − λ sont deux-à-deux
premiers entre eux, pour tout i il existe un unique λ(i) tel que Piai divise H − λ(i). Alors Piai
divise P ∧ (H − λ(i)), donc divise Q. Par suite, le PPCM des Piai , c’est-à-dire P car les Pi sont
deux-à-deux premiers entre eux, divise Q. Comme P et Q sont unitaires, P = Q.
Montrons maintenant la proposition 3. Posons P = P1 . . . Pk la décomposition en facteurs
irréductibles (tous simples, par hypothèse) de P . Par le théorème des restes chinois :
A≈
Fq [X]
Fq [X]
× ... ×
= K1 × . . . × Kk ,
hP1 i
hPk i
où les Ki sont des corps finis extension de Fq , car les Pi sont irréductibles. Par suite, pour trouver
le Fq –sous-espace vectoriel E de A des éléments tels que xq = x, on est amené à chercher dans
chaque Ki le sous-espace Ei des éléments tels que xq = x, puis à prendre la somme directe de
ces sous-espaces. Comme Ki est une extension de Fq de degré fini, il s’agit d’un corps fini de
la forme Fql . Dans ce corps fini, X q − X possède exactement q racines, et ce sont les éléments
de Fq , donc Ei est de dimension 1. Par suite, E est de dimension k. D’après la proposition 1,
dim(Ker(B − IN )) = k et donc d’après le théorème du rang, N − rang(B − IN ) = k, ce qui
prouve la proposition 3.
1.2.3
Application : recherche de polynômes irréductibles de degré fixé
On recherche un (ou tous...) les polynômes irréductibles unitaires de degré fixé d dans Fp [X].
On utilise la formule suivante :
Proposition 8 Pour tout N ≥ 1, on note IN (q) l’ensemble des polynômes irréductibles unitaires de degré N dans Fq [X]. Alors :
N
Xq − X =
Y
Y
P (X).
d|N P (X)∈Id (q)
Preuve. Soit P (X) un polynôme irréductible unitaire de degré d | N dans Fq [X]. Soit α une
racine de P (X) dans une extension de Fq . Alors P (X) = IrrFq (α, X) et donc [Fq (α) : Fq ] = d.
d
Donc Fq (α) est un (le) corps à q d éléments. Donc αq = α. Posons N = dd0 . Alors :
d
α = αq = αq
2d
= . . . = αq
N
dd0
N
= αq .
Par suite, P (X) | X q − X car P (X) = IrrFq (α, X). En prenant le PPCM (les polynômes
considérés étant deux-à-deux premiers entre eux), on obtient :
Y
Y
N
P (X) | X q − X.
d|N P (X)∈IN (q)
6
N
N
N
D’autre part, (X q − X)0 = −1 donc X q − X et (X q − X)0 sont premiers entre eux :
N
q
X − X est à facteurs simples. Soit P (X) un diviseur irréductible unitaire de ce polynôme. Soit
α une racine de P (X) dans une extension de Fq . Alors [Fq (α) : Fq ] = deg(P ). Comme P (X)
N
divise X q − X, α est une racine de ce second polynôme, donc est dans le corps à q N éléments.
On en déduit que :
deg(P ) = [Fq (α) : Fq ] | [FqN : Fq ] = N.
N
Comme X q − X est à facteurs simples :
N
Xq − X |
Y
Y
P (X).
d|N P (X)∈IN (q)
Ces deux polynômes sont donc associés. Comme ils sont unitaires, ils sont égaux.
2
Remarques.
1. Pour N = 1, on retrouve :
Y
Xq − X =
Y
P (X) =
(X − λ).
λ∈Fq
P (X)∈I1 (q)
N
2. En conséquence, il suffit d’appliquer l’algorithme de Berlekamp à X q − X pour trouver
tous les polynômes irréductibles unitaires de degré (divisant) N .
1.3
1.3.1
Factorisation de polynômes à coefficients entiers
Théorème de Landau-Mignotte
On tente maintenant de factoriser des polynômes à coefficients dans Z, en réduisant modulo
p bien choisi.
On munit d’abord C[X] d’un norme : si P = a0 + . . . + ak X k , on pose :
||P || =
k
X
!1/2
|ai |2
.
i=0
Soit P (X) ∈ Z[X]. On commence par limiter les coefficients des diviseurs de P grâce au
résultat suivant :
Théorème 9 (Landau-Mignotte) Soient P et Q ∈ Z[X] tels que P | Q. Posons Q =
1/2
b0 + . . . + bm X m . Alors pour tout 0 ≤ i ≤ m, |bi | ≤ mi ||P ||. De plus, ||Q|| ≤ 2m
||P ||.
m
Lemme 10 Soit a ∈ C et considérons P (X) =
n
X
aj X i ∈ C[X]. Alors :
i=0
||(aX − 1)P (X)|| = ||(X − a)P (X)||.
Preuve. Cette formule est évidente si a = 0. Si a 6= 0, on a :
(aX − 1)P (X) = −a0 +
n
X
(aaj−1 − aj )X j + aan X n+1
j=1
et
(X − a)P (X) = −aa0 +
n
X
j=1
7
(aj−1 − aaj )X j + an X n+1 .
Calculons :
||(aX − 1) P (X)||2 − ||(X − a) P (X)||2
n
n
X
X
j
n+1 2
= || − a0 +
|| − || − aa0 −
(aaj−1 − aj ) X + aan X
(aj−1 − aaj ) X j − an X n+1 ||2
= |a0 |2 +
= |a0 |2 +
j=1
n
X
j=1
n
X
|aaj−1 − aj |2 + |aan |2 − |aa0 |2 −
j=1
n
X
|aj−1 − aaj |2 − |an |2
j=1
(|aaj−1 |2 − aaj−1 aj − aaj−1 aj + |aj |2 ) + |aan |2
j=1
−| − aa0 |2 −
n
X
(|aj−1 |2 − aaj−1 aj − aaj−1 aj + |aaj |2 ) − |an |2
j=1
= |a0 |2 +
n−1
X
|aaj |2 −
j=0
2
−|aa0 | −
n−1
X
j=0
n
X
n
X
(aaj−1 aj + aaj−1 aj ) +
j=1
j=1
2
|aj | +
|aj |2 + |aan |2
n
X
(aaj−1 aj + aaj−1 aj ) −
n
X
|aaj |2 − |an |2
j=1
j=1
= 0.
2
On peut maintenant démontrer le théorème 9.
Preuve. Posons P = a0 + . . . + an X n . Soient d1 , . . . , ds les racines de P de module > 1,
ordonnées de sorte que |d1 | ≥ . . . ≥ |ds | > 1. Soient c1 , . . . , cn−s−k les racines non nulles de P de
module ≤ 1. Alors :
n−s−k
s
Y
Y
P (X) = an X k
(X − ci )
(X − dj ).
i=1
j=1
On en déduit :
||P ||2 = |an |2 ||
n−s−k
Y
i=1
= |an |2 ||
s
Y
(X − ci )
(X − dj )||2
j=1
n−s−k
Y
(ci X − 1)
s
Y
(X − dj )||2
j=1
i=1
= |an |2 |c1 . . . cn−s−k |2 ||
2
2
≥ |an | |c1 . . . cn−s−k |
n−s−k
Y
(X − ci −1 )
s
Y
(X − dj )||2
i=1
j=1
−1
−1
|c1 . . . cn−s−k d1 . . . ds |2
≥ |an |2 |d1 . . . ds |2 .
Pour l’inégalité, on a utilisé le fait que ||Q|| ≥ |Q(0)|. On en déduit :
|d1 . . . ds | ≤
||P ||
.
|an |
Soient maintenant α1 , . . . , αm les racines de Q, rangées par ordre décroissant de module. Alors
si j ≤ s, |αj | ≤ |dj | et si j > s, |αj | ≤ 1. Par les relations coefficients-racines, pour tout j :
bj = (−1)m−j bm σm−j (α1 , . . . , αm ),
8
où σm−j est le (m − j)-ième polynôme symétrique en X1 , . . . , Xm . De manière immédiate :
m
|σm−j (α1 , . . . , αm )| ≤
|α1 . . . αm−j |,
m−j
m
monômes où chaque αi apparaît au plus une fois. Donc :
car σm−j est la somme de m−j
m
m
m ||P ||
|bj | ≤ |bm |
|α1 . . . αm−j | ≤ |bm |
|d1 . . . ds | ≤ |bm |
.
j
j
j |an |
De plus, bm divise an , donc
|bm
|an | ,
ce qui donne le résultat demandé. Enfin :
||Q||2 =
m
X
|bj |2 ≤
j=0
m 2
X
m
j=0
j
||P ||2 .
2
On conclut avec la formule de Vandermonde qui suit.
m 2
X
m
2m
Lemme 11 (Formule de Vandermonde) Soit n ≥ 0. Alors
=
.
j
m
j=0
Preuve. En développant de deux manières différentes (1 + x)m (1 + x)m = (1 + x)2m et en
considérant le coefficient de degré m :
X
m m 2
X
m
m
m
2m
=
=
.
j
m−j
j
m
j=0
j=0
2
1.3.2
Première méthode
On choisit un nombre premier p > 2M avec :
s
M=
max
1≤m≤n/2
2m
||P ||.
m
Comme l’ensemble des nombres premiers est infini , un tel p existe. De plus, p > ||P || donc p ne
divise pas le coefficient directeur de P et donc P a le même degré que P . L’idée est la suivante :
si P n’est pas irréductible dans Z[X], il possède un diviseur Q non constant de degré ≤ n/2. A
l’aide de l’algorithme de Berlekamp, on obtient la décomposition de P sous la forme an P1 . . . Pk ,
les Pi étant des éléments irréductibles unitaires non nécessairement distincts de Fp [X]. Dans ce
cas, Q est de la forme bP i1 . . . P il : on peut donc déterminer Q. Comme d’après le théorème de
Landau-Mignotte, les coefficients de Q sont tous entre −M/2 et M/2, on peut reconstruire Q à
partir de Q. L’algorithme est donc le suivant :
1. On choisit p > 2M et on applique Berlekamp sur P ∈ Fp [X]. On obtient la décomposition
P1 . . . Pk de P en irréductible.
2. Pour toute partie I = {i1 , . . . , ij } ⊆ {1, . . . , k}, pour tout 1 ≤ b ≤ p − 1, on construit
bP I = bP i1 . . . P ij et Pb,I ∈ Z[X] tel que la classe de Pb,I modulo p soit bP I et les coefficients
de Pb,I soient tous entre −p/2 et p/2. Ceci détermine uniquement Pb,I . Attention, Pb,I 6=
bPi1 . . . Pij en général.
3. On teste si Pb,I divise P par ordre croissant du cardinal de I, en se limitant à ceux de
degré ≤ n/2. Si aucun ne divise P , P est irréductible. Sinon, le premier PI trouvé est un
diviseur irréductible de P (s’il n’était pas irréductible, il existerait un diviseur Pc,J de Pb,I
et donc de P avec J ( I, qui aurait dû être testé avant). On applique alors l’algorithme
au quotient de P par ce Pb,I .
9
Remarques.
1. Le problème se pose donc de trouver un nombre premier arbitrairement grand. Ce problème
sera étudié dans le chapitre suivant.
2. Plus le nombre premier choisi est grand, plus il sera long d’effectuer Berlekamp et de
calculer les Pb,I . La majoration des coefficients des diviseurs de P donnée étant grossière,
cette méthode peut être assez peu efficace.
3. Si P est unitaire, ses diviseurs irréductibles le sont aussi. On peut donc se limiter aux P1,I ,
ce qui améliore beaucoup l’efficacité de l’algorithme.
1.3.3
Seconde méthode
On fixe un nombre premier p et on décompose P dans Fp [X]. Puis on en déduit par récurrence
une décomposition de P dans Z/pn Z[X] par récurrence sur n par le lemme de Hensel jusqu’à ce
que pn ≥ 2M et on applique un raisonnement semblable à celui de la première méthode.
Théorème 12 (Hensel) Soient P, Q, R trois polynômes unitaires et soient p un nombre
premier, k ∈ N∗ tel que P = QR modulo pk , avec de plus Q et R étant premiers entre eux
modulo p, avec deg(P ) = deg(Q) + deg(R). Alors il existe Q̃ et R̃ dans Z[X], unitaires, avec
Q̃ ≡ Q[pk ], R̃ ≡ R[pk ] et P ≡ Q̃R̃[pk+1 ]. De plus, P̃ et Q̃ sont premiers entre eux modulo p et
deg(P ) = deg(P̃ ) + deg(Q̃).
Preuve. On cherche Q̃ et R̃ sous la forme Q + pk U et R + pk V , où U ∈ Z[X], de degré
strictement inférieur au degré de Q, V ∈ Z[X], de degré strictement inférieur au degré de R.
Ainsi, Q̃ et R̃ sont unitaires et les conditions de congruence modulo pk sont vérifiées, ainsi que
les conditions sur les degrés. De plus, dans Z[X] :


 P − QR



P − Q̃R̃ = P − QR − pk (U R + V Q) + p2k U V = pk 
−(U
R
+
V
Q)
 + pk+1 (pk−1 U V ).
k
 p

| {z }
∈Z[X]
Par suite :
P ≡ Q̃R̃[pk+1 ] ⇐⇒ U R + V Q ≡
P − QR
[p].
pk
Comme P et Q sont premiers entre eux modulo p, il existe U0 et V0 ∈ Z[X] tels que QV0 +RU0 = 1
modulo p (Bezout dans Fp [X]). En multipliant, on obtient U1 et V1 tel que QV1 + RU1 = P −QR
pk
modulo p. Pour respecter la condition sur le degré de U et V , on effectue la division euclidienne
U1 = QS + U2 de U1 par Q (possible, car Q est unitaire). Alors deg(U2 ) < deg(Q). En posant
modulo p. Comme RU2 est de degré < deg(P )
V2 = V1 + RS, on obtient QV2 + RU2 = P −QR
pk
et que P −QR
est de degré < deg(P ), il en est de même de QV2 et donc V2 est de degré <
pk
dep(P ) − deg(Q) = deg(R).
Enfin, comme Q̃ = Q et R̃ = R modulo pk , ces égalités restent vraies modulo p, donc Q̃ et R̃
sont premiers entre eux modulo p.
2
Remarques.
1. Cette méthode évite de devoir choisir un grand nombre premier.
2. Z/pk Z n’est pas intègre si k ≥ 2. Il ne s’agit donc pas d’un anneau factoriel. Par suite, on
ne peut pas parler de "la" décomposition dans Z/pk Z[X].
3. Cette méthode ne fonctionne (à cause des hypothèses du théorème de Hensel) que lorsque
P est à facteurs simples (on peut s’y ramener par division par P ∧ P 0 ) et si P est unitaire
(ce qui est gênant, Z n’étant pas un corps).
10
Chapitre 2
Cryptographie et codes correcteurs
Lorsque l’on veut transmettre de l’information à un tiers, plusieurs problèmes se posent :
1. Si les données sont volumineuses, comment réduire leur taille sans (trop) de perte d’informations ? (Problème de compression de données).
2. Si l’information est secrète, comment la transmettre sans que quelqu’un interceptant le
message ne puisse s’en servir ?
3. Comment "signer" le message pour que le destinataire soit sûr de l’expéditeur ?
4. Comment être sûr que la transmission n’a pas été modifiée par un intermédiaire ?
5. Si certains problèmes ont affectés la transmission, comment le savoir et comment y remédier ?
La théorie de l’échange d’information répond à toutes ces questions. En pratique, l’envoi
d’informations entre Bob et Alice se déroule ainsi :
1. Si les données à transmettre sont trop volumineuses, Bob peut les compresser avant de les
envoyer. Voici quelques exemples de format de compression :
– Pour les données générales, zip, rar, tar, 7z.
– Pour les images, jpeg.
– Pour les sons, mp3.
– Pour les vidéos, divx, mp4.
Il existe deux types de compression, avec ou sans perte. Si la compression choisie est
avec perte, il faut absolument compresser le message avant de le crypter, sous peine de
décryptage impossible par Alice.
2. Une fois la compression achevée, Bob en déduit une suite de caractère appelée signature
du message. Cette signature est obtenue à l’aide d’un algorithme spécifique souvent appelé
fonction de hachage sécurisée. Les plus connus sont MD5 et SHA-1.
3. Bob crypte son message à l’aide d’un algorithme à clé privée (très rapide et sûr), par
exemple DES ou AES.
4. Bob soumet le message crypté à un algorithme de code correcteur, qui permettra à Alice
de savoir si le message a été transmis correctement et le cas échéant de corriger les erreurs.
Le message est maintenant prêt pour la transmission.
5. Bob et Alice s’échangent la clé privée et la signature du message grâce à un système à
clé publique, par exemple RSA ou El-Gamal. Un double cryptage permet de s’assurer de
l’identité de l’envoyeur et du receveur.
6. Bob envoie le message crypté à Alice.
7. Alice soumet le message reçu à l’algorithme de code correcteur, ce qui détecte les erreurs
éventuelles et les corrige.
8. Elle le décrypte et vérifie la signature. Cela lui assure que personne n’a modifié le message
pendant l’envoi.
11
9. Elle décompresse le message et retrouve les informations de Bob.
Remarque. L’ordre des étapes est important. En particulier, compresser les données après
le cryptage peut rendre le message indéchiffrable pour Alice.
Dans ce cours, nous allons étudier les systèmes à clés publiques et les codes correcteurs. Les
autres algorithmes utilisent d’autres mathématiques (logique pour AES, transformée de Fourier
pour la compression de données) que ceux évoqués dans ce cours.
2.1
Cryptographie à clé publique
On peut grossièrement classer les cryptosystèmes en deux catégories :
– Les codes à clé privée : seuls l’expéditeur et l’envoyeur connaissent cette clé. Par exemple,
AES et DES. Ces systèmes sont très rapides et peuvent donc être utilisés pour des gros
messages. Mais il faut transmettre la clé privée entre les deux utilisateurs.
– Les codes à clé publique : une partie des informations concernant la clé sont accessibles à
tous. Par exemple, El-Gamal ou RSA. Il sont assez lents, mais ne sont utilisés que pour
crypter des clés privées (en général, 56, 128, 256 bits) ou des signatures (en général, 160
bits, au maximum 512 bits), qui sont des messages courts. Le temps de calcul pour ce type
de message est inférieur à la seconde, mais ces systèmes ne peuvent pas coder de gros messages. Ce type de code utilise des fonctions dites à sens unique, c’est-à-dire des fonctions
f : E −→ F bijectives, telles que le temps de calcul de f (x) où x ∈ E est très inférieur au
temps de calcul de f −1 (y) où y ∈ F , pour presque tous x ∈ E, y ∈ F .
Jusqu’à l’arrivée des codes informatiques (fin des années 70), on ne connaissait que des systèmes à clé privée. Le problème n’était pas la sûreté des codes (l’arrivée de l’informatique les
a rendu plus performants et complexes que jamais), mais la sécurité de la clé privée. Comment
la transmettre sans risquer l’interception ? C’est de ce problème que sont nés les codes à clé
publique : une partie des informations est publique et suffit pour que les personnes concernées
puissent crypter ou décrypter les messages, mais personne d’autre.
Remarque. L’expression "rendre publique" une donnée signifie simplement qu’elle est communiquée sans cryptage au correspondant, et donc que toute personne interceptant le message
y a accès.
2.1.1
Deux exemples de codes à clé publique
Le système de Diffie-Hellman (1976) est un système permettant d’échanger une clé privée
pour un système de cryptage. Supposons que Bob et Alice souhaitent s’échanger une clé privée
pour utiliser ensuite un système de cryptage. L’un d’eux commence par publier un grand nombre
premier (1000 bits environ) et un élément primitif g de Fp , c’est-à-dire un générateur du groupe
multiplicatif F∗p . Bob choisit un entier b compris entre 2 et p − 2, calcule y = g b et publie y,
b restant secret. Alice choisit un entier a compris entre 2 et p − 2, calcule x = g a , publie x, a
restant secret.
Autrement dit : tout le monde connaît p, g, x et y. Seul Bob connaît b, seule Alice connait
a. La clé privée est alors g ab = y a = xb , qui est donc calculable par Alice et Bob. Sur quoi
repose la sécurité du système ? Tout le monde peut calculer a à partir de x et en déduire la clé à
partir de y : il s’agit du problème de logarithme discret. Pour résoudre ce problème, on peut citer
l’algorithme de Pohlig-Hellman, BSGS, Index Calculus, mais leur temps de calcul est prohibitif.
C’est un exemple de fonction à sens unique : on considère la fonction :
{1, . . . , p − 1} −→ F∗p
f:
x −→ g x .
12
C’est une bijection. Le calcul d’une valeur particulière de f , via l’exponentiation rapide, est de
l’ordre de O(ln x(ln p)2 ), alors que la résolution de l’équation y = g x se fait au mieux en temps
sous-exponentiel.
Remarque. Ce système possède (au moins) deux faiblesses :
1. Un intercepteur peut récupérer x et y et transmettre à Alice et Bob deux autre valeurs.
Dans ce cas, l’intercepteur connaît la clé privée que vont utiliser Alice et Bob.
2. Ce système ne fonctionne pas pour les clés des systèmes DES et AES, pour des problèmes
de taille de clé.
Le système El-Gamal (1985) est, lui, un vrai système de cryptage. Bob et Alice choisissent un
grand nombre premier et un élément primitif g de Fp . Bob désire envoyer un message m crypté
à Alice. Il procède ainsi :
1. Il demande à Alice de choisir un nombre a entre 2 et p − 2 qu’elle garde secret, de calculer
x = g a et de rendre publique x.
2. Bob choisit lui aussi un nombre b entre 2 et p − 2, calcule y = g b , m0 = mxb , puis publie y
et m0 .
3. Alice calcule y a , puis son inverse dans F∗p par l’algorithme d’Euclide et en déduit m = m0 y −a
(en effet, y a = g ab = xb ).
Ici aussi, la sécurité est assurée par le problème du logarithme discret (voir TD). Le problème
d’interception est réglé : si le message est intercepté, Alice et Bob auront deux clés différentes
et s’en rendront compte à l’envoi du premier message (Alice ne parviendra pas à décrypter le
message). D’autre part, l’intercepteur n’aura pas non plus la bonne clé et ne pourra pas décrypter
le message envoyé.
Remarque. Ces deux systèmes nécessitent d’obtenir un grand nombre premier (on verra
comment procéder avec RSA) et surtout d’obtenir un élément primitif de F∗p , ce qui n’a rien
d’évident. Il est indispensable de prendre g primitif, x et y étant des éléments du sous-groupe
engendré par g, il est nécessaire que ce sous-groupe soit le plus gros possible pour assurer la
sécurité de système.
2.1.2
Le système RSA
Dans le système El-Gamal, les informations publiées ne permettent à personne d’autre qu’Alice
et Bob de crypter ou décrypter. D’autre part, c’est la même clé, à savoir g ab connue seulement
d’Alice et Bob, qui effectue le cryptage et le décryptage : c’est un système à clé symétrique. Le
système RSA est un système à clé disymétrique : la clé de cryptage est publique et donc tout le
monde peut crypter, mais seul les personnes connaissant la clé de décryptage peuvent décrypter.
Bob veut envoyer un message confidentiel à Alice, codé par le système RSA afin que personne
d’autre qu’eux ne puisse le lire.
1. Alice choisit deux grand nombres premiers (environ 1000 bits, donc de l’ordre de 21000 ≈
10301 ). Elle calcule n = pq.
2. Alice choisit un entier e premier avec (p − 1)(q − 1). Par Bezout, elle calcule d tel que
de ≡ 1[(p − 1)(q − 1)].
3. Alice a donc cinq entiers : p, q, n, e, d. Les entiers p et q servent à calculer les trois autres,
ils ne servent plus maintenant et Alice peut les oublier. Alice publie n et e qui servent à
crypter et garde secret d, qui sert à décrypter. On a donc :
– Une clé publique, constituée de n et e, connue de tous, servant à crypter.
– Une clé privée, d, servant à décrypter, connue d’Alice seule.
13
4. Bob choisit un message, c’est-à-dire un entier m compris entre 0 et n − 1. Il envoie à Alice
m0 ≡ me [n].
5. Alice calcule m ≡ m0d [n].
Vérifions qu’Alice récupère bien m. En effet, m0d = med [n]. Par définition de d, il existe k ∈ Z
tel que ed = 1 − k(p − 1)(q − 1). Si m ≡ 0[p], alors med ≡ 0[p]. Sinon, par Fermat, mp−1 ≡ 1[p]
et donc :
med ≡ m1−k(q−1) ≡ m[p].
Dans tous les cas, m0d ≡ m[p]. De même, m0d ≡ m[q]. Par le théorème des restes chinois,
m0d = m[n] et donc m0 = m car 0 ≤ m, m0 ≤ n − 1.
2.1.3
Sécurité de RSA
Pourquoi ce système est-il sûr ? Le calcul de d en utilisant n et e nécessite de connaître
(p − 1)(q − 1), ce qui revient à obtenir p et q, les deux facteurs premiers de n. La méthode la plus
√
sûre est le crible d’Eratosthène, consistant à diviser n par tous les entiers compris entre 1 et n
jusqu’à trouver le plus petit de p et q : ceci demande un temps exponentiel. D’autres méthodes
plus rapides existent : p − 1 ou ρ de Pollard, crible quadratique, Elliptic Curve Method, Number
Field Sieve, au mieux sous-exponentielles, donc encore très lentes. Le code peut donc être cassé,
mais au prix d’une très grande puissance de calcul. Cependant, quelques failles existent et doivent
être considérées dans le choix de p et q :
1. L’accroissement de la puissance des machines rend obligatoire l’augmentation exponentielle
de la taille des clés. En 2000, la taille d’une clé RSA était de 952 bits, elle est passée à 2000
bits actuellement.
2. Envoyer le même message m à différentes personnes, avec des clés possédant le même n mais
des e différents peut être dangereux. De même, envoyer le même message avec différentes
clés, avec des n différents mais le même e (petit), est dangereux (voir TD). Pour éviter ce
problème, on évite de prendre de trop petits e, souvent on prend e = 65537 = 216 + 1,
rapide à utiliser avec l’exponentiation rapide.
Un problème plus général avec l’utilisation des systèmes à clés publiques et l’identité du
crypteur. Tout le monde pouvant crypter, comment Alice peut-elle s’assurer que le message vient
bien de Bob ? Pour cela, Alice et Bob se choisissent tous deux des clés RSA :
Clés publiques
Clés privées
Bob
nb et eb
db
Alice
na et ea
da
Bob veut envoyer un message m à Alice, de sorte qu’Alice soit sûre de l’identité de Bob. Bob
calcule d’abord m0 = mdb [nb ] puis m00 = m0ea [na ]. Il envoie m00 à Alice. Alice est la seule à pouvoir
calculer m0 = m00da [na ] car elle est la seule à connaître da . Elle calcule ensuite m = m0eb [nb ] grâce
à la clé publique de Bob et elle est sûre que le message vient de Bob, car lui seul a pu calculer
mdb [nb ].
2.1.4
Recherche de nombres premiers
Les trois systèmes nécessitent de trouver de grands nombres premiers. Comment procéder ?
On ne connaît pas d’algorithme permettant d’assurer qu’un nombre est premier en temps polynomial. Mais on connaît des algorithmes dits probabilistes qui donnent une certaine probabilité
au nombre testé d’être premier. Le plus connu est l’algorithme de Rabin-Miller, qui utilise les
résultats suivants :
– Si p est premier, alors pour tout n non multiple de p, np−1 ≡ 1[p] (petit théorème de
Fermat).
14
– Si p est premier et impair, x2 ≡ 1[p] si, et seulement si, x ≡ ±1[p] (car Z/pZ est un corps).
Soit n ∈ N∗ . Voici comment procède l’algorithme de Rabin-Miller :
1. On factorise n − 1 en 2k q, q impair.
2. On choisit 2 ≤ x ≤ n − 2 (x est appelé base).
3. On calcule x0 = xq [n].
4. Si x0 = ±1, on ne peut pas conclure. Sinon, on pose j = 1.
5. On calcule xj = x2j−1 [n].
6. – Si xj = 1, n n’est pas premier (contredit le deuxième point exposé ci-dessus).
– Si xj = −1, on ne peut pas conclure.
– Si xj =
6 ±1, on remplace j par j + 1 et on repart à l’étape 5 tant que j < k.
7. Si j atteint k + 1, alors n n’est pas premier (car alors xn−1 6= 1[n]).
En termes plus algorithmiques :
q ←− n − 1
k ←− 0
tant que 2 | q faire
q ←− q/2
k ←− k + 1
x ←− xk [n]
si x = ±1 alors on ne peut pas conclure et fin du programme
j ←− 1
tant que j < k faire
x ←− x2 [n]
si x = 1[n] alors n n’est pas premier et fin du programme
si x = −1[n] alors on ne peut pas conclure et fin du programme
j ←− j + 1
n n’est pas premier
Cet algorithme se termine en un temps fini (au plus k − 1 passages dans la boucle). C’est en
fait un test de non primalité : la seule réponse sûre donnée par l’algorithme est lorsque n n’est
pas premier.
Lemme 13 Soit p un nombre premier impair. Alors U (Z/pα Z) est un groupe cyclique. Soit
d ≥ 1. Le nombre d’éléments x de Z/pα Z tels que xd = 1 est d ∧ pα−1 (p − 1).
Preuve. Nous allons admettre que U (Z/pα Z) est cyclique. Il est d’ordre ϕ(pα ) = pα−1 (p−1),
où ϕ est l’indicatrice d’Euler. Soit y un générateur de ce groupe. Si xd = ±1, alors x ∈ U (Z/pα Z).
On considère donc y l dans ce groupe, avec 1 ≤ l ≤ ϕ(pα ) = pα−1 (p − 1). On pose ϕ(pα ) =
d0 (ϕ(pα ) ∧ d).
y dl = 1 ⇐⇒ pα−1 (p − 1) | dl ⇐⇒ d0 | l.
2
Il y a donc ϕ(pα )/d0 = d ∧ pα−1 (p − 1) choix pour l.
Lemme 14 Soit n un nombre impair non premier plus grand que 10. On écrit n − 1 = 2k m,
i
avec m impair. Les entiers a de l’ensemble {1, . . . , n−1} qui vérifient am ≡ 1[n] ou a2 m ≡ −1[n]
pour un entier i ≤ k − 1 sont en nombre au plus égal à ϕ(n)/4.
Preuve. Première étape. On pose :
A = {a ∈ Z/nZ | am ≡ 1[n]},
Bj = {a ∈ Z/nZ | a2
jm
≡ −1[n]}.
On cherche à majorer |Ω| = |A ∪ B1 ∪ . . . ∪ Bk−1 |. Ces ensembles sont disjoints, donc :
|Ω| = |A| + |B1 | + . . . + |Bk−1 |
15
Soit n = p1α1 . . . pαr r la décomposition de n en nombres premiers. Par le théorème des restes
i
α
chinois, am ≡ 1[n] si, et seulement si, am ≡ 1[pj j ] pour tout j et a2 m ≡ −1[n] si, et seulement
i
α
si, a2 m ≡ −1[pj j ] pour tout j. En conséquence, en posant :
(i)
A(i) = {a ∈ Z/pαi i Z | am ≡ 1[pα1 i ]},
(1)
Bj = {a ∈ Z/pα1 i Z | a2
jm
≡ −1[pαi i ]},
(r)
on obtient |A| = |A1 | . . . |Ar |, Bj = |Bj | . . . |Bj |. D’après le lemme précédent :
|Ai | = m ∧ pαi i −1 (pi − 1) = m ∧ (pi − 1) = m ∧ 2k1 mi = m ∧ mi ,
car pi divise n et donc ne divise pas n − 1 ni m, et m est impair.
Deuxième étape. On pose ni = pαi i . Soit y un générateur du groupe cyclique U (Z/ni Z). Alors
= 1. Posons z = y ϕ(ni )/2 . Alors z 2 − 1 = 0, donc pαi i divise (z − 1)(z + 1). De plus,
(z − 1) ∧ (z + 1) divise (z + 1) − (z − 1) = 2, donc vaut 1 ou 2. Comme pi est un nombre premier
impair, ce n’est pas un facteur commun de z − 1 et z + 1 et ni divise z + 1 ou z − 1 : z = ±1.
Comme y n’est pas d’ordre ϕ(ni )/2, z = −1. En conséquence :
y ϕ(ni )
(y l )2
jm
= −1 ⇐⇒ ϕ(ni ) | 2j ml − ϕ(ni )/2
⇐⇒ pαi i −1 2ki mi | 2j ml − pαi i −1 2ki −1 mi .
(i)
Si j ≥ ki , ceci est impossible (on aurait 2ki | 2ki −1 et donc dans ce cas Bj = ∅. Si j < ki , alors :
(y l )2
jm
⇐⇒ pαi i −1 2ki −j mi | ml − pαi i −1 2ki −1−j mi .
(i)
Comme on se limite à 0 ≤ l < ϕ(n), il y a 2j (m ∧ mi ) valeurs possibles pour l, donc |Bj | =
2j (m ∧ mi ).
En conclusion :
X
|Ω| = (m ∧ m1 ) . . . (m ∧ mk ) +
2jr (m1 ∧ m) . . . (mr ∧ m)
j<min ki
2r min ki − 1
= (m1 ∧ m) . . . (mr ∧ m) 1 +
2r − 1
.
Troisième étape.D’autre part :
ϕ(n) = pα1 1 −1 . . . pαr r −1 (p1 − 1) . . . (pr − 1) = pα1 1 −1 . . . pαr r −1 2k1 +...+kr m1 . . . mr .
En conséquence :
|Ω| ≤ m1 . . . mr 2r(min ki −1)+1 + 1 ≤ m1 . . . mr 2r(k1 +...+kr ) 2−r+1 ≤
ϕ(n)
2r−1 pα1 1 −1 . . . pαr r −1
.
Supposons d’abord r ≥ 3. Alors l’inégalité annoncée est vérifiée car 2r−1 ≥ 4. Supposons
ensuite r = 1. Alors, comme m1 = m et k1 = k :
|Ω| = m2k = ϕ(n)/pα1 1 −1 .
Comme n n’est pas premier, α1 ≥ 1. Comme n ≥ 10, pα1 1 −1 ≥ 4 et l’inégalité annoncée est vraie.
Reste le cas r = 2. Si α1 ou α2 ≥ 2, alors 2r−1 pα1 1 −1 . . . pαr r −1 ≥ 4 et l’inégalité annoncée est
vraie. Reste le cas où n = p1 p2 . Alors :
!
4min(k1 ,k2 ) − 1
, ϕ(n) = 2k1 +k2 m1 m2 .
|Ω| = (m ∧ m1 )(m ∧ m2 ) 1 +
3
16
Donc :
|Ω|
m ∧ m1 m ∧ m2 4min(k1 ,k2 ) + 2
.
≤
ϕ(n)
m1
m2
3.2k1 +k2
Le seul cas problématique est m1 | m, m2 | m et k1 = k2 . Dans ce cas :
n − 1 = 2k m = (2k1 m1 + 1)(2k2 m2 + 1) − 1 = 2k1 +k2 m1 m2 + 2k1 m1 + 2k2 m2 ,
donc m1 divise m2 et m2 divise m1 : m1 = m2 et donc p1 = p2 , ce qui est exclu.
2
Autrement dit, en choisissant un entier "au hasard" (le sens serait à préciser), si l’algorithme
ne conclut pas pour une base donnée, la probabilité que n ne soit pas premier est inférieure à 1/4.
De plus, les tests effectués avec des bases différentes sont supposés indépendants ( ?). Autrement
dit, si un entier n passe l’algorithme de Rabin-Miller sans conclusion avec k bases différentes, la
probabilité qu’il soit effectivement premier est de 1 − 1/4k : on parle d’entiers pseudo-premiers.
On n’est tout de même pas entièrement sûr que cet entier soit vraiment premier, ce qui est problématique pour RSA, puisque le cryptage/décryptage repose sur le fait que p et q soient premiers.
Voici quelques algorithmes rapides de recherche de grands nombres premiers. On note Lr la
liste des r premiers nombres premiers.
1. Pour rechercher un grand nombre premier quelconque :
– On choisit n impair, de la taille souhaitée.
– On vérifie si n est divisible par un des éléments de Lr . Si c’est le cas, on remplace n par
n + 2 et on recommence.
– On vérifie la pseudo-primalité de n en base 2, 3, 5, 7. Si c’est le cas, n est très probablement premier. Sinon, on remplace n par n + 2 et on recommence.
Il est recommandé de limiter le nombre de passages dans la boucle. Si le nombre de passages
devient trop important, on recommence en changeant de n0 .
2. Pour construire un nombre premier p tel que 2p + 1 soit premier :
– On choisit n0 impair.
– On fait varier k à partir de 0.
– On élimine les k tels que n0 + 2k et 2n0 + 4k + 1 soient divisibles par un élément de Lr .
– On teste la pseudo-primalité de n0 + 2k et 2n0 + 4k + 1.
Là aussi, il est conseillé de limiter la plage dans laquelle k se déplace.
3. Pour obtenir un nombre premier p tel que p − 1 ait un grand facteur premier (nombre
premier n
 on friable) :
– On cherche un nombre premier p avec le deuxième algorithme.
– On fait varier k à partir de 0.
– On vérifie que 2kp + 1 n’est divisible par aucun élément de Lr .
– On teste la pseudo-primalité de 2kp + 1.
L’intérêt est que les nombres premiers construits avec cet algorithme permettent à RSA de
résister à l’attaque p − 1 de Pollard (voir TD).
Les théorèmes (difficiles) de répartition des nombres premiers assurent que ces algorithmes
focntionnent en un temps raisonnable.
2.2
Codes correcteurs
On s’intéresse maintenant au moyen de savoir si le message transmis n’a pas été entaché
d’erreurs et éventuellement de corriger ces erreurs. C’est l’objet de la théorie des codes.
17
L’idée est la suivante : le message M est découpé en blocs de k bits chacun (quitte à compléter
le dernier bloc). On s’intéresse alors maintenant à la transmission d’un seul bloc m de taille k.
On code ce message en un bloc m0 de taille n ≥ k (autrement dit, on ajoute de l’information).
Le bloc m s’appelle le message et le bloc m0 le mot de code. On transmet le mot de code m0 . Il
peut se produire une erreur, ce qui fait que le message reçu est de la forme m00 = m0 + e. Le but
est de pouvoir, si l’erreur n’est pas trop importante, de récupérer m0 puis m. Il y a donc deux
étapes : l’élimination de e puis le décodage de m0 en m.
2.2.1
Vocabulaire de la théorie des codes
Les blocs envoyés étant formés de bits, on peut les voir comme des éléments de Fn2 (on parle
de codes binaires). En travaillant en réunissant les bits en octets, on peut les voir comme des
éléments de Fn28 . On trouve aussi des codes ternaires, c’est-à-dire travaillant dans Fn3 .
Définition 15 Un code est une application f : Fkq −→ Fnq , injective. L’image de f est notée
C (et donc f : Fkq −→ C est bijective). Le quotient k/n est appelé taux d’information du codage,
le quotient (n − k)/n est appelé taux de correction du codage.
Remarque. Comme f est injective, q k = |Fqk | ≤ |Fqn | = q n , donc k ≤ n. Par suite, le taux
d’information et le taux de correction sont ≤ 1.
Proposition 16 On définit une application :
n
Fq −→ N
x −→ |x| = le nombre de composantes non nulles de x.
Elle vérifie les propriétés suivantes : pour tous x, y ∈ Fnq ,
1. |x| = 0 si, et seulement si, x = 0.
2. |x + y| ≤ |x| + |y|.
3. |λx| = |x| pour tout élément λ ∈ Fq − {0}.
En conséquence, l’application suivante est une distance sur Fnq :
ω:
Fnq × Fnq −→ N
(x, y) −→ |x − y|.
Elle est appelée distance de Hamming.
2
Preuve. Immédiat.
Remarques.
1. Autrement dit, ω(x, y) est le nombre de composantes qui diffèrent entre x et y.
2. Si m0 est le message transmis et m00 le message reçu, alors ω(m0 , m00 ) est donc le nombre
d’erreurs de transmission.
Proposition 17 Soit f : Fkq −→ C ⊆ Fnq un code. Soit m00 ∈ Fnq . Alors m00 ∈ C si, et
seulement si,
ω(m00 , C) = min ω(m00 , x) = 0.
x∈C
Preuve. Comme Fnq est fini, il en est de même pour C, et donc le minimum définissant
d(m00 , C) est atteint. Le résultat est alors évident.
2
Remarque. Cette proposition donne donc un moyen de savoir si le message transmis m00 est
entaché d’erreur, à condition qu’il n’y ait pas trop d’erreurs.
18
Définition 18
1. Soit t ∈ N. On dit que le code f : Fkq −→ C ⊆ Fnq est t-correcteur si les boules fermées de
centre un élément de C et de rayon t sont deux-à-deux disjointes.
2. La distance minimale du code est la plus petite distance entre deux éléments distincts de
C.
Remarques.
1. Si le code est t-correcteur, alors il peut détecter au plus t erreurs : si le message reçu
m00 = m0 + e est entaché d’au plus t erreurs, il est dans la boule fermée de centre m0 et
de rayon t. Comme les boules de centre un élément de C et de rayon t sont disjointes, ceci
détermine parfaitement m0 . Il suffit donc de remplacer m00 par le centre de l’unique boule
fermée de centre un élément de C et de rayon t dans laquelle il se trouve.
2. Si le code est t correcteur, sa distance minimale est ≥ 2t + 1.
3. Réciproquement, si la distance minimale du code est d, alors le code est E
d−1
2
-correcteur.
On a vu comment corriger un message entaché d’au plus t erreurs lorsque le code est tcorrecteur. Lorsque le nombre d’erreurs est trop important, il se peut que le message reçu m00 ne
se trouve dans aucune boule fermée de centre un élément de C et de rayon t : on ne peut pas le
corriger. Ceci ne se produit jamais dans le cas suivant :
Définition 19 On dit que le code t-correcteur est parfait si l’ensemble des boules fermées
de centre un élément de C et de rayon t forme une partition de Fnq .
Remarque. En général, on suppose que le nombre d’erreurs se produisant sur l’envoi d’un
message de longueur n suit une loi binomiale
B(n, p), avec 0 < p < 1. Autrement dit, la pro
n k
babilité que k erreurs surviennent est k p (1 − p)n−k . Plus le matériel est performant, plus le
nombre p est petit ; il est en général fourni par le constructeur. Le choix de t dépend de cette
probabilité p.
2.2.2
Codes linéaires
On cherche à construire maintenant des codes. On se limite aux codes linéaires, c’est-à-dire
lorsque f est Fq -linéaire (et alors C est un sous-espace de dimension k de Fnq ). Dans ce cas, la
construction de la bijection réciproque f −1 : C −→ Fkp permettant de retrouver le message m
à partir du message transmis et corrigé m0 est facile : il s’agit essentiellement d’inverser une
matrice k × k. On parle de codes de type (n, k, d), où d est la distance minimale de C.
Définition 20 Soit un code de type (n, k, d), d’application linéaire f . Pour tout i, on note
i = f (ei ) ∈ C, où ei est le i-ième vecteur de la base canonique de Fkq . La matrice génératrice du
code est G = (1 , . . . , k ). Autrement dit, il s’agit de la matrice de f dans les bases canoniques
de Fkq et Fnq .
Remarque. La matrice génératrice permet de déterminer entièrement le code. Elle permet
en outre de déterminer m en fonction de m0 , par résolution du système Gm0 = m (par exemple
à l’aide de la méthode du pivot de Gauss).
Comment détecter les erreurs ?
Définition 21 Soit C un code linéaire de type (n, k, d). Une matrice H ∈ Mn−k,n (Fq ) est
une matrice de parité du code si pour tout m ∈ Fq , m ∈ C si, et seulement si, H t m = 0. Pour
tout m ∈ Fnq , s(m) = H t m est appelé syndrôme de m.
19
Remarque. La matrice de parité n’est pas unique. Elle détermine C, mais pas f , donc ne
détermine pas entièrement le code, à la différence de la matrice génératrice du code.
Comment construire une matrice de parité ? Il s’agit simplement de décrire C, donné par
une base (les éléments εi ), par un système d’équations. Voici une méthode utilisant les formes
quadratiques. On munit Fnq de la forme bilinéaire symétrique non dégénérée :
0
hm, m i =
n
X
mi m0i .
j=1
Elle est symétrique et non dégénérée (sa matrice dans la base canonique de Fnq est la matrice
identité). Alors C ⊥ est donné par le système d’équations hm, εi i = 0 pour tout 1 ≤ i ≤ k. On
détermine une base (f1 , . . . , fn−k ) de C ⊥ à l’aide de ces équations. Les lignes d’une matrice de
parité H du code sont alors les vecteurs lignes f1 , . . . , fn−k . En effet, H t m = 0 si, et seulement
si, m ∈ C ⊥⊥ = C.
Pour finir, comment corriger les erreurs pour un code linéaire de type (n, k, d) ? Soit m00 le
message reçu et soit s(m00 ) son syndrôme. Deux cas se présentent :
1. Soit s(m00 ) = 0 et on considère dans ce cas qu’il n’y a eu aucune erreur de transmission.
2. Soit s(m00 ) 6= 0. Donc m00 ∈
/ C. L’erreur vérifie alors s(e) = s(m00 ) (car m00 = m0 + e,
0
s(m ) = 0 et s est linéaire) et de plus si il y a vraiment eu moins de d−1
2 erreurs de
d−1
transmission, |e| ≤ 2 . On résoud alors :
s(e) = s(m00 ), |e| ≤
d−1
,
2
qui possède au plus une solution car la distance minimale du code est d. On en déduit e
puis m0 = m00 − e. Voir l’exemple du code de Hamming pour voir un exemple de résolution.
On en déduit enfin m à l’aide de la matrice génératrice du code.
2.2.3
Code cycliques
On n’a toujours pas créé de code. Pour y arriver, on va munir Fnq d’une structure supplémentaire Fq -algèbre. Pour cela, on constate que Fq [X]/hX n − 1i est une Fq -algèbre de dimension n,
n−1
). On l’identifie à Fnq de la manière suivante :
de base (1, . . . , X
(
ψ:
Fnq −→ Fq [X]/hX n − 1i
n−1
(a0 , . . . , an−1 ) −→ a0 + . . . + an−1 X
.
Par transport de structure, Fnq devient une Fq -algèbre. On va s’intéresser aux codes tels que C
soit un idéal de Fnq , autrement dit aux codes tels que ψ(C) soit un idéal de Fq [X]/hX n − 1i.
Définition 22 Soit f un code linéaire de type (n, k, d). On dira qu’il est cyclique si pour
tout m = (m0 , . . . , mn−1 ) ∈ C, σ.m = (mn−1 , m0 , . . . , mn−2 ) ∈ C.
Il est facile de voir que ψ(σ.m) = Xψ(m). Il est facile d’en déduire que ψ(C) est un idéal de
Fq [X]/hX n − 1i si, et seulement si, le code est cyclique (voir TD).
Comment construire un code cyclique ?
20
Théorème 23 Soient deux entiers k et n vérifiant 0 ≤ k ≤ n. Soit P (X) = a0 + . . . +
an−k−1 X n−k−1 + X n−k un diviseur unitaire de X n − 1 dans Fq [X] de degré n − k. On considère
les k éléments suivants de Fnq :
m = (a0 , . . . , an−k , 0, . . . , 0),
σ.m = (0, a0 , . . . , an−k , 0, . . . , 0),
..
.
σ k−1 .m = (0, . . . , 0, a0 , . . . , an−k ).
Ces éléments forment une base du sous-espace C attaché à un code cyclique. Réciproquement,
si on a un code cyclique, il existe un unique polynôme unitaire P divisant X n − 1, tel que la
construction précédente fournisse une base du sous-espace C attaché à ce code. Ce polynôme P
est appelé polynôme générateur du code cyclique.
Preuve. Comme an−k = 1, la famille (m, . . . , σ k−1 .m) est échelonnée, donc est libre. Le
sous-espace engendré C est donc de dimension k. Montrons d’abord que σ k .m ∈ C. Posons
X n − 1 = P (X)Q(X), Q(X) unitaire de degré k : posons Q(X) = b0 + . . . + bk−1 X k−1 + X k .
Via la bijection ψ :
k
ψ(σ k .m) = X ψ(m)
k
= X P (X)
k
= (X − Q(X))P (X) + Q(X)P (X)
k
= (X − Q(X))P (X)
= b0 P (X) + . . . + bk−1 X
k−1
= b0 ψ(m) + . . . + bk−1 ψ(σ
P (X)
k−1
.m).
Comme ψ est bijective, σ k .m = b0 m+. . .+bk−1 σ k−1 .m ∈ C. Par une récurrence simple, σ l .m ∈ C
pour tout l ≥ 0. En conséquence, si x ∈ C, σ l .x ∈ C pour tout l ≥ 1. Donc le code est cyclique.
Réciproquement, soit C (l’espace associé à) un code cyclique de dimension k. Alors ψ(C) est
un idéal de Fq [X]/hX n − 1i, donc il existe un unique polynôme P (X) unitaire divisant X n − 1,
tel que ψ(C) = hP (X)i (idéaux d’un quotient d’un anneau principal). De plus, par le deuxième
théorème d’isomorphisme :
Fq [X]
hX n −1i
hP (X)i
≈
Fq [X]
,
hP (X)i
et cet espace est de dimension deg(P ). L’espace quotientant étant ψ(C), il est dimension k, donc
k−1
n−k = deg(P ), donc P est de degré n−k. De plus, une base de ψ(C) est (P (X), . . . , X
P (X)) :
ces éléments sont dans ψ(C) qui est un idéal, sont linéairement indépendants car échelonnés en
degré, et la dimension de ψ(C) est k. Via la bijection ψ, (m, . . . , σ k−1 .m) est une base de C.
Donc C est bien le code associé à P dans le théorème.
2
Remarque. Pour obtenir tous les codes cycliques de type (n, k, d) avec n et k fixés, il suffit
donc de trouver tous les diviseurs unitaires de X n − 1 de degré n − k. Cela de déduit de la
factorisation de X n −1 en polynômes irréductibles obtenue à l’aide de l’algorithme de Berlekamp.
2.2.4
Un exemple : le code de Hamming
Ce code est de type (7, 4, 3). Il code donc des mots de longueur 4 par des mots de longueur
7 et il est 1-correcteur. C’est le code binaire engendré par X 3 + X + 1. En effet, X 7 − 1 =
21
(X 3 + X + 1)(X 4 + X 2 + X + 1) dans F2 [X].

1
 1

 0

G=
 1
 0

 0
0
Sa matrice génératrice est :

0 0 0
1 0 0 

1 1 0 

0 1 1 
.
1 0 1 

0 1 0 
0 0 1
Pour coder un message a = (a0 , a1 , a2 , a3 ), on calcule Gt a =t (a0 , a0 +a1 , a1 +a2 , a0 +a2 +a3 , a1 +
a3 , a2 , a3 ). Par exemple, (1001) est codé par (1100101). Le décodage du mot (b0 , b1 , b2 , b3 , b4 , b5 , b6 )
est donné par exemple par (b0 , b0 + b1 , b5 , b6 ). Ce n’est pas la seule possibilité : on peut prendre
aussi (b0 , b2 + b5 , b5 , b6 ).
Soit d la distance minimale de C. Comme C est un sous-espace vectoriel de Fnq :
d=
min
m0 6=m00 ∈C
|m0 − m00 | =
min
m0 ∈C−{0}
|m0 |.
Comme C est un F2 -espace de dimension 4, il contient 24 = 16 éléments, qui sont les sommes de
vecteurs colonnes de G (car le corps de base est F2 ). En calculant les 15 éléments non nuls de C,
on obtient :
d = min(3, 4, 7) = 3.
Par suite, ce code est 1-correcteur. Chacune des boules fermées de rayon 1 contient 1 + 7 = 8
éléments. Par suite, l’union disjointe des 16 boules de rayon 1 centrée en un élément de C contient
16 × 8 = 27 élements. Par suite, cette union est égale à F72 : le code de Hamming est 1-correcteur
parfait.
Enfin, cherchons une matrice de


 x1 + x2 + x4

x2 + x3 + x5
x + x4 + x6


 3
x4 + x5 + x7
parité du code de Hamming. On est amené à résoudre :

= 0,

 x1 = x5 + x6 ,

= 0,
x2 = x6 + x7 ,
⇐⇒
= 0,
x = x5 + x6 + x7 ,


 3
= 0
x4 = x5 + x7 .
Une base de l’orthogonal de C est donc

1
 0

 1

 1

 1

 0
0
donnée par :
   
1
  1  
   
  1  
   
, 0 ,
   
  0  
   
  1  
0
On prend donc comme matrice de parité

1

1
H=
0
0
1
1
1
0
0
1





 .




:

0 1 1 1 0 0
1 1 0 0 1 0 .
1 1 1 0 0 1
Quand on reçoit un message m00 (en ligne), on calcule H t m00 . Si le résultat est nul, on pose
m0 = m00 . Sinon, ce vecteur est l’une (et l’une seule des colonnes) de H, mettons le j-ième. Alors
H t m00 = Hej , si ej est le j-ième vecteur de la base canonique de Fnq . Comme |ej | = 1 ≤ d−1
2 , il
s’agit donc de l’erreur de transmission. Le message corrigé est alors m0 = m00 − ej = m00 + ej .
Voici donc en résumé le maniement du code de Hamming.
22
1. Bob prend m ∈ F42 et calcule m0 = Gt m. Il envoie m0 .
2. Alice reçoit m00 . Elle calcule H t m00 . Si c’est nul, elle pose m0 = m00 . Sinon, soit j le numéro
de la colonne de H donnant H t m00 . Alice pose m0 = m + ej .
3. Alice résoud Gm0 = m et trouve m.
Si il n’y pas eu plus d’une erreur de transmission, alors Alice a récupéré le message m de Bob.
23
Chapitre 3
Elimination
Notations. Dans tout ce chapitre, k et K sont deux corps commutatifs de caractéristique
différente de 2.
3.1
3.1.1
Résultants à une indéterminée
Définition et propriété principale
Définition 24 Soient P et Q deux polynômes non nuls dans K[T ]. On pose :
P
= a0 + a1 T + . . . + ap T p ,
ap 6= 0,
q
bq 6= 0.
Q = b0 + b1 T + . . . + bq T ,
Le résultant de P et Q est le déterminant de taille
a0
.
. ..
.
.
.
.
a0
.
.
..
R(P, Q) = ..
.
..
a
.
p
.
.
. . ..
a
p
p + q suivant :
b0
..
.
..
.
..
.
..
bq
..
.
.
b0
..
.
..
..
. .
bq
.
(Il y a q colonnes de ai et p colonnes de bj ).
Théorème 25 Soient P et Q deux polynômes non nuls, de degrés respectifs p et q. Les
conditions suivantes sont équivalentes :
1. P et Q ont une racine commune (dans "la" clôture algébrique de K).
2. P ∧ Q 6= 1.
3. Il existe A ∈ K[T ], de degré < q, non nul, et B ∈ K[T ], de degré < p, non nul, tel que
AP + BQ = 0.
4. La famille (P, T P, . . . , T q−1 P, Q, T Q, . . . , T p−1 Q) du K-espace vectoriel K[T ] est liée.
5. R(P, Q) = 0.
Preuve.1 =⇒ 2. Si α est une racine commune de P et Q, alors IrrK (α, T ) divise P et Q, et
donc divise leur PGCD qui n’est en conséquence pas constant.
2 =⇒ 1. Comme R = P ∧ Q n’est pas constant, il possède une racine α dans K, qui est donc
une racine commune à P et Q.
24
2 =⇒ 3. Posons A = Q/P ∧ Q et B = −P/P ∧ Q. Alors A et B sont non nuls, de degrés
respectifs < q et < p. De plus, AP + BQ = P Q/P ∧ Q − P Q/P ∧ Q = 0.
3 =⇒ 2. Par contraposée. Si P ∧ Q = 1, soient A, B ∈ K[T ] tels que AP + BQ = 0. Alors
P divise BQ. Par le lemme de Gauss, P divise B, donc B est nul ou de degré ≥ p. De même, A
est nul ou de degré ≥ q. Donc 3 n’est pas vérifiée si 2 n’est pas vérifiée.
3 =⇒ 4. Posons A = λ0 + . . . + λq1 T q−1 et B = µ0 + . . . + µp−1 T p−1 . Les coefficients λi et les
coefficients µj ne sont pas tous nuls. De plus :
AP + BQ = λ0 P + . . . + λQ−1 T q−1 P + µ0 Q + . . . + µp−1 T p−1 Q = 0,
donc la famille (P, T P, . . . , T q−1 P, Q, T Q, . . . , T p−1 Q) est liée.
4 =⇒ 3. Alors il existe des coefficients λi , µj , non tous nuls, tels que :
λ0 P + . . . + λQ−1 T q−1 P + µ0 Q + . . . + µp−1 T p−1 Q = 0.
Posons A = λ0 + . . . + λq1 T q−1 et B = µ0 + . . . + µp−1 T p−1 . Alors AP + BQ = 0 et A ou B est
non nul. De plus, AP = −BQ. Si B est nul, alors comme K[T ] est intègre et P non nul, A = 0 :
impossible, A ou B est non nul. Donc B est non nul. De même, A est non nul.
4 ⇐⇒ 5. Remarquons que (P, T P, . . . , T q−1 P, Q, T Q, . . . , T p−1 Q) est une famille d’éléments
de Kp+q−1 [T ]. Cet espace est de dimension finie p + q, et une base est donnée par la famille
(1, T, . . . , T p+q−1 ). Le déterminant donnant R(P, Q) est le déterminant de la famille considérée
dans cette base. Elle est donc liée si, et seulement si, R(P, Q) = 0.
2
Remarque. L’assertion car(K) 6= 2 est nécessaire pour pouvoir utiliser le déterminant.
3.1.2
Résultant et relations coefficients-racines
Lemme 26 Soient P, Q ∈ K[T ] et a, b ∈ K, tous non nuls. Alors :
R(aP, bQ) = adeg(Q) bdeg(P ) R(P, Q).
Preuve. Il suffit d’utiliser la multilinéarité du déterminant par rapport aux colonnes : a se
met en facteur sur les q premières colonnes et b sur les p autres colonnes.
2
Proposition 27 On se place sur le corps K = k(X1 , . . . , Xp , Y1 , . . . , Yq ). Soient les polynômes P = (T − X1 ) . . . (T − Xp ) et Q = (T − Y1 ) . . . (T − Yq ). Alors :
R(P, Q) =
p Y
q
Y
(Yj − Xi ).
i=1 j=1
(j)
Preuve.On note Σi est la i-ième fonction symétrique élémentaire en j indéterminées, avec
(j)
(p)
la convention Σ0 = 1. Alors ai = (−1)p−i Σp−i (X1 , . . . , Xp ) pour tout i et, de même, bj =
(q)
(−1)q−j Σq−j (Y1 , . . . , Yq ) pour tout j. En notant mi,j les coefficients de la matrice donnant le
résultant :
p+q
X
Y
R(P, Q) =
ε(σ)
mi,σ(i) .
σ∈Sp+q
i=1
Il est clair que R(P, Q) ∈ k[X1 , . . . , Xp , Y1 , . . . , Yq ]. On travaille dans K[Y1 , . . . , Yq ][X1 , . . . , Xp ].
Si i ≤ q, le degré partiel en X de mi,σ(i) est ≤ p, avec égalité si, et seulement si, σ(i) = i. Si
q + 1 ≤ j ≤ p + q, le degré partiel en X de mj,σ(j) est 0. Donc les termes de cette somme sont
25
tous de degré partiel en X inférieur à pq. Les termes de degré partiel en X égal à pq sont ceux
pour lesquels σ(i) = i si i ≤ p, donc leur somme donne :
bq
∗ q
..
aq0 = a0 1 = (−1)pq (X1 . . . Xp )q .
.
0
bq Donc R(P, Q) est de degré partiel en X égal à pq et le coefficient du monôme X1q . . . Xpq dans ce
polynôme est (−1)pq .
On évalue Xi en Yj . Alors P (X1 , . . . , Yj , . . . , Xp , T ) et Q(Y1 , . . . , Yq , T ) ont une racine commune en T : Yj . Donc R(P, Q) évalué en Xi = Yj est nul. Comme Xi − Yj est unitaire dans
K[X1 , . . . , Xi−1 , Xi+1 , . . . , Xp , Y1 , . . . , Yq ], par division pseudo-euclidienne :
R(P, Q) = (Xi − Yj )R + S,
avec degXi (S) ≤ 0. En évaluant en Xi = Yj , on obtient 0 = 0 + S, donc S = 0 et Xi − Yj
divise R(P, Q) dans K[X1 , . . . , Xp , Y1 , . . . , Yq ]. Pour tout i, j, Xi − Yj est degré total 1, donc
est irréductible. Les Xi − Yj sont deux-à-deux non associés, donc le PPCM des Xi − Yj est leur
produit (l’anneau K[X1 , . . . , Xp , Y1 , . . . , Yq ] étant factoriel). On obtient donc :
p Y
q
Y
(Xi − Yj ) | R(P, Q).
i=1 j=1
On note R le quotient. Alors degX (R) + pq = pq d’après les remarques précédentes, donc R ∈
K[Y1 , . . . , Yq ]. En considérant le coefficient de X1q . . . Xpq , on obtient R = (−1)pq . Par suite :
pq
R(P, Q) = (−1)
p Y
q
Y
(Xi − Yj ) =
i=1 j=1
p Y
q
Y
(Yj − Xi ),
i=1 j=1
2
ce qui termine la preuve.
Corollaire 28 Soient P et Q deux polynômes de k[T ], non nuls. On pose :
1. deg(P ) = p, a le coefficient dominant de P , α1 , . . . , αp les racines de P dans K (non
nécessairement distinctes).
2. deg(Q) = q, b le coefficient dominant de Q, β1 , . . . , βq les racines de Q dans K (non
nécessairement distinctes).
Alors :
p Y
q
q
p
Y
Y
Y
q p
p
pq q
(βj − αi ) = b
P (βj ) = (−1) a
Q(αi ).
R(P, Q) = a b
i=1 j=1
j=1
i=1
Preuve. On pose P̃ = P/a et Q̃ = Q/b. En évaluant (X − X1 ) . . . (X − Xp ) en X1 =
α1 , . . . , Xp = αp , par les relations coefficients-racines on obtient P̃ . De même, en évaluant (Y −
Y1 ) . . . (Y − Yp ) en Y1 = β1 , . . . , Yq = βq , on obtient Q̃. Par suite, en évaluant dans la proposition
27 :
p Y
q
Y
R(P̃ , Q̃) =
(βj − αi ).
i=1 j=1
Par le lemme 26 , R(P, Q) = aq bp R(P̃ , Q̃), ce qui donne la première formule. D’autre part,
P = a(T − α1 ) . . . (T − αp ) et (−1)q Q = b(β1 − T ) . . . (βq − T ), ce qui implique facilement les
deux autres formules.
2
Corollaire 29 Soient P, Q, P1 , Q1 , P2 , Q2 ∈ k[T ]. Alors :
1. R(P, Q) = (−1)deg(P )deg(Q) R(Q, P ).
2. R(P1 P2 , Q) = R(P1 , Q)R(P2 , Q) et R(P, Q1 Q2 ) = R(P, Q1 )R(P, Q2 ).
2
Preuve. En exercice.
26
3.1.3
Applications à l’arithmétique
Définition 30 (Polynôme résultant) On se place sur l’anneau A = Z[X0 , . . . , Xp , Y0 , . . . , Yq ].
Le polynôme résultant Rp,q est le résutant des polynômes P = X0 + X1 T + . . . + Xp T p et
Q = Y0 + Y1 T + . . . + Yq T q de A[T ]. Il s’agit d’un élément de A.
Remarque. Autrement dit, on traite les coefficients de P et Q comme des indéterminées.
Théorème 31 Avec les mêmes notations, il existe U, V ∈ A[T ], tels que deg(U ) < p et
deg(V ) < q et :
UP + VQ = Rp,q .
Preuve. On a immédiatement :

X0


.

P
 ..


 .
..


 .
.
 q−1

 .
 T

P  t

 .

 =  ..
Q





 X
..
 p


.

p−1

T
Q
..
.
Y0
..
.
..
.
X0
..
. Yq
..
.
.
..
. ..
Xp

..
.
..
..
.
.
Y0
..
.
..
..
. .
Yq



1


T


..

.


p+q−1
 T





.

Soit C le vecteur colonne apparaissant à gauche, C1 , . . . , Cm+n les vecteurs colonnes de la matrice,
de sorte que :
C = C1 + T C2 + . . . + T p+q−1 Cp+q .
Comme le déterminant est multilinéaire et alterné :
det(C, C2 , . . . , Cp+q ) = det(C1 , . . . , Cp+q ) = Rp,q .
Le déterminant apparaissant dans le premier membre
P
∗ ...
.
..
..
.
q−1
.
T
P ..
..
Q
.
..
..
.
.
p−1
T
Q ∗ ...
est de la forme :
∗ .. . .. . .. ,
. .. . ∗ où les ∗ sont des éléments de A. En développant par rapport à la dernière colonne, on obtient
l’égalité annoncée, avec la condition sur les degrés.
2
Corollaire 32 Soient P, Q ∈ Z[T ]. Il existe U, V ∈ Z[T ], tels que deg(U ) < deg(Q) et
deg(V ) < deg(P ) et :
P U + QV = R(P, Q).
Preuve. Soient a0 , . . . , ap les coefficients de P et b0 , . . . , bq les coefficients de Q. Soit φ :
A[T ] −→ Z[T ], envoyant T sur T , Xi sur ai pour tout i et Yj sur bj pour tout j. Alors φ(P) = P ,
φ(Q) = Q et φ(Rp,q ) = R(P, Q). On obtient alors le résultat en posant U = φ(U) et V = φ(V).
2
27
3.2
Elimination
On veut maintenant résoudre des systèmes d’équations polynomiales :


 P1 (x1 , . . . , xn ) = 0,
..
.


Pm (x1 , . . . , xn ) = 0.
3.2.1
Résultants de deux polynômes à n indéterminées
Définition 33 Soient P, Q ∈ k[X1 , . . . , Xn ], non nuls. On peut les considérer comme des
polynômes de K(X1 , . . . , Xi−1 , Xi+1 , . . . , Xn )[Xi ]. Leur résultant sur ce corps de base est noté
RXi (P, Q).
Remarque. En formant le déterminant donnant ce résultant, on constate que ses coefficients sont des éléments de K[X1 , . . . , Xi−1 , Xi+1 , . . . , Xn ]. Donc RXi (P, Q) est un élément de
K[X1 , . . . , Xi−1 , Xi+1 , . . . , Xn ] : on dit qu’on a éliminé Xi entre P et Q.
Proposition 34 Soient P, Q ∈ K[X1 , . . . , Xn ] deux polynômes non constants. Si (x1 , . . . , xn ) ∈
K est un zéro commun de P et Q, alors (x1 , . . . , xi−1 , xi+1 , . . . , xn ) est un zéro de RXi (P, Q).
n
Preuve. Pour simplifier l’écriture de la preuve, on va choisir i = n (ce qui est sans importance). On pose alors P = A0 + . . . + Ap Xnp , Q = B0 + . . . + BQ Xnq , avec A0 , . . . , Ap , B0 , . . . , Bq ∈
K[X1 , . . . , Xn−1 ], Ap , Bq 6= 0. Alors :
A0
B0
.
.. . .
. ..
.
.
.
.
.
.
..
.
.
B0 ..
.
.
.
.. B
RXn (P, Q) = ..
B0 .
q
..
.. ..
A
.
.
. p
..
.. ..
..
. .
. . Ap
Bq On évalue en X1 = x1 , . . . , Xn−1 = xn−1 . Les polynômes P (x1 , . . . , xn−1 , T ) et Q(x1 , . . . , xn−1 , T )
ont une racine commune, xn , donc leur résultant est nul. Cependant, ce résultant n’est pas donné
par RXn (P, Q) évalué en X1 = x1 , . . . , Xn−1 = xn−1 car le degré de P ou Q peut chuter lorsqu’on
les évalue.
Premier cas. Si P (x1 , . . . , xn−1 , T ) = 0, alors A0 (x1 , . . . , xn−1 ) = . . . = Ap (x1 , . . . , xn−1 ) = 0.
En évaluant RXn (P, Q), les q premières colonnes deviennent nulles, et on obtient bien 0.
Deuxième cas. Si Q(x1 , . . . , xn−1 , T ) = 0, de même, après évalutation les p dernières colonnes
RXn (P, Q) deviennent nulles et on obtient bien 0.
Troisième cas. Si P (x1 , . . . , xn−1 , T ) 6= 0, et Q(x1 , . . . , xn−1 , T ) 6= 0, soit p0 le degré de
P (x1 , . . . , xn−1 , T ). Alors p0 ≤ p et Ap (x1 , . . . , xn−1 ) = . . . = Ap0 +1 (x1 , . . . , xn−1 ) = 0. On
évalue RXn (P, Q) en X1 = x1 , . . . , Xn−1 = xn−1 . Si p0 < p, on constate que seul le coefficient
Bq (x1 , . . . , xn−1 ) est éventuellement non nul sur la dernière ligne. On développe par rapport
à cette dernière ligne et on itère le procédé jusqu’à éliminer toutes les lignes contenant des
coefficient Aj (x1 , . . . , xn−1 ) avec j > p0 . On traite de même les coefficients de Q qui s’annulent
et on obtient que :
RXn (P, Q)|X1 =x1 ,...,Xn−1 =xn−1
= ±produit de Ai (x1 , . . . xn−1 ) et de Bj (x1 , . . . , xn−1 )
R(P (x1 , . . . , xn−1 , T ), Q(x1 , . . . , xn−1 , T )).
28
Le résultant du membre de droite est nul car P (x1 , . . . , xn−1 , T ) et Q(x1 , . . . , xn−1 , T ) ont une
racine commune.
2
Remarque. On a donc une méthode pour résoudre un système polynomial (S).
1. En procédant à différentes éliminations, on obtient un polynôme P ∈ K[T ] tel que si
(x1 , . . . , xn ) est une solution de (S), alors x1 est racine de P .
2. On en déduit ( ?) les valeurs possibles de x1 , puis en remontant les calculs, par substitution,
les valeurs possibles pour x2 , . . . , xn .
3. On obtient un nombre fini de valeurs possibles pour (x1 , . . . , xn ). Comme on ne peut pas
travailler par équivalence, il reste à vérifier parmi ces valeurs lesquelles sont vraiment des
solutions.
3.2.2
Théorème de Bézout
Théorème 35 (Bézout) Soit P, Q ∈ K[X, Y ], non nuls, de degrés respectifs p et q, tels que
P ∧ Q = 1. Le nombre de zéros communs de P et Q est fini (et inférieur à ≤ (pq)2 ).
Preuve. On pose :
P (X, Y ) = A0 + . . . + Ap X p ,
Q(X, Y ) = B0 + . . . + Bq X q ,
où A0 , . . . , Ap , B0 , . . . , Bq ∈ K[Y ]. Comme le degré de P vaut p, le degré de Ai est inférieur à p−i
pour tout i. De même, le degré de Bj est inférieur à q − j pour tout j. Considérons RX (P, Q) :
RX (P, Q) = A0
..
.
..
.
..
.
Ap
..
B0
..
.
..
.
.
B0
..
. Bq
..
.
..
..
. .
Ap
..
.
..
..
.
.
B0
..
.
..
..
. .
Bq
.
On note mi,j les coefficients de ce déterminant. Alors :
deg(mi,j ) ≤ p − i + j si 1 ≤ j ≤ q,
deg(mi,j ) ≤ q − i + j − q = j − i si q + 1 ≤ j ≤ p + q.
D’autre part :
X
RX (P, Q) =
ε(σ)
p+q
Y
mσ(j),j .
i=1
σ∈Sp+q
Le degré de
p+q
Y
mi,σ(i) est donc inférieur à :
i=1
q
X
j=1
(p − σ(j) + j) +
p+q
X
(j − σ(j)) =
j=q+1
p+q
X
j−
j=1
p+q
X
j=1
Donc RX (P, Q) ∈ K[Y ], de degré ≤ pq.
29
σ(j) + pq =
p+q
X
j=1
j−
p+q
X
j 0 =1
j 0 + pq = pq.
Supposons RX (P, Q) = 0. Alors le PGCD de P et Q dans K(Y )[X] est non constant : il
existe R ∈ K(Y )[X], irréductible, divisant P et Q dans K(Y )[X]. Posons par exemple P = RS,
avec S ∈ K(X)[Y ]. En réduisant au même dénominateur les coefficients de R et de S puis en factorisant les contenus, on peut écrire R2 (Y )S2 (Y )P (X, Y ) = R1 (X)R̃(X, Y )S1 (X)S̃(X, Y ) dans
K[X, Y ], avec R̃ et S̃ primitifs. De plus, R̃ est associé à R dans K(Y )[X], donc est irréductible
dans K(Y )[X]. En conséquence, R̃ est irréductible dans K[X, Y ]. Par le lemme de Gauss, R̃
divise R2 , S2 ou P . Si il divise R2 ou S2 , alors il est dans K[Y ], donc R est constant dans
K(Y )[X] : absurde, il est irréductible. Donc R̃ divise P dans K[X, Y ]. De même, R̃ divise Q
dans K[X, Y ], donc P ∧ Q 6= 1 : contredit l’hypothèse. Donc RX (P, Q) 6= 0.
Nous avons démontré que RX (P, Q) est un élément non nul de K[Y ], de degré ≤ pq. Soient
y1 , . . . , yk ses racines, avec k ≤ pq. De même, on démontre que RY (P, Q) est non nul, de degré
≤ pq. Soient x1 , . . . , xl ses racines, avec k ≤ pq. Si (x, y) est un zéro commun de P et Q, alors
x est l’un des xi et y est l’un des yj , dont le nombre de zéro commun de P et Q est inférieur à
(pq)2 .
2
Remarque. En fait, on peut montrer que le nombre de zéros communs à P et Q est inférieur
à pq. En voici une preuve pour le cas où P est de degré 1.
Proposition 36 On suppose K infini. Soit P, Q ∈ K[X, Y ], non nuls, de degrés respectifs 1
et q, tels que P ∧ Q = 1. Le nombre de zéros communs de P et Q est ≤ q.
Preuve. On sait déjà que le nombre de zéros communs de P et Q est fini. Comme P est de
degré 1, les zéros de P forment une droite. Il existe donc (a, b) ∈ K 2 − {(0, 0)}, (a0 , b0 ) ∈ K 2 tel
que l’ensemble des zéros de P soit :
Z(P ) = {(a0 + at, b0 + bt) | t ∈ K}.
Alors, pour tout (x, y) ∈ K 2 :
(x, y) zéro commun de P et Q ⇐⇒ ∃t ∈ K, (x, y) = (a0 + at, b0 + bt) et Q(x, y) = 0
⇐⇒ ∃t ∈ K, (x, y) = (a0 + at, b0 + bt) et Q(a0 + at, b0 + bt) = 0.
Cette dernière équation polynomiale en t ne peut posséder qu’un nombre fini de racines (car le
nombre de zéros communs à P et Q est fini) et est de degré ≤ q. Donc Q(a0 +aT, b0 +bT ) est non
nul, donc possède un nombre k ≤ deg(Q) ≤ q racines. Par suite, le nombre de zéros communs à
P et Q est inférieur à q.
2
30
Téléchargement