Comptage de points sur courbe elliptique en caractéristique deux

publicité
Comptage de points sur courbe elliptique en
caractéristique deux par l’algorithme A.G.M
Morgan Barbier
Étudiant en Licence troisième année de mathématiques
à l’université des sciences et techniques de Rouen
27 août 2006
2
Remerciements
Je tiens tout particulièrement à remercier le responsable de mon stage, Monsieur David Lubicz, cryptologue au Centre d’ÉLectronique de l’ARmement (CELAR), pour le temps précieux qu’il a pu me consacrer pendant la préparation et
tout au long de ce stage. Il m’a toujours conseillé, orienté et corrigé avec patience
lorsque cela fût nécessaire. Monsieur David Lubicz m’a énormément appris, que
ce soit en mathématiques et cryptologie, où en méthodologie scientifique.
Je remercie également Madame Magali Bardet, Maı̂tre de conférence d’Informatique à l’université de Rouen membre du Laboratoire d’Informatique Fondamentale Appliquée de Rouen (LIFAR), pour l’évaluation de ce rapport et pour
la soutenance effectuée à l’université de Rouen.
Je ne peux oublier Monsieur Jean-Françis Michon Professeur d’Informatique
à l’université de Rouen membre également du LIFAR, qui m’a conseillé lors de
la préparation de mon stage. Je tiens à le remercier pour tout le temps qu’il a
pu me consacrer.
Également merci à Madame Patrizia Donato Professeur de Mathématiques
à l’université de Rouen qui a su écouter et agréer mes souhaits concernant la
réalisation de ce stage.
Merci à Johann Barbier Ingénieur des Études et Techniques d’Armement au
Celar, pour toutes les relations établies au sein du Celar, des soirées passées à
veiller dans le but de m’aider à comprendre certaines parties de ce stage, alors
qu’il avait déjà un emploi du temps surchargé. Avec l’aide de son épouse, ils
m’ont offert le gı̂te, le couvert et un environnement idéal pour étudier.
Je le remercie également pour ces nombreuses années où il a su m’orienter dans
mes choix pédagogiques et tout le soutien moral qu’il m’a apporté.
Je remercie également toute l’équipe du Celar pour son accueil. Elle s’est
montrée agréable et de bons conseils. J’ai une pensée pour les autres stagiaires
du Celar : Nadège Ayroulet, Pierre Joandel, François Pouliquen avec qui on a
partagé de bons moments.
Table des matières
1 Les pré-requis mathématiques
1.1 Les nombres p-adiques . . . . . . . . . . . . . .
1.1.1 Définition de Zp . . . . . . . . . . . . .
1.1.2 Le corps Qp et ses extensions totalement
1.2 Les courbes elliptiques . . . . . . . . . . . . . .
1.2.1 Définition . . . . . . . . . . . . . . . . .
1.2.2 Quelques propriétés . . . . . . . . . . .
. . . . . . . .
. . . . . . . .
non-ramifiées
. . . . . . . .
. . . . . . . .
. . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
9
9
9
12
12
12
13
2 A.G.M
2.1 Comptage de points . . . . . . . . . .
2.1.1 Problème du logarithme discret
2.1.2 Algorithme de Pohlig-Hellman
2.2 Présentation de l’algorithme A.G.M .
2.3 Exemple . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
17
17
18
19
20
3 Implémentation de l’A.G.M
3.1 Les problèmes rencontrés . .
3.1.1 Le relevé p-adique . .
3.1.2 Modulo . . . . . . . .
3.2 Optimisation . . . . . . . . .
3.3 Complexité . . . . . . . . . .
3.3.1 A.G.M homogène . . .
3.3.2 A.G.M non-homogène
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
23
23
23
25
25
27
27
29
.
.
.
.
.
.
.
Conclusion
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
31
A A.G.M en Magma
33
A.1 A.G.M homogène . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
A.2 A.G.M non-homogène . . . . . . . . . . . . . . . . . . . . . . . . 38
B Les
B.1
B.2
B.3
autres algorithmes
43
Algorithme de Shanks, Baby-Step Giant-Step . . . . . . . . . . . 43
Algorithme de Gauß . . . . . . . . . . . . . . . . . . . . . . . . . 44
Détermination d’une racine par la méthode de Newton . . . . . . 44
3
4
TABLE DES MATIÈRES
B.4 Racine carrée inverse . . . . . . . . . . . . . . . . . . . . . . . . .
B.5 Calcul de la norme . . . . . . . . . . . . . . . . . . . . . . . . . .
Bibliographie
45
47
49
Introduction
Le commerce électronique et les transactions bancaires nécessitent de pouvoir émettre et recevoir des informations confidentielles, de vérifier leur intégrité
et de pouvoir signer des documents numériques. Pour répondre à ce besoin, il
est utilisé la cryptologie qui se compose en deux partie : d’une part la cryptographie et d’autre part la cryptanalyse. Il existe deux types de cryptographie :
la cryptographie symétrique et la cryptographie asymétrique. Pour illustrer ces
différentes notions, on fait appel à trois protagonistes : Alice et Bob veulent
communiquer de façon sure pendant que Estelle écoute différents canaux de
communication.
Pour les système asymétriques, chaque utilisateur possède une paire de clés :
une privée qui n’est connue que de lui même, et une clé publique qui est à disposition de tout le monde, stockée dans un endroit que l’on suppose sûr. Alice veut
transmettre un message à Bob par l’intermédiaire d’un système asymétrique.
Alice applique alors l’algorithme de chiffrement E avec pour paramètre d’entrée
la clé publique de Bob KBp et le message clair M , qui donnera en sortie le message chiffré M ′ . Bob appliquera l’algorithme de déchiffrement D qui prendra en
entrée la clé privée de Bob KBs et le message chiffré M ′ , il en résultera alors le
message clair M . Voici les formules correspondantes :
M ′ = EKBp (M ) , M = DKBs (M ′ ).
En général, un système asymétrique est utilisé pour diffuser à Alice et à Bob
la clé confidentielle d’un système symétrique. Ils peuvent ainsi communiquer par
un système symétrique qui est moins coûteux à mettre en œuvre qu’un système
asymétrique, car les phases de chiffrement et de déchiffrement d’un système
asymétrique sont assez lourdes.
L’espion Estelle est alors en possession du message chiffré, elle dispose par
ailleurs de l’algorithme de chiffrement E et de l’algorithme de déchiffrement D.
Si le système cryptographique choisi est un système asymétrique, Estelle possède
également les clés publiques. Son but est d’accéder au message clair. Avec ces
informations l’espion peut tenter une cryptanalyse. On mesure la sécurité des algorithmes en fonction du temps que doit mettre Estelle pour réussir une attaque.
5
6
TABLE DES MATIÈRES
Pour un système asymétrique ce temps est majoré par la résolution de problème
mathématiques, comme par exemple la factorisation des grands nombres pour
le système RSA [5].
La sécurité de certains systèmes cryptographiques asymétriques repose sur
le problème du logarithme discret [5]. On munit un groupe cyclique G d’une
loi que l’on va noter multiplicativement, il est engendré par un élément α. Soit
β ∈ G, on cherche x ∈ G tel que β = αx . La complexité du problème du logarithme discret dépend essentiellement du groupe dans lequel on se place. Il existe
un ensemble de groupes dans lequel ce problème est particulièrement difficile à
résoudre qui est l’ensemble des groupes des points d’une courbe elliptique sur
un corps fini.
Par l’algorithme de Pohlig-Hellman [1], on peux résoudre le problème du
√
logarithme discret sur un groupe cyclique d’ordre n en complexité O( p) avec
p le plus grand facteur premier de n. Le principe de l’algorithme de PohligHellman
Q [1] est de factoriser n l’ordre du groupe, en facteurs premiers pi tel que
n = pei i . Ensuite on calcule le logarithme discret par l’algorithme de Shanks
( Baby Step, Giant Step ) dans des sous-groupes de G d’ordre pei i . On obtient
enfin un système de congruences qui se résout par le théorème des restes chinois. Si ce groupe est friable, c’est-à-dire que l’ordre du groupe se décompose
en produit de petits facteurs premiers, alors le problème du logarithme discret
devient facile à résoudre par l’algorithme de Pohlig-Hellman, il s’en suit que la
cryptanalyse du système cryptographique utilisé est rapide.
Il est donc important de compter le nombre de points sur une courbe elliptique sur un corps fini pour connaı̂tre la complexité de l’algorithme de PohligHellman, et donc de savoir si le système cryptographique basé sur ce groupe est
sûr.
L’objet du stage est d’étudier un algorithme de comptage de points sur
les courbes elliptiques appelé A.G.M. Ce stage s’effectue, sous la direction de
Monsieur David Lubicz durant la période de juillet et août 2006 au Centre
d’ÉLectronique de l’ARmement (CELAR) dans le département Sécurité des
Systèmes d’Information (S.S.I). C’est un centre d’expertise reconnu des techniques de la guerre de l’information. Ce centre est l’un des huits établissements
de la Direction de l’Expertise Technique (D.E.T) de la Délégation Générale
pour l’Armement (D.G.A). Le département sécurité des systèmes d’information
a pour mission de maı̂triser les risques liés à la sécurité des systèmes d’information et de gestion, avec une responsabilité élargie à l’ensemble des applications
gouvernementales pour le développement des algorithmes de cryptographie.
Dans un premier temps on va aborder les principaux outils mathématiques
que l’on va manipuler comme : les nombres p-adiques et les courbes elliptiques.
D’autre part, on va présenter l’algorithme A.G.M, puis donner un exemple
d’implémentation dans un langage de programmation de haut niveau : Magma.
TABLE DES MATIÈRES
Enfin, on va étudier la complexité de cet algorithme.
7
8
TABLE DES MATIÈRES
Chapitre 1
Les pré-requis
mathématiques
Sommaire
1.1
Les
1.1.1
1.1.2
1.2 Les
1.2.1
1.2.2
nombres p-adiques . . . . . . . . . . . . . . . .
Définition de Zp . . . . . . . . . . . . . . . . . . . .
Le corps Qp et ses extensions totalement non-ramifiées
courbes elliptiques . . . . . . . . . . . . . . . .
Définition . . . . . . . . . . . . . . . . . . . . . . . .
Quelques propriétés . . . . . . . . . . . . . . . . . .
9
9
12
12
12
13
Pour compter les points d’une courbe elliptique, on peut utiliser l’algorithme
A.G.M. Pour cela, on a besoin de quelques connaissances sur les nombres padiques et sur les courbes elliptiques.
1.1
Les nombres p-adiques
Cette partie sur les nombres p-adiques est tirée entièrement de [3]. Son but
est de présenter au lecteur les principales définitions et propriétés des nombres
p-adiques.
1.1.1
Définition de Zp
Pour définir les nombres p-adiques, on a besoin d’introduire certaines notions
comme la limite inverse. Tout d’abord, on rappel la définition d’un ensemble
9
10
CHAPITRE 1. LES PRÉ-REQUIS MATHÉMATIQUES
orienté.
Définition 1.1 (Ensemble orienté) Soit I un ensemble muni d’une relation
d’ordre partiel ≥, c’est-à-dire : ∀i, j, k ∈ I
– i ≥ i,
– si i ≥ j et si j ≥ k ⇒ i ≥ k,
– si i ≥ j et si j ≥ i ⇒ i = j.
Alors I est un ensemble orienté si ∀i, j, ∈ I, ∃k ∈ I tel que k ≥ i et k ≥ j.
Définition 1.2 (Familles orientées de groupes) Une famille orientée de groupes
est donnée par :
– un ensemble orienté I,
– pour chaque i ∈ I, Ai un est un groupe. Soient i, j ∈ I tel que i ≥ j et
pij : Ai → Aj est un morphisme de groupes satisfaisant :
∀i, j, k ∈ I
tel
que
i≥j≥k
pjk ◦ pij = pik .
On appelle (Ai , {pij }j∈I ) une famille orientée.
Définition 1.3 (Limite inverse) Soit (Ai , {pij }j∈I ) une famille orientée de
groupes et soit A un groupe avec un ensemble de morphismes (pi : A → Ai )i∈I
compatibles avec les pij , c’est-à-dire pour i ≥ j pj = pij ◦ pi satisfaisant la propriété suivante :
soit B un groupe et soit (φi )i∈I un ensemble de morphismes, φi : B → Ai
tel que le diagramme commute pour i ≥ j ,
B
φi
−→
φjց
Ai
↓ pij
Aj
alors il y a un morphisme φ tel que ∀j ∈ I le diagramme ,
B
φ
−→
φjց
A
↓ pj
Aj
est commutatif. Le groupe A est appelé limite inverse de (Ai , {pij }j∈I ) noté
lim
←−Ai .
∗
Proposition
Q 1.1 Soit (Ai , {pij }j∈I ) une famille orientée de groupes avec I = N .
Ai le produit des familles. On considère le sous-ensemble Γ de A qui
Soit A =
i∈I
pour tout ai ∈ Ai et pour tout i ≥ j pij (ai ) = aj . Alors Γ est un sous-groupe
∗
de A qui est isomorphe à lim
←−Ai où la projection pk pour k ∈ N est donnée
par pk : ai → ak . En particulier, la limite inverse d’une famille orientée de
groupes existe toujours. De plus, si tous les Ai sont des anneaux, alors lim
←−Ai
est un anneau.
1.1. LES NOMBRES P -ADIQUES
11
Avec cette notion, on peut définir l’anneau des entiers p-adiques de la manière
suivante :
Définition 1.4 (Anneau des entiers p-adiques) Soit p un nombre premier
et I = N∗ . Pour i ≥ j ∈ I, on définit pij : pZi Z → pZj Z les projections naturelles
données par réduction modulo pj , alors ( pZi Z , {pij }j∈I ) est une famille orientée.
La limite inverse lim pZi Z notée Zp est appelé l’anneau des entiers p-adiques.
←−
Le morphisme naturel d’anneau ψ : Z → Zp donné par ψ(1Z ) = 1Zp est injectif, ce qui implique que la caractéristique de Zp = 0. Les éléments inversibles
dans Zp sont caractérisés par la proposition suivante :
Proposition 1.2 (Valuation p-adique) Un élément z ∈ Zp est inversible si
et seulement si z ∈
/ Ker(p1 ). Soit z ∈ Zp non nul, il existe un unique vp (z) ∈ N
tel que z = uψ(p)vp (z) avec u élément inversible dans Zp . L’entier vp (z) est
appelé la valuation p-adique de z. On prolonge la fonction vp sur Zp en posant
vp (0) = +∞.
Définition 1.5 (Valuation discrète) Soit R un anneau et soit v : R → Z une
fonction telle que : ∀x, y ∈ R
– v(xy) = v(x) + v(y),
– v(x + y) ≥ min(v(x), v(y))
avec l’égalité quand v(x) 6= v(y).
Une fonction avec ces propriétés est appelée valuation discrète.
Lemme 1.1 La fonction vp est une valuation discrète.
Soient K un corps muni d’une valuation discrète notée vK , R = {x ∈ K | |x|K ≤ 1}
un anneau et M = {x ∈ R | |x|K < 1} est un idéal maximal de R. On appel
K = R/M le corps résidue de K.
Définition 1.6 (Système de représentation) Un élément π ∈ R est appelé
uniformisante si vK (π) = 1. Soit p1 la projection canonique de R dans K. Une
application ω : K −→ R est un système de représentation si pour tout x ∈ K
on a : p1 (ω(x)) = x.
Définition 1.7 (Relevé) Un élément x ∈ R est appelé relevé de x0 ∈ K si
p1 (x) = x0 .
Comme K est complet, on peut utiliser la propriété de Cauchy, [3] et on
obtient l’existence d’une unique suite (xi )i≥0 ∈ K telle que
x=
∞
X
i=0
ω(xi )π i .
12
CHAPITRE 1. LES PRÉ-REQUIS MATHÉMATIQUES
1.1.2
Le corps Qp et ses extensions totalement non-ramifiées
Dans l’algorithme A.G.M, on a besoin des extensions totalement non-ramifiées
pour effectuer un relèvement d’un élément d’un corps fini. On garde les mêmes
notations que précédement.
Définition 1.8 (Extension non-ramifiée) Soit K/Qp est une extension fini
de degré d totalement non ramifiée si et seulement si K est isomorphe à un
Qp [X]
corps de la forme (P
) , où (P ) est l’idéal engendré par un polynôme de Qp de
degré d qui se réduit modulo p à un polynôme irréductible de degrés d de Fp .
Proposition 1.3 On note P1 le morphisme de réduction de R[X] −→ K[X]
induit par p1 et soit m̄ le polynôme irréductible définit par P1 (m). L’extension
K/Qp est totalement non-ramifiée si et seulement si deg(m) = deg(m̄). Soit
d = deg(m̄) et Fq = Fpd le corps fini définit par m̄, alors on a p1 (R) = Fq .
1.2
1.2.1
Les courbes elliptiques
Définition
Dans ce paragraphe, on donne la définition d’une courbe elliptique.
Définition 1.9 (Courbes elliptiques) On appel courbe elliptique définie sur
un corps K est donnée par l’équation de Weirstraß :
y 2 + a1 xy + a3 y = x3 + a2 x2 + a4 x + a6 .
Avec a1 , a2 , a3 , a4 , a6 ∈ K.
Il existe différentes formes d’équations pour définir les courbes elliptiques
dans le cas où la caractéristique du corps est égale ou supérieure à trois. Pour
l’algorithme A.G.M, on travaille sur les corps de caractéristique égale à deux.
Si a1 6= 0 on peut effectuer les changements de variable suivants :
y 7→ a31 y +
a23 + a21 a4
a31
,
x 7→ a21 x +
a3
.
a1
Ce qui donne dans [3] une équation du type :
y 2 + xy = x3 + a′2 x2 + a′6 .
On souhaite étudier les courbes elliptiques qui sont de la forme :
y 2 + xy = x3 + c , c ∈ F∗2d .
On introduit le j-invariant qui est une quantité caractérisant les courbes
elliptiques [3].
13
1.2. LES COURBES ELLIPTIQUES
Définition 1.10 (Le j-invariant) On appelle le j-invariant d’une courbe elliptique E : y 2 + xy = x3 + c définie sur un corps fini F2d , noté j(E) la quantité
suivante :
j(E) =
1.2.2
1
, c 6= 0F2d .
c
Quelques propriétés
L’algorithme A.G.M sert à calculer le nombre de points de E éléments de
F2d , on note |E(F2d )| cette quantité. On admet le théorème de Hasse [6] qui
permet d’encadrer |E(F2d )|.
Théorème 1.1 (Théorème de Hasse [6]) Une courbe elliptique E définie sur
F2d un corps fini à 2d éléments, possède environ 2d points. Plus précisément
|E(F2d )| vérifie l’innégalité :
√
√
2d + 1 − 2 2d ≤ |E(F2d )| ≤ 2d + 1 + 2 2d
Maintenant, on va munir l’ensemble des points d’une courbe elliptique d’une
loi de composition interne que l’on notera additivement ⊕.
On définit d’abord cette loi géométriquement [3].
Soit P et Q deux points de la courbe elliptique E d’équation y 2 + xy = x3 + c
avec c ∈ F2d . On trace la droite passant par ces deux points, comme E est une
courbe cubique alors cette droite coupe E en un troisième point. On pose P ⊕ Q
le symétrique du troisième point vis-à-vis de l’axe des abscisses.
La même construction peut s’appliquer à P ⊕P , en remplaçant la droite passant
par les deux points par la tangente de E au point P . On note P ⊕ P = [2]P ,
plus généralement on note :
[n]P = P ⊕ . . . ⊕ P .
{z
}
|
n f ois
Pour tout point P élément de E, on note son opposé ⊖P , le symétrique de
P par l’axe des abscisses. Notons alors l’élément neutre P∞ le point à l’infini.
Voici un schéma explicite de la loi ⊕ [3] :
14
CHAPITRE 1. LES PRÉ-REQUIS MATHÉMATIQUES
On peut définir également cette même loi arithmétiquement. Soient P = (x1 , y1 ),
Q = (x2 , y2 ) et P ⊕ Q = R = (x3 , y3 ) tels que x2 6= x1 , trois points de la courbe
elliptique (E) d’équation y 2 + xy = x3 + c définie sur F2d .
Soit (D) la droite passant par P et par Q. On détermine l’équation de la
droite (D) en résolvant le système ci-dessous :
y1 = λx1 + µ
.
y2 = λx2 + µ
On obtient alors λ =
(D) : y = λx + µ.
y1 −y2
x1 −x2 ,
µ =
x1 y2 −x2 y1
x1 −x2
et l’équation de la droite
Pour déterminer P ⊕ Q on calcule par l’intersection de la droite (D) et de
la courbe elliptique E. On obtient alors l’équation à résoudre :
(λx + µ)2 + x(λx + µ) = x3 + c.
0 =
=
λ2 x2 + 2λxµ + µ2 + λx2 + µx − x3 − c
x3 + x2 (−λ2 + λ) + x(−2λµ − µ) + c − µ2 .
C’est une équation du troisième degré, comme P, Q ∈ D ∩ E alors x1 et x2
sont solutions de l’équation ci-dessus. Il reste donc à déterminer x3 l’abscisse de
P ⊕ Q. On remarque que les abscisses de P ⊕ Q et de ⊖(P ⊕ Q) sont identiques.
On obtient alors :
0
= (x − x1 )(x − x2 )(x − x3 )
= x3 − x2 x2 − x2 x1 + xx1 x2 − x2 x3 + xx2 x3 + xx1 x3 + x1 x2 x3
= x3 + x2 (−x2 − x1 − x3 ) + x(x1 x2 + x2 x3 + x1 x3 ) + x1 x2 x3 .
15
1.2. LES COURBES ELLIPTIQUES
Par identification, on obtient l’égalité : −λ2 − λ = −x1 − x2 − x3 , alors
x3 = λ2 + λ − x1 − x2 .
En prenant la notation ⊖(P ⊕ Q) = (x3 , y3′ ), comme ⊖(P ⊕ Q) ∈ D on
obtient l’égalité suivante : y3′ = λx3 + µ.
Il reste à déterminer y3 l’ordonnée de P ⊕ Q. Il suffit de savoir exprimer
l’opposé de tous les éléments de E. On détermine l’opposé de P = (x1 , y1 ) que
l’on note ⊖P = (x′1 , y1′ ). Il est clair que x1 = x′1 alors P, ⊖P ∈ E implique que
y1 et y1′ sont solutions de :
y 2 + yx1 − x31 − c
y1′
=
=
(y − y1 )(y − y1′ )
y 2 + y(−y1 − y1′ ) + y1′ y1 .
Par identification on obtient −y1 − y1′ = x1 ce qui donne l’expression
= −y1 − x1 . Alors
P ⊕Q
= (x3 , −x3 − y3′ )
= (λ2 + λ − x1 − x2 , −x3 − λx3 − µ)
= (λ2 + λ − x1 − x2 , −x3 (λ + 1) − µ).
Simplifions l’écriture de y3 en explicitant µ.
µ =
=
=
x1 y2 − x2 y1
x1 − x2
x1 y2 − x1 y1 + x1 y1 − x2 y1
x1 − x2
−x1 λ + y1 .
Alors
avec λ =
x3 = λ2 + λ − x1 − x2
,
y3 = λ(x1 − x3 ) − y1
y2 −y1
x2 −x1 .
Il nous reste à traiter le cas où x1 = x2 .
De plus si y1 6= y2 , alors P = ⊖Q alors P ⊕ Q = P∞ . Sinon P = Q, alors
P ⊕ Q = [2]P . Dans ce cas, la droite (D) devient la tangente de E au point P .
La dérivée partielle de E par rapport à x est 3x2 − y, par rapport à y est 2y + x.
16
Alors λ =
CHAPITRE 1. LES PRÉ-REQUIS MATHÉMATIQUES
3x21 −y1
2y1 +x1 .
Pour conclure voici l’expression de la loi ⊕ sur une courbe elliptique E
d’équation y 2 + xy = x3 + c avec c ∈ F2d .
avec
λ=
Si P = ⊖Q :
x3 = λ2 + λ − x1 − x2
,
y3 = λ(x1 − x3 ) − y1
(
y2 −y1
x2 −x1 ,
3x21 −y1
2y1 +x1 ,
si P 6= Q
si
P =Q
.
P ⊕ Q = P∞ .
Proposition 1.4 L’ensemble des points d’une courbe elliptique munit de la loi
⊕ forme un groupe abélien[6].
Chapitre 2
A.G.M
Sommaire
2.1
Comptage de points . . . . . . . . . . . . . .
2.1.1 Problème du logarithme discret . . . . . . .
2.1.2 Algorithme de Pohlig-Hellman . . . . . . .
2.2 Présentation de l’algorithme A.G.M . . . .
2.3 Exemple . . . . . . . . . . . . . . . . . . . . .
2.1
2.1.1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
. . 17
. . 18
.
19
.
20
Comptage de points
Problème du logarithme discret
Obtenir la valeur du logarithme discret dans certains groupes peut s’avérer
calculatoirement difficile. Ainsi certains sytèmes cryptographiques asymétriques
reposent sur le problème du logarithme discret. C’est pour cela que l’on a besoin
de moyens pour évaluer la sécurité des groupes. Le comptage de points sur les
courbes elliptiques permet de le faire, dans le cas où le groupe considéré est les
points d’une courbe elliptique E.
On sait maintenant d’après la proposition 1.4 à la page 16, que l’ensemble
des points d’une courbe elliptique muni de la loi ⊕, forme un groupe abélien dans
lequel le problème du logarithme discret peut s’avérer difficile à résoudre [5]. En
effet grâce à l’algorithme de Pohlig-Hellman, on peut résoudre le problème du
logarithme discret facilement si l’ordre de ce groupe est friable.
17
18
CHAPITRE 2. A.G.M
On rappel le problème du logarithme discret.
Dans un groupe cyclique G muni d’une loi de groupe que l’on notera additivement +, comme ⊕ la loi sur les courbes elliptiques, le logarithme discret
s’exprime de la manière suivante : soient g un générateur de G et a un élément
de G, on cherche x tel que :
a = g + ... + g.
| {z }
x f ois
2.1.2
Algorithme de Pohlig-Hellman
L’algorithme de Pohlig-Hellman permet de résoudre le problème du logarithme discret dans un groupe cyclique G d’ordre n. La complexité de cet algorithme dépend de n. En effet la complexité de l’algorithme de Pohlig-Hellman
√
est en O( p) opérations sur le groupe [1], avec p le plus grand facteur premier de
n. Cet algorithme est générique c’est-à-dire qu’il n’utilise que la loi du groupe,
il fonctionne donc toujours. C’est aujourd’hui le meilleur algorithme générique
connu, en terme de complexité pour résoudre le problème du logarithme discret.
C’est pour cela qu’on le prend en référence.
Le principe de l’algorithme
Qde Pohlig-Hellman est d’exprimer n en un produit
de facteurs premiers pi , n = pei i . Ensuite on résoud dans chaque sous-groupe
d’orde pei i le problème du logarithme discret par l’algorithme de Shanks, que
l’on peut trouver dans la littérature sous le nom de Baby-Step Giant-Step [3].
On obtient ensuite un système de congruences que l’on résout par l’algorithme
de Gauß, c’est la version effective du théorème des restes chinois [1].
Voici l’algorithme de Pohlig-Hellman tel qu’il est présenté dans [1] :
19
2.2. PRÉSENTATION DE L’ALGORITHME A.G.M
Entrée : le générateur α de G, n l’ordre de G et β un élément de G.
Sortie : le logarithme discret x = logα β.
1.
2.
Décomposer n en produit
n = pe11 pe22 . . . perr , où ei ≥ 1
Pour i allant de 1 à r faire :
q ←− pi et e ←− ei
de
facteurs
premiers
:
[simplification des notations]
γ ←− 1 et l−1 ←− 0
n
ᾱ ←− α q
Pour j allant 0 à e − 1 faire :
γ ←− γαlj−1 q
lj ←− logᾱ β̄
3.
4.
2.2
j−1
n
et β̄ ←− (βγ −1 ) qj+1
xi ←− l0 + l1 q + . . . + le−1 q
[par l’algorithme de Shanks]
e−1
Calculer l’entier x, tel que 0 ≤ x ≤ n − 1 et x ≡ xi (mod pei i )
pour 1 ≤ i ≤ r
[par l’algorithme de Gauss]
Retourner (x).
Présentation de l’algorithme A.G.M
La moyenne arithmético-géométrique a été introduite par Lagrange et Gauß
pour calculer les intégrales elliptiques [3]. Mestre a montré en décembre 2000
dans une lettre adressée à Gaudry et Harley [4], comment la version 2-adique
de l’A.G.M peut être utilisée pour calculer le nombre de points d’une courbe
elliptique sur un corps fini de caractéristique deux. Voici comment l’algorithme
A.G.M est présenté dans [3] :
20
CHAPITRE 2. A.G.M
Entrée : Une courbe elliptique E : y 2 +xy = x3 + c̄ sur F2d avec j(E) 6= 0.
Sortie : Le nombre de points de E(F2d ).
N ←− ⌈ d2 ⌉ + 3
1.
a ←− 1 et b ←− (1 + 8c) mod 24
2.
3.
Pour i allant de 5 à N faire :
√
i
(a, b) ←− ( a+b
2 , ab) mod 2
4.
a0 ←− a
5.
Pour i allant de 0 à d − 1 faire :
√
N
(a, b) ←− ( a+b
2 , ab) mod 2
6.
t ←−
2
7.
a0
a
Si t > 2
mod 2N −1
d+2
alors t ←− t − 2N −1
retourner 2d + 1 − t
8.
2.3
[c un relevé de c̄]
Exemple
On va calculer le nombre de points de E la courbe elliptique définie sur Z24 .
L’extension Z24 a été définie par le polynôme X 4 + X + 1. Soit E est donnée
par l’équation
y 2 + xy = x3 + (X 12 ).
Dans ce cas, on a : c = X 12 = (1, 1, 1, 1) et d = 4.
Alors, en déroulant pas à pas la fonction Agm(X 12 ) définie à la section 2.2
à la page 19, on obtient à l’étape un et deux :
N = ⌈ d2 ⌉ + 3 = 5,
a = 1,
b = 1 + 8c = 8X 3 + 8X 2 + 8X − 7 + O(24 ).
À l’étape trois, on rentre dans la première boucle. On effectue qu’une seule
itération car i prend comme valeur initiale 5 et doit s’arrêter à N = 5.
Itération
1
i
5
a = a+b
2
3
2
4X + 4X + 4X + 5 + O(25 )
√
b = ab
12X 3 + 4X 2 − 4X − 11 + O(25 )
À l’étape quatre, on ne fait qu’une simple sauvegarde de la valeur de a dans
a0 :
a0 = a = 4X 3 + 4X 2 + 4X + 5 + O(25 ).
21
2.3. EXEMPLE
À l’étape cinq, on rentre alors dans la seconde boucle. On effectue 4 itérations
car i débute à 0 pour se terminer à d − 1 = 3. On obtient alors le tableau des
valeurs suivant :
Itération
1
2
3
4
i
0
1
2
3
a = a+b
2
3
2
8X + 4X + 16X + 13 + O(25 )
12X 3 + 4X 2 + 8X − 11 + O(25 )
16X 3 + 8X 2 + 8X − 11 + O(25 )
−12X 3 + 4X 2 + 4X − 7 + O(25 )
√
b = ab
16X 3 + 4X 2 − 3 + O(25 )
−12X 3 + 12X 2 + 8X − 11 + O(25 )
−8X 3 − 3 + O(25 )
3
−4X + 4X 2 − 4X + 9 + O(25 )
À l’étape six, on effectue maintenant la division de a0 par a à la précision
N − 1 = 4, on sauvegarde ce résultat dans la variable t :
4X 3 +4X 2 +4X+5+O(25 )
4
t = aa0 = −12X
3 +4X 2 +4X−7+O(25 ) = −3 + O(2 ).
Alors t est élément de Z2 donc on peut le projeter dans Z/2N −1 Z. On sauvegarde une nouvelle fois dans t :
t = −3 mod 24 = 13.
En conformité avec le théorème de Hasse théorème 1.1 à la page 13 :
√
√
2d + 1 − 2 2d ≤ |E(F2d )| ≤ 2d + 1 + 2 2d .
d
On vérifie à l’étape
√ sept que 2 + 1 − t est bien dans cet intervalle. Pour cela
on teste si : t2 ≤ (2 2d )2 ce qui revient à tester si : t2 ≤ 2d+2 .
t2 = 132 = 169,
2d+2 = 26 = 64.
Donc on retranche 2N −1 = 24 = 16 à t :
t = t − 16 = 13 − 16 = −3.
Enfin à la huitième et dernière étape, on retourne le nombre de points de la
courbe elliptique E(F24 ) :
|E(F24 )| = 2d + 1 − t = 24 + 1 + 3 = 20.
22
CHAPITRE 2. A.G.M
Chapitre 3
Implémentation de l’A.G.M
Sommaire
3.1
Les problèmes rencontrés .
3.1.1 Le relevé p-adique . . .
3.1.2 Modulo . . . . . . . . .
3.2 Optimisation . . . . . . . .
3.3 Complexité . . . . . . . . .
3.3.1 A.G.M homogène . . . .
3.3.2 A.G.M non-homogène .
3.1
3.1.1
.
.
.
.
.
.
.
. . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
23
23
25
25
27
27
29
Les problèmes rencontrés
Le relevé p-adique
On étudie le nombre de points d’une courbe elliptique définie sur un corps
fini F2d , on doit manipuler c ∈ F2d . Pour le faire, on relève c dans Z2d l’extension
totalement non-ramifiée de Z2 .
Pour cela, on sait que F2d est isomorphe à l’anneau des polynômes de F2 noté
F2 [X], quotienté par l’idéal de F2 [X] engendré par un polynôme P irréductible
de degrés d de F2 [X] :
F2d ≃
F2 [X]
.
(P )
23
24
CHAPITRE 3. IMPLÉMENTATION DE L’A.G.M
Alors, on peut dire que :
∀x̄ ∈ F2d ∃(x̄i )i∈{1,...,d} ∈ F2 / x̄ =
d
X
x̄i X̄ i−1 ,
i=1
F2 [X]
(P ) .
avec X̄ la classe de X dans
Il en est de même pour l’extension non-ramifiée de l’anneau des entiers
2-adiques. On sait également que l’extension totalement non-ramifiée Z2d est
isomorphe à l’anneau des polynômes à coefficients dans Z2 noté Z2 [X] quotienté par l’idéal engendré par Q un polynôme de degrés d de Z2 [X] qui se
réduit modulo deux à P :
Z2d ≃
Z2 [X]
.
(Q)
Alors, on peut dire que :
∀x ∈ Z2d ∃(xi )i∈{1,...,d} ∈ Z2 / x =
avec X̄ la classe de X dans
d
X
xi X̄ i−1 ,
i=1
Z2 [X]
(Q) .
Donc, pour effectuer un relevé de F2d dans Z2d , il suffit de relever chaque
x̄i ∈ F2 dans Z2 . Tout d’abord, on rappel que F2 est un corps fini dans lequel il
y a deux éléments. On va les noter 0F2 et 1F2 .
On peut alors relever x ∈ F2 dans Z2 par la projection canonique pF2 :
pF 2
:
F2
−→
x
7→
Z2
pF2 (x) =
0Z2 , si x = 0F2
1Z2 , si x = 1F2
.
Ainsi, on relève x̄ ∈ F2d dans Z2d par la projection suivante :
pF2d
:
x̄ =
F d
Pd 2
i=1
x̄i X̄
i−1
−→
7→
pF2d (x̄) =
Zd
Pd 2
i=1
pF2 (x̄i )X̄ i−1 .
En Magma, cela peut se faire par deux opérateurs :
– ’Eltseq(x)’ avec x ∈ F2d , retourne le d-uplet (x1 , . . . , xd ) ∈ (F2 )d tel que
Pd−1
x = i=0 xi X̄ i .
– ’Z2d !x’ avec x = (x1 , . . . , xd ) ∈ (F2 )d , retourne le d-uplet (pF2d (x1 ), . . . , pF2d (xd )) ∈ (Z2 )d .
Pour effectuer un relevé d’un élément c ∈ F2d sur Z2d on utilise ces opérateurs
en Magma sous la forme suivante :
Z2d ! Eltseq(c) , avec Z2d = Z2d et c ∈ F2d .
25
3.2. OPTIMISATION
3.1.2
Modulo
À différentes étapes de l’algorithme A.G.M, on doit effectuer l’opération
suivante :
a mod 2j
,
a ∈ Z2d et j ∈ N.
Or, en pratique, on ne peut pas appliquer directement l’opérateur modulo à
un élément de l’extension totalement non-ramifiée.
Soit x ∈ (Z2 )d , on dit que l’on a calculé x à précision N si on dispose de
x′ ∈ (Z2 )d tel que ∀ i ∈ {1, . . . , d} xi ≡ x′i mod 2N .
En conséquence de quoi, calculer un x ∈ Z2 à précision N revient à calculer un
représentant de la classe de PN , où PN : Z2 −→ 2NZ2Z2 est la projection canonique.
On remarque en particulier que l’on peut représenter un élément de Z2 à précision
N comme un entier non-signé de ⌈log2 N ⌉ bits.
Maintenant, en utilisant la représentation polynômiale tout élément de Z2d
peut être écrit comme un vecteur de dimension d à coefficients dans Z2 . On peut
appliquer la définition précédente.
On mémorise un élément de Z2d à précision N , il faut donc d⌈log2 N ⌉ bits.
Pour se ramener, à notre cas particulier : l’implémentation de l’algorithme
A.G.M en Magma, on peut utiliser la fonction :
ChangePrecision( a , precision ),
avec a un élément de Z2 ou de Z2d et precision un entier.
3.2
Optimisation
On simplifie l’algorithme homogène tel qu’il est proposé à la section 2.2 page
19 pour obtenir un nouvel algorithme plus rapide.
Soient d ∈ N∗ , E : y 2 + xy = x3 + c̄, avec c̄ ∈ F2d .
La version précédente de l’algorithme A.G.M repose sur le calcul de la suite :
(ak+1 , bk+1 ) = (
Posons εk =
ak
bk
ak + b k p
, ak bk ), avec (a0 , b0 ) = (1, 1 + 8c).
2
k ∈ N∗ . Alors
26
CHAPITRE 3. IMPLÉMENTATION DE L’A.G.M
εk+1
=
ak+1
bk+1
ak +bk
=
=
=
√2
ak b k
bk ( abkk + 1)
1
− 12
2bk ak2 bk
εk + 1
√ ,
2 εk
avec ε0 = 1 + 8c et c ∈ Z2d un relevé de c̄.
On admet qu’à partir de l’étape quatre, l’algorithme A.G.M homogène à la
k
section 2.2 page 19 est équivalent au calcul de la norme NQq /Qp ( aak+1
).
On donne d’abord la définition de la substitution de Frobenius :
Q
d
Définition 3.1 (La substitution de Frobenius) Le groupe de Galois de Qpp
est cyclique d’ordre d et engendré par le morphisme de Frobenius Σ qui est
Q d
l’unique automorphisme de Qpp vérifiant
p1 (Σ(x)) = pp1 (x).
Voici la définition de la norme NQq /Qp tirée de [3] :
Définition 3.2 (La norme NQq /Qp ) La norme de x ∈ Qq est :
NQq /Qp (x) =
d−1
Y
i=0
Σi (x), avec d ∈ N∗ tel que q = pd .
On effectue le calcul :
ak
ak+1
=
=
=
ak
ak +bk
2
bk (2 abkk )
bk ( abkk + 1)
2εk
.
εk + 1
27
3.3. COMPLEXITÉ
ak
k
Donc NQq /Qp ( ak+1
) = NQq /Qp ( ε2ε
).
k +1
On donne l’algorithme A.G.M non-homogène, tel qu’il est présenté dans [3] :
Entrée : Une courbe elliptique E : y 2 +xy = x3 + c̄ sur F2d avec j(E) 6= 0.
Sortie : Le nombre de points de E(F2d ).
1.
2.
3.
N ←− ⌈ d2 ⌉ + 3
ε ←− (1 + 8c) mod 24
Pour i allant de 5 à N faire :
ε ←−
4.
5.
6.
3.3
[c un relevé de c̄]
ε+1
√
2 ε
mod 2i
2ε
) mod 2N −1
t ←− NQq /Qp ( 1+ε
Si t2 > 2d+2 alors t ←− t − 2N −1
retourner 2d + 1 − t
Complexité
La complexité est une notion très importante. Pour l’évaluer on utilise le
modèle de calcul d’une machine à accés direct. La notion de complexité est
relative soit au temps de calculs de l’algorithme soit à sa consommation mémoire.
D’une part, on va tenter de déterminer la complexité en terme de temps de
calculs de l’algorithme A.G.M homogène présenté à la section 2.2 page 19, puis
la complexité de l’algorithme A.G.M non-homogène présenté à la section 3.2
page 25. Pour cela, on va tout d’abord énumérer puis étudier la complexité des
opérations, pour enfin présenter la complexité de ces deux algorithmes.
3.3.1
A.G.M homogène
Les opérations dans Z2 ou dans Z2d se font à une certaine précision. Donc
plus la précision augmente plus les calculs vont être long à s’éxécuter. De même,
dans une boucle plus il y a d’itérations plus la boucle sera longue à être éxécutée.
La première fait N − 4 ≈ d−1
2 itérations à précision croissante vers N et la
deuxième exactement d itérations à la précision N . La seconde boucle majore
la complexité de l’algorithme A.G.M homogène.
On prend comme paramètre de complexité d et on rappel que N la précision
des calculs est de l’ordre de d. Dans la seconde boucle comme opérations nonlinéaires dans Z2d , il y a :
28
CHAPITRE 3. IMPLÉMENTATION DE L’A.G.M
– une addition
– une multiplication
– une racine carrée
On étudie la complexité de toutes ces opérations, on commence par l’addition dans Z2d .
L’addition dans Z2d
On souhaite additionner à la précision d deux éléments a et b de l’extension
totalement non-ramifiée Z2d . En utilisant la représentation polynômiale, a et b
peuvent s’écrire comme deux polynômes de degré au plus d à coefficients dans
Z2 .
Pour additionner a et b, on utilise l’algorithme d’addition trivial entre deux
polynômes. Ce procédé utilise d additions dans Z2 . Une addition dans Z2 est
linéaire en d. Alors complexité de l’addition de Z2d à la précision d est en O(d2 ).
La multiplication dans Z2d
Deux éléments a et b appartiennent à l’extension totalement non-ramifiée
Z2d . On veut multiplier a par b à la précision d. Comme au paragraphe précédent,
on peut utiliser la représentation polynômiale de a et de b pour les multiplier
entre eux.
Pour cela, on utilise la multiplication polynômiale triviale qui utilise d2 multiplications d’éléments de Z2 . Grâce à l’algorithme de la transformée de Fourier
rapide ( FFT en anglais ), la complexité d’une multiplication à la précision d
de deux éléments de Z2 est en O(d log2 d).
Le polynôme c résultant de la multiplication de a par b peut être de degré
supérieur à d − 1. Pour préserver la stabilité de la multiplication dans Z2d , on
effectue la réduction c modulo Q. C’est avec le polynôme Q que l’on a définie
l’extension totalement non-ramifiée, section 3.1.1 page 23. Cette opération utilise au plus d multiplications dans Z2 , alors sa complexité est en O(d2 log2 d).
Donc la complexité d’une multiplication à la précision d de deux éléments
de Z2d est en O(d3 log2 d).
Racine carrée dans Z2d
√
Soit a√
∈ Z2d , on cherche à déterminer a ∈ Z2d à précision N .
On écrit a = √aa car on sait retrouver la racine carrée inverse d’un élément
de Z2d par l’algorithme de Newton B.3 à la page 44. Ce qui donne l’algorithme
proposé dans [3], qui est disponible en annexe B.4 page 45. Cela revient à cher-
3.3. COMPLEXITÉ
29
cher la racine du polynôme f (x) = 1 − ax2 par l’algorithme de Newton.
Il y a O(log2 N ) itérations, où chaque itération est majorée par la multiplication de deux éléments de Z2d de précision N . Alors, il en vient que la complexité
de l’algorithme pour trouver la racine carrée est de O(d3 (log2 d)2 ).
La complexité totale de l’algorithme A.G.M homogène est majorée par la
complexité de la racine carrée. On calcul d racines carrées, on peut donc conclure
que la complexité de l’algorithme A.G.M homogène est de l’ordre : O(d4 (log2 d)2 ).
3.3.2
A.G.M non-homogène
On va tenter d’étudier la complexité de l’algorithme A.G.M non-homogène
énoncé à la section 3.2 page 25.
Il y a deux parties de l’algorithme qui peuvent majorer la complexité de l’algorithme A.G.M non-homogène : la boucle et le calcul de la norme.
Le calcul de la norme se fait par l’algorithme décrit en annexe B.5 à la page
47. On admet que la boucle a une plus grande complexité que celle du calcul de
la norme.
Maintenant, on calcule la complexité de la boucle dans l’algorithme A.G.M
non-homogène.
Cette boucle comporte N − 4 itérations, ce qui est de l’ordre de d. De même
que la section précédente 3.3.1 page 28, c’est encore la complexité de la racine
carrée qui majore la complexité de cet algorithme.
Le calcul de la racine carrée est réitérée d fois alors on obtient la même complexité que l’algorithme A.G.M homogène O(d4 (log2 d)2 ).
Bien que la complexité de l’algorithme A.G.M non-homogène soit la même
que celle de l’algorithme A.G.M homogène, l’algorithme A.G.M non-homogène
est intéressant car il est à la base d’autres algorithmes qui sont en complexité
quadratiques.
30
CHAPITRE 3. IMPLÉMENTATION DE L’A.G.M
Conclusion
Un rappel a été fait sur les pré-requis mathématiques : les nombres p-adiques,
leurs extensions totalement non-ramifiées et les courbes elliptiques dans le but
de faciliter la compréhension du lecteur pour les éléments que l’on est amené à
manipuler. Dans un deuxième temps, on a expliqué les motivations à compter
les points sur les courbes elliptiques et étudié d’une manière générale une solution : la version 2-adique de l’algorithme A.G.M. Dans un troisième temps, on
a souligné les principales difficultés de l’implémentation des différentes versions
de l’A.G.M dans un langage de haut niveau Magma. On a pu étudier une version dite non-homogène de l’A.G.M. Enfin on a calculé la complexité des deux
versions de l’algorithme A.G.M.
L’implémentation des algorithmes A.G.M homogène et non-homogène est
dans un langage de haut niveau Magma. Les différents codes sources sont en
annexes A.1 et A.2 respectivement aux pages 33 et 38. La complexité de ces
deux algorithmes a été explicitée, les détails de calculs sont précisés dans la
section 3.3 page 27.
La version 2-adique de l’algorithme de l’A.G.M proposée par Mestre en
décembre 2000, donne précisément le nombre de points d’une courbe elliptique
définie sur un corps de caractéristique deux. Il existe des algorithmes de complexités quadratiques basés sur la version 2-adique de l’A.G.M non-homogène,
qui permettent de calculer le nombre de points sur une courbe elliptique à coefficients dans F2d .
31
32
CHAPITRE 3. IMPLÉMENTATION DE L’A.G.M
Annexe A
A.G.M en Magma
A.1
A.G.M homogène
/**************************************************************
***************************************************************
**
** Implementation de la version 2-adique de l’algorithme A.G.M
**
homogene en Magma.
**
**
**
* * * * * * * * * * * *
**
**
**
Morgan Barbier
**
etudiant en licence mathematiques a l’U.F.R des
**
sciences et techniques a l’universite de Rouen.
**
**
**
* * * * * * * * * * * *
**
**
** Mail : [email protected]
**
***************************************************************
**************************************************************\
/*
Calcul du nombres de points rationnels
de la courbe elliptique E :
y^2 + xy = x^3 + c
33
34
ANNEXE A. A.G.M EN MAGMA
definie sur F_{2^d}.
*/
clear;
/*Permet de vider toutes les variables*/
/*
Determination des parametres d’entrees ’d’ en dur
et de la constante de precision pour les nombres p-adiques.
*/
d
:= 100;
precision := d + 7;
/*
Procedure qui permet de nettoyer l’ecran.
*/
procedure clrscreen()
for i in{1 .. 40} do
print "";
end for;
end procedure;
clrscreen();
/****************************
** Debut de la fonction Agm()
****************************/
function Agm(c)
F2d
d
precision
Z2
P
Z2d
:=
:=
:=
:=
:=
:=
Parent(c);
Degree(F2d);
d+7;
pAdicRing(2,precision);
DefiningPolynomial(F2d);
UnramifiedExtension(Z2,P);
N := Ceiling(d/2) + 3;
a := Z2d!1;
b := (ChangePrecision(Z2d!1 +
for i:=5 to N do
ChangePrecision(~a,i+1);
ChangePrecision(~b,i+1);
old_a := a;
a
:= ( a + b ) / 2;
(Z2d !8) * (Z2d ! Eltseq(c)),4));
A.1. A.G.M HOMOGÈNE
b
end for;
:= Sqrt(old_a * b);
a0 := a;
for i:=0 to d-1 do
ChangePrecision(~a,N+1);
ChangePrecision(~b,N+1);
old_a := a;
a
:= ( a + b ) / 2;
b
:= Sqrt(old_a * b);
end for;
t := IntegerRing() ! ChangePrecision((a0/a),N-1);
/*
Test car ’t’ doit appartenir a l’intervalle
[ -2 * 2^{d/2} .. 2 * 2^{d/2} ]
*/
if (t^(2)) gt (2^(d + 2))
then
t := t - 2^(N-1);
end if;
return (2^(d) + 1 - t);
end function;
/****************************
** Fin de la fonction Agm()
****************************/
/*
Creation :
Corps F{2^d}
Anneau des entiers 2-adiques
et son extension non-ramifiee
*/
F2d <X> := GF(2^d);
F2 <X> := GF(2);
P
<X> := DefiningPolynomial(F2d);
Z2 <X> := pAdicRing(2,precision);
Z2d <X> := UnramifiedExtension(Z2,P);
35
36
ANNEXE A. A.G.M EN MAGMA
/*
Choisir ’c’ aleatoirement
*/
correctForme := 0;
/*
Permet de savoir si la courbe creer est bien
une courbe elliptique
*/
while correctForme eq 0 do
F2d <X> := GF(2,d);
c
:= [];
nbrUn := 0;
//Variable qui compte le nombre de 1 dans la suite ’c’;
//il en faut au moins un
while nbrUn eq 0 do
//remplissage de c;
for j in {1 .. d} do
c[j] := Random(0,1);
if c[j] eq 1
then
nbrUn := nbrUn + 1;
end if;
end for;
end while;
c := F2d ! c;
if IsEllipticCurve([ F2d | 1,0,0,0,c])
then
E := EllipticCurve([ F2d | 1,0,0,0,c]);
correctForme := 1;
end if;
end while;
print "Creation des structures . . . . . . . . . [ OK ]";
print "";
/*
A.1. A.G.M HOMOGÈNE
37
Control que l’invariant de ’E’ est bien non-nul
*/
if jInvariant(E) eq 0
then
print "Verification du j-invariant . . . . . . . [ FAILED ]";
print "";
print"Arret du programme : le j-invariant de E est nul";
quit;
end if;
print "Verification du j-invariant . . . . . . . [ OK ]";
print "";
/*
La fonction SEA() implente dans Magma permet de
determiner le nombre de points sur une courbe elliptique.
Ce qui permet de verifier si la fonction Agm()
implementee ci-dessus
retourne le resultat correctement.
*/
nbrPtsS := SEA(E);
print "Fonction SEA executee . . . . . . . . . . [ OK ]";
print "";
nbrPtsA := Agm(c);
print "Fonction Agm executee . . . . . . . . . . [ OK ]";
print "";
print "";
print "************************************************";
print "";
print
print
print
print
print
print
print
print
"";
"";
"Resultat de la fonction Agm():";
"";
"";
"";
"AGM =",nbrPtsA;
"SEA =",nbrPtsS;
clear;
38
ANNEXE A. A.G.M EN MAGMA
L’algorithme implémenté comme ci-dessus ne fonctionne pas pour d = {1, 2, 3},
ce qui n’est pas gênant car le travail sur de si petits corps peut se faire à la main
rapidement.
A.2
A.G.M non-homogène
/**************************************************************
***************************************************************
**
** Implementation de la version 2-adique de l’algorithme A.G.M
**
non-homogene en Magma.
**
**
**
* * * * * * * * * * * *
**
**
**
Morgan Barbier
**
etudiant en licence mathematiques a l’U.F.R des
**
sciences et techniques a l’universite de Rouen.
**
**
**
* * * * * * * * * * * *
**
**
** Mail : [email protected]
**
***************************************************************
**************************************************************\
/*
Calcul du nombres de points rationnels
de la courbe elliptique E :
y^2 + xy = x^3 + c
definie sur F_{2^d}.
*/
clear;
/*Permet de vider toutes les variables*/
/*
Determination des parametres d’entrees ’d’ en dur
et de la constante de precision pour les nombres p-adiques.
A.2. A.G.M NON-HOMOGÈNE
39
*/
d
:= 100;
precision := d ;
/*
Procedure qui permet de nettoyer l’ecran.
*/
procedure clrscreen()
for i in{1 .. 40} do
print "";
end for;
end procedure;
clrscreen();
/****************************
** Debut de la fonction Agm()
****************************/
function Agm(c)
F2d
d
precision
Z2
P
Z2d
:=
:=
:=
:=
:=
:=
Parent(c);
Degree(F2d);
d+7;
pAdicRing(2,precision);
DefiningPolynomial(F2d);
UnramifiedExtension(Z2,P);
N := Ceiling(d/2) + 3 ;
Xi := ChangePrecision(1 + 8*(Z2d ! Eltseq(c)),4);
for i := 5 to N do
ChangePrecision(~Xi, i+1);
Xi := (1 + Xi) * InverseSqrt(Xi)/ 2;
end for;
t := IntegerRing() ! ChangePrecision(Norm((2*Xi)/(1+Xi)),N-1);
/*
Test car ’t’ doit appartenir a l’intervalle
[-2 * 2^{d/2}..2 * 2^{d/2}]
*/
if (t^(2)) gt (2^(d + 2))
then
40
ANNEXE A. A.G.M EN MAGMA
t := t - 2^(N-1);
end if;
return (2^(d) + 1 - t);
end function;
/****************************
** Fin de la fonction Agm()
****************************/
/*
Creation :
Corps F{2^d}
Anneau des entiers 2-adiques
et son extension non-ramifiee
*/
F2d <X> := GF(2^d);
F2 <X> := GF(2);
P
<X> := DefiningPolynomial(F2d);
Z2 <X> := pAdicRing(2,precision);
Z2d <X> := UnramifiedExtension(Z2,P);
/*
Choisir ’c’ aleatoirement
*/
correctForme := 0;
/*
Permet de savoir si la courbe creer est bien
une courbe elliptique
*/
while correctForme eq 0 do
F2d <X> := GF(2,d);
c
:= [];
nbrUn := 0;
//Variable qui compte le nombre de 1 dans la suite ’c’;
//il en faut au moins un
while nbrUn eq 0 do
A.2. A.G.M NON-HOMOGÈNE
41
//remplissage de c;
for j:=1 to d do
c[j] := Random(0,1);
if c[j] eq 1
then
nbrUn := nbrUn + 1;
end if;
end for;
end while;
c := F2d ! c;
if IsEllipticCurve([ F2d | 1,0,0,0,c])
then
E := EllipticCurve([ F2d | 1,0,0,0,c]);
correctForme := 1;
end if;
end while;
print "Creation des structures . . . . . . . . . [ OK ]";
print "";
/*
Control que l’invariant de ’E’ est bien non-nul
*/
if jInvariant(E) eq 0
then
print "Verification du j-invariant . . . . . . . [ FAILED ]";
print "";
print"Arret du programme : le j-invariant de E est nul";
quit;
end if;
print "Verification du j-invariant . . . . . . . [ OK ]";
print "";
/*
La fonction SEA() implente dans Magma permet
de determiner le nombre de points sur une courbe elliptique.
Ce qui permet de verifier si la fonction Agm()
implementee ci-dessus retourne le resultat correctement.
*/
42
ANNEXE A. A.G.M EN MAGMA
nbrPtsS := SEA(E);
print "Fonction SEA executee . . . . . . . . . . [ OK ]";
print "";
nbrPtsA := Agm(c);
print "Fonction Agm executee . . . . . . . . . . [ OK ]";
print "";
print "";
print "************************************************";
print "";
print
print
print
print
print
print
print
print
"";
"";
"Resultat de la fonction Agm():";
"";
"";
"";
"AGM =",nbrPtsA;
"SEA =",nbrPtsS;
clear;
Comme l’algorithme précédent, cette implémentation ne fonctionne pas pour
d = {1, 2, 3}. Pour des valeurs aussi petites de d, l’algorithme peut se dérouler
à la main rapidement.
Annexe B
Les autres algorithmes
B.1
Algorithme de Shanks, Baby-Step GiantStep
L’algorithme de Shanks : Baby-Step Giant-Step présenté ci-dessous est tiré
de [1].
Entrée : Soit α un générateur d’un groupe cyclique G d’ordre n, et β
un élément de G.
Sortie : Le logarithme discret x = logα β
√
m ←− ⌈ n⌉
1.
2.
Pour j allant de 0 à m − 1 construire une table T avec pour
entrée (j, αj ).
Trier la table T dans l’ordre croissant par rapport à la seconde
composante.
Calculer α−m et soit γ ←− β
3.
4.
5.
(a)
(b)
Pour i allant de 0 à m − 1 faire :
Si γ est égale à l’une de la deuxième composante de T
retourner(im+j)
γ ←− γα−m
43
44
ANNEXE B. LES AUTRES ALGORITHMES
B.2
Algorithme de Gauß
L’algorithme de Gauß est inspiré de [1].
Entrée : Le système de congruences ∀ i ∈ {1, . . . , k}, x ≡ ai mod ni , ni
premier entre eux.
Sortie : L’entier x l’unique solution du système de congruences.
1.
n ←−
2.
(b)
B.3
i=1
ni
Pour j allant de 1 à k faire :
(a)
3.
Qk
Ni ←−
n
ni
Mi ←− Ni−1 mod ni
Pk
retourner ( i=1 ai Ni Mi mod n)
Détermination d’une racine par la méthode
de Newton
On énonce tout d’abord le procédé de Newton sur Z2d tiré de [3] :
Lemme B.1 (Procédé de Newton sur Z2d ) Soit f ∈ Zq [X] et supposons
que a ∈ Zq vérifiant vp (f ′ (a)) = k et vp (f (a)) = n + k tel que n > k. Soit b
l’unique racine de f avec b ≡ a mod pn . Alors :
z =a−
f (a)
f ′ (a)
vérifiant z ≡ b mod p2n−k , f (z) ≡ 0 mod p2n et vp f ′ (z) = k.
L’algorithme de Newton présenté comme ci-dessous, est empreinté de [3].
C’est un algorithme récursif, il peut se rappeler avec des paramètres différents
qui lui ont été fournis.
B.4. RACINE CARRÉE INVERSE
45
Entrée : Le polynôme f ∈ Zq [X], une approximation de la racine
a ∈ Zq , l’entier k tel que vp (f ′ (a)) = k de pécision n > k tel
que f (a) ≡ 0 mod pn+k et la precision N .
Sortie : Une approximation de z ∈ Zq racine de f avec a ≡ 0 mod pn
et f (z) ≡ 0 mod pN +k .
1.
Si N ≤ n
2.
alors :
(a)
3.
sinon :
(a)
(b)
(c)
4.
B.4
z ←− a
N ′ ←− ⌈ N 2+k ⌉
z ←− N ewton(f, a, k, N ′ )
z ←− z −
f (z)
f ′ (z)
mod pN
retourne z
Racine carrée inverse
L’algorithme pour approcher à la précision N la racine carrée inverse, présenté
comme ci-dessous est empreinté de [3].
Comme cet algorithme est basé sur l’algorithme de Newton, l’algorithme
pour déterminer la racine carrée inverse est également un algorithme récursif.
46
ANNEXE B. LES AUTRES ALGORITHMES
Entrée : Un inversible carré a ∈ Zq , une approximation z0 à la précision
2 et N la précision désirée.
Sortie : La racine carrée inverse de a à la précision N .
1.
Si N ≤ 2
2.
alors :
(a)
3.
sinon :
(a)
4.
z ←− z0
N ′ ←− ⌈ N2+1 ⌉
(b)
z ←− InverseSqrt(a, z0 , N ′ )
(c)
z ←− z +
z(1−az 2 )
2
mod pN
retourne z
On remarque qu’à l’étape 3.(c) on trouve :
z ←− z +
z(1 − az 2 )
.
2
Or le procédé de Newton appliqué au polynôme 1 − aX 2 est :
Un+1
=
=
f (Un )
f ′ (Un )
1 − aUn2
Un −
−2aUn
Un −
Un+1 la racine carrée inverse à la précision N , et Un la racine carrée inverse
à la précision ⌈ N2+1 ⌉.
Or l’opération −2aUn s’effectue à la précision ⌈ N2+1 ⌉ donc on peut simplifier
l’expression suivante :
−2aUn
=
=
=
On retrouve alors l’étape 3.(c).
−2a
√
a
√
−2 a
−2
Un
47
B.5. CALCUL DE LA NORME
B.5
Calcul de la norme
Cet algorithme est tiré de [3].
Entrée : Un élément a ∈ Zq avec q = pd de précision N .
Sortie : La norme NQq /Qp (a) mod pN
1.
i ←− d, j ←− 0, r ←− 1 et s ←− a
2.
Tant que i > 0 faire :
(a)
(b)
(c)
3.
j
Si i ≡ 1 mod 2 alors r ←− Σ2 (r)s mod pN
j
Si i > 1 alors s ←− Σ2 (s)s mod pN
j ←− j + 1 et i ←− ⌊ 2i ⌋
retourne r
48
ANNEXE B. LES AUTRES ALGORITHMES
Bibliographie
[1] Scott A. Vanstone Alfred J. Menezes, Paul C.van Oorschot. Handbook of
applied cryptography. 1997.
[2] J.W.S Cassels. Lectures on Elliptic Curves. 1991.
[3] Gerhard Frey Henri Cohen. Handbook of elliptic and hyperelliptic curve
cryptography. 2005.
[4] J.-F. Mestre. Lettre adressée à gaudry et harley, Décembre 2000.
[5] Bruce Schneier. Cryptographie appliquée. 1995.
[6] Douglas Stinson. Cryptographie : théorie et pratique. 1995.
49
Téléchargement