CRYPTANALYSE DE RSA. Abderrahmane Nitaj. Laboratoire de Mathématiques Nicolas Oresme Université de Caen, France. http://www.math.unicaen.



Documents pareils
Exercices - Polynômes : corrigé. Opérations sur les polynômes

Cryptographie RSA. Introduction Opérations Attaques. Cryptographie RSA NGUYEN Tuong Lan - LIU Yi 1

Développement décimal d un réel

Quelques tests de primalité

Fibonacci et les paquerettes

Cryptographie et fonctions à sens unique

Cryptographie. Cours 3/8 - Chiffrement asymétrique

Probabilités sur un univers fini

Factorisation d entiers (première partie)

Calculateur quantique: factorisation des entiers

La cryptographie du futur

De même, le périmètre P d un cercle de rayon 1 vaut P = 2π (par définition de π). Mais, on peut démontrer (difficilement!) que

Introduction à l étude des Corps Finis

Pour l épreuve d algèbre, les calculatrices sont interdites.

* très facile ** facile *** difficulté moyenne **** difficile ***** très difficile I : Incontournable T : pour travailler et mémoriser le cours

Cours d arithmétique Première partie

Chapitre VI - Méthodes de factorisation

Raisonnement par récurrence Suites numériques

Résolution de systèmes linéaires par des méthodes directes

Cours d algorithmique pour la classe de 2nde

Intégration et probabilités TD1 Espaces mesurés Corrigé

Suites numériques 3. 1 Convergence et limite d une suite

avec des nombres entiers

Optimisation non linéaire Irène Charon, Olivier Hudry École nationale supérieure des télécommunications

Représentation d un entier en base b

Cryptologie. Algorithmes à clé publique. Jean-Marc Robert. Génie logiciel et des TI

Baccalauréat S Antilles-Guyane 11 septembre 2014 Corrigé

Moments des variables aléatoires réelles

1 Recherche en table par balayage

Licence Sciences et Technologies Examen janvier 2010

Chapitre 2. Eléments pour comprendre un énoncé

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

Corrigé des TD 1 à 5

Chp. 4. Minimisation d une fonction d une variable

Structures algébriques

Continuité et dérivabilité d une fonction

Image d un intervalle par une fonction continue

Nombres premiers. Comment reconnaître un nombre premier? Mais...

Exo7. Matrice d une application linéaire. Corrections d Arnaud Bodin.

3. Conditionnement P (B)

Correction de l examen de la première session

Probabilités sur un univers fini

3 Approximation de solutions d équations

Travail d intérêt personnel encadré : La cryptographie

Coefficients binomiaux

Baccalauréat ES Polynésie (spécialité) 10 septembre 2014 Corrigé

Simulation de variables aléatoires

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Limites finies en un point

Chapitre 3. Mesures stationnaires. et théorèmes de convergence

Résolution d équations non linéaires

III- Raisonnement par récurrence

CCP PSI Mathématiques 1 : un corrigé

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://

Vous revisiterez tous les nombres rencontrés au collège, en commençant par les nombres entiers pour finir par les nombres réels.

CRYPTOGRAPHIE. Signature électronique. E. Bresson. SGDN/DCSSI Laboratoire de cryptographie

Correction du baccalauréat ES/L Métropole 20 juin 2014

Suites numériques 4. 1 Autres recettes pour calculer les limites

STAGE IREM 0- Premiers pas en Python

Exercices Corrigés Premières notions sur les espaces vectoriels

Représentation des Nombres

Initiation à la programmation en Python

Tests de primalité et cryptographie

La fonction exponentielle

Algorithme. Table des matières

UNIVERSITE IBN ZOHR Faculté des sciences Agadir. Filière SMA & SMI. Semestre 1. Module : Algèbre 1

I. Polynômes de Tchebychev

0x700. Cryptologie Pearson France Techniques de hacking, 2e éd. Jon Erickson

Chapitre 2. Matrices

Université Paris-Dauphine DUMI2E 1ère année, Applications

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Polynômes à plusieurs variables. Résultant

ÉPREUVE COMMUNE DE TIPE Partie D

Algorithmique et Programmation, IMA

Fonctions de plusieurs variables

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Théorème du point fixe - Théorème de l inversion locale

Exercices - Fonctions de plusieurs variables : corrigé. Pour commencer

Première partie. Préliminaires : noyaux itérés. MPSI B 6 juin 2015

Cours 02 : Problème général de la programmation linéaire

Programmation linéaire

Définitions. Numéro à préciser. (Durée : )

Algorithmes récursifs

Chapitre 3. Quelques fonctions usuelles. 1 Fonctions logarithme et exponentielle. 1.1 La fonction logarithme

Continuité en un point

Recherche dans un tableau

Cours d initiation à la programmation en C++ Johann Cuenin

Fonction de hachage et signatures électroniques

Capes Première épreuve

Rappels sur les suites - Algorithme

Fonctions de plusieurs variables, intégrales multiples, et intégrales dépendant d un paramètre

V- Manipulations de nombres en binaire

BACCALAURÉAT GÉNÉRAL SESSION 2012 OBLIGATOIRE MATHÉMATIQUES. Série S. Durée de l épreuve : 4 heures Coefficient : 7 ENSEIGNEMENT OBLIGATOIRE

Introduction à MATLAB R

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Problème 1 : applications du plan affine

Correction du baccalauréat S Liban juin 2007

Baccalauréat ES/L Métropole La Réunion 13 septembre 2013 Corrigé

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Intégration et probabilités TD1 Espaces mesurés

Transcription:

CRYPTANALYSE DE RSA Abderrahmane Nitaj Laboratoire de Mathématiques Nicolas Oresme Université de Caen, France http://wwwmathunicaenfr/~nitaj nitaj@mathunicaenfr c Version du 28 juin 2009

Table des matières Contenu i Préface 1 1 Introduction au cryptosystème RSA 3 11 Principe de RSA 3 111 Le module RSA 3 112 Les clés publiques et privées 5 113 Envoi d un message 7 114 Déchiffrement d un message 8 115 Signature d un message 9 116 Preuve de RSA 11 12 Un exemple d utilisation de RSA 12 121 Transformation d un texte en nombres 12 122 L exemple 13 13 Cryptanalyses élémentaires de RSA 15 131 Cryptanalyse de RSA connaissant ϕ(n) 15 132 Utilisation du même module et deux exposants différents 16 133 Utilisation de modules différents pour le même message 18 134 Cryptanalyse de RSA si p q < cn 1/4 : Méthode de Fermat 21 2 Cryptanalyse de RSA par les fractions continues 25 21 Les fractions continues 25 i

ii TABLE DES MATIÈRES 211 Introduction 25 212 Définitions et propriétés 26 22 Cryptanalyse de RSA par les fractions continues 37 221 L attaque de Wiener 38 3 Cryptanalyse de RSA par l algorithme LLL 43 31 L algorithme LLL 43 311 Introduction aux réseaux 43 312 L algorithme LLL 50 32 Cryptanalyse de RSA par la réduction des réseaux 59 321 La méthode de Coppersmith : polynômes à une variable 59 322 Factorisation de N 69 Bibliographie 73

Préface Si vous enseignez à un homme, vous n enseignez qu à une personne Si vous enseignez à une femme, vous enseignez à toute une famille La cryptographie moderne est basée sur les mathématiques pour sécuriser l information On distingue deux types de protocoles cryptographiques : la cryptographie à clé privée et la cryptographie à clé publique La cryptographie à clé publique à été introduite par Whitfield Diffie et Martin Hellman en 1976, marquant ainsi la naissance de la cryptographie moderne Le principe de la cryptographie à clé publique repose sur deux types de clés : une clé publique et une clé privée Pour chiffrer un message, on utilise la clé publique de son destinataire Alors, seul le destinataire peut déchiffrer le message reçu avec sa propre clé privée En 1978, Ronald Rivest, Adi Shamir et Leonard Adleman ont proposé le premier cryptosystème à clé publique, appelé RSA Ce cryptosystème est devenu le plus répandu dans le monde car il est facile à réaliser mais très difficile à casser En effet, sa sécurité repose sur l un des problèmes les plus difficiles en mathématiques : la factorisation des grand nombres Dans ce travail, nous introduisons les principes généraux du cryptosystème RSA ainsi que certaines attaques permettant de le casser, si les paramètres de sécurité sont mal choisis ou s il vérifient des relations permettant à un attaquant d en tirer profit Dans le chapitre 1, nous donnons les principes généraux du cryptosystème RSA et nous présentons quelques attaques élémentaires permettant de le casser Dans le chapitre 2, nous présentons une introduction à la théorie des fractions continues et leur utilisation pour attaquer le cryptosystème RSA dans certains cas Dans le chapitre 3, nous présentons quelques aspects de la réduction des réseaux, plus précisément l algorithme LLL et son utilisation pour attaquer le cryptosystème RSA grâce à la méthode de Coppersmith Dans ce travail, la plupart des résultats sont illustrés par des algorithmes programmés à l aide des systèmes de calcul Maple 12 et Magama dont un calculateur 1

2 TABLE DES MATIÈRES en ligne est à l adresse http://magmamathsusydeduau/calc/

Chapitre 1 Introduction au cryptosystème RSA Celui qui n aime pas gravir les montagnes, vivra toute sa vie dans les trous Abou Al Qasim Achabi 11 Principe de RSA Toutes les opération du cryptosystème RSA se passe dans un ensemble de nombre entiers Soient p et q deux nombres premiers assez grands On note N = pq Le nombre N est appelé module RSA Supposons que deux personnes A et B veulent communiquer de façon sûre en utilisant le cryptosystème RSA Pour cela, ils doivent, chacun de son coté préparer un module RSA, deux clés e et d, exécuter une procédure de chiffrement et de signature et une procédure de déchiffrement et de vérification de la signature 111 Le module RSA Avant tout, pour utiliser le cryptosystème RSA, chacun des intervenants A et B doit fabriquer son propre module RSA L algorithme 1 peut être alors utilisé 3

4 CHAPITRE 1 INTRODUCTION AU CRYPTOSYSTÈME RSA Algorithme 1 : Fabrication du module Entrée : Une taille t pour le module du cryptosytème RSA Sortie : Un module RSA N de taille t [ 1: Prendre un nombre premier aléatoire p dans l intervalle [ 2: Prendre un nombre premier aléatoire q dans l intervalle 3: Si p = q alors 4: Aller à l étape 2 5: Sinon 6: N = pq 7: Fin Si 2 t 2, 2 t+1 2 2 t 2, 2 t+1 2 ] ] [ Comme p et q sont dans l intervalle 2 t 2, 2 t+1 2 ], alors on a 2 t < pq < 2 t+1, ce qui montre que N = pq est de taille t Maple 111 Avec Maple 12, l algorithme 1 peut être réalisé comme ceci t:=1024: x1:=round(20^(t/2)): x2:=round(20^((t+1)/2)): m1:=(rand(x1 x2))(): p:=nextprime(m1); m2:=rand(x1 x2)(): q:=nextprime(m2); N:=p*q Commentaires <----- la taille du module RSA <----- la borne inférieur 2^(t/2) <----- la borne supérieur 2^((t+1)/2) <----- une valeur aléatoire <----- le nombre premier p <----- une valeur aléatoire <----- le nombre premier q <----- le module RSA Magma 112 Avec Magma, l algorithme 1 peut être réalisé comme ceci

11 PRINCIPE DE RSA 5 Commentaire t:=1024; x1:=round(20^(t/2)); x2:=round(20^((t+1)/2)); m1:=random(x1,x2); p:=nextprime(m1); m2:=random(x1,x2); q:=nextprime(m2); N:=p*q; N; <----- la taille du module RSA <----- la borne inférieur 2^(t/2) <----- la borne supérieur 2^((t+1)/2) <----- une valeur aléatoire <----- le nombre premier p <----- une valeur aléatoire <----- le nombre premier q <----- le module RSA <----- affichage du module RSA Dans Magma, la fonction RSAModulus(t,e) permet de créer un module RSA N à t-bits tel que pgcd(e, φ(n)) = 1 Voici un exemple et sa vérification t:=100; e:=3; N:=RSAModulus(t,e); N; f:=factorization(n); f; Log(N)/Log(2); p:=f[1,1]; q:=f[2,1]; p; q; Commentaire <--- Taille du module <--- L exposant publique <--- Création du module <--- Affichage de N <--- Sa factorization <--- Affichage de la factorisation <--- Taille du module <--- Premier nombre premier <--- Deuxième nombre premier <--- Affichage de p <--- Affichage de p 112 Les clés publiques et privées Après avoir fabriqué un module RSA, chacun des intervenants doit préparer une clé secrète d et une clé publique e : Dans certains cas, on peut prendre pour la clé publique des valeurs spécifiques, par exemple e = 3 ou e = 2 16 + 1 Dans ce cas, les étapes 2 à 5 de l algorithme 2 ne sont pas exécutées La fonction φ joue un rôle central dans le cryptosystème RSA et s appelle la fonction d Euler Définition 113 Soit n un nombre entier La fonction indicatrice d Euler est φ(n) = # {a 0 a n 1, pgcd(a, n) = 1}

6 CHAPITRE 1 INTRODUCTION AU CRYPTOSYSTÈME RSA Algorithme 2 : Fabrication des clés Entrée : Deux nombres premiers p et q Sortie : Une clé privée d et une clé publique e 1: Calculer φ(n) = (p 1)(q 1) 2: Prendre un nombre aléatoire e dans l intervalle [1, φ(n)] 3: Si pgcd(e, φ(n)) 1 alors 4: Aller à l étape 2 5: Sinon 6: Calculer d e 1 (mod φ(n)) 7: Fin Si Cette fonction est définie pour tout entier n 2 Si la décomposition en facteurs premiers est s n = p x i i, alors on a : φ(n) = s i=1 i=1 p x i 1 i (p i 1) Maple 114 Dans Maple 12, la fonction φ est tout simplement phi Attention, pour calculer φ(n), Maple est obligé de factoriser N, ce qui peut être très difficile si N est du type module de RSA with(numtheory): N:=5*8*61: phi(n); La réponse est immédiate : 960 Commentaires <--- Package numtheory "Théorie des Nombres" <--- un exemple simple <--- Calcul de phi(n) Magma 115 Dans Magma, la fonction φ est tout simplement EulerPhi Attention, pour calculer φ(n), Magma aussi est obligé de factoriser N, ce qui peut être très difficile si N est du type module de RSA Commentaires N:=5*8*61: EulerPhi(N); <--- un exemple simple <--- Calcul de phi(n) Maple 116

11 PRINCIPE DE RSA 7 Avec Maple 12, l algorithme 2 peut être écrit comme ceci où on suppose que la procédure 111 a été exécutée phi:=(p-1)*(q-1): e:=rand(3phi/2)(): while(gcd(e,phi) <> 1) do e:=rand(3phi)(); od; d := modp(1/e, phi); Magma 117 Commentaires <--- L indicateur d Euler <--- On choisit un exposant e aléatoire <--- il faut que pgcd(e,phi)=1 <--- On reprend un autre exposant e <--- d est l inverse de d modulo phi Avec Magma, l algorithme 2 peut être écrit comme ceci t:=102; x1:=round(20^(t/2)); x2:=round(20^((t+1)/2)); m1:=random(x1,x2); p:=nextprime(m1); m2:=random(x1,x2); q:=nextprime(m2); N:=p*q; N; phi:=(p-1)*(q-1); e:=random(3,round(phi/2)); while(gcd(e,phi) gt 1) do e:=random(3,round(phi/2)); end while; d:= InverseMod(e,phi); d; <-- Taille du module <-- Valeur aléatoire <-- Valeur aléatoire <-- Valeur aléatoire <-- Premier nombre premier <-- Valeur aléatoire <-- deuxième nombre premier <-- Module RSA <-- Valeur de N <-- phi <-- Un exposant public aléatoire <-- procédure de recherche <-- GCD(e,phi)=1 <-- <-- Inverse de e modulo phi <-- Valeur de l exposant privé 113 Envoi d un message Supposons maintenant que les intervenants A et B possèdent chacun son module RSA et ses clés, N A, e A, d A pour A et N B, e B, d B pour B Si A veut envoyer un message à B, il peut procéder comme dans l algorithme 3 Maple 118

8 CHAPITRE 1 INTRODUCTION AU CRYPTOSYSTÈME RSA Algorithme 3 : Chiffrement d un message Entrée : Un message clair et la clé publique (N B, e B ) Sortie : Un message chiffré C 1: Transformer le message en un nombre entier M de l intervalle [2, N B ] 2: Calculer C M e B (mod N B ) 3: Envoyer le message C Avec Maple 12, l algorithme 3 peut être programmé de la façon suivante Commentaires M:=12345: C:=modp(M&^e,N): <--- un exemple simple de message <--- &^ permet de calculer M^e modulo N Magma 119 Avec Magma, l algorithme 3 peut être programmé de la façon suivante Commentaires M:=12345; C:=Modexp(M,e,N); <--- un exemple simple de message <--- Fonction pour calculer M^e modulo N 114 Déchiffrement d un message Supposons enfin que B a reçu un message chiffré C de la part de A Alors B peut le déchiffrer en utilisant sa clé secrète d B comme dans l algorithme 4 Algorithme 4 : Déchiffrement d un message Entrée : Un message chiffré C et la clé privée (N B, d B ) Sortie : Un message clair M 1: Calculer M C d B (mod N B ) 2: Transformer le nombre M en un message clair Maple 1110 Avec Maple 12, l algorithme 4 qui permet de déchiffrer un message C peut être le suivant Commentaires M2:=modp(C&^d,N): M-M2 <--- Calcul de C^d modulo N <--- Permet de vérifier que M2=M

11 PRINCIPE DE RSA 9 Magma 1111 Avec Magma, l algorithme 4 qui permet de déchiffrer un message C peut être le suivant Commentaires M2:=Modexp(C,d,N); M-M2; <--- Calcul de C^d modulo N <--- Permet de vérifier que M2=M 115 Signature d un message Supposons que A veut envoyer un message M à B Comment B peut-il être sûr que le message reçu a bien été envoyé par A Pour résoudre ce problème, RSA peut être utilisé aussi bien pour transmettre un message que pour le signer Pour cela, A et B doivent avoir chacun ses clés publiques et privées, N A, e A, d A pour A et N B, e B, d B pour B Tout d abord, A utilise la clé publique (N B, e B ) de B pour transmettre le message C et produire une signature S du message à l aide de sa propre clé privée (N A, e A ) En effet, A doit produire et transmettre C et S comme ceci (voir algorithme 5) C M e B (mod N B ), S = C d A (mod N A ) En possession du message chiffré C et de la signature S, B peut alors vérifier si c est bien A qui a transmit ce message en utilisant la clé publique (N A, e A ) de A, du fait de la relation (voir algorithme 6) S e A ( C d A) ea C d Ae A C (mod N A ) En effet, seul A peut produire la signature S et donc B peut aisément vérifier si la signature S donne une deuxième fois le message chiffré C Algorithme 5 : Signature d un message Entrée : Un message clair M, deux clés publiques (N B, e B ) et (N A, e A ) et une clé privée (N A, d A ) Sortie : Un message chiffré C et sa signature S 1: A transforme le message en un nombre entier M de l intervalle [2, N B ] 2: A calcule C M e B (mod N B ) 3: A calcule S C d A (mod N A ) 4: A transmet le message C et la signature S

10 CHAPITRE 1 INTRODUCTION AU CRYPTOSYSTÈME RSA Maple 1112 Avec Maple 12, l algorithme 5 qui permet de chiffrer et signer un message C peut être le suivant NA:=1577801413: ea:=147944791: da:=295049071: NB:=1303570001: eb:=902841103: db:=1208086831: M:=12345: C:=modp(M&^eB,NB): S:=modp(C&^dA,NA): Commentaires <--- Module RSA de A <--- Clé publique de A <--- Clé privée de A <--- Module RSA de B <--- Clé publique de B <--- Clé privée de B <--- Un exemple simple de message clair <--- Le message chiffré <--- La signature du message Magma 1113 Avec Magma, l algorithme 5 qui permet de chiffrer et signer un message C peut être le suivant NA:=1577801413; ea:=147944791; da:=295049071; NB:=1303570001; eb:=902841103; db:=1208086831; M:=12345; C:=Modexp(M,eB,NB); S:=Modexp(C,dA,NA); Commentaires <--- Module RSA de A <--- Clé publique de A <--- Clé privée de A <--- Module RSA de B <--- Clé publique de B <--- Clé privée de B <--- Un exemple simple de message clair <--- Le message chiffré <--- La signature du message L algorithme de la vérification de la signature est alors l algorithme 6 Algorithme 6 : Vérification d une signature Entrée : Un message chiffré C, une signature S, la clé publique (N A, e A ) Sortie : Vérification d une signature 1: B calcule C S e A (mod N A ) 2: Si C = C la signature est authentifiée Maple 1114

11 PRINCIPE DE RSA 11 Avec maple 12, on peut alors vérifier la signature avec un programme simple C2:=modp(S&^eA,NA): dif:=c2-c: if dif=0 then print( Signature valide ) else print( Signature non valide ) end if Commentaires <--- calcul de S^eA modulo NA <--- Difference des messages <--- vérification de la signature Magma 1115 Avec Magma, on peut alors vérifier la signature avec un programme simple C2:=Modexp(S,eA,NA); dif:=c2-c; if dif eq 0 then print("signature valide"); else print("signature non valide"); end if Commentaires <--- Calcul de S^eA modulo NA <--- Difference des messages <--- Vérification de la signature 116 Preuve de RSA La justesse du cryptosystème RSA qu un message chiffré C à partir d un message clair M redonne bien le message original M est basée sur le théorème suivant, dû à Euler Théorème 1116 (Euler) Soit N un nombre entier et φ(n) l indicateur d Euler Si a est un entier premier avec N, alors a φ(n) 1 (mod N) Démonstration Par définition, on a φ(n) = # {a 0 a N 1, pgcd(a, N) = 1}, ce qui montre qu on peut écrire {a 0 a < N, pgcd(a, N) = 1} = { a 1, a 2,, a φ(n), a 1 < a 2 < < a φ(n) < N } Soit a un entier tel que pgcd(a, N) = 1 On considère maintenant l ensemble { aa1, aa 2,, aa φ(n) },

12 CHAPITRE 1 INTRODUCTION AU CRYPTOSYSTÈME RSA où x désigne la réduction de x modulo N Si aa i = aa j, alors a(a i a j ) 0 (mod N), et donc a i = a j puisque pgcd(a, N) = 1 et a i a j < N Ainsi, on a { a1, a 2,, a φ(n) } = { aa1, aa 2,, aa φ(n) } En formant les produits des éléments de ces deux ensembles, on obtient : φ(n) i=1 a i = φ(n) i=1 φ(n) aa i a φ(n) i=1 a i (mod N) De plus, pour chaque i, on a pgcd(a i, N) = 1 Donc le produit φ(n) i=1 a i est inversible modulo N, ce qui donne a φ(n) 1 (mod N) 12 Un exemple d utilisation de RSA Dans cette section, on donne le détail de l utilisation du cryptosystème RSA sur un exemple concret En effet, on montre comment chiffrer, transmettre et déchiffrer le message suivant : Cette semaine, je suis à Oujda Je pars le 22 mai à 13h 121 Transformation d un texte en nombres Il y a plusieurs façon de réaliser une correspondance entre les lettres de l alphabet et des valeurs numériques On peut par exemple faire correspondre la valeur 1 à la lettre a, la valeur 2 à la lettre b,, et la valeur 26 à la lettre z et travailler ainsi en mode 27 Cette correspondance peut ne pas être pratique sur des textes très longs Une autre façon, plus efficace est d utiliser la correspondance ASCII (American Standard Code for Information Interchange) ASCII est la norme d encodage informatique des caractères alphanumériques de l alphabet latin Dans la table ci-dessous, on a représenté quelques correspondances Caractère a A b z 0 1 2 espace à + Code 097 065 098 122 048 049 050 32 224 43 Maple 121

12 UN EXEMPLE D UTILISATION DE RSA 13 Dans Maple 12, la fonction qui transforme un caractère en valeur numérique est convert( texte en caractères, bytes) Inversement, la fonction qui transforme une liste de valeurs numériques en texte est convert([v1,v2,,vn],bytes) Commentaires liste:=convert("123 abcz", bytes) convert(liste, bytes) <--- liste = [49, 50, 51, 32, 97, 98, 99, 46, 46, 46, 122] <--- "123 abcz" Magma 122 Dans Magma, la fonction qui transforme un caractère en valeur numérique est BinaryString( texte en caractères ) ou BString( texte en caractères ) Inversement, la fonction qui transforme un code ASCII n en caractère est CodeToString(n) Voici un exemple s:="je suis à c^oté" ; s; t:=bstring(s); t; l:=#t; u:=codetostring(t[1]); for i:=2 to l do u:=u*codetostring(t[i]); end for; u; <--- Le texte <--- Son affichage <--- Transformation en code ASCII <--- On obtient [74, 101,, 169] <--- Longueur de la liste <--- Transformation en texte <--- Formation du texte <--- Affichage du texte Je suis à c^oté 122 L exemple Dans cette partie, on exécute en détail un exemple de l utilisation du cryptosystème RSA On va chiffrer, puis déchiffrer le message suivant Cette semaine, je suis à Oujda Je pars le 22 mai à 13h On commence écrire le programme qui sera exécuté par Maple La fonction seq permet de créer une liste de valeurs et la fonction nops(liste) donne le nombre de termes dans son argument (liste) Maple 123

14 CHAPITRE 1 INTRODUCTION AU CRYPTOSYSTÈME RSA retart: t := 100: x1 := round(20^((1/2)*t)): x2 := round(20^((t+1)*(1/2))): m1 := (rand(x1 x2))(): p := nextprime(m1): m2 := (rand(x1 x2))(): q := nextprime(m2): N := p*q: phi := (p-1)*(q-1): e := (rand(3 phi))(): while gcd(e, phi) <> 1 do e := (rand(3 phi))() end do: d := modp(1/e, phi): message:="cette semaine, je suis à Oujda Je pars le 22 mai à 13h": listeclaire:= convert(message, bytes): listecrypte:=[seq(modp(listeclaire[k]&^e,n),k=1nops(listeclaire))]: listedecrypte:=[seq(modp(listecrypte[k]&^d,n),k=1nops(listecrypte))]: messageoriginale:=convert(listedecrypte, bytes): listeclaire-listedecrypte; La dernière ligne permet de vérifier que le message de départ et le message décrypté sont identiques La différence listeclaire-listedecrypte doit donner une liste de zéros Magma 124 t:=100; x1:=round(20^(t/2)); x2:=round(20^((t+1)/2)); m1:=random(x1,x2); p:=nextprime(m1); m2:=random(x1,x2); q:=nextprime(m2); N:=p*q; phi:=(p-1)*(q-1); e:=random(3,round(phi/2)); while(gcd(e,phi) gt 1) do e:=random(3,round(phi/2)); end while;

13 CRYPTANALYSES ÉLÉMENTAIRES DE RSA 15 d:= InverseMod(e,phi); message:="cette semaine, je suis à Oujda Je pars le 22 mai à 13h"; listeclaire:= BString(message); l:=#listeclaire; listecrypte:= AssociativeArray(); for k:=1 to l do listecrypte[k]:=modexp(listeclaire[k],e,n); end for; listedecrypte:= AssociativeArray(); for k:=1 to l do listedecrypte[k]:=modexp(listecrypte[k],d,n); end for; u:=codetostring(listedecrypte[1]); for i:=2 to l do u:=u*codetostring(listedecrypte[i]); end for; u; 13 Cryptanalyses élémentaires de RSA Dans cette partie, on présente quelques attaques élémentaires sur le cryptosystème RSA, qui consistent à factoriser le module 131 Cryptanalyse de RSA connaissant ϕ(n) Proposition 131 Soit N un module RSA Si on connait ϕ(n), alors on peut factoriser N Démonstration Supposons que ϕ(n) est connu Ainsi, on dispose d un système de deux équations en p et q : qui donnent l équation en p : { pq = N, p + q = N + 1 ϕ(n), p 2 (N + 1 ϕ(n))p + N = 0

16 CHAPITRE 1 INTRODUCTION AU CRYPTOSYSTÈME RSA On obtient ainsi p = N + 1 ϕ(n) + (N + 1 ϕ(n)) 2 4N, 2 q = N + 1 ϕ(n) (N + 1 ϕ(n)) 2 4N 2 Maple 132 Avec Maple 12, cette attaque peut être programmée comme dans l exemple suivant où on utilise la fonction solve qui permet de résoudre une équation p := 67676767676789: q := 33838383838463: N := p*q: ph := (p-1)*(q-1): eq:=x^2-(n+1-ph)*x+n: solve(eq); 67676767676789, 33838383838463 Commentaires <--- Le premier nombre premier <--- Le deuxième nombre premier <--- Le module RSA <--- L indicateur d Euler <--- L équation <--- Résolution de l équation <--- Les deux solutions Magma 133 Avec Magma, cette attaque peut être programmée comme dans l exemple suivant où on utilise la fonction Roots qui permet de résoudre une équation P<x> := PolynomialRing(IntegerRing()); p := 67676767676789; q := 33838383838463; N := p*q; ph := (p-1)*(q-1); A:=x^2-(N+1-ph)*x+N; Roots(A); [ <33838383838463, 1>, <67676767676789, 1> ] Commentaires <--- Le premier nombre premier <--- Le deuxième nombre premier <--- Le module RSA <--- L indicateur d Euler <--- L équation <--- Résolution de l équation <--- Les deux solutions 132 Utilisation du même module et deux exposants différents Proposition 134 Soit N un module RSA Soient e 1 et e 2 deux exposants premiers entre eux Si un message clair M est chiffré avec e 1 et e 2, alors on peut calculer M

13 CRYPTANALYSES ÉLÉMENTAIRES DE RSA 17 Démonstration Soient C 1 et C 2 deux messages chiffrés par C 1 M e 1 (mod N), C 2 M e 2 (mod N), et supposons que C 1 et C 2 sont rendus publiques Si pgcd(e 1, e 2 ) = 1, alors il existe deux entiers x 1 et x 2 tels que x i < 1 2 e i et vérifiant e 1 x 1 e 2 x 2 = ±1 Ces deux entiers peuvent être déterminer par l algorithme d Euclide D autre part, ils vérifient e 1 x 2 e 2 = e 1x 1 e 2 x 2 = 1 < 1 x 1 e 1 x 1 e 1 x 1 Ainsi x 1 et x 2 peuvent être déterminés comme dénominateur et numérateur de l une des convergentes de e 1 e 2 Si e 1 x 1 e 2 x 2 = 1, on obtient alors 2x 2 1 C x 1 1 C x 2 2 M e 1x 1 M e 2x 2 M e 1x 1 e 2 x 2 M (mod N), ce qui donne le message M Si e 1 x 1 e 2 x 2 = 1, on calcule C x 1 1 C x 2 2 et on obtient le même résultat Maple 135 Avec Maple 12, cette attaque peut programmée comme dans l exemple suivant Commentaires N:=2290072441593672048770535307: e1:=4543322112211: e2:=787654321187: igcdex(e1,e2, x1, x2 ): x1;x2; M:=98776655441: C1:=modp(M&^e1,N): C2:=modp(M&^e2,N): M2:=modp(C1&^x1,N) *modp(c2&^x2,n) mod N: M2-M: <--- Le module RSA <--- Le premier exposant publique <--- Le deuxième exposant publique <--- L algorithme d Euclide <--- Affichage de x1 et x2 <--- Le message clair <--- Le premier message chiffré <--- Le deuxième message chiffré <--- Produit des deux messages <--- Vérification des messages Magma 136 Avec Maple 12, cette attaque peut programmée comme dans l exemple suivant La fonction XGCD(a,b) retourne trois nombres entiers, g, x et y vérifiant g = pgcd(a, b) = ax + by

18 CHAPITRE 1 INTRODUCTION AU CRYPTOSYSTÈME RSA Commentaires N:=2290072441593672048770535307; e1:=4543322112211; e2:=787654321187; g,x1,x2:=xgcd(e1,e2); g;x1;x2; M:=98776655441; C1:=Modexp(M,e1,N); C2:=Modexp(M,e2,N); M2:=Modexp(C1,x1,N) *Modexp(C2,x2,N) mod N; M2-M; <--- Le module RSA <--- Le premier exposant publique <--- Le deuxième exposant publique <--- L algorithme d Euclide <--- Affichage de g, x1 et x2 <--- Le message clair <--- Le premier message chiffré <--- Le deuxième message chiffré <--- Produit des deux messages <--- Vérification des messages 133 Utilisation de modules différents pour le même message Dans cette attaque, on considère qu un message M est envoyé un certain nombre de fois en utilisant plusieurs clés publiques (N i, e i ) Ce scénario peut se produire si le même message doit être diffusé à plusieurs destinataires Cette attaque, due à Hastad, est basée sur le théorème des restes chinois Théorème 137 Si les entiers N 1, N 1,, N k sont deux à deux premiers entre eux, alors le système x = a 1 (mod N 1 ), x = a 1 (mod N 1 ), = x = a k (mod N k ), admet une solution unique modulo N = k i=1 N i Cette solution est k x a i p i M i (mod N), avec p i = N N i i=1 et M i p 1 i (mod N i ) Démonstration Soit N = k i=1 N i, p i = N N i et M i p 1 i (mod N i ) Alors, pour chaque i, 1 i k, on a p i M i 1 (mod N i ) et N i p j si i j Ainsi, avec x k i=1 a ip i M i (mod N), on a pour 1 i k, en considérant x modulo N i : x a i p i M i + k a j p j M j a i + j i k j i a j M j N i p j N i a i (mod N i )

13 CRYPTANALYSES ÉLÉMENTAIRES DE RSA 19 Ceci montre que x est solution du système Si x est une autre solution du système avec 0 x < N, alors pour chaque i, 1 i k, on a x x 0 (mod N i ) Puisque les entiers N i, 1 i k, sont premiers entre deux à deux, alors x x 0 (mod N) Ainsi, puisque x x < N, on a x = x, ce qui montre l unicité de la solution Maple 138 Dans Maple, le théorème des restes chinois est la fonction chrem([a 1, a 2,, a k ], [N 1, N 2,, N k ]) Voici un exemple pour résoudre le système x = 1 (mod 101), x = 2 (mod 103), x = 3 (mod 201) x:=chrem([1,2,3],[101,103,201]): x; Commentaires <--- Le théorème des restes chinois <--- On obtient x=1482378 Magma 139 Dans Magma, le théorème des restes chinois est la fonction CRT([a 1, a 2,, a k ], [N 1, N 2,, N k ]) Voici un exemple pour résoudre le système x = 1 (mod 101), x = 2 (mod 103), x = 3 (mod 201) x:=crt([1,2,3],[101,103,201]); x; Commentaires <--- Le théorème des restes chinois <--- On obtient x=1482378

20 CHAPITRE 1 INTRODUCTION AU CRYPTOSYSTÈME RSA Proposition 1310 Soient k 2 et k modules RSA N i avec 1 i k Soient C i, 1 i k, des messages chiffrés du même message clair M à l aide du même exposant e Si m e < k i=1 N i alors on peut déterminer le message clair M sans factoriser les modules Démonstration Supposons que le même message clair M est chiffré k fois par C i M e (mod N i ), pour i = 1,, k Soit N = k i=1 N i On peut appliquer le Théorème des Restes Chinois pour résoudre le système formé des k équations x C i (mod N i ), avec x < N Si on suppose que M e < N, alors x = M e en tant que nombres entiers Ainsi M = x 1 e, ce qui donne le message clair M Maple 1311 Pour illustrer cette attaque, on teste un exemple avec e = 3 et k = 4 dans Maple Commentaires for i from 1 to 4 do N[i]:=nextprime(rand())*nextprime(rand()): end do: e:=3: M:=5454321115654321: for i from 1 to 4 do C[i]:=modp(M&^e,N[i]): end do: x:=chrem([c[1],c[2],c[3],c[4]], [N[1],N[2],N[3],N[4]]): M2:=round((x^(1/e))): M2-M; <--- 4 module RSA aléatoires <--- e=3 <--- un message claire <--- 4 messages chiffré <--- Le théorème des restes chinois <--- racine e-ème de x <--- Comparaison de M2 et M Magma 1312 Pour illustrer la même attaque avec Magma, on teste le même exemple avec e = 3 et k = 4 La fonction Random(b) retourne un nombre entier aléatoire de l intervalle [0, b]

13 CRYPTANALYSES ÉLÉMENTAIRES DE RSA 21 b:=2^30; N := AssociativeArray(); for i:=1 to 4 do N[i]:=NextPrime(Random(b)) *NextPrime(Random(b)); end for; e:=3; M:=5454321115654321; C := AssociativeArray(); for i:=1 to 4 do C[i]:=Modexp(M,e,N[i]); end for; x:=crt([c[1],c[2],c[3],c[4]], <--- Théorème Chinois [N[1],N[2],N[3],N[4]]); M2:=Round((x^(1/e))); M2-M; <--- Borne pour les nombres premiers <--- Création du tableau N <--- Création de 4 module RSA <--- e=3 <--- Le message claire <--- Création d un tableau C <--- Création des 4 messages chiffrés <--- Calcule de x^(1/e) <--- Vérification des messages 134 Cryptanalyse de RSA si p q < cn 1/4 : Méthode de Fermat Dans cette partie, on suppose que les nombres premiers p et q qui forment le module RSA N = pq sont très proches, plus précisément p q < cn 1/4 où c est une constante fixe, assez petite Théorème 1313 Soit N = pq un modules RSA où les nombres premiers p et q vérifient p q < cn 1/4 où c est une constante assez petite Alors on peut factoriser N en temps polynômial dépendant de c Démonstration La méthode de Fermat consiste en la recherche de deux nombres entiers x et y tels que 4N = x 2 y 2 = (x + y)(x y) Si en plus x y 2, alors on obtient la factorisation de N en posant p = x + y 2, q = x y 2 [ Pour déterminer x et y, on prend pour x les valeurs x 0 = 2 ] [ N, x 1 = 2 ] N + 1, [ x 2 = 2 ] N + 2, et on teste si 4N x 2 est un carré parfait On désigne alors

22 CHAPITRE 1 INTRODUCTION AU CRYPTOSYSTÈME RSA par k le nombre entier pour lequel x k = Alors x k = p + q et on a, en supposant que p q < cn 1/4 : [ k = x k 2 ] N [ = p + q 2 ] N [ 2 ] N + k donne la factorisation de N < p + q 2 N + 1 = (p + q)2 4N p + q + 2 N + 1 = (p q) 2 p + q + 2 N + 1 < c2 N 2 N + 1 < c2 2 + 1 Il en résulte que le nombre de tests est assez petits si c est une constante qui ne dépend pas de N Maple 1314 On teste maintenant la méthode de Fermat avec Maple 12 sur des modules RSA N = pq de taille t = 100, avec p q < cn 1/4 Pour cela, on utilise le programme suivant qui fabrique deux nombres premiers p et q avec p q < 10N 1/4 Ensuite, on exécute la méthode de Fermat pour retrouver un des nombres premiers de N Digits := 100: t := 100: x1 := round(20^((1/2)*t)): x2 := round(20^((t+1)*(1/2))): Commentaires <--- Précision des calculs <--- Taille du module <--- Borne inférieur pour p <--- Borne supérieur pour p

13 CRYPTANALYSES ÉLÉMENTAIRES DE RSA 23 m1 := (rand(x1 x2))(): p := nextprime(m1): m2 := round(p+10*2^(t/4)): q := nextprime(m2): N := p*q: c := trunc(abs(p-q)/n^025)+1: n := round(2*sqrt(n)): k := 0: while k < (1/2)*c^2+1 do x := n+k: y := round(sqrt(x^2-4*n)): s := round((x+y)/2): if gcd(s, N) > 1 then print( Un facteur est, s): break: end if: k := k+1: end do: <--- Valeur aléatoire <--- Nombre premier suivant <--- Borne inférieur pour q <--- Module RSA <--- Rapport <--- Entier le plus proche <--- Compteur <--- Boucle de Fermat <--- Une valeur pour x <--- La valeur de y <--- Un candidat pour q <--- pgcd En exécutant ce programme, on a obtenu les résultats suivants p=1184367162931181 q=1184367498475709 N=1402725974037575305865967182329 c=10 k=24 Un facteur est 1184367498475709 <--- Un facteur premier <--- L autre facteur premier <--- Le module RSA <--- c vérifie abs(p-q)<cn^(1/4) <--- Le nombre d itérations <--- Sortie de la procédure Magma 1315 On teste ausi la méthode de Fermat avec Magma sur des modules RSA N = pq de taille t = 100, avec p q < cn 1/4 Pour cela, on utilise le programme suivant qui fabrique deux nombres premiers p et q avec p q < 10N 1/4 Ensuite, on exécute la méthode de Fermat pour retrouver un des nombres premiers de N

24 CHAPITRE 1 INTRODUCTION AU CRYPTOSYSTÈME RSA t := 100; x1 := Round(2^((1/2)*t)); x2 := Round(2^((t+1)*(1/2))); m1 := Random(x1,x2); p := NextPrime(m1); m2 := Round(p+10*2^(t/4)); q := NextPrime(m2); N := p*q; c := Truncate(Abs(p-q)/N^025)+1; n := Round(2*Sqrt(N))+1; k := 0; while k lt (1/2)*c^2+1 do x := n+k; y := Round(Sqrt(x^2-4*N)); s := Round((x+y)/2); if GCD(s, N) gt 1 then printf("un facteur est ");s; break; end if; k := k+1; end while; <--- Taille du module <--- Valeur minimale du nombre premier <--- Valeur maximale du nombre premier <--- Valeur aléatoire <--- Premier nombre premier <--- Valeur aléatoire <--- Deuxième nombre premier <--- Module RSA <--- Le rapport Abs(p-q)/N^025)+1; <--- Valeur de départ <--- Initiation <--- Boucle de Fermat <--- Valeur de x <--- Valeur de y <--- Valeur candidate pour p <--- Arr^et de la boucle <--- Fin de la boucle En exécutant ce programme, on a obtenu les résultats suivants p=1320614251431253 q=1320614586975679 N=1744022444208079680278451495787 c=10 k=20 Un facteur est 1320614586975679 <--- Un facteur premier <--- L autre facteur premier <--- Le module RSA <--- c vérifie abs(p-q)<cn^(1/4) <--- Le nombre d itérations <--- Sortie de la procédure

Chapitre 2 Cryptanalyse de RSA par les fractions continues Le coléreux ne peut pas atteindre la gloire et le glorieux ne ressent pas la colère Antara Ibno Shaddad Al Absy 21 Les fractions continues 211 Introduction On considère le nombre x = 3+ 10 6162277, solution de l équation x 2 6x 1 On peut alors écrire x 2 = 6x + 1 et donc x = 6 + 1 En recommençant le processus, x on obtient 1 x = 6 +, 1 6 + 1 6 + 6 + 1 Une telle fraction, qui peut être finie, s appelle une fraction continue, ici, c est la fraction continue de x = 3 + 10 On note plus simplement 3 + 10 = [6, 6, 6, ] On peut aussi prendre un nombre fini d éléments 6 On obtient ainsi [6] = 6, [6, 6] = 6 + 1 6 = 37 6 6, 166666, 25

26CHAPITRE 2 CRYPTANALYSE DE RSA PAR LES FRACTIONS CONTINUES [6, 6, 6] = 6 + 1 6 + 1 6 = 228 37 6162162, [6, 6, 6, 6] = 6 + 1 6 + 1 6 + 1 6 = 1405 228 6162280, Chacune des fractions 6, 37, 228, 1405, s appelle une réduite ou convergentes On 6 37 228 observe que ces fractions vérifient 6 x > 37 6 x > 228 37 x > 1405 228 x Ceci est une des nombreuses propriétés des fractions continues 212 Définitions et propriétés Théorème 211 Tout nombre réel positif x a une écriture unique comme fraction continue : 1 x = a 0 + = [a 1 1, a 2, a 3, ], a 1 + 1 a 2 + a 3 + 1 où les a i sont des entiers positifs De plus, la fraction continue est finie si et seulement si le nombre x est rationnel Démonstration Soit x un nombre réel positif On pose x 0 = x On considère la partie entière a 0 = [x 0 ] Si x 0 est un entier, a 0 = x 0 et la fraction continue de x est x = [a 0 ] Supposons que x n est pas un entier Dans ce cas, on a 0 < x 0 a 0 < 1 et 1 x 0 a 0 > 1 Puisque x 0 = a 0 + (x 0 a 0 ), on définie x 1 par x 1 = 1 x 0 a 0 > 1, ce qui donne x 0 = a 0 + 1 x 1

21 LES FRACTIONS CONTINUES 27 On recommence le processus pour x 1 On a a 1 = [x 1 ] Si x 1 est un nombre entier, alors a 1 = x 1, et la fraction continue de x est x = a 0 + 1 a 1 = a 0 + a 1 a 1, qui représente un nombre rationnelle Si x 1, n est pas un entier, en recommence le processus en définissant x 2 par x 2 = 1 x 1 a 1 > 1, ce qui donne x 0 = a 0 + 1 a 1 + 1 x 2 Ce processus s arrête au rang n si et seulement si a n = [x n ], avec a n 1, et dans ce cas, la fraction continue de x est 1 x = a 0 + 1 a 1 + 1 a 2 + 1 a 3 + 1 + a n = [a 1, a 2, a 3,, a n ], qui représente un nombre rationnel Si x est un nombre irrationnelle, le processus continue indéfiniment et on obtient pour x une fraction continue infinie : x = [a 1, a 2, a 3, ] Définition 212 Soit [a 1, a 2, a 3, ] une fraction continue d un nombre x 1 Les nombres entiers a i s appellent les quotients partiels 2 Les nombres rationnels [a 1, a 2, a 3,, a k ] s appellent les réduites de x Maple 213 Avec le logiciel Maple, la fonction qui calcule la fraction continue d un nombre x est est cfrac(x,n, quotients ) : n est le nombre de quotients partiels et quotients pour afficher la fraction continue sous la forme [a 0, a 1, a 2,, a n ], ce qui correspond à la notation standard Voici un exemple pour calculer la fraction continue de x = 1+7 1 3

28CHAPITRE 2 CRYPTANALYSE DE RSA PAR LES FRACTIONS CONTINUES Commentaire restart: with(numtheory): Digits:=100: x:=1+7^(1/3): n:=30: s:=cfrac(x,n, quotients ): s; <--- Remise à zéro <--- Fonctionnalités "Théorie des Nombres" <--- Précision <--- Un nombre réel <--- nombre de quotients partiels <--- Calcul de la fraction continue <--- s=[2,1,10,2,16,] Magma 214 Avec le logiciel Magma, la fonction qui calcule la fraction continue de x = 1 + 7 1 3 est ContinuedFraction(x) Magma donne alors la forme x = [a 1, a 2, ], est commence donc avec a 1 x:=1+7^(1/3); print(x); s:=continuedfraction(x); s; Commentaire <--- Déclaration de x=1+7^(1/3) <--- Valeur décimal de x <--- Liste des quotients partiels <--- Affichage de la liste Pour un nombre x dont la fraction continue est [a 0, a 1, a 2, ], on peut facilement calculer les premières convergentes : [a 0 ] = a 0 = p 0 q 0 [a 0, a 1 ] = a 0 + 1 = a 0a 1 + 1 = p 1 a 1 a 1 q 1 1 [a 0, a 1, a 2 ] = a 0 + a 1 + 1 = a 0a 1 a 2 + a 0 + a 2 a 1 a 2 + 1 a 2 = p 2 q 2 On observe facilement que p 2 = a 2 (a 0 a 1 + 1) + a 0 = a 2 p 1 + p 0, q 2 = a 2 a 1 + 1 = a 2 p 1 + q 0 Ceci est une propriété générale des convergentes d un nombre réel Théorème 215 Soit [a 0, a 1, a 2, ] la fraction continue de x Pour tout n 0, on définit les nombres p n et q n par, p n = a n p n 1 + p n 2, q n = a n q n 1 + q n 2,

21 LES FRACTIONS CONTINUES 29 avec la convention p 2 = 0, q 2 = 1, p 1 = 1, q 1 = 0 Alors tout n 0, on a pn q n = [a 0, a 1, a 2,, a n ] Démonstration La preuve se fait par récurrence sur n On a déjà vu que [a 0 ] = p 0 q 0 Supposons que p n = a n p n 1 + p n 2, q n = a n q n 1 + q n 2, et que [a 1, a 2, a 3,, a n ] = pn q n Alors, on a aussi, en utilisant la récurrence [a 1, a 2, a 3,, a n, a n+1 ] = [a 1, a 2, a 3,, a n + 1 ] a ( ) n+1 a n + 1 a n+1 p n 1 + p n 2 = ( ) a n + 1 a n+1 q n 1 + q n 2 = (a na n+1 + 1) p n 1 + a n+1 p n 2 (a n a n+1 + 1) q n 1 + a n+1 q n 2 = a n+1 (a n p n 1 + p n 2 ) + p n 1 a n+1 (a n q n 1 + q n 2 ) + q n 1 = a n+1p n + p n 1 a n+1 q n + q n 1 = p n+1 q n+1, et la récurrence est démontrée Ceci termine la preuve Maple 216 Avec Maple, la fonction qui détermine les convergentes est nthconver : la n + 1- ème convergente d une liste s de convergente est nthconver(s,n) Le numérateur et le dénominateur sont alors nthnumer(s,n) et nthdenom(s,n) Voici un exemple dans lequel on cherche la convergente p 7 q 7 de x = 1 + 7 1 3

30CHAPITRE 2 CRYPTANALYSE DE RSA PAR LES FRACTIONS CONTINUES Proramme Commentaires restart: with(numtheory): Digits:=100: x:=1+7^(1/3): s:=cfrac(x,100, quotients ): n:=7: nthconver(s,n); nthnumer(s,n); nthdenom(s,n); <--- Remise à zéro <--- Fonctionnalités "Théorie des Nombres" <--- Précision <--- Un nombre réel <--- s=[2,1,10,2,] <--- On considère la 8-ème convergentes <--- La convergente d indice 7 <--- Son numérateur est 15791 <--- Son dénominateur 5421 Magma 217 Avec Magma, pour calculer la convergente pn q n, il faut utiliser la fonction Convergents(s) où s = [a 1, a 2,, a n ] La réponse est alors une matrice de la forme [ pn p n 1 q n q n 1 ] Commentaires x:=1+7^(1/3); c:=continuedfraction(x); c; s:=[]; n:=7; for i in [1n] do s:=append(s,c[i]);end for; s; t:=convergents(s); t[1,1]; t[2,1]; La réponse est p 7 = 3379 et q 7 = 1160 <--- La valeur x=1+7^(1/3) <--- La liste des quotients partiels <--- Affichage de la liste <--- Initialisation <--- Convergente p7/q7 <--- Formation de [a1,,a7] <--- Affichage de [a1,,a7] <--- Matrice ([p7,p6],[q7,q6]) <--- p7 <--- q7 Dans magma, on peut aussi écrire un programme afin de déterminer la liste des numérateurs et dénominateurs des convergentes

21 LES FRACTIONS CONTINUES 31 Commentaires x:=1+7^(1/3); x; s:=continuedfraction(x); s; p0:=0;q0:=1;p1:=1;q1:=0; N:=[];D:=[]; l:=15; for i in [1l] do p2:=s[i]*p1+p0; q2:=s[i]*q1+q0; N:=Append(N,p2); D:=Append(D,q2); p0:=p1;q0:=q1; p1:=p2;q1:=q2; end for; N; D; n:=7; N[n]; D[n]; <--- La valeur x <--- Sa valeur décimale <--- Liste des quotients partiels <--- Affichage de la liste <--- Initialisations <--- Initialisations <--- Longueur de la liste <--- Boucle <--- Calcul de p2 <--- Calcul de p2 <--- Formation de la liste N <--- Formation de la liste D <--- Echange <--- Echange <--- Fin de la boucle <--- Affichage de N <--- Affichage de D <--- 7ème convergente <--- Numérateur <--- Dénominateur La septième convergente est alors p 7 = 3379 et q 7 = 1160 Théorème 218 Soit [a 0, a 1, a 2, ] la fraction continue d un nombre x Alors les convergentes pn q n de x vérifient pour tout n 2 p n q n+1 q n p n+1 = ( 1) n+1, p n q n+2 q n p n+2 = ( 1) n+1 a n+2 Démonstration Les preuves se font aisément par récurrence Considérons la première égalité Pour n = 2, on a bien p 2 q 1 q 2 p 1 = 1 = ( 1) 2+1 Supposons donc que p n 1 q n q n 1 p n = ( 1) n On a, en utilisant le théorème 215, p n q n+1 q n p n+1 = p n (a n+1 q n + q n 1 ) q n (a n+1 p n + p n 1 ) = p n q n 1 q n p n 1 = ( 1) n = ( 1) n+1,

32CHAPITRE 2 CRYPTANALYSE DE RSA PAR LES FRACTIONS CONTINUES ce qui démontre la récurrence La deuxième égalité s obtient directement en combinant l égalité p n q n+1 q n p n+1 = ( 1) n+1 et le théorème 215 p n q n+2 q n p n+2 = p n (a n+2 q n+1 + q n ) q n (a n+2 p n+1 + p n ) = a n+2 (p n q n+1 q n p n+1 ) = a n+2 ( 1) n+1 Ceci prouve donc la deuxième égalité Maple 219 Vérifions ce théorème avec les convergentes de x = 1 + 7 1 3 restart: with(numtheory): Digits:=100: x:=1+7^(1/3): s:=cfrac(x,100, quotients ): nu:=i->nthnumer(s,i): de:=i->nthdenom(s,i): n:=7; r:=nu(n)*de(n+1)-nu(n+1)*de(n): (-1)^(n+1)-r; n:=10; r:=nu(n)*de(n+2)-nu(n+2)*de(n); (-1)^(n+1)*s[n+3]-r; Commentaires <--- liste des quotients partiels <--- Numérateurs des convergentes <--- Dénominateurs des convergentes <--- Un indice quelconque <--- Première égalité <--- Différence (nulle) <--- Un indice quelconque <--- Deuxième égalité <--- Différence (nulle) Magma 2110 On vérifie maintenant le théorème 218 avec les convergentes de x = 1 + 7 1 3 pour n = 7 avec magma Attention au décalage de l exposant de 1 puisque Magma commence les quotients partiels par a 1 et non par a 0

21 LES FRACTIONS CONTINUES 33 x:=1+7^(1/3); c:=continuedfraction(x); s:=[]; t:=[]; l:=20; for i in [1l] do s:=append(s,c[i]); t:=append(t,convergents(s)); end for; n:=7; p1:=t[n][1,1];p2:=t[n+1][1,1]; q1:=t[n][2,1];q2:=t[n+1][2,1]; p1*q2-p2*q1-(-1)^(n); n:=7; p1:=t[n][1,1];p3:=t[n+2][1,1]; q1:=t[n][2,1];q3:=t[n+2][2,1]; p1*q3-p3*q1-(-1)^(n+2)*c[n+2]; <--- Valeur de x <--- Liste des quotients partiels <--- Initiation <--- Initiation <--- Nombre de convergentes <--- Boucle <--- Liste s <--- Liste des convergentes <--- n=7 <--- p7 et p8 <--- q7 et q8 <--- Vérification, réponse nulle <--- p7 et p9 <--- q7 et q9 <--- Vérification, réponse nulle Corollaire 2111 Les convergentes pn q n d un nombre réel x vérifient pgcd(p n, q n ) = 1 pour tout n 0 Démonstration Supposons que p n+1 q n+1 existe Alors, d après Théorème 218, on a p n q n+1 q n p n+1 = ( 1) n+1 et donc pgcd(p n, q n ) = 1 Théorème 2112 La suite des convergentes d indices pairs p 2n q 2n p 2n+1 q 2n+1 d un nombre irrationnel positif x vérifient : et d indices impairs p 2n 2 q 2n 2 < p 2n q 2n < x < p 2n+1 q 2n+1 < p 2n 1 q 2n 1 Démonstration Démontrons d abord que pour tout n 0, on a p 2n effet, en utilisant le théorème 218 p 2n q 2n p 2n+1 q 2n+1 = p 2nq 2n+1 q 2n p 2n+1 q 2n q 2n+1 = ( 1)2n+1 q 2n q 2n+1 < 0 q 2n < p 2n+1 q 2n+1 En Démontrons maintenant que pour tout n 0, on a p 2n 2 q 2n 2 le théorème 218 : < p 2n q 2n On a, en utilisant p 2n 2 q 2n 2 p 2n q 2n = p 2n 2q 2n p 2n q 2n 2 q 2n 2 q 2n = ( 1)2n 1 a 2n q 2n 2 q 2n < 0

34CHAPITRE 2 CRYPTANALYSE DE RSA PAR LES FRACTIONS CONTINUES On a de même ce qui donne p 2n+1 q 2n+1 p 2n+1 q 2n+1 p 2n 1 q 2n 1 = p 2n+1q 2n 1 p 2n 1 q 2n+1 q 2n+1 q 2n 1 = ( 1)2n a 2n+1 q 2n+1 q 2n 1 < 0, < p 2n 1 q 2n 1 Il reste à démontrer que les deux inégalités p 2n q 2n < x et x < p 2n+1 q 2n+1 En écrivant x = [a 0, a 1, a 2,, a n, x n+1 ] avec x n+1 = [a n+1, ], on obtient, en utilisant Théorème 218, pour tout n 0 : x p n q n = x n+1p n + p n 1 x n+1 q n + q n 1 p n q n = Ainsi, on obtient x p 2n q 2n > 0 et x p 2n+1 q 2n+1 < 0 p n 1q n p n q n 1 q n (x n+1 q n + q n 1 ) = Le corollaire suivant est une conséquence de Théorème 2112 ( 1) n q n (x n+1 q n + q n 1 ) Corollaire 2113 Si [a 0, a 1, a 2, ] est la fraction continue d un nombre x, alors les convergentes pn q n de x vérifient : 1 Pour tout n 0, (q n x p n )(q n+1 x p n+1 ) < 0 2 Pour tout n 0, q n+1 x p n+1 < q n x p n Démonstration En écrivant x = [a 1, a 2, a 3,, a n, x n+1 ] = [a 0, a 1, a 2,, a n+1, x n+2 ] avec x n+1 = [a n+1, ] et x n+2 = [a n+2, ], on obtient, comme dans la preuve du théorème 2112, pour n 0, q n x p n = ( 1) n x n+1 q n + q n 1, q n+1 x p n+1 = ( 1) n+1 x n+2 q n+1 + q n ceci montre que q n x p n et q n+1 x p n+1 sont de signes contraires et donc la propriété 2 En écrivant x n+1 = a n+1 + 1 x n+2 Ainsi Donc avec x n+2 > 1, on a a n+1 < x n+1 < a n+1 + 1 x n+1 q n + q n 1 < (a n+1 + 1)q n + q n 1 = q n+1 + q n < x n+2 q n+1 + q n et par conséquent ce qui montre la propriété 2 1 x n+1 q n + q n 1 > 1 x n+2 q n+1 + q n, q n x p n > q n+1 x p n+1,

21 LES FRACTIONS CONTINUES 35 Proposition 2114 Si x = [a 1, a 2, a 3, ], alors les convergentes pn q n pour tout n 0, x p n < 1 q n q n+1 q n de x vérifient Démonstration Puisque x = [a 0, a 1, a 2,, a n, x n+1 ] avec x n+1 = [a n+1, ], alors x n+1 > a n+1 Comme dans la preuve de Théorème 2112, pour n 0, on obtient x p n = 1 q n (x n+1 q n + q n 1 ) < 1 q n (a n+1 q n + q n 1 ) = 1, q n q n+1 q n ce qui termine la preuve On obtient alors la propriété suivante pour un nombre irrationnel Proposition 2115 Si [a 0, a 1, a 3, ] est la fraction continue d un nombre irrationnel x, alors il existe une infinité de nombres rationnels p tels que q x p q < 1 q 2 Démonstration Puisque q n < q n+1, alors, en utilisant la proposition 2114, on obtient pour toutes les convergents pn q n de x on a x p n q n < 1 < 1 q n q n+1 qn 2 Donc, comme il y a une infinité de convergentes si x est irrationnel, il y a une infinité de nombres rationnels p qui vérifient q x p q < 1 q 2 Nous avons aussi un théorème concernant les meilleures approximations Théorème 2116 (Meilleurs approximations) Si [a 1, a 2, a 3, ] est la fraction continue d un nombre irrationnel x Soit pn q n une convergente de x avec n 0 et un nombre rationnel p q 1 Si q < q n+1, alors q n x p n qx p x 2 Si q q n, alors x pn q n p q

36CHAPITRE 2 CRYPTANALYSE DE RSA PAR LES FRACTIONS CONTINUES Démonstration On suppose que 0 < q < q n+1 Montrons que q n x p n qx p Soit a et b deux entiers tels que p = ap n + bp n+1, q = aq n + bq n+1 L existence de a et b est garantie par le théorème 218 En effet, on a p n q n+1 p n+1 q n = ( ) n+1 et donc a = ( 1) n+1 (pq n+1 qp n+1 ), b = ( 1) n+1 (qp n pq n ) On peut discuter les valeurs de p et q suivant les valeurs de a et b - Si a = 0, alors q = bq n+1, donc b 1, ce qui contredit 0 < q < q n+1 x - Si b = 0, alors p = ap n et q = aq n, ce qui donne x pn q n = p q - Supposons donc que ab 0 Puisque q < q n+1, alors aq n + bq n+1 < q n+1 et donc aq n < (1 b)q n+1, ce qui montre que b 1 et a < 0 ou b 1 et dans ce cas, on doit avoir q = aq n + bq n+1 > 0, donc a > 0 Dans les deux cas, ab < 0 On a alors qx p = (aq n + bq n+1 )x (ap n + bp n+1 ) = a(q n x p n ) + b(q n+1 x p n+1 ), où les termes a(q n x p n ) et b(q n+1 x p n+1 ) sont de même signe Alors qx p = a(q n x p n ) + b(q n+1 x p n+1 ) q n x p n Ceci termine la preuve de 1 De plus, si on a q q n, alors x p qx p q = q et termine la preuve de 2 q nx p n q n = x p n, q n On a déjà vu dans la proposition 2115 que pour n 0, les convergentes d un nombre réel x vérifient x p n q n < 1 qn 2 En fait, le résultat suivant est encore plus précis Proposition 2117 Si [a 0, a 1, a 2, ] est la fraction continue d un nombre x, alors pour n 0, on a x p n < 1 ou x p n+1 < 1 q n 2q 2 n q n+1 2q 2 n+1

22 CRYPTANALYSE DE RSA PAR LES FRACTIONS CONTINUES 37 Démonstration On sait par le corollaire 2113 que x pn q n et x p n+1 q n+1 sont de signes contraires Alors p n p n+1 q n = x p n + x p n+1 q n+1 q n q n+1 Or, en utilisant le théorème 218 et l inégalité 2q n q n+1 < qn 2 + qn+1, 2 on obtient : p n p n+1 q n q n+1 = 1 < 1 + 1 q n q n+1 2qn+1 2 Ainsi Ceci montre alors que 2q 2 n x p n q n + x p n+1 q n+1 < 1 x pn q n < 1 ou 2qn 2 2q 2 n + 1 2qn+1 2 x p n+1 q n+1 < 1 2qn+1 2 On termine avec le théorème suivant, très utile pour reconnaitre les convergentes d un nombre réel Proposition 2118 Si x est un nombre réel Si p q vérifie x p q < 1 2q, 2 alors p est une convergente de x q est un nombre rationnel qui Démonstration Soit p est un nombre rationnel Puisque la suite des dénominateurs q (q n ) des convergentes pn q n de x est strictement croissantes, alors q n q < q n+1 pour un entier n 0 On a alors, en utilisant le théorème 2116 et l hypothèse x p q < 1, 2q 2 p q p n p q x + x p n 2 x p q < 1 q 2 q n Il en résulte que pq n p n q < q n q 1 Ainsi, pq n p n q = 0 et donc p = pn q q n q n 22 Cryptanalyse de RSA par les fractions continues Dans cette partie, nous considérons deux attaques basées sur l utilisation des fractions continues La première est due à Wiener (1990)

38CHAPITRE 2 CRYPTANALYSE DE RSA PAR LES FRACTIONS CONTINUES 221 L attaque de Wiener Théorème 221 Soit N = pq un module RSA où les nombres premiers p et q sont de même taille (q < p < 2q) Soit e < φ(n) un exposant public pour lequel la clé secrète d est assez petite : d < 1 3 N 1 4 Connaissant N et e, on peut calculer d et factoriser N Démonstration Supposons que q < p < 2q Puisque N = pq > q 2, alors q < N D autre part, on a N ϕ(n) = p + q 1 < 2q + q 1 < 3q < 3 N Si e est une clé publique et d la clé privée, alors d e 1 (mod φ(n)), où φ(n) est l indicateur d Euler Donc il existe un entier k tel que ed kϕ(n) = 1 Puisque e < φ(n), on peut donc écrire Alors Puisque k < d < 1 3 N 1 4, alors k = ed 1 φ(n) < ed φ(n) < d e N k ed kn d = Nd ed kϕ(n) kn + kϕ(n) = Nd 1 k(n ϕ(n)) = Nd k(n ϕ(n)) < Nd < 3k N Nd 3k = d N 3k d N < N 1 4 d N = 1 dn 1 4 < 1 2d 2 Ainsi, en appliquant le théorème 215, k d est une convergente de e N Connaissant d et k, on peut alors calculer φ(n) par la relation φ(n) = ed 1 k Ainsi, par la proposition 131 on peut calculer p et q et donc trouver la factorisatio de N

22 CRYPTANALYSE DE RSA PAR LES FRACTIONS CONTINUES 39 L attaque de Wiener peut donc être résumée dans l algorithme suivant Algorithme 7 : L attaque de Wiener Entrée : Un module RSA N et un exposant publique e pour lequel la clé secrète vérifie d < 1N 1 4 3 Sortie : La factorisation de N et la clé secrète d 1: Déterminer la liste des réduites de e N 2: Pour chaque réduite xy telle que y < 1N 1 4 : 3 3: Calculer ψ = ey 1 x, δ = (N + 1 ψ)2 4N, et p 2 = 4: Si pgcd(p 2, N) > 1 alors 5: Afficher d = y, p = p 2 et q = N p 2 6: Fin Si [ (N+1 ψ+ δ) 2 ] Maple 222 n:=100:digits:=100:with(numtheory) x:=rand(2^(n/2-1)2^(n/2))(): p:=nextprime(x): y:=rand(round(x/2)x)(): q:= nextprime(y): evalf(p/q): N:=p*q: ph:=(p-1)*(q-1): sn:=trunc(1/3*(n^(1/4))): d:=rand(sn)(): while gcd(d,ph)>1 do d:=rand(sn)() end do: e:=1/d mod ph: convert(e/n,confrac, pq ): g:=1:i:=2: while g=1 do y:=denom(pq[i]): x:=numer(pq[i]): psi:=(e*y-1)/x: delta:=(n+1-psi)^2-4*n: p2:=((n+1-psi)+sqrt(delta))/2: p2:=round(p2): g:=gcd(p2,n): Commentaire <-- Initiations <-- Une Valeur aléatoires <-- Le nombre premier p <-- Condition q<p<2q <-- Le nombre premier q <-- La condition 1<p/q<2 <-- Le module RSA <-- L indicateur d Euler <-- La borne de Wiener <-- Une clé privée aléatoire <-- d est premier avec ph <-- La clé publique <-- pq est la liste des réduites <-- Initiation <-- Boucle <-- Dénominateur de la réduite <-- Numérateur de la réduite <-- la valeur psi <-- Solution de l équation <-- calcul de pgcd(p2,n)