Feuille de TP 1

publicité
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.
Téléchargement