Univers des Nombres TP 1 Université Blaise Pascal - Département de Mathématiques Année 2010 - 2011 Le but de la cryptographie est de permettre la transmission, par des voies publiques, de messages que seules les personnes autorisées peuvent comprendre. On appelle [texte d’origine] le message à envoyer et [texte codé] le message réellement envoyé qu’une personne non autorisée ne peut pas comprendre. La procédure qui transforme un texte d’origine en texte codé s’appelle [codage], la procédure inverse, qui transforme un texte codé en texte d’origine, s’appelle [décodage]. Un message est formé de blocs de k lettres appelés [unités]. Dans un alphabet à N lettres numérotées 0 à N − 1, une unité est associée à un entier de [0, N k [ de la façon suivante : si la lettre `i est la i-ième lettre de l’alphabet, l’unité `i1 · · · `ik est associée à l’entier k X ij N k−j . j=1 On regarde cet entier comme un élément de (Z/N k Z). [Dans tous les exemples de ce problème, on prend un alphabet à 27 lettres, le blanc, noté L , est numéroté 0, les lettres sont numérotées 1 à 26 dans l’ordre alphabétique. On n’utilise pas de lettres accentuées] La cryptographie à clé publique regroupe l’ensemble des méthodes dans lesquelles tout le monde connaı̂t le codage mais seules les personnes autorisées connaissent le décodage. (Par exemple, tout le monde peut déposer une lettre dans une boı̂te à lettres, seuls les facteurs peuvent relever cette lettre). On décrit maintenant le système RSA (inventé par Rivest, Shamir et Adleman). On suppose qu’Alice veut permettre à tout le monde de lui envoyer des messages codés. Alice et le reste du monde utilisent un même alphabet à N lettres. Les unités des messages d’origine contiennent k lettres et les unités des messages codés contiennent ` lettres, ` > k. Alice choisit deux (grands) nombres premiers et calcule le [module RSA], n = pq. Elle choisit ces nombres tels que N k < n < N ` : ainsi une unité d’origine peut être vue comme un élément de Z/nZ et si le codage est une application de Z/nZ dans Z/nZ, le message codé peut être vu comme un élément de Z/N ` Z. Alice choisit un entier e tel que e, ϕ(n) = 1. La fonction de codage est alors c : [[0, n − 1]] m −→ 7−→ [[0, n − 1]] me mod n. Alice rend public les entiers n, e, k et `. Bob (il ne connaı̂t que les quatre nombres rendus publics), qui veut envoyer un message m à Alice, peut donc calculer c(m). Alice peut facilement décoder ce message : connaissant p et q, elle peut calculer l’inverse e0 de e modulo ϕ(n). La fonction de décodage est alors d : Z/nZ m → Z/nZ ,→ 0 7 → me 7→ 1 e0 m Z/N k Z (mod N k ). Univers des nombres - TP 1 Université Blaise Pascal - 2 [Vérifier que d◦c(m) redonne m]. En revanche, si une tierce personne intercepte le message m, ne connaissant pas la factorisation de n, elle ne peut pas calculer ϕ(n) et donc e0 (alors qu’elle connaı̂t n et e). C’est ici qu’il est important que p et q soient choisis grands. à l’heure actuelle, on sait factoriser des modules à 155 chiffres. Le système RSA n’est donc fiable que dans la mesure où le calcul de ϕ(n) est suffisament long pour être considéré comme non réalisable.). 1. [Calcul de l’inverse] Soit a et b deux entiers naturels, et δ = (a, b). Il existe u et v tels que au + bv = δ. Montrer que l’algorithme suivant [igcdex sous Maple] calcule des entiers u, v et δ comme ci-dessus Si a = 0, renvoyer δ = b, u = 0, v = 1. On pose x = a, y = b, vx = 0, vy = 1. Tant que y 6= 0 [on pourra vérifier qu’ici vx b ≡ x (mod a) et vy b ≡ y (mod a)] trouver q, r réalisant la division euclidienne x = qy + r. remplacer (vx , vy ) par (vy , vx − qvy ). remplacer (x, y) par (y, x − qy) [c’est-à-dire (y, r)] Renvoyer δ = x, u = (x − bvx )/a, et v = vx . Soit a un entier et b un entier premier à a. Déduire de l’algorithme précédent un algorithme de calcul de l’inverse de a modulo b. 2. [Un exemple “à la main”] Sachant que (k, `) = (3, 4) et (n, e) = (50689, 50021) décoder le message aakLbinwauyuLvykaliLLszobLdzbmlh 3. Coder la phrase 1 estLorienteLversLlLinnocent [On pourra commencer par écrire un générateur de nombres premiers aléatoires à l’aide de la commande rand() de Maple puis utiliser ce générateur pour construire p, q et e. On choisira ensuite k et `.] 1. Les deux messages de ce problème sont les deux premiers vers du poème “La dernière nuit” de Paul Eluard, tiré du recueil Au rendez-vous allemand publié aux éditions de Minuit.