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