Gilles Dubertret Certifié de m athém atiques Professeur au lycée de Sèvres C hargé d ’enseignem ent à l’IUT de Paris, université Paris-V/René Descartes
INITIATION A LA CRYPTOGRAPHIE \
Vuibert Informatique
SOMMAIRE Table des matières détaillée Mode d ’emploi
5
9
1 LES NOMBRES PREMIERS
11
2 é lé m e n t s d ’a r it h m é t i q u e
21
3 L’ALGORITHME D’EUCLIDE ÉTENDU 4 LE LOGARITHME DISCRET 5 CRYPTOSYSTÈMES 6
FONCTIONS
7 LE RSA
81
8 LE DES
85
À
47
53
59
SENS UNIQUE
71
9 IDENTIFICATION, AUTHENTIFICATION ET SIGNATURE Annexe : la cryptographie à travers l ’histoire Bibliographie
105
102
TABLE DES MATIÈRES 1 LES NOMBRES PREMIERS 1.1
N o m bres p re m ie rs ............................................................................................ 11
1.2
C rib le d ’E ra to s th è n e ........................................................................................ 12
1.3
F a cte u rs p r e m ie r s ............................................................................................. 13
1.4
F iche s p ra tiq u e s 1.4.1 1.4.2 1.4.3
14
Notion de complexité algorithmique .............................................................. 14 Liste des nombres prem iers.......................................................................... 16 Décomposition en facteurs prem iers............................................................ 17
1.5 E xe rcice s ..........................................................................
2
18
é l é m e n t s d ’a r it h m é t iq u e 2.1
C o n g ru e n c e s d an s Z
............................................................................. 21
2.1.1 Introduction....................................................................................................... 21 2 1.2 Congruence...................................................................................................... 24 2.1.3 Ensemble quotient Z/nZ .................................................................................. 25 2.1.4 Structure algébrique de Z /n Z ........................................................................... 26 2.1 5 Groupe, anneau et co rp s ................................................................................. 26 2.1.6 Relation d’équivalence .................................................................................. 27 2 1 7 Fiches pratiques 28 2.1.7.1 Système cryptographique de César 2.1.7.2 Système cryptographique de Vigénère 2.1.7.3 Permutations alphabétiques 2.2
2.3
D iv is ib ilité d a n s Z ............................................................................................. 2 2 1 Idéal des multiples de a .. 2 2.2 Divisibilité et idéaux de Z 2.2.3 PPCM ........................ 2.2.4 PGCD ............................................................................................................ 2.2.5 Le théorème de Gauss ................................................................................. 2.2.6 Fiches pratiques ............................................................................................ 2.2.6.1 PGCD et PPCM 2.2.6.2 Retour aux nombres premiers 2.2.7 Exercices ............. E lém ents in v e rs ib le s de Z/nZ ................................. 2.3.1 L’indicateur d’Euler ....................................................................................... 2.3.2 Le petit théorème de Fermât ......................................................................... 2.3.3 Fiches pratiques ........................................................................................... 2.3.3.1 Cryptographie et algèbre linéaire 2.3.3.2 Calcul de a* modulo n et le théorème de Fermât 2.3.3.3 Test de non primalité 2.3.3.4 Calcul de a* modulo n « à la main ». Notions de cycle
31 31 32 32 33 35 36
38 42 42 44 44
Table des matières
6
3 L’ALGORITHME D’EUCLIDE ÉTENDU 3.1 P ré sen tatio n de l’a lg o rith m e .......................................................................... 47 3.2 F ich e s p ra tiq u e s .......................................
49
3.2.1 Euclide étendu................................................................................................ 49 3.2.2 Inverse de a dans Z/nZ ................................................................................. 49 3.4
E xercice s ............................................................................................................ 50
4 LE LOGARITHME DISCRET 4.1
R acine p rim itiv e ................................................................................................. 53
4.2 C ritè re de p rim a lité de L e h m e r ...................................................................... 54 4.3 Fiches p ra tiq u e s ................................................................................................ 55 4.3.1 Recherche de racines primitives.................................................................... 55 4.3.2 Recherche de grands nombres premiers..................... 56
5 CRYPTOSYSTÈMES 5.1
E xem ples de c ry p to s y s tè m e s c la s s iq u e s .................................................. 59 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6
Trois exemples ............................................................................................... N-gramme substitution .................................................................................. Permutation d’ordre d ..................................................................................... Playfair C ipher................................................................................................ Transformation linéaire................................................................................... La machine Enigma ......................................................................................
59 59 59 60 60 60
5.2 C asser un c r y p to s y s tè m e ............................................................................... 63 5.3 D iffé re n ts n ive a u x d ’a tta q u e ..............................................................
65
5.4 M asque je ta b le ................................................................................................... 67 5.5 C ry p to g ra p h ie q u a n tiq u e ................................................................................ 67 5.6 F iche s p ra tiq u e s ................................................. 5.6.1
Convertir du texte en nombre .
67 67
6 FONCTIONS À SENS UNIQUE 6.1
F o n c tio n s à se n s u n iq u e ................................................................................. 71
6.2 P rem ières a p p lic a tio n s .................................................................................... 73 6.2.1 Partage de clés .............................................................................................. 6.2.2 Un cryptosystème sans clé ............................................................. 6.2.3 Un cryptosystème à clé publique . 6.2.4 Algorithme du sac à dos ................................................................................
73 73 74 74
6.3 F iche s p ra tiq u e s ................................................................................................ 75 6.3.1 Le sac à d o s ................................................................................................... 75 6.3.2 Partage de clés .............................................................................................. 77 6.3.3. Cryptosystème sans clé ................................................................................ 78
Initiation à la cryptographie
7
7 LE RSA 7.1
Le sys tè m e RS
....................................................................................................81
7.2 F ich e s p r a tiq u e s ...................................................................................................82 7.2.1
R S A etM A PLE.................................................................... A...........................82
8 LE DES 8.1
L ’a lg o rith m e LUCIFER ..............................................................................
85
8.2 Le DES .................................................................................................................... 87 8.3 IDEA ......................................................................................................................... 90 8.4 M odes de c h iffre m e n t pa r b lo cs. M odes ECB, CBC, CFB, OFB ............. 91 8.5 F iches p r a tiq u e s ...................................................................................................93 8.5.1 Ou exclusif et addition modulo 2 ...................................................................... 93 8.5.2 Addition modulo 216........................................................................................... 94
9 IDENTIFICATION, AUTHENTIFICATION ET SIGNATURE 9.1
P r o to c o le ................................................................................................................ 95
9.2 Id e n tific a tio n ....................................................................................................... 97 9.3 A u th e n tific a tio n ............................
99
9.4 S ig n a tu r e .............................................................................................................. 100
Annexe : la cryptographie à travers l ’histoire .............................................................. 102 Bibliographie .....................................................................................................................105
REMERCIEMENTS Cet ouvrage a vu le jour sous forme de notes d ’un cours d ’arithmétique destiné à quelques étudiants en informatique de l’IUT de Paris (Université Paris-V/René Descartes). L’intérêt que les étudiants — notamment Daniel Gibert — ont manifesté pour la cryptographie m ’a beaucoup encouragé à leur offrir quelque chose qui soit plus complet et bien organisé. J’espère que ce livre répond à leur attente et leur sera utile dans leur carrière d ’informa ticiens. Mes amis et collègues mathématiciens Catherine Hubert et André Massoni m ’ont servi de cobayes ignorants de la chose cryptographique ou informatique : leurs réactions devant ces domaines qu’ils ne connaissaient pas m ’a grandement aidé à éclaircir certains passages. Un grand merci à André pour ses « critiques constructives ». Par leurs encouragement, les éditions Vuibert m’ont été d’un grand secours lors de la mise au point finale de ce livre. Les objections et remarques des lecteurs François Bayen et Benoît Richard m’ont été très utiles. Je les en remercie vivement. Je dédie ce livre à mon fils Benoît : qu’il en fasse bon usage quand ses compétences en mathématiques auront rejoint le niveau de ses compétences en informatique. L’auteur
L’éditeur remercie tout particulièrement le service des archives du Mémorial de Caen pour lui avoir gracieusement procuré la photo de la machine Enigma.
MODE D’EMPLOI De tous temps la cryptographie s’est occupée à assurer la confidentialité des communi cations. De plus, elle permet aujourd’hui de simuler - sur courrier électronique - des signatures, des preuves d’identité... L’objectif de cet ouvrage est de rendre accessible au niveau du bac scientifique les possibilités et les méthodes de la cryptographie moderne. Les fondements de la cryptographie sont : - La complexité algorithmique - La théorie de l’information de Shannon. Elle utilise largement - L’informatique - L’arithmétique. Son usage se heurte à des problèmes : - Légaux - Pratiques. La complexité algorithmique est introduite à l’aide d ’un exemple. La théorie de l’information de Shannon n’est pas du domaine de cet ouvrage. Le lecteur intéressé pourra lire [ 1 0 ]. L ’informatique, par la puissance de calcul qu’elle offre, est un outil essentiel de la cryptographie. De nombreux exemples sont développés avec le langage MAPLE. Par la richesse de ses bibliothèques, par la possibilité de travailler en précision illimitée, MAPLE, est un outil idéal pour explorer les idées exposées dans cet ouvrage. À l’inverse, ce livre peut être utilisé comme support pour une initiation à l’informatique en plus des exemples fournis, de nombreux exercices restent ouverts. L’arithmétique élémentaire est revenue au programme des terminales scientifiques des lycées à la rentrée de 1998. Parmi tous les résultats passionnants proposés par cette discipline, seuls ceux qui concernent directement la cryptographie ont été développés ici. De nombreux exercices corrigés sont proposés. La loi et les autorités étatiques tentent de limiter l’usage de la cryptographie. Le problème est abordé dans le chapitre consacré au DES. La mauvaise utilisation pratique des cartes bancaires est soulignée. À terme, le public devra apprendre à utiliser les méthodes cryptographiques, de la même façon qu’il a appris au fil des siècles à utiliser un trousseau de clés ou un chéquier. La cryptographie est aujourd’hui en plein développement : carte bancaire, Internet, monnaie électronique, etc. en font un usage intensif qui s’impose à tous. Un ouvrage d’initiation s’imposait. Pour approfondir, les deux ouvrages de référence sont [8 ] et [9], et leur lecture ne devrait plus présenter de grosses difficultés. Tel est en tout cas un des objectifs de ce livre.
LES NOMBRES PREMIERS 1.1 Nombres premiers Dans ce chapitre, on ne considère que l’ensemble N des entiers naturels. Définition : un nombre p est premier s’il admet exactement deux diviseurs, 1 et lui même. N.B. Cette définition exclut 1 de la liste des nombres premiers. Il est facile de vérifier de tête que 7, 13 ou 31 sont des nombres premiers. Quelle méthode adopter pour montrer que 4999 est premier ?
Premier algorithm e Essayer toutes les divisions de 4999 par D pour D allant de 2 à 4998. Si aucune division ne tombe juste, alors on peut affirmer que 4999 est premier.
Deuxième algorithm e
Le tableau ci-dessus nous indique que les quotients vont en décroissant. A partir de 71, les quotients sont plus petits que le diviseur. Aucun de ces quotients pour un diviseur supérieur à 71 ne peut être entier puisque cela signifierait que 4999 est divisible par ce quotient. Mais aucune division par un nombre inférieur à 71 n’a donné de quotient entier. D’où la simplification suivante : Essayer toutes les divisions de 4999 par D, pour D allant de 2 à -J4999 +1 On est passé de 4997 divisions à 70 divisions, ce qui est un gain appréciable de temps. Cela donne le programme suivant avec MAPLE : primel := proc(n) > local d,t; #t pour le temps > t:=time(); > for d from 2 while d*d
RETURN(true,time()-t); > end; (La variable t n’est utilisée ici que pour connaitre le temps de calcul de cet algorithme, et sera supprimée par la suite) On peut même encore améliorer la méthode en n ’essayant que les divisions par les nombres premiers inférieurs à -J4999 + 1 , à condition de disposer d’une liste des nombres premiers. Si vous avez une telle liste jusqu’à 1000, cela permet de tester rapidement si un nombre inférieur à 1 0 0 0 2 est premier.
12
Initiation à la cryptographie
1.2 Crible d’Eratosthène Comment créer une liste des nombres premiers ? La méthode proposée par Eratosthène connue sous le nom de « Crible d ’Eratosthène » donne une solution. Ecrire tous les nombres de 2 à 1000. 2 est premier, on le souligne et on raie tous les multiples de 2 . Le premier nombre non rayé est 3. Il est donc premier, on le souligne et on raie tous ses multiples. Etc. Arrivé à 32, qui est supérieur à la racine carrée de 1000, on a terminé : tous les nombres qui n’ont pas été rayés sont premiers. La méthode peut paraître efficace, mais elle devient inutilisable pour une table des nombres premiers jusqu’à 1 0 .0 0 0 . 0 0 0 par exemple./ On peut aussi utiliser le programme ci-dessous qui renvoie le résultat dans la variable globale 1 : > listpremI:=proc(n) #liste des nombres premiers inférieurs à n. > local i;global I; >!:=[]; # I est la liste vide > for i from 2 to n do if primel(i) then l:=|op(l),op(i)| fi od; # si i est premier, il est # ajouté à la liste I > end; Note importante : les procédures présentées dans cet ouvrage sont rédigées avec MAPLE, mais n 'utilisent pratiquement que les classiques boucles « fo r », « repeat » et « while ». La seule exception se trouve dans la manière particulière à MAPLE de manipuler les listes. La ligne 4 de la procédure ci-dessus doit donc être expliquée. I est une liste. op(l) est la suite des éléments de la liste l. Op(l),op(i) est la suite des éléments de la liste l, suite à laquelle on a ajouté l ’élément i. Le tout est remis entre crochets pour reconstituer une liste. Cependant on constate vite que les calculs, rapides au début, deviennent de plus en plus lents. Toutes ces méthodes deviennent inefficaces avec des nombres très grands. Estimons par exemple le nombre de divisions à effectuer pour tester 2 67 - 1 , qui vaut approximativement 1.47*1020, c’est-à-dire qui s’écrit avec 21 chiffres. Sa racine carrée vaut approximativement 1 .2 0 0 .0 0 0 .0 0 0 . 11 faudra donc un peu plus d ’un milliard de divisions, certaines à dix chiffres ! Bon courage ! (F. Cole a calculé en 1903 que267- 1 = 193707721*761838257287) Le package numtheoiy de MAPLE fournit la procédure isprime(n) qu’il convient de tester maintenant. Si elle semble être plus rapide pour des nombres de moins de 15 chiffres, ce n ’est plus le cas pour des nombres plus grands. En bref, toutes ces méthodes ne permettent pas de traiter les « grands » nombres premiers. Si on dispose aujourd’hui de tests rapides de primalité, ces tests ne fournissent pas de diviseurs des nombres qui ne sont pas premiers : la décomposition en facteurs premiers reste un problème difficile. Nous y reviendrons ( voir 4.2 et 4.3.2 ).
Les nombres premiers
13
1.3 Facteurs premiers Existe-t-il de grands nombres premiers ? La réponse a été fournie par Euclide. Théorème : Tout nombre N admet au moins un facteur premier (sauf N = 0 et N = 1 bien sûr). (c’est-à-dire tout nombre N est divisible par un nombre premier.) En effet, soit N est premier et il est divisible par lui-même, soit N n ’est pas premier et il admet un certain nombre de diviseurs. Appelons P le plus petit de ces diviseurs. P est premier car sinon P aurait un diviseur D, plus petit que P, et qui diviserait N. Théorème : L’ensemble des nombres premiers est infini. En effet, si on suppose que cet ensemble est fini, il est composé de n nombres p „ p2..., pn alors N = Pi*p2* -*pn + 1 est soit premier, mais il n ’est pas dans la liste finie citée puisque plus grand que chacun des pi; soit admet un diviseur premier qui ne peut être aucun des p, puisqu’il n ’est divisible par aucun des p,, p 2,...pn. Dans les deux cas, il est établi que la liste n ’est pas complète. On peut donc trouver des nombres premiers aussi grands que l’on veut. En 1983, le record du nombre premier le plus grand était : 2 86243 - 1, soit un nombre de trente mille chiffres. Le record a été battu depuis avec un nombre premier comportant un million de chiffres décimaux (voir [243]). Théorème : Tout entier peut se décomposer en produit de facteurs premiers, (sauf 0 et 1) (L’unicité de cette décomposition sera démontrée plus tard) En effet, si n est premier la décomposition est toute trouvée. Sinon n admet un facteur premier p,, et un quotient q, n = p,q, avec q, < n. On recommence avec q, jusqu’à obtenir un quotient premier. Conclusion : tout entier n peut s’écrire n = p,aI p2“2... prar Un autre problème qui s’est posé très tôt est celui de la répartition des nombres premiers. S’ils apparaissent régulièrement dans la suite des entiers, il sera facile de déterminer si N est premier ou pas. Hélas... Par exemple, on montre facilement que la suite des nombres premiers comporte des ‘trous’ de longueur aussi grande que l ’on veut : si on note El le produit des n premiers nombres premiers, alors tous les nombres f l + 2, El + 3, f i + 4,..., El + n sont composés.
14
Initiation à la cryptographie
1.4 Fiches pratiques 1.4.1
Notion de complexité algorithmique
Algorithme : ensemble de règles opératoires dont l ’application permet de résoudre un problème énoncé au moyen d ’un nombre fini d ’opérations, Grand Larousse. Le mot « fini » doit être ici analysé : quel serait l’intérêt d ’un algorithme nécessitant un temps infini avant de fournir la solution du problème posé ? Démontrer qu’un algorithme est « fini » n ’est cependant satisfaisant que pour le théoricien : le praticien devra estimer le temps (nombre d ’opérations) que demandera l ’algorithme proposé. Il peut arriver que l’algorithme soit fini, mais que le temps de calcul soit de quelques siècles, ce qui le rend impraticable. L ’estimation de ce temps est l ’objet de la théorie de la complexité. En général cette estimation n ’est pas simple. Le lecteur trouvera ci-dessous une approche expérimentale de la question. (Voir aussi l’exercice 1.5.5 sur le schéma de Hômer) La procédure prime l(n) donnée ci-dessus permet de connaître le temps de calcul pour vérifier que n est premier. Sur l’ordinateur de l’auteur, les essais on donné le tableau suivant : Nombre 13 1009 10007 100003 1000003 10000019 100000007 1000000007 10000000019 100000000003 1000000000039 100000000000031
Nombre de chiffres
Temps de calcul en millisecondes
2
0
4 5
0
6
55 164 494 1922 6536 22464 72116 225689 2397419
7 8
9 10 11 12
13 15
0
Quelle est la nature de la relation entre le nombre de chiffres de n et le temps de calcul ? Traçons le nuage de points correspondant à ces données, en prenant le logarithme népérien du temps de calcul (les trois premiers résultats on été exclus). Le package STATS va nous y aider. (Ce livre n ’ayant pas pour objet le calcul statistique, les deux calculs ci dessous ne seront pas détaillés) > with(stats): > Xdata:=[6,7,8,9,10,ll,12,13|: # nombrede chiffres > Ydata:= [55,165,549,2032,6536,22464,72116,225689]: > LYdata:=[4,5.1,6.2,7.6,8.7,10,11.2,12.3]: #Logarithme du temps de calcul > plots [display] ( > statp!ots[scatter2d](Xdata,LYdata), # scatter plot > view =[0..13,0..13], axes=FRAME);
Les nombres premiers
15
le graphique obtenu est le suivant :
2
4
B
B
10
12
14
On est frappé par l ’alignement des points. Un ajustement linéaire s’impose. > fit[leastsquare[[x,y],y=a*x+b]]( [Xdata,LYdata]); #CaIcul de la droite de régression du nuage on obtient : y = 1.192419355 x - 3.201129032 y est le logarithme néperien du temps de calcul en fonction du nombre de chiffres de n. On en déduit facilement la relation suivante entre le temps de calcul et le nombre de chiffres du nombre premier : T e m p s = e(!-2*nornbredechifrres~3-2) Cela signifie, en supposant que cette relation reste exacte pour d ’autre valeurs que celles testées, que pour vérifier par cette méthode qu'un nombre de 1 0 0 chiffres est premier, il faudrait environ 5*10so ms, soit environ 1,5* 1040 années, ce qui rend la méthode totalement inutilisable. Même en supposant que l'utilisateur se lance dans la course à l'ordinateur le plus puissant, équipé du dernier modèle de processeur, le temps de calcul restera rédhibitoire. Un tel algorithme pour lequel le temps de calcul s'exprime comme une fonction exponentielle de la taille des données est dit de complexité exponentielle. Par contre, si le temps de calcul s'exprime comme une fonction linéaire de la taille des données, l’algorithme sera dit de complexité linéaire. Et bien sûr de complexité en n2 si le temps de calcul est une fonction de degré 2 de la taille des données. (Exemple : l'élévation au carré d'un nombre est de complexité en n2, où n est le nombre de chiffres du nombre à élever au carré). E x e r c ic e :
Écrire une procédure qui calcule le carré de 1 0 0 0 nombres de 1 0 0 , 1 0 0 0 , 1 0 0 0 0 ... chiffres (utiliser la boucle do n*n od), et vérifier cette affirmation avec les méthodes exposées cidessus.
16
Initiation à la cryptographie
Un algorithme de complexité exponentielle est en pratique inutilisable. Des algorithmes de complexité linéaire, en n*Log(n) ou en n2 sont considérés comme "rapides". Pour terminer signalons que MAPLE fournit la procédure « isprime(n) » qui teste avec une rapidité surprenante si n est premier. La documentation indique que le test est « probabiliste ». Quelle est la signification de cette indication ? Pour y répondre, supposons que vous soyez candidat à un jeu télévisé et qu’on vous propose un nombre de 3 chiffres. Question : est-il premier ? Si vous répondez au hasard, vous avez une probabilité faible de répondre juste. Le test de divisibilité par 2 est immédiat. Si vous l’utilisez, votre probabilité de répondre juste va augmenter. Si vous avez le temps, vous appliquerez les tests de divisibilité par 3, puis 5, puis 11... en augmentant à chaque fois vos chances de réussite. Si votre nombre n’est divisible ni par 2 ni par 3 ni par 5, vous affirmerez très sérieusement que le nombre est premier. Bien sûr les tests utilisés par « isprime(n) » sont plus sophistiqués que ceux décrits cidessus (voir 2.3.3.3), et donnent de très bons résultats. On n ’obtient cependant pas une certitude mathématique de primalité. Certains auteurs parlent de nombres premiers industriels pour de tels nombres. Leur utilisation en cryptographie est amplement satisfaisante. Insistons : s’il est rapide de vérifier avec une probabilité très proche de 1 qu’un nombre de 1 0 0 chiffres est premier, ou mieux encore si on peut trouver rapidement des nombres premiers de 2 0 0 chiffres en disposant d ’une preuve mathématique que le nombre trouvé est bien premier (voir 4.3.2), il est par contre pratiquement impossible de trouver les diviseurs de n = p*q, avec p et q premiers, p et q s’écrivant avec 100 chiffres. Cette impossibilité pratique est au cœur du système RSA (voir (20]).
1.4.2
Liste des nombres premiers
La liste des nombres premiers (jusqu’à n) peut s’obtenir à la main par le crible d’Eratosthène. Pour pouvoir disposer de listes plus complètes, on pourra utiliser l’une ou l’autre des deux procédures qui suivent. La première utilise prim l(n), la deuxième crée la liste des nombres premiers et l’utilise pour minimiser le nombre de divisions à effectuer pour trouver le nombre premier suivant. Sur l ’ordinateur de l’auteur, la première a fourni la liste des nombres premiers inférieurs à 100 000 en 621 ms, la deuxième en 196 ms. Iistpriml:=proc(n) #liste des nombres premiers inférieurs à n. > local i;global I; >!:=[]; > for i from 2 to n do if prim el(i) then I:=[op(I),op(i)] 11 od; > RETURN(l): > end; listprim2:=proc(N) > local l,n,d,premier; >1:=[2]; > for n from 3 to N > do > premier:=true;
#liste des nombres premiers jusqu'à N.
17
Les nombres premiers
> for d in 1 while dA2 if premier then l:=[op(l),op(n)]: #ajout de n à la liste. > fi; > od; > RETURN(I); > end; La spirale d ’Ulam : l’idée est de représenter la suite des nombres premiers en spirale. On « enroule » la demi droite [0, + co[ autour de 0. L ’option coords = polar de la procédure plot nous permet de faire cela facilement : on fait correspondre à un nombre premier p le point du plan de coordonnées polaires (p, p / 1 0 0 ). Les points correspondant à des nombres premiers seront marqués d ’une croix. ulamO:=proc(n) > local i,points; >points:=[]; > for i from 2 to n do if isprime(i) then points:=[op(points), |i,i/100| ] fi od; > plot( [points, [t,t/l 00,t=0..n] ], > style=[point,line|,color=[red,blue|,coords=polar,axes=none,symboI=CROSS ); > end; La même spirale, sur laquelle ne sont tracés que les nombres premiers jusqu’à 100000 permet de deviner certaines régularités : Ulnm(lüü(X)), coordonnées polaires : (n.ti'l(X))
Llam( 100Ü0Ü), coordonnées polaires : (n,n/100)
Bien sûr d ’autres façons de construire la spirale sont possibles et permettent de trouver des idées intéressantes sur les nombres premiers. Signalons enfin un résultat très important sur le nombre de nombres premiers inférieurs à n, noté habituellement Il(n), et démontré par des méthodes analytiques qu’d n ’est pas question de développer ici : n (n ) « n/Log(n) pour n « grand ». Le lecteur est invité à vérifier expérimentalement ce résultat à l ’aide de son ordinateur.
1.4.3 Décomposition en facteurs premiers L’idée est qu’un nombre est soit premier, soit admet un diviseur premier. S’il admet un diviseur premier, on effectue la division et on recommence avec le quotient obtenu.
Initiation à la cryptographie
18
Ce qui donne la procédure suivante : facteurs_premiers:=proc(n) #liste des facteurs premiers de n > local l,d,N; > l:=[];N:=n; > while not(isprime(N)) do > for d from 2 while dA2 do if irem(N,d)=0 > then l:=[op(l),op(d)];# si d est un diviseur, l’ajouter à la liste des diviseurs > N:=iquo(N,d); # puis remplacer N par N/d > break; # et recommencer à la quatrième ligne > fi > od; > od; > l:=[op(l),op(N)l; # si N est premier, ne pas oublier de la mettre dans la liste > end; >facteurspremiers(555525); [3,3, 3, 5, S, 8231
1.5 Exercices E x e r c ic e s
pour pro gam m er
1)
Écrire une procédure vérifiant, pour les entiers inférieurs à 1 0 0 0 , 1 0 0 0 0 ..., la conjecture de Goldbach : « Tout entier pair supérieur à 3 peut s’écrire comme somme de deux nombres premiers ».
2)
De la même façon que dans 1), vérifier que tout entier supérieur à deux entiers composés.
3)
On note Fer(n) le nombre 2 + 1 > c’est-à-dire le nemc nombre de Fermât. Fermât pensait que Fer(n) est premier pour tout n. Utilisez l ’ordinateur pour montrer qu’il se trompait.
4)
On pose A = 101! + 1. Montrer que les 100 nombres consécutifs A + 1, A + 2 A + 100 ne sont pas premiers. Pouvez-vous trouver, à l ’aide de MAPLE, la plus petite série de 1 0 0 nombres consécutifs dont aucun n ’est premier ?
5)
Le schéma de Hômer. En calcul machine, comme pour un humain, l’addition est une opération rapide, négligeable par rapport à la multiplication. Combien faut-il de multiplications pour calculer P(a), où P(x) est un polynôme de degré n et a un nombre réel quelconque ? Transformons l’écriture de P(x) : P(x) = a nx "+ an_,x"-, + ... + a0 = (...(( anx + a,.,) x + a n_2) x + ...) + a0. Soit a quelconque. On pose : hn = an V i = a n_i + a*hn h „_2 = a „_2 + a*tv,
12
est la somme de
2
”
19
Les nombres premiers
h0 = a„+ a*hI Vérifier que P(a) = ho. Comparer le nombre de multiplications effectuées pour ce calcul avec le nombre de multiplications nécessaires pour le calcul direct de P(a). Programmer les deux algorithmes ; et les tester par la méthode proposée en 1.4.1. E x e r c ic e s
1)
m a t h é m a t iq u e s
Les nombres de Mersenne. On utilisera la relation x" - 1 = (x - l)*(x n_1 + x 11"2 +...+ x + 1), 1 n+1
"
+x + x !+x’+ - + x - r 5-
1- X a) Montrer que si a" - 1 est premier alors a = 2. b) Montrer que 2p*q - 1 est divisible par 2P - 1. En déduire que 2" - 1 ne peut être premier que si n est premier. c) Vérifier que 2" - 1 n ’est pas premier. 2)
La somme de deux entiers impairs consécutifs est composée.
3)
Si p est premier, avec p > 5, alors 24 divise p 2 - 1.
4)
Si p et q sont premiers strictement supérieurs à 7 alors 2903040 divise (p 2 - l ) ( q 2 - l ) ( p 6 - q 6).
5)
Est-il possible que N = x 2 - y 2 soit premier ?
S o l u t io n s :
1)
a) Si a ^ 2 alors an - 1 admet comme diviseur a - 1. b) 2 p*q - 1 = (2 p)q - 1 = ( 2 P —1 )*( (2 p)q l + .. + 2 P+ 1 ) c) A vérifier avec la calculette.
2)
La somme de deux entiers impairs est paire.
3)
p2- 1 = ( p + l ) ( p - 1) p premier supérieur à 5 est impair donc p —1 et p + 1 sont pairs, p - 1, p et p + 1 sont consécutifs. Donc l ’un des trois est un multiple de 3, etce n ’est pas p. De même l ’un des trois est un multiple de 4 car sinon p - 2 est un multiple de 4 et p = (p 2) + 2 = 4x + 2 est pair.
4)
Utiliser les mêmes idées. Il reste à vérifier que 5040 divise p 6 - q6.
5)
x 2 - y 2 = (x + y)(x - y) ne peut être premier que si (x + y) ou (x - y)est égal à 1.
ELEMENTS D’ARITHMETIQUE 2.1 Congruences dans Z 2.1.1
Introduction
Chacun sait que s’il est 3 heures, dans 2 heures il sera 5 heures. Normal puisque 3 + 2 = 5. De même, s’il est 11 heures, dans 2 heures il sera 1 heure. Normal puisque 1 1 + 2 = 1 . Comment arrive-t-on à ce résultat surprenant ? En fait le reste de la division de 13 par 12 est 1 : les calculs d ’heure se font modulo 12. On devrait en fait écrire 1 1 + 2 = 1 Mod(12) ou encore 11 +2 = 1 [ 1 2 ]. On peut bien sûr généraliser et faire des calculs modulo n, n étant un entier quelconque. Si avec les heures, on travaille avec douze nombres, de 0 à 11, dans les calculs modulo n, on travaille avec n nombres, de 0 à n - 1 . On trouvera ci-dessous les tables de multiplications modulo 12 et modulo 31. (Les lignes et colonnes 0 n ’ont pas été représentées pour des raisons évidentes). (Le lecteur est invité à dresser d’autres tables semblables sur son tableur préféré, en utilisant la fonction Mod : cela représente déjà un petit exercice intéressant de manipulation d’un tableur) L’observation des tables modulo 31 et 12 nous réservent quelques surprises. Par exemple on constate que : 4*3 = 0 [12] Un produit de deux nombres non nuls peut être nul. 8 = 4*2 = 4*5 [12] On ne peut donc pas simplifier le 4 dans l’égalité 4*2 = 4*5 Par contre, ces problèmes n’apparaissent pas dans la table de multiplication modulo 31. Dans chaque ligne et chaque colonne on trouve une et une seule fois chaque nombre de 1 à 30. En particulier on trouve une seule fois le nombre 1. Par exemple 14*20 = 1 [31] ce qui signifie que l’inverse, pour la multiplication modulo 31, 1
de 14 est 20, de la même façon que l’inverse de 5 pour la multiplication ordinnaire est — 1 ! puisque 5 * ~ = 1. Ce résultat peut s’écrire Inv( 14) = 20 [31] ou encore — = 20 [31 ] ou 5 14 encore 14"1= 20 [31] (le langage MAPLE utilise la notation 1/14 mod(31)). Finalement, tout nombre, sauf 0, a un inverse modulo 31, et cet inverse peut être trouvé facilement à l’aide du tableau. Par contre seuls 1, 7 et 11 ont un inverse modulo 12. On arrive ainsi à résoudre l’équation 14x = 5 [31] : Inv(14)*14 x = Inv(14)*5 [31] x = 20*5 [31] x=7 [31] Par contre il n ’est pas question de résoudre 9 x = 10 [12] puisque 9 n’a pas d’inverse modulo 1 2 . Les chapitres suivants nous permettrons de clarifier tous ces problèmes. En chemin il faudra aborder les notions algébriques de groupes, anneaux et corps, ce qui obligera à une révision complète des mécanismes de calcul appris à l’école.
Initiation à la cryptographie
22
La théorie des congruences a par ailleurs d’autres applications. Nous verrons comment on peut l’utiliser en cryptographie, c’est-à-dire l’art d ’envoyer des messages secrets. E x e r c ic e
La table de multiplication modulo 13 a-t-elle les mêmes propriétés que la table de multiplication modulo 31 ? Quelles autres tables vous donnent des résultats similaires ? Table de multiplication modulo 13 X 1 2 3 4 5 6 7 8 9 10 11 12
2
1 1 2 3 4 5 6 7 8 9 10 11 12
4
3 2 4 6 8 10 12 1 3 5 7 9 11
3 6 9 12 2 5 8 11 1 4 7 10
6
5 4 8 12 3 7 11 2 6 10 1 5 9
7
8
9
5 10 2 7 12 4 9 1 6 11 3 8
6 12 5 11 4 10 3 9 2 8 1 7
7 1 8 2 9 3 10 4 11 5 12 6
8 3 11 6 1 9 4 12 7 2 10 5
9 5 1 10 6 2 11 7 3 12 8 4
10 10 7 4 1 11 8 5 2 12 9 6 3
11 11 9 7 5 3 1 12 10 8 6 4 2
Table de multiplication modulo 12 *
1
2
4 4
5 5
11
8
9 9
10
6
7 7
8
2
3 3
6
1
10
11
2
2
4
6
8
10
0
2
4
6
8
10
3 4 5
3 4 5
6
9
0
3
6
3
6
9
0
4
8
0
9 4
0
8
8
0
4
8
10
3
8
1
6
11
4
9
2
7
6
6
0
6
0
6
0
6
0
6
0
6
7
7
2
9
4
11
6
1
8
3
10
8
8
4
0
8
0
8
4
0
8
9
9
6
3
0
4 9
6
3
0
9
6
5 4 3
1
10
10
8
6
4
2
0
10
8
6
4
2
11
11
10
9
8
7
6
5
4
3
2
1
12 12 11 10 9 8 7 6 5 4 3 2 1
La table de multiplication modulo 31 nous sera utile dans de nombreux exercices *
1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
2 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29
3 3 6 9 12 15 18 21 24 27 30 2 5 8 11 14 17 20 23 26 29
1 4 7 10 13 16 19 22 25 28
4 4 8 12 16 20 24 28
1 5 9 13 17 21 25 29 2 6 10 14 18 22 26 30 3 7 11 15 19 23 27
5 5 10 15 20 25 30 4 9 14 19 24 29 3 8 13 18 23 28 2 7 12 17 22 27
1 6 11 16 21 26
6 6 12 18 24 30 5 11 17 23 29 4 10 16 22 28 3 9 15 21 27 2 8 14 20 26
1 7 13 19 25
7 7 14 21 28 4 11 18 25
1 8 15 22 29 5 12 19 26 2 9 16 23 30 6 13 20 27 3 10 17 24
8 8 16 24
1 9 17 25 2 10 18 26 3 11 19 27 4 12 20 28 5 13 21 29 6 14 22 30 7 15 23
9 9 18 27 5 14 23
1 10 19 28 6 15 24 2 11 20 29 7 16 25 3 12 21 30 8 17 26 4 13 22
10 10 20 30 9 19 29 8 18 28 7 17 27 6 16 26 5 15 25 4 14 24 3 13 23 2 12 22
1 11 21
11 11 22 2 13 24 4 15 26 6 17 28 8 19 30 10 21
1 12 23 3 14 25 5 16 27 7 18 29 9 20
12 12 24 5 17 29 10 22 3 15 27 8 20
13 13 26 8 21 3 16 29 11 24 6 19
1
14 27 9 22 4 17 30 12 25 7 20 2 15 28 10 23 5 18
13 25 6 18 30 11 23 4 16 28 9 21 2 14 26 7 19
1
14 14 28 11 25 8 22 5 19 2 16 30 13 27 10 24 7 21 4 18
1 15 29 12 26 9 23 6 20 3 17
15 15 30 14 29 13 28 12 27 11 26 10 25 9 24 8 23 7 22 6 21 5 20 4 19 3 18 2 17
1 16
16 16
1 17 2 18 3 19 4 20 5 21 6 22 7 23 8 24 9 25 10 26 11 27 12 28 13 29 14 30 15
17 17 3 20 6 23 9 26 12 29 15
1 18 4 21 7 24 10 27 13 30 16 2 19 5 22 8 25 11 28 14
18 18 5 23 10 28 15 2 20 7 25 12 30 17 4 22 9 27 14
19 19 7 26 14 2 21 9 28 16 4 23 11 30 18 6 25 13
1
20 8 27 15 3 22 10 29 17 5 24 12
19 6 24 11 29 16 3 21 8 26 13
1
20 20 9 29 18 7 27 16 5 25 14 3 23 12
1 21 10 30 19 8 28 17 6 26 15 4 24 13 2 22 11
21 21 11
1 22 12 2 23 13 3 24 14 4 25 15 5 26 16 6 27 17 7 28 18 8 29 19 9 30 20 10
22 22 13 4 26 17 8 30 21 12 3 25 16 7 29 20 11 2 24 15 6 28 19 10
1 23 14 5 27 18 9
23 23 15 7 30 22 14 6 29 21 13 5 28 20 12 4 27 19 11 3 26 18 10 2 25 17 9 1 24 16 8
24 24 17 10 3 27 20 13 6 30 23 16 9 2 26 19 12 5 29 22 15 8
1 25 18 11 4 28 21 14 7
25 25 19 13 7
1
26 26 21 16 11 6
26 20 14 8 2 27 21 15 9 3 28 22 16 10 4 29 23 17 11 5 30 24 18 12 6
27 22 17 12 7 2 28 23 18 13 8 3 29 24 19 14 9 4 30 25 20 15 10 5
1
27 27 23 19 15 11 7 3 30 26 22 18 14 10 6 2 29 25 21 17 13 9 5
1 28 24 20 16 12 8 4
28 28 25 22 19 16 13 10 7 4
1 29 26 23 20 17 14 11 8 5 2 30 27 24 21 18 15 12 9 6 3
29 29 27 25 23 21 19 17 15 13 11 9 7 5 3
1 30 28 26 24 22 20 18 16 14 12 10 8 6 4 2
30 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2
1
Initiation à la cryptographie
24
2.1.2
Congruence
Depuis l’école primaire, chacun sait faire un division : par exemple 7 divisé par 3. Il y va 2 fois et il reste 1 . Une écriture plus formalisée de ce calcul est : 7 = 3*2 + 1. 2 est le quotient, et 1 est le reste de la division de 7 par 3. Cette division est appelée la division Euclidienne, et une structure algébrique dans laquelle une telle division est possible est appelée Anneau Euclidien. Théorème :
TL est un anneau Euclidien, c’est-à-dire que pour a et b entiers donnés, il existe q et r uniques tels que a = bq + r avec 0 < r < |b| E x e r c ic e s :
Effectuer la division Euclidienne avec a = 7 et b = -3 , ou a = - 7 et b = 3, ou a = -7 et b = -3 Trouver sur votre calculatrice, ou tout autre instrument de calcul, les fonctions permettant d’effectuer des divisions euclidiennes. Définition 1 : a et b sont congrus modulo n s'ils ont même reste par la division par n. Par exemple 10 et 1 sont congrus modulo 9. On écrit 10=1 [9] ou 10 = 1 mod (9). On a de même - 8 = 1 [9]. On a vite fait de remarquer que tous les nombres congrus à 1 mod(9) sont de la forme : multiple de 9 + 1. Ce qui fait que deux nombres sont congrus modulo 9 si leur différence est un multiple de 9. D ’où Définition 2 : a et b sont congrus modulo n ou encore
si b - a est un multiple de n si b - a = k*n
Le choix dans les exemples ci-dessus de la congruence modulo 9 n’est pas fortuit : pourquoi, dans la preuve par 9. se permet-on de remplacer 5734 par 5 + 7 + 3 + 4 = 1 9 puis par 1 ? La première réponse est que 5734 = 1 [9] comme on peut le vérifier en effectuant la division. Il reste cependant à expliquer cette règle d’addition des chiffres de 5734. Or 5734 = 5*1000 + 7*100 + 3*30 + 4 Mais 1000 = 1 [9], 100 = 1 [9] et 10 = 1[9].On peut donc écrire 5734 = 5*1000 +7*100 +3*30 + 4 = 5*1 +7*1 +3*1 +4 [9] = 19 [9] =1 [9] Voilà donc l’explication de cette règle que tout écolier sérieux se doit de connaître. Une autre application moins connue est la preuve par onze. Après avoir remarqué que 10 = -1 [11], 100 = 1 [11], 1000 = -1 [11] etc., on remplacera 5734 par -5 + 7 - 3 + 4 = 3 pour effectuer la preuve par 11. D’autre preuves peuvent être construites, mais elles risquent d ’être moins faciles à mettre en œuvre. Revenons sur le calcul ci-dessus. On a constaté que 1000 = 1 [9], et on en a déduit que 5*1000 = 5*1 [9]. Cela mérite d ’être prouvé. De même, 1 = 1 [9] et 9 = 0 [9] donc 19= 1 + 0 [9]- Ces calculs sont justifiés par le Théorème :
25
Éléments d ’arithmétique
Théorème : Si x = x’ [n] et y = y’ [n] Alors
x + y = x’+y’ [n] et x*y = x’*y’ [n]
Démonstration : Si x = x ’ [n] et y = y’ [n] , c’est-à-dire x - x ’ = k*n et y y ’ = k’*n (x - x ’ et y - y ’ multiples de n) alors (x - x ’) + (y - y ’) = (x + y) - (x’ + y ’) = k*n + k ’*n = (k + k’)*n. Pour la multiplication, la démonstration est similaire après avoir écrit : x*y —x’*y’ = (x - x’)*y + (y - y’)*x’ Pour terminer signalons la fonction Mod de nombreux logiciel : Mod(25,9) = 7. Avec MAPLE : irem(25,9) = 7
2.1.3
Ensemble quotient Z/nZ
On traitera toujours l’exemple de la congruence modulo 9. Classons les entiers selon la règle de congruence : ...—9 = 0 = 9 = 18 = 27... . . . - 8 = 1 = 10= 19 = 28... . . . 7 = 2 = 11 = 2 0 = 28... ...-2 = 7 = 16 = 25 =34... . . . - 1 = 8 = 17 = 26 = 35... et c’est tout. On a construit 9 classes, la classe de 0 notée parfois 0 , la classe de 1 notée 1 ,... la classe de 8 notée 8 . L’ensemble de ces 9 classes est noté Z/9Z, ensemble quotient de Z par la congruence modulo 9. Z/9Z peut être de manière évidente muni d ’une addition et d ’une multiplication :
3 * 4 = 12 =3 puisque la classe de 12 est 3 . On construit de même l’addition. (Notons tout de suite que la dactylographie du nombre surmonté d ’un point étant pénible sur un traitement de texte ordinaire, on s’empressera de ne plus l’utiliser. On pourra écrire au choix 3 * 4 =12 = 3 ou 3*4 = 1 2 = 3 [9] ou 3*4 = 1 2 = 3 dans Z/9Z. Il est important de se familiariser avec ces abus de notations !) Le début de ce livre donne quelques tables de multiplication modulo n. Le lecteur est invité à remplir les tables d ’addition et de multiplication modulo 9. *
0 0 1 2 3 4 5 6 7 8
1
2
3
4
5
6
7
8
+ 0 0 1 2 3 4 5 6 7 8
1
2
3
4
5
6
7
8
Initiation à la cryptographie
26
2.1.4 Structure algébrique de Z/nZ On montre, et nous y reviendrons, que l’addition conserve toutes les propriétés habituelles de l’addition de nombres réels : commutativité, associativité, élément neutre 0 , et existence d ’un opposé. Par exemple l’opposé de 3, noté Opp(3) ou plus simplement -3 vaut 6 (-3 = 6 dans Z/9Z). La multiplication est commutative, associative, possède un élément neutre 1, et est distributive par rapport à l ’addition (a*(b + c) = a*b + a*c)). On dit que Z/9Z est un anneau commutatif unitaire. Par contre la multiplication nous réserve quelques surprises : si 2 a un inverse, inv(2) = 5 comme on le voit immédiatement sur le tableau puisque 2*5 = 1 dans Z/9Z, par contre 0, 3, 6 n ’ont pas d ’inverse (il n ’y a pas de 1 dans les lignes ou colonnes 3 ou 6 ). (la notation inv(2) mod 9 n ’est pas jolie ; 1/2 mod(9) est celle utilisée par MAPLE ; on pourra préférer 2~1 mod(9)) Mieux : 3*6 = 0 et pourtant 3 et 6 sont différents de 0. Z/9Z possède des diviseurs de 0. Enfin notons que la simplification habituelle : Si ka = kb alors a = b est fausse ici puisque 3*2 = 3*8 mais 2 différent de 8 . L ’examen attentif de la table de multiplication de Z/31Z montre que ces problèmes ne se posent pas : Z/31Z est un corps. Ce résultat important est dû au fait que 31 est un nombre premier, et sera démontré plus tard. Théorème : Z/nZ est un corps ssi n est premier.
2.1.5 Groupe, anneau et corps Il est temps de donner des définitions précises de ces trois termes. 1) Un groupe est un ensemble G sur lequel est défini une addition + (ou une multi plication*) vérifiant les propriétés suivantes : L ’addition est commutative : Vx e G, Vy e G x + y = y + x (Cette propriété est facultative) L ’addition est associative : Vx e G, Vy e G, Vz e G (x + y) + z = x + (y + z) Il existe un élément neutre 0 vérifiant : V x e G x +0=0+x=x Tout élément x possède un opposé noté Opp(x) vérifiant x + Opp(x) = 0 Il s’agit ni plus ni moins des propriétés habituelles de l ’addition (sauf si le groupe n ’est pas commutatif). 2)
Un anneau est un ensemble A sur lequel sont définies deux opérations + et * vérifiant: A muni de son addition est un groupe commutatif. La multiplication est associative : Vx e A, Vy e A, Vz e A x*(y*z) = (x*y)*z La multiplication est distributive par rapport à l ’addition : Vx e A, Vy e A, Vz e A x*(y + z) = x*y + x*z Si la multiplication est commutative, l’anneau est dit commutatif. Si la multiplication possède un élément neutre noté 1, l’anneau est dit unitaire. Noter que dans un anneau un élément x n ’a pas nécessairement d ’inverse x"1.
3)
Un corps est un anneau unitaire dans lequel tout élément a un inverse.
Éléments d ’arithmétique
27
Sur un corps, toutes les opérations habituelles (sauf peut-être la commutativité de la multiplication) sont valables. Remarquer cependant que (a + b ) 2 = a2 + ab + ba + b 2 peut être différent de a2 + 2 ab + b 2 si le corps n ’est pas commutatif. E x e r c ic e s
1)
Résoudre dans Z/9Z les équations 5x + 7 = 0, et 3x + 2 = 0.
2)
Même question dans Z/31Z. Pour traiter ces exercices, on détaillera tous les mécanismes du calcul.
3)
Chercher ce qui caractérise les éléments inversibles de Z/nZ. La démonstration de ce résultat important sera l’objet d ’un chapitre spécial.
S o l u t io n s .
1)
5x + 7 = 0 a pour solution x = Inv(5)*2 = 2*2 = 4. 3x + 2 = 0 n ’a pas de solution.
2)
5x + 7 = 0 a pour solution x = Inv(5)*24 = 25*24 = 1 1 . 3 x + 2 = 0 a pour solution x = Inv(3)*29 = 21*29 = 20.
3)
x est inversible dans Z/nZ ssi x et n n ’ont pas de facteurs premiers communs.
2.1.6 Relation d’équivalence Définition : Une relation R définie sur un ensemble E est une relation d ’équivalence si elle est réflexive, symétrique et transitive. La relation d ’équivalence est souvent notée s comme pour la congruence, plutôt que R. Symétrique signifie que si a est en relation avec b (a R b), alors b est en relation avec a (b R a). Plus rigoureusement, symétrique signifie : a R b => b R a Réflexive signifie : pour tout a, a R a Transitive signifie : a/?betb7?c=>a7?c Il est immédiat de vérifier que la congruence modulo n est une relation d ’équivalence. Une relation d ’équivalence réalise une partition de l’ensemble E : prenons un élément a et tous les éléments de E qui sont en relation avec a. On obtient un ensemble noté a dans lequel tous les éléments sont en relation les uns avec les autres. C ’est la classe de a. Recommençons avec un élément b n ’appartenant pas à a . On obtient la classe de b, b . On continue jusqu’à épuisement de E L ’ensemble des classes ainsi obtenu est appelé l’ensemble quotient de E par R, et est noté EJR. On définit alors l ’application surjective (p qui à x associe la classe de x, x . Par exemple cp(25) = 7 pour la congruence modulo 9. L’intérêt de la fonction cp est d ’être parfois un homomorphisme, c ’est-à-dire d ’être compatible avec les opérations algébriques. Par exemple, pour la congruence modulo n, on a (p(a*b) =
Initiation à la cryptographie
28
Cela explique le principe de la preuve par 9 : soit à multiplier a = 435 par b = 723. On obtient a*b = 312336, opération compliquée que l’on veut vérifier. D ’après tp(a*b) = (p(a)*tp(b), on doit avoir 0 = 3*3 [9], ce qui est bien le cas. N.B. tp n ’est un homomorphisme que si la relation d ’équivalence est compatible avec les opérations définies sur E. C’est-à-dire que, pour une addition par exemple, x = x ’ et y = y ’ => x + y = x ’+ y ’. Dans Z, la congruence modulo n est une relationd’équivalence, et l’ensemble quotient de Z par cette relation d’équivalence est Z/nZ.
2.1.7 Fiches pratiques 2.1.7.1 Système cryptographique de César Jules César utilisait le système suivant pour communiquer secrètement : chaque lettre de l’alphabet était décalée de 3 unités, a donnait d, b donnait e, ..., x donnait a, y donnait b, z donnait c. Ajoutons à l’alphabet quelques caractères de ponctuation : ‘espace’, virgule, point, ‘?‘ et pour disposer d ’un alphabet de 31 caractères (31 est magique puisqu’il est premier). Avec ces 31 caractères a devient d z devient ‘.’ ‘Espace’ devient ‘?’ devient1:’ ‘.’ devient a ‘?’ devient b On reconnait là une congruence modulo 31 : on commence par remplacer a par 1, bpar 2 ... z par 26 ... ‘espace’ par 27, V par 28, ‘.’ par 29, ‘?’ par 30 et par 0. Cette convention permet alors d’effectuer des calculs sur le texte. Le système de César consiste simplement à effectuer une addition de 3 modulo 26 : a est remplacé par 1, on ajoute 3 pour obtenir 4, et 4 correspond à d. De même ‘.’ estremplacé par 29, 29 + 3 = 1 [31] et 1 correspond à la lettre a. Ce principe est programmé dans la procédure ci-dessous : > cesar:=proc(st) > local tablel,table2,11,ii,nb,secret; #ne pas utiliser la variable i qui serait confondue avec la lettre i
> > > >
secret:=” ; for ii from 1 to 11 do nb:=tablel[substring(st,ii)]; nb:=nb+3 mod 31;
# la lettre est transformée en nombre #Décalage de 3 unités. #Mettre ici la transformation de votre choix
Éléments d ’arithmétique
29
> secret:=cat(secret,table2|nb|); > od; > RETURN(secret); > end: Exemple : > cesar('bonjour monsieur le président, comment allez vous?'); erqmrxu?prqvlhxu?oh?suhvlghqw:?frpphqw?dooh.?yrxvb Explication : avec tablel, la procédure convertitchaque lettre en nombre ; ce nombre est augmenté de 3 modulo 31 à la ligne 13. Table2restitue lalettre correspondant au résultat. Pour déchiffrer le message il suffit de remplacer la ligne 13 par : >nb:=nb-3 mod 31; La ligne 13 (> nb: = nb + 3 mod 31) peut être modifiée à la convenance du lecteur (sous réserve que la fonction obtenue réalise une bijection de Z/31Z, sinon le déchiffrage du message risque d’être compromis), par exemple > nb: = 15*nb + 13. Avec cette nouvelle règle de calcul on obtient par exemple pour les lettres a et b : a —> 1 —> 15*1 + 13 = 2 8 [ 3 1 ] - > 7 b -> 2 -> 15*2+ 13 = 12 [31 ] -> 1 Pour déchiffrer un message obtenu avec cette règle, il conviendra de remplacer la ligne 13 par : > 29*(nb - 13); #Expliquer cette ligne après avoir lu 2.3. E x e r c ic e s
1)
Sauriez vous déchiffrer le message suivant (obtenu avec la procédure cesar()) : 'xqh?urfkh?hvw?glwh?shuphdeoh?oruvtx?hooh?flufxohu?gh?o?hdx?gdqv?vhv ?sruhv?rx?vhv?ilvvxuhv'
2)
Plus difficile : l’auteur a utilisé un autre nombre que 3 dans la procédure cesar(), et obtenu : '.vm?rz:fzv:muvm.mrf?aebyvdvmuvbv:um:a:mevg.v?v:fmuvm.rm?reevmuvm.r mb.r:vfvm?rzemrzeezmuvmermuzefr:tvmrgmea.vz.' Pour résoudre l’exercice 2, vous avez deux possibilités : soit repérer les lettres les plus fréquentes, qui correspondent aux lettres les plus fréquentes de la langue française (e est la lettre la plus fréquente) soit tenter une attaque exhaustive, c’est-à-dire essayer toutes les clés, ce qui n’est pas très long puisqu’il n ’y en a que 30. (solution : la clé utilisée est 17). Ce deuxième exemple a l’intérêt d ’introduire les notions de clé d ’un système cryptographique, et celle d ’attaque contre un système.
3)
De combien de clés dispose-t-on si la ligne 13 est remplacée par : >nb:=x*nb+y; # l x*nb + y est-elle une bijection de Z/31Z sur Z/31Z. Nous y reviendrons plus tard.)
2.1.7.2 Système cryptographique de Vigénère Le système, bien qu’il semble différent au premier abord du système de César, n ’en est en fait qu’une légère complication. La clé consiste en une série de d lettres écrites sous le texte. On additionne les deux textes (modulo 31).
Initiation à la cryptographie
30
Exemple :
Message =j ohni s good Clé K = abcabcabcab Texte crypté C = kqko.lt.jpqg
Cela revient, avec la clé abc de l’exemple, à appliquer le système de César avec un décalage de 1 pour les lettres de rang multiple de 3, un décalage de 2 pour les lettres de rang multiple de 3 plus 1, et un décalage de 3 pour les lettres de rang multiple de 3 plus 2. (Attention : le rang est compté à partir de 0. j a pour rang 0, 0 a pour rang 1...). L’avantage est cependant que le nombre de clés est en principe infini, et qu’un espion éventuel ne connait pas la longueur de la clé. Exercice : modifier la procédure cesar() en procédure vigenere(stcle). Il suffit de remplacer la ligne 13 par : > jj:=(ii-l) mod length(cle)+l; > nb:=(nb+tablel|substring(cle,jj)l) mod 31; N.B. : si la clé est longue, et générée de manière pratiquement aléatoire, on obtient presque le « masque jetable » qui sera décrit plus loin. La machine ENIGMA qui sera décrite plus loin fonctionnait sur ce schéma, et une clé de longueur 26", où n est le nombre de rotors utilisés.
2.1.7.3 Perm utations alphabétiques Les deux systèmes qui précèdent sont des systèmes mono ou poly-alphabétiques, dans lesquels une lettre est remplacée par une autre en utilisant une règle de calcul simple modulo 31. Ils sont classés parmi les systèmes à substitution. On peut les généraliser en utilisant comme clé une permutation quelconque des 26 lettres de l’alphabet. Cette idée est exposée ici car sa programmation est très semblable à celles qui précèdent. Une permutation est la donnée d’un tableau : a
b
c
V
h
n e j
d e
f g h i d k P t
j a
k
i
m n
0
q w u y f
p q r s t u s g 1 m b c
V
w
X
y z
X
z
r
i
o
Chaque lettre doit apparaître une et une seule fois dans la ligne du bas. Il s’agit donc d ’une bijection de l’ensemble des lettres de l’alphabet dans lui même. Ce tableau est la clé de cryptage. Pour crypter on remplacechaque lettre par son correspondant dans le tableau. Malgré les 26! clés possibles, ce cryptosystème est totalement inefficace dans la mesure où les lettres les plus fréquentes seront vite repérées. Exercice : écrire une procédure « permutation(st) » qui crypte lemessage ‘st’ selon le tableau ci-dessus. >cle:=table(['a'='v','b'='h','c'='n','d'='e','e'='j',T='d','g'='k','h'=' p','i'='t','j'='a',' k '='q','r='w ','m '='u','n'='y','o'='r,'p'='s','q'='g','r'='r,'s'='m ','t'='b','u'='c','v'=' x','w '='z','x'='r','y'='i','z'='o',' '=' ']): > permute:=proc(st,cle) > local 11,secret,ii; > ll:=length(st);secret:="; > if 11=0 then RETURN fi; > for ii from 1 to 11 do
Éléments d'arithmétique
31
> secret:=cat(secret,cle|substring(st,ii)l): # substring(st,ii) extrait la lettre de rang ii de st # cle[ ] remplace le caractère trouvé pour son correspondant dans la table # cat( ) recolle la lettre obtenue au texte déjà chiffré > od; > RETURN(secret); > end: > permutef bonjour madame',cle); hfyafcl uvevuj E x e r c ic e :
L’auteur a modifié la clé de cryptage pour envoyer le message suivant. Sauriez vous le décrypter ? Indication : il est fréquent qu’un message soit signé par celui qui l’a écrit. 'fdweds bljz q oq tqfd edpqkw pqgkw tkoodz ejndfgfdg' Remarquer que les espaces n’étant pas modifiés, des indications précieuses sont fournies !
2.2 Divisibilité dans Z Z est euclidien Rappelons que cela signifie que pour tout a et b de Z, il existe q et r tels que a = bq + r, avec 0 < r < |b| Par définition b divise a si a = bq, c’est-à-dire si le reste de la division est nul. Il est bien sûr possible de développer la théorie de la divisibilité dans Z à partir de ces données élémentaires, mais la théorie des idéaux permet des résultats plus faciles, et plus faciles à généraliser.
2.2.1
Idéal des multiples de a : (a)
(a) = {Multiples de a} = {n*a, neZ} = aZ Exemple : L ’ensemble de nombres pairs est noté de manière évidente 2Z ou encore (2) (1) = Z Remarques : • (a) est un sous groupe de (Z,+) • Vx g Z ax g (a) On dit que (a) est un idéal de Z Définition : I est un idéal de Panneau A ssi I est un sous groupe de A pour + Vx g A , Vi g I x*i g I Théorème : Tout idéal I de Z est principal, c’est-à-dire de la forme I = (a) = ensemble des multiples de a.
Initiation à la cryptographie
32
Démonstration : Soit b g I, et a le plus petit élément strictement positif de I. On a : b = aq + r avec 0 < r < |a|. Alors b - aq g I, ce qui implique que r g I. Mais comme r < |a|, on en déduit que r = 0 et b est un multiple de a.
2.2.2 Divisibilité et idéaux de Z On constate immédiatement que b divise a <=> b|a <=> a = bq <=> (a) c (b) Remarques : * (a) = (b) <=> b = a*u où u est égal à 1 ou à - 1 . * L’ensemble des idéaux de Z s’organise selon le schéma suivant relativement à l’inclusion (les traits tenant lieu de symbole d'inclusion) :
ETC.
Etc.
On constate que si on enlève l’idéal Z = (1), les idéaux maximaux correspondent aux idéaux des multiples d ’un nombre premier. D ’où la définition : I est maximal (pour l’inclusion) ou premier si I est différent de A et I n’est contenu dans aucun idéal autre que A tout entier. Théorème : p est premier <=> (p) est maximal. Démonstration : 1) Si p est premier, alors p n’admet aucun autre diviseur que 1, -1 , p et -p. Donc (p) est maximal. 2) Si (p) est maximal alors (p) est différent de Z (donc p différent de 1 ou de -1 ), et p ne peut avoir de diviseur propre q car sinon on aurait (p) c (q).
2.2.3 PPCM Comme son nom l’indique, le PPCM de a et de b, noté PPCM(a,b) est le Plus Petit Commun Multiple de a et de b. Il importe de noter que cette définition n ’est pas claire dans Z : par exemple les multiples communs de 4 et de 6 so n t... -24, —12, 0, 12, 24,...Quel est le plus petit commun multiple ? Le problème est résolu avec la théorie des idéaux.
Éléments d ’arithmétique
33
(a) n (b) = {Multiples communs de a et de b}, et on vérifie aisément que l’on a obtenu un idéal de Z. Comme Z est principal, il existe M tel que (a) n (b) = (M). Dans Z, si on impose à M d ’être strictement positif, alors M = PPCM(a,b). En effet il est clair que M est un multiple commun de a et de b. De plus c’est le plus petit car si 0 < M ’ < M et M’ est un commun multiple de a et de b on aurait M’ g (M) et donc M’ = M*n.
2.2.4 PGCD PGCD(a,b) est le Plus Grand Commun Diviseur de a et de b. On se retrouve avec la même difficulté que pour le PPCM. À l’aide de la théorie des idéaux on aborde le problème de la façon suivante : I = (a,b) est l’idéal engendré par a et b. L ’idéal engendré par a et b est par définition le plus petit idéal contenant a et b. Il doit contenir tous les multiples x*a de a, tous les multiples y*b de b, ainsi que les sommes x*a + y*b. II reste à vérifier, ce qui est immédiat, que {x*a + y*b, x g Z et y g Z} est un idéal et est donc l’idéal engendré par a et b. Comme Z est principal, on a (a,b) = (D). Si on impose à D d ’être positif , alors D = PGCD(a,b). Démonstration : Comme a g (D) puisque a = l*a + 0*b, on a donc D|a. De même D|b : D est un diviseur commun de a et de b. De plus tout diviseur d commun à a et à b divise D : (D) =: {xa -t- yb} donc 3u,v tels que D = ua + vb si d|a et d|b alors a = q,d et b = q2d et D = uq,d + vq2d = (uq, + vq2)d d’où d|D Définition : a et b sont premiers entre eux s’ils n’ont pour diviseurs communs que 1 et -1. Théorème : Les propriétés suivantes sont équivalentes : 1) a et b sont premiers entre eux. 2) PGCD(a,b) = 1 3) 3 u,v tels que au + bv = 1 (Relation de Bezout) 4) Vz g Z , 3x,y g Z tels que ax + by = z Démonstration : Si PGCD(a,b) = 1 alors (a,b) = (1) et 3u,v tels que au + bv = 1. Si 3u,v tels que au + bv = 1 alors 1 g (a,b) et (1) c (a,b). Mais (1) = Z tout entier. Donc (a,b) = ( 1 ). Pour montrer que 4) => 3); il suffit de poser z = 1. Le reste est clair. EXERCICES
1)
L’équation 5x + 2y = 2731 a-t-elle au moins une solution ? Comme 5 et 2 sont premiers entre eux, l’équation a au moins une solution d ’après 4 ) 5 et 2 n ’étant pas trop compliqués, par tâtonnement on en trouvera facilement une.
Initiation à la cryptographie
34
Cela devient plus difficile avec l’équation 4999x + 3771y = 1. L’algorithme d’Euclide nous fournira une solution. Il restera cependant le problème de trouver toutes les solutions de ce type d’équation. 2)
L’équation 6 x + 4y = 5 a-t-elle une solution ? Si l’équation avait une solution, on aurait 5 e (6,4). Or (6,4) = (2), et 5 n’est pas un multiple de 2 . On vient de démontrer :
Théorème L’équation ax + bu = c a une solution ssi c est un multiple de PGCD(a,b). Nous aurons souvent besoin du résultat suivant : p prem ier et p non prem ier avec a => p|a En effet pour p premier et a quelconque, on a PGCD(p,a) = 1 ou p. Si ce n ’est pas 1, ce PGCD est p et p|a.
Propriétés du PGCD. • PGCD(ac,bc) = |c|*PGCD(a,b)
(|c| est la valeur absolue de c)
Démonstration : L’idéal engendré par ac et bc est : {xac + ybc , x e Z et y e Z} ou encore : {c(xa + yb), x 6 Z, y e Z}. Au signe près on obtient l’idéal des multiples de |c|*PGCD(a,b). On en déduit immédiatement : a b P G C D ( a ,b ) • Si d est un diviseur commun de a et de b,on a : P G C D (~ 7 , - 7 ) = -------------------
d d
\d\
Cela implique que si d est undiviseur communde a et de balors il divise PGCD(a.b) : • Les diviseurs communs de a et b sont les diviseurs de PGCD(a,b). • Si a différent de b, et en généralisant :
PGCD(a,b) = PGCD(a,b - a) PGCD(a,b) = PGCD(a.b + na)
E x e r c ic e :
Peut-on généraliser de la façon suivante : PGCD(a,b) = PGCD(xa + yb,x’a + y ’b) avec x 0 et y ’ * 0? Démontrons PGCD(a,b) = PGCD(a,b + na). Si d|a et d|b alors d|a et d|b + na de manière évidente. Réciproquement si d|a et d|b + na alors d|b puisque a = qd et b + na = q’d implique b = q’d - na = q ’d—nqd = (q’—nq)d. On a montré que les diviseurs communs de a et de b sont les mêmes que les diviseurs communs de a et b + na. Ce résultat très important va être utilisé de façon essentielle dans l’algorithme d’Euclide. E x e r c ic e :
Si c est premier avec a, PGCD(a,b) = PGCD(a,bc).
Éléments d ’arithmétique
2.2.5
35
Le théorème de Gauss
Théorème : a et b sont premiers entre eux o V x e Z ,
a|bx => a|x
Démonstration : Si a et b sont premiers entre eux. on peut écrire la relation de Bezout au + bv = 1, et en multipliant par x on obtient aux + bvx = x. Comme a|bx on obtient bx = qa et aux + vqa = a(ux + vq) = x. Cela signifie que a|x. Réciproque. Si d est un diviseur commun de a et de b, on a : a = a’d et b = b ’d. a b D’où d = — = — puis en faisant un produit en croix : ab’ = ba’. On lit ici que a|a’. Mais a b comme a’|a, on en déduit que a = a’ (au signe près) et d = 1 ou d = - 1 .
Conséquences • Si a est premier avec b et avec c, alors il est premier avec bc, avec b2, ... avec b"(n > 0). Démonstration : Soit xeZ . a|bcx => a|cx puisque a et b sont premiers entre eux. a|cx => a|x puisque a et c sont premiers entre eux. • Si p premier et p|ab alors p|a ou p|b. Généralisation : si p est premier et divise un produit de facteurs, il divise l’un des facteurs. Si p premier et p|an alors p|a Démonstration. Deux possibilités : soit p est premier avec a et alors il divise b, soit il n ’est pas premier avec a et il divise a .
A pplications • On peut maintenant démontrer l’unicité de la décomposition des entiers naturels en facteurs premiers. Si N admet deux décompositions différentes, au moins un des facteurs premiers, disons p,, s’écrira avec une puissance différente dans les deux décompositions : p f 11 * q = p ? 2 * q ' , ce qui est impossible. • Démontrer que -^2 n ’est pas rationnel. Si x/2 = — avec a et b entiers, alors sf2 * a = b et 2*a 2 = b2. b Dans la décomposition en facteurs premiers de 2a2 le facteur 2 apparaît un nombre impair de fois, alors que dans la décomposition de b2 il n ’apparaît qu’un nombre pair de fois. • Diviseurs de 0 dans Z/nZ.
Initiation à la cryptographie
36
Dans Z/nZ, a * b = 0 Soit p premier
<=> ab est un multiple de n <=> n[ab
p|ab cï> p|a ou p|b, c’est-à-dire a = 0 ou b = 0
Soit n composé : n = m,*m2. On a mt * m2 = 0 mais w, * 0 et m2
0
Théorème : p est premier cï>Z/pZ n’a pas de diviseurs de 0
•
PPCM‘ a’ b) = PGCD‘ a' b )* r d c ^ b 7 * ? d d l ^
d’où on déduit immédiatement : •
|a*b| = PGCD(a.b)*PPCM(a,b)
Démonstration : Posons a = a’*d et b = b ’*d avec d = PGCD(a,b). a’ et b’ sont clairement premiers entre eux. Soit m un multiple commun à a et à b On a : m = ka = Ib = ka’d = lb’d d ’où ka’ = lb’, c’est-à-dire a’ divise lb’.en étant premier avec b’. D’après le théorème de Gauss, a’ divise 1. De même b’ divise k. On obtient m = l’*a’*b = l’*a’*b’*d, ce qui montre que tout commun multiple de a et de b est un multiple de a’b’d.
2.2.6. Fiches pratiques 2.2.6.1 PGCD et PPCM Voici quelques exemples de programmation des calculs du PGCD et du PPCM de deux nombres entiers positifs basés sur les propriétés démontrées dans le chapitre. Le lecteur pourra facilement les rendre tout à fait générales, ou alors il utilisera le procédures igcd() et ilcm() de MAPLE. pgcd version récursive. > pged:=proc(a,b) #PGCD de a et de b. Principe : si a>b, pgcd(a,b)=pged(a-b,b). > # si a=b, pged(a,b)=a. > if a=b then RETURN(a) > else if a>b then pged(a-b,b) > else pged(a,b-a) > fi > fi; > end: La version suivante gagne un peu en efficacité : > pged:=proc(a,b) #PGCD de a et de b.Principe : si a n'est pas un multiple de b
Éléments d ’arithmétique
37
> # et a>b alors pgcd(a,b)=pgcd(irem(a,b),b) > # sinon pgcd(a,b)=b. > if a=0 then RETURN(b) > else if a>b then pgcd(irem(a,b),b) > else pgcd(irem(b,a),a) > fi > fi > end: Exemple : > pgcd(4999,166667); 1
Si votre langage de programmation n ’accepte pas les procédures récursives, voici une autre version possible : PGCD version itérative. > pgcd:= proc(a,b) #Effectuer les divisions euclidiennes. > #pgcd(a,b) est le dernier reste non nul. > local al,bl,aux; > if b>a then bl :=a;al :=b > else al:=a;bl:=b > fi; > while (bl<>0) do aux:=bl;bl:=irem (al,bl);al:=aux od; > RETURN(al); > end: Exemple : > pgcd(4999* 10003,4999* 10007); 4999 Un fois trouvé pgcd(a,b), le calcul de ppcm(a,b) est immédiat puisque ppcm(a,b) = pgcd(a,b)*(a/pgcd(a,b))*(b/pgcd(a,b)). Noter que pour ne pas calculer trois fois pgcd(a,b) on utilisera l’option « remember » de MAPLE. ppcm:=proc(a,b) > options remember; > RETURN(pgcd(a,b)*(a/pgcd(a,b))*(b/pgcd(a,b))); > end: Exemples : >ppcm(15,9); 45 >ppcm(l 555555,9999999959); 15555549936222245
2.2.6.2 Retour aux nom bres premiers. L’utilisateur de MAPLE un peu curieux ne manqera pas de regarder comment les auteurs du système on écrit la procédure isprime(). Comme celle-ci est protégée par l’option « copyright », il devra taper les lignes suivantes :
Initiation à la cryptographie
38
>interfaee(verboseproc=2); > with(numtheory); > print(isprime); il pourra alors lire parmi les différents tests les lignes suivantes : elif iged(2305567963945518424753102147331756070,n) o 1 then false elif n < 10201 then true elif igcd(84969694892334181105323399091873499659260625866489327366115454263422 0389327076939090906947730950913750978691711866802886149933382509768238672 2983737962963066757674131126736578936440788157186969893730633113066478620 4486249492573240226273954373636390387526081667586612559568346306972204475 1229884822222855006268378634251996022599630131594564447006472069662175047 7244528915927867113,n ) o 1 then false elif n < 1018081 then true
Quels sont ces deux nombres de 37 chiffres et de plus de 400 chiffres dont on cherche le pgccd avec n ? La réponse est fournie par la factorisation de ces nombres (ifactor( )). Le premier est le produit des nombres premiers jusqu’à 1 0 0 , le second est le produit des nombres premiers de 1 0 0 à 1 0 0 0 . Le test est alors clair : si n < 1018081 n ’est pas premier avec l’un de ces nombres , il est divisible par un nombre premier inférieur à 1 0 0 0 Le lecteur est invité à tester cette idée en réécrivant la procédure prime l(n). Est-il efficace de généraliser cette méthode en considérant le produit des nombres premiers de 1 0 0 0 à 1 0 6? D’autres tests figurant dans isprime seront expliqués plus loin.
2.2.7 1) 2) 3) 4) 5) 6) 7) 8) 9) 10) 11 ) 12) 13) 14)
Exercices
Démontrer que pour tout x e Z , x ' - x = 0[3] Trouver x entier tel que 32n- 2n= x [7] Montrer que la somme de deux entiers impairs consécutifs est divisible par 4. Quels sont les restes de la division par 7 des cubes des nombres entiers ? On demande le reste dans la division par 11 de 7054325. Montrer que le produit de trois nombres pairs consécutifs est un multiple de 48. Montrer que 120 divise x(x + l)(x + 2)(x + 3)(x + 4) pour tout x e N. Montrer que n(n + l)(2n + 1) est divisible par 6 pour tout n e N. Montrer que pour tout n e N, n(2n + l)(7n + 1) est divisible par 6 . À quelle condition sur a l’équation x2= a admet-elle des solutions dans Z/7Z ? Même question avec l’équation x 3 = a. Quels sont les restes de la division par 3 de n(n + 1)/2, avec n e N ? Résoudre dans Z/7Z l’équation x 3 = 3x 2 + 2 Résoudre l’équation PGCD(380,x) = 5 avec 0 < x < 100. n e N est divisible par 6 si et seulement si la somme du chiffre des unités et du quadruple des autres chiffres est divisible par 6 .
Éléments d'arithmétique
39
15) Trouver a et b entiers relatifs sachant que a 2 - b 2 = 24 16) Factoriser 20! (20 factorielle). 17) Si a et b sont des entiers impairs alors a 2 + b2 est divisible par 2 et pas par 4. E x e r c ic e s
s u r l a d iv is ib il it é
1)
On divise deux entiers a et b par a - b. Comparer les quotients et restes obtenus.
2)
Pour déterminer le quotient de a par un produit b,b2, suffit-il de diviser par b 2 le quotient entier de a par b, ?
3)
Vérifier que les diviseurs communs à plusieurs nombres sont les diviseurs de leur PGCD. NB : plusieurs signifie 2 ou plus!
4)
Soient a et b premiers entre eux. On pose s = a + b et p = ab. Déterminer le PGCD de a et s, puis de s et p.
5)
PGCD(2n—l,2m—1) = ?
6)
Par combien de zéros se termine l’écriture en base 10 de 100! (Factorielle 100) ?
7)
Si PGCD(a,b) = p, avec p premier, quelles sont lesvaleurs possibles du PGCD de a 2 et b, de a3et b, de a2 et b3 ?
E x e r c ic e s
su r la c o n g r u e n c e
1)
Démontrer les propriétés suivantes des congruences où a, b, c, d, m et n sont des entiers (m, n > 2 ) : a) si ac s bc [m] et m et c premiers entre eux, alors a = b [m]. b) si ac = bc [me] alors a s b [m]. (On suppose que c * 0) c) Si m|n et a = b [n] alors a = b [m]. d) Si a = b [m] et a = b [n] et m et n premiers ente eux alors a = b [mn],
2)
Déterminer le reste de la division de 24734<' par 7.
3)
Déterminer le reste de la division de 2 " 37par 17, de 2 1137 par 13 et en déduire le reste de la division de 2 " 37 par 2 2 1 .
4)
Quels sont les deux derniers chiffres de /
n 9'/J
S o l u t io n s
1)
Le plus simple est de raisonner dans Z/3Z : Si x = 0 le résultat est clair. Si x = 1 le résultat est clair. Si x = 2 alors 2 3 - 2 = 0 dans Z/3Z.
2)
Raisonner dans Z/7Z. L’équation s’écrit (32)" - 2" = x, ou encore 2n - 2n = x On obtient donc x = 0 dans Z/7Z, cest à dire x est un multiple de 7 dans 7
3)
(2k + 1) + (2k + 3) = 4k + 4 = 4(k + 1).
4)
Raisonner dans Z/7Z et calculer x 3 pour x = 1à x = 6 .Ontrouve -1 (et bien sûr 0 ).
5)
705432 = 2 [11], et 2 5 = 32 = 10 [11].
6)
2k(2k + 2)(2k + 4) = 2 3k(k + l)(k + 2). Puis montrer que k(k +l)(k + 2) = 0 [6 ] en essayant k = 0, 1, ...,5.
et 1
Initiation à la cryptographie
40
7)
Généraliser les idées de l’exercice 6 .
8)
11 s’agit de montrer que n(n + l)(2n + 1) s 0 [6 ] pour tout e Z/6 Z. À vérifier pour n = 0, 1 , 5 .
9)
Même principe que dans 8 ).
10) Il suffit de construire la table de multiplication de Z/7Z. Généralisation à l’aide de l’ordinateur : écrire une procédure résolvant le problème dans Z/nZ avec n grand. A partir de combien de chiffres pour n la méthode devientelle impraticable ? 11) Raisonner dans Z/3Z et calculer l’expression pour n = 0, 1 et 2. On trouve 0 ou 1. 12) Essayer x = 0, 1, On trouve comme seule solution 4. Comme dans l’exercice 10) on généralisera à Z/nZ. 13) 380 = 2 2*5* 19 donc x = 5*q et la décomposition en facteurs premiers de q ne contient ni 2 ni 19. On obtient q = 3 ou q = 3 2 ou q = 3 3 q=5 q=7 q = ii q = 17
q = 3*5 et c’est tout. 14) On commencera par montrer par récurrence que 10'=4 [6 ]. On écrit ensuite n = a0 + a,* 10 + a2* 102 +... + as* I0Soù a0, a„ ...sont les chiffres des unités, des dizaines ... = a0 +a, *4 + a2*4 +... + as*4 [6 ] = a0+ 4*(a, +... + a s) NB : On préférera le critère suivant n est divisible par 6 si et seulement s’il est divisible par 2 et par 3 (démonstration ?). 15)
L’équation s’écrit (a + b)(a - b) = 24. Or la factorisation de 24 est : 24 = 2*2*2*3. Donc a + b = 2 e t a - b = 12 ou a + b = 4 et a - b = 6 ...
16) À faire. 17) Ecrire a = 2n + 1 et b = 2m + 1. On a a2 + b 2 = 2(2(n 2 + n + m 2 + m) + 1). S o l u t io n s
d e s e x e r c ic e s s u r l a d iv is ib il it é
1)
On écrit a = q (a —b) + r et b = q ’(a —b) + r’, avec 0 < r < |a - b| et 0 < r’ < |a - b|. En soustrayant on obtient : a - b = (q - q’)(a - b) + r - r' puis r - r’ = (1 - q + q’)(a - b). r —r ’ est donc un multiple de a - b strictement compris entre - ( a - b) et a - b . Conclusion, r = r’ et q = q’ + 1.
2)
La réponse est oui. Supposons a, b, et b2 positifs. Ecrivons a = b,q, + r, , q, = b 2q 2 + r2 et a = b,b2q + r. On obtient a = b,b 2q2 + (b,r2 + r,). Le problème est de montrer que q 2 est le quotient de a par b,b2, c’est-à-dire que 0 < (b,r 2 + r,) < b,b2. Or 0 < r, < b ,-l et 0 < r2 < b2- l permettent de conclure.
3) 4)
Généraliser 2.2.4. Les propriétés du PGCD en 2.2.4 permettent d’obtenir que PGCD(a,s) = PGCD(s,p) = PGCD(a,b).
Éléments d ’arithmétique
41
5)
PGCD(2n- 1.2m- 1)=1 si n ^ m. Principe de ladémonstration : supposons n > m, PGCD (2n; - 1,2m—1) = PGCD ((2n—1) - (2m- 1),2m - 1) = PGCD (2" — 2m, 2m - 1) = PGCD (2n(2n_rn - 1), 2m- 1) = PGCD(2"'m- l,2m- 1) puisque 2n et 2m- 1 sont premiers entre eux.
6)
Voici la réponse de MAPLE : > 1 0 0 !; 9332621544394415268169923 88562667004907159682643 81621468592963 895217 59999322991560894146397615651828625369792082722375825118521091686400 0000000000000000000000
7)
On peut aussi compter le nombre de facteurs premiers 2 et 5 dans la décomposition en facteurs premiers de 1 0 0 ! p, p et p2.
C o r r e c t io n 1)
d e s e x e r c ic e s s u r l a c o n g r u e n c e
a) ac —bc = k*m s’écrit (a - b)*c = k*m : m divise (a - b)*c et est premier avec c. Donc m divise a - b d’après le théorème de Gauss b) ac - bc = k*mc se simplifie en a - b = km. c) Si n = m*k et a —b = I*n alors a —b = (l*k)*m. d) Si a - b multiple de m et a - b multiple de n, alors a - b multiple de PPCM - (m,n) = mn puisque m et n premiers entre eux.
2)
247 s 2 [7] donc 247349= 2 349 [7] De plus 2' = 2 [7], 22^ 4 [7], 2 3 s I [7] d’o ù 2 3k= 1[7], Or349 = 1 [3], Conclusion 247349= 2 [7],
3)
> 2 & A 1137mod(17); 2 > 2& A 1137mod(13); 5 13 et 17 étant premiers entre eux, on utilisera 1) d) pour conclure.
4)
_ y “9 Les deux derniers chiffres de / sont donnés par le reste de la division de ce nombre par 1 0 0 . O r: > 7 A2 mod(lOO); 49 > 7 A 3 mod(100); 43 > 7 A 4 mod(lOO); 1
> 7 A 5 mod(100); 7 On obtient rapidement comme résultat 7.
Initiation à la cryptographie
42
2.3 ÉLÉMENTS INVERSIBLES DE Z/NZ 2.3.1 Indicateur d’Euler •
■
a est inversible dans Z/nZ
•
•
•
<=> Il existe b tel que a * b = 1 <=> Il existe b tel que a*b = 1 [n] <=> Il existe b et q tels que a*b = q*n + 1 <=> Il existe b et q tels que a*b - q*n = 1 (Bezout) <=> a et n sont premiers entre eux.
Théorème : * Les seuls éléments inversibles de Z/nZ sont les éléments premiers avec n. * Si n=p est premier, tout élément non nul de Z/pZ est inversible : Z/pZ est un corps. Calcul de l ’inverse de a
(a est supposé inversible)
a étant inversible, on a : au + n v = 1 puisque a et n premiers entre eux (Bezout) L ’algorithme d ’Euclide permet de trouver facilement u et v, et sera détaillé au chapitre 3. Or au + nv =1 signifie
a
ou encore
u est l’inverse de a
U =
dans Z/nZ.
(On verra plus tard un autre procédé pour trouver l’inverse de a dans Z/nZ) En bref, si n est petit, on peut dresser la table de multiplication modulo n puis chercher dans la ligne de a le nombre
1
et remonter la colonne correspondante pour obtenir
l’inverse de a . Si n est grand, ou si l’on désire programmer un ordinateur pour effectuer les calculs dans Z/nZ, le procédé ci-dessus est efficace.
L’indicateur d ’Euler On notera cp(n) le nombre d’éléments inversibles de Z/nZ. Soient a1; a2_ a9(n) les éléments inversibles de Z/nZ, et a un élément inversible quelconque, f : Z/nZ — >Z/nZ x — >ax est bijective puisque ax=ay => a' 1 ax = a"1 ay => x = y ce qui signifie que f est injective. Comme Z/nZ est fini, f est aussi bijective. Si x est inversible alors ax l ’est aussi : ax*Inv(a)*Inv(x) = 1. Donc f est une bijection de (Z/nZ)* sur (Z/nZ)*. (Rappelons que (Z/nZ)* désigne l ’ensemble des éléments inversibles de Z/nZ). D ’où {a1,...,as>(n)} = {f(a,),...,f(a9(n))} (égalité des ensembles) et a,*a 2*...*a(p(n)= f(a,) * f(a2) *...* f(a9(n)) 3 31 a a 2 "* 3 a
Éléments d'arithmétique
43
On obtient le Théorème d ’E n ler. Si PGCD(a,n) = 1 alors a9(,,)= 1 En conséquence on obtient le calcul de l'inverse de ü dans Z/nZ : Inv(<7) = a9*"*'1 dans Z/nZ.
Propriétés de cp(n) 1)
Si PGCD(m.n) = 1 alors ip(mn) = (p(m)cp(n) Démonstration . La démonstration suivante est tirée de [5]. Elle est relativement simple. On considère le tableau suivant : 1 2 3 ... m m+ 1 m+2 m+3 ... 2m 2m +1 2m + 2 2m + 3 ... 3m ( n - l ) m + l ( n - l ) m + 2 ( n - l ) m + 3...
m*n
Le problème est de « localiser » les (p(mn) nombres premiers avec m*n. a) On commence par rayer toutes les colonnes commençant par un nombre non premier avec m. En effet, aucun de ces nombres ne peut être premier avec m. Il reste x + k modulo n. Cette bijection modulo n donne une bijection de Z/nZ dans Z/nZ. Chaque colonne non rayée contient donc cp(n) termes premiers avec n (On raye les autres). Les cp(m)*q>(n) éléments non rayés sont premiers avec m (voir a)) et avec n (voir b)), donc avec leur produit m*n, puisque m et n sont premiers entre eux. 2)
Si p est premier alors (p(p) = p - 1. (Immédiat) 2bis) Si p est premier alors cp(p") = p” - p "-1 = pn(l - 1/p) En effet les seuls éléments non inversibles de Z/pnZ sont 0, p, 2p,..., pn - p, qui sont au nombre de p"-1
3)
cp(n) = n ] ^ [ ( l - —) p|n
4)
(p premier)
P
(d) fractions d ayant d comme dénominateur et un numérateur premier avec d, d’où le résultat.
Remarque : On montre que cette relation est caractéristique de la fonction (p. Si une fonction f vérifie cette relation alors f = cp. En effet f(l) = 1 clair
Initiation à la cryptographie
44
si
pour x < n
alors cp( 1) + cp(d,) + cp(d2) +... +
cp(l) + tp(d,) + cp(d2) + ... + cp(dr) + f(m ) = m
im pliquent cp(m) = f(m )
La récurrence est démontrée. Remarque : pour calculer ani mod(n) on peut ne calculer que a"1n,od(
2.3.2 Petit théorème de Fermât. Si p premier et p ne divise pas a (c’est-à-dire a et p premiers entre eux) alors apl = l [p] Si p premier et a entier alors ap= a |p] Démonstration . la première ligne est une conséquence immédiate du théorème d’Euler. Pour démontrer la seconde ligne, il faut considérer le cas où p divise a : alors a = 0 [p] et ap = 0 [p].
2.3.3
Fiches pratiques
2.3.3.1 Cryptographie et algèbre linéaire Pour programmer le chiffre de César, on avait remplacé a par 1, b par 2,..., z par 26, puis on avait complété la liste avec quelques caractères de ponctuation. La raison de ces compléments est que cela nous permet de travailler dans Z/31Z qui est un corps. En particulier la généralisation du chiffre de César consistant à utiliser la transformation linéaire nb-> x*nb + y (x * 0 ) posait le problème de savoir si cette transformation est une bijection de Z/31Z sur lui-même. U est possible maintenant d ’y répondre : Soit x # 0. Vz £ Z/31Z, l’équation x*nb + y = z admet une et une seule solution nb = inv(x)*(z - y), ce qui prouve que nb-> x*nb + y est bijective L’essentiel dans l’argument étant que x ^ 0 est inversible dans Z/31Z, on se doute que l’idée peut être généralisée à Z/nZ, pourvu que x soit premier avec n. Ces généralisations restant cependant des chiffres par substitution, donc sensibles à une attaque par fréquence des lettres, une autre généralisation utilisant le calcul matriciel a été proposée. Pour pouvoir effectuer sans soucis tous les calculs habituels de l’algèbre linéaire, on se placera dans un corps Z/pZ (p = 31 dans notre exemple) avec p premier. Exemple avec n = 2 :
Éléments d ’arithmétique
K=
f 3
13A
\2 2
15y
^3
13n
45
M = good = go © od = (7 15) © ( 15 4)
f 7^ f 3 ll5> ,22
*
13 f 15")
UJ
(30 7) © (4 18) (© est la concaténation) 15, 15J Remarquer que la lettre O est remplacée par deux valeurs différentes. Pour déchiffrer il suffit de multiplier le cryptogramme, découpé en blocs de longueur 2, par K '1. C=
.2 2
E x e r c ic e
Utiliser les procédures de calcul matriciel de MAPLE pour programmer ce système.
2.Z.3.2 Calcul de ax mod n et le théorèm e de Fermât Pour calculer ax mod n, il est bien sûr hors dequestion de commencer par calculer a’, qui risque d ’être un nombre très grand, puis de chercherle reste de ce résultat dansla division par n. On pourrait à la rigueur utiliser une boucle qui calculerait a2 mod n, a2*a mod n, a3*a mod n et ainsi de suite jusqu’à l’obtention du résultat. Comme ce calcul va nous servir souvent, avec de grands nombres, toute amélioration de l’algorithme est bienvenue. Or il suffit de remarquer que : si x est pair alors ax = (a 2) x/2 si x est impair alors ax = a*(a2)(x l>/2 si x = I alors a' = 1 pour obtenir un méthode très rapide calcul de ax. Par exemple pour calculer a 17, on calculera successivement a2, (a 2) 2 = a4, (a4) 2 = a8, (a8) 2 = a 16 et enfin a l6*a = a 17. Cette idée donne la procédure suivante dont le lecteur pourra vérifier la rapidité : > puissance:=proc(a,x,n) #ealcul de a Ax mod n > if irem(x,2)=0 then RETURN(puissance(aA2 mod n,x/2,n) mod n ) > elif x o l then RETURN(a*puissance(aA2 mod n,(x-l)/2,n) mod n) > elif x=l then RETURN(a) > fi > end: > puissance(5792,166666666666,166666666667); 1
Il est bien sûr possible de préférer la syntaxe a & Ax mod n proposée par MAPLE : 2 &A 25009996 mod 25009997; 13697276 Notez au passage, et ceci est un résultat important, que les deux lignes qui précèdent prouvent sans avoir à tenter les divisions par 2, puis 3, puis 5, ..., que 25009997 n’est pas premier. En effet le petit théorème de Fermât est ici mis en défaut, puisque si 25009997 était premier on devrait avoir 225009996 = 1 [25009997],
Initiation à la cryptographie
46
2.3.3.3 Test de non prim alité Les lignes ci-dessus suggèrent un test rapide de non-primalité : trouver a, a premier avec p, tel que ap"‘ = 1 [p] soit faux (essayer 2, 3, 4, 5, 6 , 7...)- Dans beaucoup de cas ceia fonctionne bien. Mais par exemple 561 est composé et vous ne trouverez pas a premier avec 561 qui vérifie ce test. On ne peut donc pas utiliser ce test comme critère de primalité. Cependant si un nombre N résiste à ce test, plus à quelques autres tests un peu plus fins (voir par exemple [2] ou [11]), il y a lieu de penser que N est très probablement premier. C’est ainsi que sont construits les tests probabilistes de primalité. Insistons par une image sur le caractère exceptionnel du résultat de Fermât : Imaginons un tireur visant une cible très éloignée. Il a peu de chance d ’atteindre sa cible. Ici la balle est le nombre a donné au départ, la trajectoire de la balle est la suite a, a2, a3,..., a " '1 et la cible est le nombre 1 . Le petit théorème de Fermât affirme que si n est premier, alors la balle atteindra toujours la cible. L’expérimentation (ou des arguments plus théoriques) montre que si n n’est pas premier il est très rare que la balle atteigne la cible. EXERCICE :
Choisir deux nombres premiers p et q de 12 chiffres, calculer p*q et vérifier à l’aide de la méthode ci-dessus, puis avec la procédure prim el() que p*q n’est pas premier. Comparer les temps de calcul.
2.3.3.4 Calcul de ax « à la main ». Notion de cycle Algorithme de Floyd voir [2] p. 31. Une autre approche du calcul de ax dans Z/nZ, en particulier lorsqu’on ne dispose que d ’une calculette, est de chercher un comportement cyclique de la suite des nombres a \ Sachant que Z/nZ est fini, les calculs successifs de a* doivent nécessairement tomber sur une valeur déjà trouvée et à partir de là boucler indéfiniment. Soit, par exemple, le calcul de 5932 dans Z/31Z. On a 5' = 5 [31] 52= 25 [31] 53=1 [31] 54= 5 [31] Il est inutile d’aller plus loin pour savoir que si x est un multiple de 3 alors 5X= 1 [31] si x est un multiple de 3 plus 1 alors 5X= 5 [31] si x est un multiple de 3 plus 2 alors 5X= 25 [31] Comme 932 = 310*3 + 2, on obtient immédiatement que 5932 = (5 3)310*52= 1*25 = 25 [31]. Regardons ce qui se passe avec 2Xdans Z/30Z. 2' = 2 [30] 22= 4 [30] 23= 8 [30] 24= 16 [30] 2 5 = 2 [30] E x e r c ic e :
Utiliser ce qui précède pour calculer 2 725 dans Z/30Z.
L’ALGORITHME D’EUCLIDE ETENDU 3.1 Présentation de l’algorithme Étant donné l’importance de cet algorithme, nous y consacrerons un chapitre à part. But : étant donnés a et b deux entiers, trouver PGCD(a,b) = d et trouver des coefficients u et v tel que au + bv = d (Relation de Bezout). Principe : PGCD(a,b) = PGCD(a,b + na) Démonstration : d|a et d|b Algorithme d ’Euclide a = bq0 + r 0 b = r0q, + r, r0 = r,q2 + r 2 r, = r2q3 + r3
<=>
0 0 0 0
(n entier)
d|a et d|b + na.
rn-i-=r„qn+l + r n+1
A vecrn+l = 0
Alors PGCD(a,b) = rn
(Dernier reste non nul)
Démonstration : La suite des restes (rn) est une suite strictement décroissante d ’entiers positifs. On obtient nécessairement un reste rn, , égal à zéro. PGCD(a,b) = PGCD(b,r0) puisque r0 = a - bq0 = PGCD(r0,r,) Etc = PGCD(rn.„rn) = rn puisque rn_, est un multiple de rn De plus a - bq0 = r0 b - r0q,= r, r0—r l q2= r2
d’où soit d’où soit d ’où soit
b(-q0 ) + a* 1 = r0 b*v0 + a*u0= r0 V0 fio u 0 1 b(l - q0q,) + a(-q,) = r, v, = 1 + q„q, et u, = -q . b*v, +a*u, = r, (a - bq0) - (bv, + au,)q 2 = r 2 b*v2 + a*u2 = r2 v2 = a - bq 0 = v0 - q2v, u2 = b v , + au, = u0- q 2v
Etc jusqu’à b*v„ + a*u„ On a ainsi obtenu la relation de Bezout. Calcul de un et de vn. Le principe de récurrence est le suivant : auk+ bvk==rk
= r„
Initiation à la cryptographie
48
au k+1 + bvk+1 = rk+1 et où
r k — ^lk+2r k 11 = r H 2
O n obtient
(auk+ bvk) - qk+2(auk+, + bvk+1) = r k+2 a(uk - qk+2uk+|) + b(vk - qk,2vk+l) = rk+2
ou encore C ’est-à-dire
q k+2 est le quotient de la division de rk par rk+I.
r k+2 = r k _ q k + 2 r k+i U k+2 = U k — Cïk + 2U k+l v k+ 2 = v k - q k+2v k+ i
Avec comme valeurs initiales :
v0 = - q 0 et u0= 1 et a - bq0= r 0 v, = 1 - q0q, et u, = -q , et b - r 0q, = r,
En fait, il apparaît que l’initialisation des suites rk, uk et vk doit être effectuée de la manière suivante : r .2 = a et r , = b u., = 0 et u0 = 1 v_,= 1 et v0= a div b En pratique, si on effectue les calculs à la main, ce qui est un exercice nécessaire pour comprendre l’algorithme développé ci-dessus, on procède de la manière suivante : prenons par exemple a = 11 et b = 7 On effectue les divisions 11=7*1+4
ou 4 = 11 —7*1
7 = 4* 1 + 3
ou 3 = 7 - 4* 1
4 = 3*1+ 1
oui =4-3*1
3 = 1*3 + 0donc PGCD(11,7) = 1 On part alors de la dernière égalité écrite en bas à droite, et on remplace 3 par 7 - 4 * 1 comme on le voit au dessus. 1=4-3*1 1 = 4 —(7 —4* 1 )* 1 soit 1 = 2 * 4 - 7 * 1 1 = 2*(11 - 7 * 1 )- 7*1 soit 1 =2*11 - 3 * 7
On remplace 4 par 11 - 7*1
Le lecteur est invité à reprendre ces calculs avec par exemple a = 2992 et b = 3172, et à vérifier qu’il arrive assez rapidement au résultat. Il peut aussi adapter les programmes décrits ici au langage de sa calculette, et constater une fois de plus la rapidité des calculs. On montre que la complexité de l’algorithme décrit ci-dessus est en log3(n), c’est-à-dire est rapide, même pour des « grandes » valeurs de a et de b.
L ’algorithme d ’Euclide étendu
49
3.2 Fiches pratiques 3.2.1 Euclide étendu > euclide:=proc(a,b) #entrée a et b entiers > #sortie d,u,v tels que a*u+b*v=d où d=pgcd(a,b) > #op(l,euclide(a,b))=pgcd(a,b) > #op(3,euclide(a,b))=u > #op(5,eucIide(a,b))=v >
> local r,rl,u,ul,v,vl,q,aux; > r:=a;rl:=b; > u:=l;ul:=0; > v:=0;vl:=l; > while rl<>0 do > q:=iquo(r,rl); > aux:=r;r:=rl;rl:=aux-rl*q; > aux:=u;u:=ul;ul:=aux-ul*q; > aux:=v;v:=vl;vl:=aux-vl*q; > od; >RETURN([r,'=',u,'*',a,+',v,'*',bl); > end: Ext mples : > euclide(7,12); [l, =, -5, *, 7, +, 3, *, 12] > euclide(126667,166666667); [1, =, -6905245, *, 126667, +, 5248, *, 166666667] >euclide(150,120); [30, = ,1 ,* , 150,+ ,-1, *,1201 Signalons pour terminer que MAPLE fournit une procédure équivalente appelée igcdex().
3.2.2 Inverse de a dans Z/nZ Nous avons vu que le calcul de l’inverse de a dans Z/nZ ne pouvait se faire en pratique avec l’aide du théorème d ’Euler : si a est premier avec n alors Inv(a) = a'1’*"*'1 , puisque le calcul de cp(n) est difficile. Par contre l’algorithme d’Euclide étendu fournit très rapidement cet inverse. On pourra utiliser la procédure suivante : >inv:=proc(a,n) #calcul de l'inverse de a modulo n. > if op(l,euclide(a,n))<>l then RETURN(false) > else RETURN(op(3,euclide(a,n» mod n)
Initiation à la cryptographie
50
> fi; > end; Exemple : > inv(4221,4999); 3232 Remarquons que MAPLE fournit le même résultat avec une syntaxe plus habituelle : > 1/4221 mod 4999; 3232 Explication : La procédure euclide(a,b) renvoie une liste dont le premier terme est pgcd(a,b). op(l,euclide(a,n)) est donc pgcd(a,n). De même op(3,euclide(a,n)) est le coefficient u de la relation au + nv = pgcd(a,n). Son reste dans la division par n est donc l’inverse de a dans Z/nZ.
3.4 Exercices 1)
Résoudre dans Z/31Z l ’équation 21x + 25 = 0 . On pourra utiliser la table de multiplication donnée en début de livre.
2)
Résoudre dans Z/4999Z l’équation 232 lx + 1553 = 0
3)
L’équation 2x + 5 = 0 admet-elle une solution dans Z/12Z ?
4)
Résoudre dans 2731Z le système d ’équation
f 8x + 7 y = 2 5 [13x + 24y = 17 5)
Résoudre dans Z/4999Z le système
{ 738x + 121y = 824 |l 5 5 x + 224y = 1417 6)
Au pays d ’Alice, la banque centrale, par mesure d ’économie, a décidé de ne frapper que des pièces de 3 Ecus et de 5 Ecus. Le ministre des finances s’est inquiété : - Comment Alice pourra-t-elle acheter un pain coûtant 1 Ecu ? 2 Ecus ? 4 Ecus ? - Facile, répond le gouverneur de la banque : il suffit que Bob le boulanger lui rende la monnaie ! Justifier cette affirmation. - Très bien, reconnaît le ministre, mais êtes-vous sûr que pour toute somme Alice peut payer Bob par cette méthode ? - Absolument sûr ! Justifier cette réponse.
S o l u t io n s :
1) 2)
Inv(21) = 3 dans Z/31Z. La solution de l’équation est donc 3*6 = 18. L’algorithme d ’Euclide permet de trouver que Inv(2321) = 28 dans Z/4999Z. La solution de l’équation est donc 3446*28 = 1507.
L algorithme d ’Euclide étendu
4)
Le système est équivalent à : fois la ligne 1 moins solution : (2,19).
5)
8
51
J8 x + 7y = 25 +
23
y
— 3 après avoir remplacé la ligne 2 par 13
fois la ligne 2. Inv(23) = 27 et inv(8 ) -= 4 dans Z/31Z. D’où la
Le système est équivalent à
f738x + 121y = 824 (0x + 3413y = 1790 et inv(3413>
2178-
inv(738) = 928. On obtient la solution : (1102,4399). 6)
3 et 5 étant premiers entre eux, l’équation 3x + 5y = z admet une solution pour tout z. Une solution pour laquelle x ou y est négatif correspond à de la monaie rendue.
LE LOGARITHME DISCRET 4.1 Racine primitive Dans Z/pZ (p premier) il est facile de définir la fonction exponentielle x—> ax. On a même vu que son calcul est « rapide ». Notre problème est maintenant de voir si on peut définir sa réciproque, ce qui revient à vérifier que x-> a ' est bien bijective. Examinons pour commencer ce qui se passe dans Z/31Z à l’aide d’une procédure fournissant la liste des puissances an pour n allant de 0 à p - 1 : cycle:=proc(a,p) > local d,résultat; > resultat:=||; > for d from 0 to p-1 do resultat:=|op(résultat),op(a & Ad mod p)] od; > RETURN(resultat); > end: Exemples : > cycle(2,31); II, 2, 4, 8, 16, 1, 2, 4, 8, 16, 1, 2, 4, 8, 16, 1, 2, 4, 8, 16, 1, 2, 4, 8, 16, 1, 2, 4, 8, 1 6 ,1| > cycle(3,31); [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28, 22, 4, 12, 5, 15, 14, 11, 2, 6, 18, 23, 7,21, 1| > cycle(4,31); [1, 4, 16, 2, 8, 1, 4, 16, 2, 8, 1, 4, 16, 2, 8, 1, 4, 16, 2, 8, 1, 4, 16, 2, 8, 1, 4, 16, 2, 8 ,1 1 > cycle(5,31); |1, 5, 25, 1, 5, 25,1, 5, 25, 1, 5, 25, 1, 5, 25, 1, 5, 25, 1, 5, 25, 1, 5, 25, 1, 5, 25, 1, 5. 25, 1J > cycle(6,31); [1, 6, 5, 30, 25, 26, 1, 6, 5, 30, 25, 26, 1, 6, 5, 30, 25, 26, 1, 6, 5, 30, 25, 26, 1, 6, 5, 30, 25, 26, 1) 11 apparaît dans ces quelques exemples que seule la fontion x-> 3X est une bijection de Z/31Z. Le lecteur curieux pourra vérifier que a = 3, 11, 12, 13, 17, 21, 22, 24 conviennent aussi. Définition : Soit n un entier et cp(n) l’indicateur d’Euler. Un nombre a, 1 < a < n, est une racine primitive de n si a est premier avec n et pour tout d, 1 < d < cp(n), ad^ 1 En particulier si n est un nombre premier p et 1 < a < p, a est une racine primitive de p si ad* 1 pour tout d < p - 1 . Nous n ’aborderons que le cas où n = p premier. Soit a une racine primitive de p et f ; (Z/pZ)* —> (Z/pZ)* x -»• ax Pour commencer vérifions que ax g (Z/pZ)*. En effet si pgcd(a,p) = 1 alors pgcd(a\p) = 1. f est injective puisque si ax= ay avec p > x > y alors axy = 1 et x - y < p - 1 d’où x - y = 0 c’est-à-dire x = y.
Initiation à la cryptographie
54
On en déduit que f est injective. Comme (Z/pZ)’ est fini, f est aussi bijective. On peut alors définir son inverse que l’on notera lcg^x) mod p. Exemple : 3 est une racine primitive de 31 comme on l’a vu plus haut. EXERCICE : résoudre dans Z/31Z l’équation 1l x= 25. SOLl'TION : x
25 com m e on peut le constater en utilisant la p rocédure cycle().
Recherche d’une racine primitive de p. Nous présentons ci-dessous (4.3.1) une procédure de recherche d’une racine primitive de p. Elle ne prétend pas être optimisée, en particulier certains résultats de la théorie des groupes montrent que ax ne peut être égal à 1 que si x divise
4.2 Critère de primalité de Lehmer Basé sur la notion de racine primitive, le critère de Lehmer permet de savoir si un entier n est premier lorsque l’on connait la décomposition en facteurs premiers de n - k Théorème : Soit n un entier impair supérieur à 2. n est premier si et seulement s’il existe un entier a vérifiant : a(n- ' ) / 2 esj co„gru à -1 [nj et a,n l)/q n’est pas congru à 1 |n] pour tout facteur premier impair q de n—1. Nous ne démontrerons pas ce résultat qui exprime que a est une racine primitive de n (voir [2 ]). Par contre il suggère l’idée suivante pour trouver de grands nombres premiers (4.3.2) : prendre deux (ou plus) nombres premiers p et q. Avec un peu de chances n = 2*pyqz + 1 sera premier et le critère de Lehmer nous le dira. Essayer avec différentes valeurs de x, y et z, et différentes valeurs de a (On peut se limiter à a < 2Log 2(n ) 2 pour des raisons qu’il n’est pas question de développer ici). Notons enfin que le la résolution du logarithme discret est un problème difficile : les seuls algorithmes disponibles sont de complexité exponentielle (voir [10] p. 174 pour plus de détails). Cela signifie que la résolution d’une équation a* = y dans Z/pZ, avec p grand et a racine primitive de p, est en pratique impossible. C’est justement ce genre de difficultés qui rend l’exponentielle et le logarithme discret intéressants en cryptologie.
Le logarithme discret
55
4.3 Fiches pratiques 4.3.1
Recherche de racines primitives
> primitive:=proc(a,p) #teste si a est est une racine primitive de p, p premier > local d,test,al ; > test:=true;al:=a; > for d from 2 to p-2 do al:=(al*a mod p);if (a l= l) then test:=false;break fi od; > RETURN (test) ; > end: > primitive(3,31); true > primitive(4,31); false > > > >
racine_primitive:=proc(p) #Recherche d'une racine primitive de p, p premier local a; for a from 2 to p-1 do if primitive(a,p) then RETURN(a);break fi od end:
> racine_primitive(4999); 3 > racine_primitive(10000019); Warning, computation interrupted Noter que le calcul a été interrompu après un quart d’heure environ! Le lecteur est invité à utiliser les méthodes statistiques déjà présentées pour estimer la complexité de cette procédure. > liste racines_primitives:=proc(p) Wliste des racines primitives de p, p premier > local d,liste; > liste:=|j; > for d from 2 to p-1 do if primitive(d,p) then liste:=|op(liste),op(d)l fi od; > RETURN(liste); > end: > > liste racines primitives(31); [3 ,1 1 ,1 2 ,1 3 ,1 7 ,2 1 ,2 2 , 24J > liste racines prim itives( 101); |2, 3, 7, 8, 11, 12, 15, 18, 26, 27, 28, 29, 34, 35, 38, 40, 42, 46, 48, 50, 51, 53, 55, 59, 61, 63, 66, 67, 72, 73, 74, 75, 83, 86, 89, 90, 93, 94, 98, 99J
Initiation à la cryptographie
56
4.3.2
Recherche de grands nombres premiers
Comme on va le voir, la cryptographie mathématique utilise essentiellement de grands nombres premiers (150 à 200 chiffres). Il importe donc de disposer d ’un moyen rapide pour trouver de tels nombres. On peut bien sûr utiliser la procédure « nextprime » de MAPLE qui fournit un nombre premier « commercial ». Voici une piste permettant de chercher de grands nombres premiers : Utilisation du critère de Lehmer > lehmer:=proc(p,q,x,y,z) #Teste si 2*pyqz+ l est premier. Comme le test comporte l’arrêt à a>max, une réponse « false » ne démontre pas que N n’est pas premier > local a,N,max; > N:=(2Ax)*(pAy)*(qAz)+l;max:=trunc( 2*log|2](N)A2); > for a from 2 to N while a if ((a&A((N-l)/2) mod ( N ) ) o ( - l mod(N») then next > elif (( (a&A((N-l)/p) mod(N)) = 1 )) then next > elif (( (a& A((N-1)/q) mod(N)) = 1 )) then next > else RETURN([N,true|) > fi > od; > RETURNflN,false)); > end: Exemple : > lehmer(13,17,1,1,1); |443, true] > lehmer(13,l9,3,15,l); (7780255738141795065, false] > recherche_nombre_premier:=proc(p,q)
#Tente de trouver des nombres premiers de la forme 2xpyqz+ l avec x,y,z inférieurs à 15.
> local i,j,k,résultat; > for i from 1 to 10 do > for j from I to 10 do > for k from 1 to 10 do > resultat:=lehmer(p,q,i,j,k); > if op(2,résultat) then print(op(l,résultat)) fi > od > od > od; > end: Exemple : > recherche_nombre_premier(13,17); 443 127739 3083284788923 479911667
Le logarithme discret
57
74699 21587723 6238851659 280640387 32696691610903786345907 1255153589 230315207162895557 942984713477 6578032631779459974917 24955406633 7212112516649 50495849 4217463720809 110939378057 120454981329997289 5451247506814097 38167092497 3187753732358417 Warning, computation interrupted On voit qu’on a trouvé, à partir des nombres 13 et 17, des nombres premiers comportant 23 chiffres décimaux. La procédure ci-dessus peut bien sûr être généralisée à plus de deux nombres p et q. Pour d ’autres améliorations, voir [2] p.73. En limitant max à 100 (ce qui revient à chercher des nombres premiers ayant un racine primitive inférieure à 1 0 0 ), et en autorisant y et z à aller jusqu'à 15 : >recherche_nombre_premier(307,311); 168363159544541248187 13331914310218912445935488164244139266718665123815888027 404815610740914831386533419977689748659881834719 3595926063849408702678736497837434268415088941348701366719 Warning, computation interrupted Avec max = 100, x < 20 , y < 50 , z < 50 >recherche_nombre premier(307,311); 168363159544541248187 13331914310218912445935488164244139266718665123815888027 9238917141606191652660177203487493558196203633605437939375147983194083492 8294391220148793395919393124138141947 Warning, computation interrupted on obtient donc un nombre premier ayant 1 1 0 chiffres. Un problème de principe demeure dans l’utilisation de cette méthode : existe-t-il beaucoup de nombres premiers ayant une racine primitive inférieure à 100 ? La question reste posée.
CRYPTOSYSTEMES Présentation du problème Longtemps domaine réservé des militaires et des ambassadeurs, la cryptographie, c’est-àdire l’art d ’envoyer des messages secrets, s’impose aujourd’hui au grand public afin d’assurer la confidentialité des communications informatiques, ou celle des données stockées sur un disque dur d’ordinateur. Les banquiers et les services commerciaux ont besoin quant à eux de disposer de protocoles de signatures, avant d’accepter un ordre de virement ou une commande. De ce point de vue, il est bien naïf d ’accepter une commande téléphonique sur le simple énoncé d ’un numéro de carte bancaire ! Un message M est constitué d ’une chaîne finie de symboles issus d’un alphabet fini Z. Au message M on associe e(M) le message crypté. On définit donc une fonction e De même on définit une fonction de décryptage d telle que pour tout message M d(e(M» = M. Les fonctions e, ainsi que d, peuvent être des fonctions (algorithmes) paramétrées par une clé K. C = e(M,K) est le cryptogramme. Il peut arriver que la clé K utilisée pour crypter ne soit pas la même que la clé K’ pour décrypter. Il peut même arriver que l’on n’utilise pas de clé.
5.1 Exemples de cryptosytèmes classiques 5.1.1
Trois exemples ont déjà été présentés :
Le système de César. (2.1.7.1 ) Le système de Vigénère. (2.1.7.2) La permutation des lettres de l’alphabet. (2.1.7.3) Ces systèmes dits à substitution sont très vulnérables, car ils maintiennent les fréquences des lettres de l’alphabet.
5.1.2 N-gramme substitution Exemple : Di-Gramme. Le message « PR|IE|RE| DE| CO|DE|R C|E M|ES|SA|GE » sera découpé par groupe de 2 lettres. Une table de permutation des 262 couples de 2 lettres permet de coder le message. Très vulnérable aussi, à cause des fréquences d’apparition de groupes de deux lettres. Par exemple ‘TT’, ‘LL’ sont fréquents en français.
5.1.3 Permutation d’ordre d Un tel système, où la place des lettres du message en clair est simplement modifiée est habituellement appelé « chiffre à transposition ».
Initiation à la cryptographie
60
Par exemple,si d
=5 et n = [' 12
51le messageest découpé en blocs de 5 lettres
2 3
4
5 4
3 ij
auxquels on applique la transposition ü : PRIER|E DE CO|DER CE| MESSA|GE XEA donne RPEIR|0 EC EDIEDC RE| AMSSE|AG EXE Cette méthode conserve les fréquences des lettres mais détruit les di-grammes, trigrammes... Rappelonsque FI —I * 2 3 4 5| notée aussi (2,5,4.3 1 ) consiste à envoyer lapremière U 5
4
3
lj
lettre en position 2, la seconde en position 5 ... Une manière simple d’utiliser cette technique est d ’écrire le texte sur une feuille quadrillée de dimension convenue (une lettre par carreau), puis de lire le résultat par colonne. E R P R 1 C D E O E D E R C E E S S M A E F G X G Donne : PEDMGRDEEEIERSXECCSFROEAG
5.1.4 Playfair Cipher Disposer les 25 lettres de l’alphabet (W exclu car inutile) en matrice 5*5, ce qui donne la clé. B Y D G Z U P S F J K A R X L C O I V E H N M T 0 Chiffrer le texte par groupe de deux lettres : par exemple OK sera chiffré AV. Pour arriver à ce résultat on repère le rectangle ayant comme coins les lettres O et K. A et V forment les deux autres coins de ce rectangle. Si les deux lettres sont sur une même ligne ou colonne, prendre les deux lettres qui suivent immédiatement. JF sera remplacé par SU
5.1.5 Transformation linéaire Déjà présenté.
5.1.6
(2.3.3.1)
La machine ENIGMA
La machine à crypter ENIGMA date du début des années 1930. Elle a été utilisée, avec quelques améliorations pendant toute la seconde guerre mondiale par l’armée allemande convaincue de l’inviolabilité de la machine, alors que dès 1932 une équipe de mathématiciens polonais en avait fait la cryptanalyse.
61
Cryptosystèmes
C’est Alan Turing qui a pris le relais, des 1940, en cassant successivement les différentes modifications de ENIGMA, donnant la possibilité à l’Angleterre de savoir presque tout des communications des armées allemandes et italiennes. Les détails de la cryptanalyse de ENIGMA par les mathématiciens polonais puis anglais sont longuement exposés dans le livre de Hodges [16]. Un rapide aperçu historique de l’atout qu’a représenté ce travail pour l’Angleterre est disponible dans l’article de Serge C. Derbyshire des Dossiers de l ’histoire [15]. Commençons par décrire la machine ENIGMA, tout au moins son modèle commercial. ENIGMA était constitué d’un clavier pour les 26 lettres de l’alphabet, et d’un panneau lumineux sur lequel l’une des 26 lettres de l’alphabet pouvait s’éclairer. L’enfoncement d’une touche permettait au courant électrique de se propager dans 3 rotors qui tournaient après chaque frappe comme les roues d’un compteur kilométrique : le rotor 1 , après un tour complet décalait le rotor 2 d ’une unité ... Contrairement au compteur kilométrique numéroté de 0 à 9, les rotors de ENIGMA étaient « numérotés » de A à Z. Sous chaque lettre étaient disposés deux contacts électriques, l’un à gauche, l’autre à droite. Nous appellerons Ag et Ad les contacts gauche et droite situées sous A. U ft.
30. 1924
1,510.441
E . H . H E B E ftN BUCTKIC C0DIN9 NACIUHt
A
R o to r 1
À l’intérieur des rotors un câblage mettait en relation un contact gauche avec un contact droit : par exemple, sur le schéma ci-dessus Ag— Dd pour le rotor 1. Chaque rotor était donc caractérisé par son plan de câblage. Enfin un « réflecteur » renvoyait le courant dans le circuit des rotors et vers le tableau lumineux. Ce réflecteur assurait simplement la liaison par paires entres ses bornes, par exemple 1 —3 et 2 —4 sur le schéma ci-dessous.
Initiation à la cryptographie
62
Suivons sur le schéma 1, où la machine est en position AAA , ce qui se passe lorsque la touche A est enfoncée. Le courant entre en Ag, et ressort du rotor 1 en Dd. pour sortir du rotor 2 en Bd ... pour finir par allumer la lampe « C ». Remarquer, et cela est très important, que si on avait enfoncé la touche C, alors la lampe « A » se serait allumée. Pour une position donnée des rotors, le système est parfaitement symétrique. N'Entrée
Clavier Lampes A----- -» 0 B---- — 0 C----- i. D----- - 0 E----- b _ a ------
. * * *
I 2
3
4 5
Rotorl
Rotor2
A " B ,-c c ' D v E
A B ~ ~C
Rotorî A B C " 'IX . E
Réflecteur
. 1 , 4
1 2 ■. —4*J 4 S H
-----
ENIGMA en position AAA. L’appui sur la touche A allume la lampe « C ». (On n’a représenté que 5 lettres de la machine)
Nous avons donc enfoncé la touche A, la lampe « C » s’est allumée, puis la rotor 1 a avancé d’un cran. Regardons sur le schéma 2 ce qui se passe si nous appuyons à nouveau sur la touche A. Cette fois ci, c’est la lampe « E » qui s’allume. (Bien sur tous ces câblages sont totalement fictifs) Clavier Lampes A----- -» 0 B----0 C----0 D----- —. ç E----- -r 0
N° Entrée „
1 3 4
5
Rotorl r* B ~ -C - _ D E - -F '
Rotor2 /-* A B " c -'; E
RotorB r* A B C ~D E
Réflecteur 1 . 2 * 3 4 S
1
E N'IGMA en position BAA.
Comment crypter un message ? 1) Positionnez les rotors à votre convenance : par exemple en position AWO. AWO est alors votre clé de cryptage. 2) Tapez votre texte en notant à chaque frappe la lettre qui s’allume 3) Envoyez le cryptogramme obtenu. Comment déchiffer le message reçu ? 1) Positionnez les rotors sur AWO (vous aviez au préalable convenu de la clé avec votre correspondant). 2) Tapez le cryptogramme reçu en notant à chaque frappe la lettre qui s’allume. 3) Lisez votre message. En effet la symétrie du système soulignée plus haut vous assure de retrouver le texte d’origine. Le procédé est séduisant par sa simplicité d’utilisation, et l’apparente complexité de la machine, surtout si l’on sait que la version militaire a été compliquée un peu par l’augmentation du nombre de rotors, la possibilité d’intercaler entre le clavier et le premier rotor un tableau de connexion qui croisait certains fils... Et pourtant...
Cryptosystèmes
63
Avant de continuer, un petit exercice. Imaginons que vous câbliez tous les rotors de votre ENIGMA de la façon suivante : Ag— Bd, Bg—C d , Z g —Ad. Qu’advient-il ? Vous avez transformé votre magnifique ENIGMA en une machine qui effectue une bête substitution alphabétique, celle du réflecteur. Il apparaît clairement que certains câblages sont efficaces, et d’autre parfaitement nuls ! L’histoire des « améliorations » de la machine rapporté dans [16] en fournit un exemple. Pour comprendre comment ENIGMA a été « cassée », il convient d’abord de préciser comment elle était utilisée par l’armée allemande, à l’échelle d’un réseau de grande ampleur puisqu’il s’agissait de permettre à tous les états-majors, bateaux, sous marins ... de communiquer entre eux. Chacun avait la liste des clés, une par jour, qui servait à crypter la clé choisie par l’opérateur qui voulait émettre sur le réseau. Par exemple si la clé du jour était HXA, alors l’opérateur cryptait la clé AWO, qu’il avait choisie, avec la clé HXA, puis il émettait son message en utilisant sa clé AWO. Le message commençait donc par 6 lettres (on verra dans un instant pourquoi) correspondant à la clé AWO cryptée avec la clé du jopr HXA, suivie du texte crypté avec la clé AWO. En fait, pour plus de sécurité, la clé AWO était cryptée avec HXA sous la forme AWOAWO. Une répétition qui a été fatale puisqu’elle a permis à une équipe de mathématiciens polonais de décrire les plans de câblage des rotors, puis de « casser » ENIGMA dès 1932 Par ailleurs, il faut bien comprendre que si un message, même de moindre importance stratégique était décrypté, alors la clé du jour HXA était trouvée et tous les messages du jour pouvaient être lus. Par exemple des navires météorologiques prenaient peu de précautions pour crypter leurs bulletins ... Par « peu de précautions » il faut entendre la chose suivante : le travail du cryptanalyste va être grandement facilité s’il sait que le message commence toujours par le même en-tête, ou se termine par la même formule de politesse. Pour des messages « top secret » l’opérateur s’appliquera à brouiller les cartes en insérant du charabia dans son texte ...Mais pour un bulletin météo, est-ce bien la peine ? D’autres erreurs ont permis de percer le secret, par exemple à l’occasion de changements de systèmes : des opérateurs maladroits ont envoyé le même message avec l’ancien, puis avec le nouveau système. L’histoire de la machine ENIGMA est passionnante, non seulement parce qu’elle nous apprend à quel point le cours de la seconde guerre mondiale a été déterminé par Alan Turing et ceux qui ont travaillé avec lui à décrypter ENIGMA, mais aussi parce que, dans un univers où le secret est la règle, on dispose d’une documentation importante sur les problèmes posés par la mise en place d ’un système cryptographique de grande envergure et les méthodes de cryptanalyse. Si on devait résumer en quelques mots la morale de l’utilisation d’ENIGMA, on pourrait dire : N ’ACCORDEZ JAMAIS UNE CONFIANCE AVEUGLE À UN SYSTÈME DE CRYPTOGRAPHIE.
5.2 Casser un cryptosystème En fait les exemples ci-dessus, en plus d ’être intrinsèquement vulnérables, supposent que le procédé de cryptage (l’algorithme) est tenu secret. Comme on Ta vu, ENIGMA était une
Initiation à la cryptographie
64
machine du commerce, et même si le câblage des rotors pouvait être modifié, cela n’a pas empêché que les Polonais devinent ce câblage par simple lecture des textes chiffrés. Des exemplaires intacts de machines ENIGMA ont été capturés par les Anglais. Il en est de même si l’on veut commercialiser un logiciel ou une carte spécialisée à brancher sur un ordinateur : tout acheteur peut étudier à sa guise les rouages du logiciel ou de la carte. Et un responsable de banque peut-il avoir une totale confiance dans le technicien qui a mis au point l’algorithme de cryptage des ordres de virement ? En cryptographie moderne on doit considérer que tout est public : les algorithmes de cryptage et de décryptage. On doit même envisager la possibilité qu’un ennemi, car tel est son nom, a la possibilité d ’accéder à la machine à crypter, et peut fabriquer à sa convenance des couples (Message, Message crypté). La seule chose qui soit privée est la clé choisie K. On a donc le schéma suivant
L’ennemi connaît
e et d Dispose de messages M et de e(M) et peut même en générer à sa convenance L’ennemi ne connaît pas la clé K et doit la découvrir. Le travail de l’ennemi est appelé cryptanalyse. Attention : a)
Dans le schéma ci-dessus on suppose que la distribution de clés se fait en parfaite sécurité, c’est-à-dire que l’ennemi n’écoute pas la ligne de distribution des clés. Si c ’est le cas, il convient de crypter la distribution des clés à l’aide d ’un cryptosystème avec une clé L.... On sent bien qu’il y a là un problème majeur On verra plus loin comment Diffie et Hellman l’ont résolu en 1976. Encore ENIGMA : Hodges [16J explique comment certains navires ont été capturés avec assez de rapidité pour que le commandant n’ait pas le temps de détruire ses carnets de clés, livrant l’accès à tous les messages du mois précédent et du mois à venir ! La grande faiblesse d’ENIGMA a été le communication des clés.
b)
Un gros problème est la génération des clés. Il est essentiel de ne pas utiliser des clés du genre ‘date de naissance’ que l’ennemi aura vite fait d’essayer. Le générateur de clés doit être un générateur aléatoire parfait, ce qui n’est pas simple à fabriquer
Cryptosystèmes
65
puisque les générateur pseudo-aléatoires souvent utilisés en informatique sont en fait prévisibles. c)
Il ne sert à rien de disposer d ’un cryptosystème sûr si la clé n ’est pas tenue secrète. Pensez au numéro de votre carte bancaire que chacun peut lire pendant que vous tapez votre code dans un magasin ! Ou même, qui vous garantit qu’un commerçant n’a pas posé un mouchard dans le boîtier sur lequel vous tapez votre code ?
d)
Encore pire : certaines personnes équipent la porte de leur maison d’un blindage de première qualité, de serrures de haute sécurité et laissent une fenêtre ouverte... Toute leur protection s’écroule ! 11 en va de même avec les cartes bancaires à puces : celles-ci sont protégées par des protocoles cryptographiques sophistiqués et de bonne qualité, et même si vous avez réussi à taper votre «code confidentiel » à l’abri des regards indiscrets, tout commerçant, toute personne connaissant le numéro public de votre carte peut à sa guise piocher sur votre compte bancaire. Si ! Relisez bien le formulaire que vous avez signé pour obtenir votre carte bancaire ! «... Le titulaire du compte autorise la banque X à débiter son compte sur le vu des enregistrements ou des relevés transmis par le commerçant, même en l’absence de factures signées par le titulaire de la carteouassorties d ’un contrôle du code confidentiel, pour le règlementdes achats de biensou des prestations de services. Ces règlements peuvent être effectués... » Extrait d ’un contrat.
Ceux qui ne sont pas convaincus sont invités à passer une commande dans un magasin de vente par correspondance : ils seront invités à communiquer leur numéro de carte bancaire, et verront leur compte débité sans avoir signé le moindre papier, ni même tapé sur quelque machine que ce soit leur « code confidentiel ». La fenêtre est grande ouverte sur votre compte en banque et il n’y a que les imbéciles pour tenter de passer par la porte blindée ! Est-il pensable que de telles pratiques soient acceptées ? L’illusion de la sécurité est-elle préférable à l’insécurité ?
5.3 Les différents niveaux d’attaque 1)
Attaque à texte chiffré. Estelle dispose uniquement d’un (ou plusieurs) textes chiffré assez longs Un cryptosystème par substitution alphabétique est très vulnérable à ce type d’attaque, puisque la fréquence des lettres permet de trouver rapidement la clé en utilisant des méthodes statistiques.
2)
Attaque à (texte clair-texte chiffré). Estelle dispose d ’un texte clair et du texte chiffré correspondant. La situation n’est pas rare, puisque, comme on l’a vu à propos de ENIGMA, il arrive que l’on puisse repérer les en-têtes, les formules de politesse ... Un « truc » utilisé par les cryptanalystes anglais consistait à demander à l'armée de miner l’entrée d’un port. Dans la demi-heure qui suivait, le responsable du port émettait sous forme cryptée un message avisant les navires du danger. Comme les
Initiation à la cryptographie
66
cryptanalystes avaient une connaissance complète du formulaire utilisé, et qu’ils connaissaient le contenu du message, cela leur fournissait un couple (texte clair-texte chiffré). 3)
Attaque à texte en clair choisi. Estelle dispose d’un exemplaire de la machine à crypter, la clé (inaccessible mais ayant été insérée), et peut crypter des messages de son choix, par exemple une suite de A, et regarder le résultat obtenu. Pour ceux qui pensent que le cas est un peu extrême, imaginons la situation de l’employé d ’une banque chargé d ’expédier les ordres de virement. Le directeur entre chaque matin la clé du jour dans le terminal de l’employé qui peut alors se livrer à une attaque à texte en clair choisi pour deviner la clé.
4)
Attaque exhaustive. Estelle dispose d ’un exemplaire de la machine à crypter, d ’un couple (texte, texte chiffré), et essaie l’une après l’autre toutes les clés possibles jusqu’à obtenir en sortie le texte chiffré.
Dans son livre « CRYPTOGRAPHIE APPLIQUÉE » [8 ], Bruce Schneier décrit une telle attaque du DES par « loterie chinoise » : un gouvernement impose que tout poste de radio ou de télévision vendu soit équipé d’une puce testant un certain nombre de clés. Lorsque le gouvernement veut trouver une clé, il diffuse sur les ondes un couple (texte clair, texte chiffré), et tous les postes se mettent au travail. Un seul poste trouve la clé, et son heureux propriétaire se voit remettre une récompense après avoir communiqué la clé. L’auteur obtient une estimation du temps d'une telle attaque : T a b . 7.5 - E s tim a tio n s p o u r u n e a tta q u e e x h a u s tiv e p o u r la lo te rie c h in o ise (les d o n n é es c o n c e rn a n t la p o p u la tio n e t le n o m b r e de ra d io s e t té lé v isio n s provien n e n t de « 1 9 9 2 W o rld A lm a n a c »)
Contrée Chine Etats-Unis Irak Israël Wyoming (USA) Morehead, NC (USA)
Population (approx.) 1 130065 000 248 709873 18782 000 4 371000 453588 6046
Nombre de télévisions et radios 265 000 000 687 000000 4 800000 2620000 1 256000 16 700
Temps nécessaire Clef de 56 bits Clef de 64 bits 272 secondes 19 heures 104 secondes 7,4 heures 4,2 heures 44 jours 7,6 heures 81 jours 16 heures 170 jours 50 jours 35 années
Une autre solution envisagée, à l’usage d’un particulier, est de répandre un virus sur le réseau mondial, virus qui va utiliser les ordinateurs infestés pour tester les clés. Voilà un moyen simple de s’approprier la puissance de calcul des ordinateurs du monde entier! En bref, si peu de clés sont disponibles, le système sera très vulnérable face à une attaque exhaustive. On montre qu’une condition nécessaire pour qu'un cryptosystème soit parfaitement secret est qu’il y ait au moins autant de clés que de messages possibles. Il serait naïf de croire que la liste des attaques citées est complète. D’autre procédés ont été publiés. Combien sont gardés soigneusement secrets par leurs inventeurs ? Un bon système cryptographique se doit d ’être résistant à une attaque du plus haut niveau.
Cryptosystèmes
67
5.4 Masque jetable (One time pad). Vernam 1917 Certains considèrent que c’est le seul cryptosystème parfaitement sûr. Il aurait été utilisé pour le téléphone rouge entre Washington et Moscou pendant la guerre froide. On remarquera qu’il ne résout pas le problème de la distribution des clés, sauf si on utilise la valise diplomatique, ce qui n’est pas à la portée de tous ! La clé K est une suite aléatoire de nombres de Z/nZ (n = 31 si on pense aux exemples déjà vus, mais on utilise habituellement le code ASCII à 256 caractères et on choisira alors n = 256) de même longueur que le texte. Alice convertit le texte en nombres (pour le code ASCII, A = 65, B = 6 6 ...) puis additionne lettre par lettre le message et la clé K (addition modulo n). Bob n’a plus qu’à soustraire la clé du message reçu pour retrouver le texte en clair. Alice et Bob détruisent la clé K qui ne sert qu’une fois. Personne, pas même Alice ni Bob, ne peut retrouver le texte en clair s’il ne connaît que la clé. Ce système, très simple dans son principe, est en pratique inutilisable : la distribution des clés est un problème critique, résolu pour le téléphone rouge par la valise diplomatique De toute façon il est aussi simple d’envoyer directement le message plutôt que la clé ! De plus, quels sont les particuliers ayant accès à la valise diplomatique ? D’autres méthodes sont abordées dans les chapitres suivants.
5.5 Cryptographie quantique. Les physiciens tentent de réaliser un système de transmission fondé sur la mécanique quantique et les propriétés très particulière de la matière dans ce domaine. Grossièrement, chaque bit du message serait codé avec un seul photon. Si Estelle capte un photon, alors Bob ne le reçoit pas et est immédiatement informé de l’écoute. Ces idées, ainsi qu’un protocole possible de transmission, sont exposés dans [14],
5.6 Fiches pratiques 5.6.1
Convertir du texte en nombre
La cryptographie mathématique est pour beaucoup basée sur l’arithmétique élémentaire. Cela suppose que les messages sont entièrement convertis en nombres avant toute manipulation. Nous avons vu à propos du système de César une première méthode remplaçant a par 1, b par 2 ,... plus quelques signes de ponctuation. Cela n’est pas très satisfaisant : même pour du texte ordinaire, on perd une partie de la ponctuation, des ordres de retour à la ligne ...Il convient de faire mieux. Si vous travaillez avec un ordinateur vous devez savoir que n’importe quel texte que vous avez tapé est stocké par le biais du code ASCII sous forme de nombres. Par exemple A -> 65, B -> 6 6 ... et a -> 97, b -> 98 ..., ceci en écriture décimale. En fait A est codé sous
68
Initiation à la cryptographie
forme d’un octet, c'est-à-dire d’une succession de huit 0 et 1 : A ->(01000001), B ->(01000010), ...ce qui correspond à l’écriture binaire de 65 et de 6 6 . Tout texte que vous tapez sur votre clavier est immédiatement converti en « nombre » par l’ordinateur. Allons plus loin : tout ce que vous enregistrez sur une disquette n’est jamais qu’une succession d’octets, c’est-à-dire une succession de nombres de 0 à 255 (puisque avec un octet vous pouvez compter jusqu’à 255 = 2 8 - 1). Et si vous pensez qu il n’est pas agréable de ne compter que jusqu’à 255, alors collez deux octets ensembles. Vous compterez ainsi jusqu’à 65535. Ainsi on obtient AB -> 0100000101000010 soit en écriture décimale 16706. Et au diable l’avarice, puisque la cryptographie aime les grands nombres, vous pouvez toujours regrouper les données de votre disquette par groupes de seize octets et interpréter chaque groupe comme un nombre de 0 à 2 128 - 1 , puis lui faire subir toute opération arithmétique de votre choix. Ces considérations de principe intéressent essentiellement celui qui voudrait écrire un logiciel permettant de crypter les données contenues dans son ordinateur, et qui n ’aurait pas peur d’aller traquer les bit et les octets là où ils se trouvent. Pour notre propos, nous nous contenterons soit de la conversion exposée avec le système de César, soit de celle fournie par MAPLE en exemple dans la version 3 et que nous nous contenterons de copier. >To number:=proc(st) >loca) Il,nn,ss,ii,num; >num:=table(|'a'=l,'b'=2,'c'=3,'d'=4,'e'=5,'f =6,'g'=7,'h'=8,'i'=9,'j'=10,'k'=l l,T =12,’m '=13,'n'=l 4,'o'=l 5,'p'=16,'q'=l 7,'r'=l 8,'s'= 19,'t'=20,'u'=21,V=22,'w'=23,,x'=24,'y'=25, *z'=26,'' '*=271): > if not type(st,string) then ERROR('wrong number (or type) of arguments') fi; > ll:=length(st); > if 11= 0 then RETURN(O) fi; > nn:=l; > for ii from 1 to II do > ss:=num|substring(st,ii..ii)|; > iffnot type(ss,numeric)) then ERROR('wrong number (or type) of arguments') fi; > nn:=100*nn+ss; > od; > nn-10A(2*ll); > end: > from_number:=proc(nn) > local ss,mm,ll,ii,ans,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,' ',alpha; >alpha:=table(| 1=a,2=b,3=c,4=d,5=e,6=f,7=g,8=h,9=i,10=j,ll=k,l 2=1,13=m,14=n,15=o, 16=p, 17=q,l 8=r,l 9=s,20=t,21=u,22=v,23=w,24=x,25=y,26=z,27=' ' ]): > mm:=nn; > if(not type(nn,integer)) then ERROR('wrong number (or type) of arguments ) fi; > H:=floor(trunc(evalf(loglO(mm)))/2)+l; > ans:="; > for ii from 1 to II do > mm:=mm/100;
Cryptosystèmes
69
> ss:=alpha|frac(mm)*100|; > if(not type(ss,string» then ERROR('wrong number (or type) of arguments) fi; > ans:=cat(ss, ans); > mm:=trunc(mm) > od; > ans; > end: Here is an example o f how these routines are used: > to number('maple’); 1301161205 > from_number(805121215); hello Seules les lettres minuscules et les espaces sont acceptés. Une phrase de dix caractères est donc convertie en un nombre valant au plus 27272727272727272727 soit à peu près 3 x 10'°.
FONCTIONS À SENS UNIQUE Avec le dévelopement des ordinateurs et de leur puissance de calcul, les cryptosystèmes présentés au chapitre précédent sont caducs car trop simples. Un fait remarquable est que l’informatique soit née des travaux de cryptanalyse contre la machine ENIGMA par Alan Turing. La cryptologie se serait-elle détruite elle même en créant les outils pour casser ENIGMA ? La réponse est non, et deux orientations principales semblent se dégager, l’une illustrée par le DES, l’autre par le système RSA. Pour résumer en quelques mots, le DES est un algorithme de broyage et de mélange de la clé et du message, mélange suffisamment fin pour rendre tout retour en arrière chiffre -> message ou chiffre -> clé impossible (sauf pour l’utilisateur autorisé). Le RSA au contraire utilise des fonctions mathématiques faciles à calculer mais très difficiles à inverser, rendant tout retour en arrière impossible. Le plus fort est que la clé n ’a même plus besoin d’être tenue secrète.
6.1 Fonctions à sens unique Avant de commencer, passons en revue les notions essentielles dont nous aurons besoin : • Nombres premiers et congruence : Z/pZ est un corps. • La notion de complexité algorithmique : la factorisation de n est « difficile ». • Algorithme d’Euclide permettant de trouver « rapidement » l’inverse de a dans Z/pZ. • L’exponentielle et le logarithme discret dans Z/pZ. Le calcul de ax étant « rapide », celui du logarithme discret étant « difficile ». • Enfin une dernière notion qui n’a pas été développée, mais qui devrait facilement emporter la conviction du lecteur : élever un nombre au carré dans Z/pZ est « rapide ». Par contre trouver une racine carrée de x est « difficile ». De même, toute résolution d’équation algébrique de degré supérieur ou égal à 2 est « difficile ». Définition : Par « définition », f est une fonction à sens unique si connaissant x, f(x) est facile à calculer, mais connaissant f(x), il est pratiquement impossible de calculer x, c’est-à-dire de résoudre l’équation f(x) = y. Par pratiquement impossible, on entend que le temps de calcul est de l’ordre de quelques siècles, même sur de gros ordinateurs. La théorie de la complexité fournit tout un stock de telles fonctions. Un argument contre la cryptographie mathématique est que l’on n’a pas la certitude qu’une fonction considérée aujourd’hui à sens unique ne sera pas demain résolue et considérée comme banale. Un mathématicien génial qui aurait trouvé la solution pour inverser facilement une fonction à sens unique aurait la possibilité de casser tous les système bâtis autour de cette notion. On peut imaginer que les service secrets de certaines grandes puissances aient déjà trouvé le moyen de casser certains cryptosystèmes... Le problème n’est pas à négliger mais peut recevoir la réponse suivante : ne sachant pas inverser les fonctions à sens unique, le monde des mathématiques en a dressé un catalogue
Initiation à la cryptographie
72
et les a classés dans la catégorie des problèmes dit « NP-Complets ». Or il est apparu que la résolution d ’un seul de ces problèmes amène la résolution de tous les autres, dont certains ont un intérêt économique énorme. Quel gouvernement garderait secrètes ces solutions, juste pour pouvoir espionner son prochain ? Exemple d ’utilisation des fonctions à sens unique : le problème du mot de passe. De nombreux logiciels demandent à l’utilisateur un « code d ’accès ». Ce code étant inscrit sur le disque dur, n’importe quel utilisateur un peu averti peut le lire ! Une fonction à sens unique résout le problème : le logiciel contient la fonction f (Algorithme public). Si x est le « code d’accès », on écrit f(x) sur le disque dur. Un utilisateur averti aura accès à f(x), mais ne pourra jamais trouver x. Exemples : 1)
Il est facile de calculer x2= y mais difficile de calculer J ÿ , en particulier dans Z/pZ. Les fonctions polynomiales de degré supérieur ou égal à deux dans Z/pZ fournissent des fonctions à sens unique puisque la résolution d’équations algébriques est difficile.
2)
La décomposition en facteurs premiers (factorisation) est un problème difficile pour un nombre n « grand ». (Décomposer par exemple 267 - 1) La fonction f est : f(p,q) = p*q Chaque utilisateur choisit deux « grands » nombres premiers comme code d ’accès et écrit p*q sur le disque dur.
3)
Le logarithme discret. Comme on l’a vu, l’exponentielle est une fonction à sens unique, si n est un nombre premier p.
4)
Sac à dos. (1978 Merkle et Hellman)
Données : Une suite d ’entiers positifs a,, a2,..., an, et t Problème : Existe-t-il un sous ensemble J
eJ
fonction à sens unique. (Pourquoi ce nom « sac à dos » ? Imaginez que vous ayez des pierres de 14 g, 28 g,... et que vous en ayez mis certaines dans le sac à dos. Au total le sac pèse 515g. Quelles pierres avez vous dans le sac ?) Pour le problème du code d ’accès, S et t sont écrits sur le disque dur. L’utilisateur choisit simplement les numéros des éléments de S comme code d ’accès. En pratique, l’utilisateur saisira un nombre N comme code d’accès. Ce nombre sera converti en binaire par l’ordinateur. Seuls les a, correspondants aux 1 de l’écriture binaire de N seront additionnés.
Fonctions à sens unique
73
Exemple : Mot de passe Somme t =
14, 28, 56, 82, 90, 132, 197, 284, 341, 455 1 ,0 ,0 , 1 ,1 ,1 , 0 , 0 , 1 , 0 14 + 82 + 90 + 132 + 341 = 659 rendu public.
6.2 Premières applications des fonctions à sens unique. 6.2.1
Partage de clés
Idée de Diffie et Hellman 1976. Dans ce chapitre les calculs sont effectuées dans Z/pZ. (p premier)
1. Version sim plifiée a)
Alice et Bob choisissent un nombre a public, (p public, a < p et a doit être une racine primitive de p).
b)
Alice choisit un nombre secret X,. Bob choisit un nombre secret X2.
c)
Alice envoie à Bob axi, Bob calcule K = (ax ') x2 = a XIX2 Bob envoie à Alice aX2. Alice calcule K = (ax2)xi = axlx2.
Alice et Bob ont alors en main la même clé secrète K. Si Estelle intercepte axi ou aX2, elle ne peut calculer ni X, ni X 2 puisque le logarithme discret est un problème difficile. Il ne reste plus à Alice et Bob qu’à utiliser leur cryptosystème favori en utilisant leur clé commune K. N.B. Le système repose sur la commutativité de l’exponentielle : (Xa)b= (Xb)a
2. Généralisation Une collection d’utilisateurs (U„ compris entre 1 et n ) veulent communiquer. Soit p un nombre premier « grand » et a une racine primitive de p, rendus publics. Chaque utilisateur i choisit un nombre X, < p (secret), puis rend public Y; = aXl. Si U, et Uj veulent communiquer, ils calculent chacun la clé Kjj= aXlXj : U, calcule (axj)xi=Kÿ Uj calcule (axi)xj= Ky Le problème du partage des clés qui a rendu ENIGMA si fragile est donc résolu, sous réserve que le problème du logarithme discret reste un problème difficile.
6.2.2
Un cryptosytème sans clé
Alice et Bob veulent communiquer. Le message M est un nombre M < p où p est un nombre premier « grand », rendu public.
Initiation à la cryptographie
74
Pour transformer le message en nombre, celui-ci sera découpé en blocs de longueur convenable. a) b) c) d) e)
Alice choisit a < P . a premier avec p - 1 . (a secret) Bob choisit b < p ,b premier avec p - 1 . (b secret) Alice envoie à Bob C = Ma [p] Bob envoie à Alice D = Cb [p] Alice calcule l’inverse a’ de a [p- 1] aa’ = 1 [p - 1] (algorithme d’Euclide) Alice Envoie à Bob E = Da Bob calcule l’inverse b’ de b [p - 1] bb’ = l [ p - l ] Bob calcule F = Eb et obtient M !!!!!!!! En effet F = Eb = DbV= CbVb = MbVba = M d’après le théorème d’Euler.
L’élégance du système fait oublier le nombre d’aller-retours.
6.2.3 Cryptosystème à clé publique Parmi les nombreux systèmes à clé publique, citons pour commencer celui-ci : 1)
Choix public d ’un nombre premier « grand », et d’une racine primitive a de p.
2)
Chaque utilisateur B (B comme Bob) choisit une clé privée Xb secrète, avec Xb compris entre 1 et p - 1, et publie Yb = aXb [p]
3)
Alice veut communiquer à Bob le message M (interprété comme un nombre compris entre 1 et p - 1 ). Alice choisit un nombre k compris entre 1 et p - 1 et calcule la clé K=Ybk. Alice envoie le message (ak,K*M) = (C,,C2)
4)
Bob déchiffre : Bob calcule C,Xb = (ak)Xb = aXb*k = Ybk = K Il ne reste plus qu’à diviser C 2 par K.
6.2.4 Algorithme du sac à dos Il s’agit d’un exemple très simple de cryptosystème « avec gâche secrète». Ce protocole a malheureusement été cassé. 11 illustre cependant parfaitement les méthodes employées. Enfin il se programme facilement, en particulier sur un tableur. Rappel Sac à dos. (1978 Merkle et Hellman) Données : Une suite d ’entiers positifs a„ a2,..., an, et t Problème : Existe-t-il un sous ensemble J c {1, 2,..., n} = I tel que
= ( i e J
Par exemple, démontrer (Hellman 1978) que 516 ne peut s’écrire comme somme des nombres de {14, 28, 56, 82, 90, 132, 197, 284, 341, 455} 515 peut s’écrire de 3 façons différentes à l’aide de ces nombres La fonction qui à un sous ensemble J de S = { a„ a,,..., an} associe t est une fonction à sens unique.
Fonctions à sens unique
75
Si (aj) est un suite « supercroissante », c’est-à-dire
«i > L ,O j (i > j<‘
1)
, le problème est
facile à résoudre. En effet, soit ak le plus grand élément de (a;), inférieur ou égal à t. Alors
k + 1, k + 2 ... ne sont pas dans J car sinon la somme
serait supérieure à t. l'ej
k appartient à J car sinon la somme serait inférieure à
2 -,°, < ak j
On recommence avec t - ak à la place de t. N.B. La résolution du problème est facile pour « tout le monde ». On va ensuite 'brouiller’ les cartes. Petite complication. (Card(I) = n) Alice choisit
m> ^ a
((a,) suite super croissante)
le /
u un nombre premier avec m.
(Soit v l’inverse de u dans Z/mZ )
Alice rend publique la suite (b|) = (u*a; [m]) et garde secrets (a,), u, m et v. La multiplication de ai par u détruit le caractère « supercroissant » de (ai). En apparence, seule Alice sait que derrière (bj) se cache une suite supercroissante ! Si Bob veut envoyer un message M à Alice : 1)
Bob écrit M en binaire. M = (x)Wi n
Xj = 0 ou X| = 1
2)
Bob calcule M’= ^ /? .X . et envoie à Alice. i
3)
Alice calcule vM ’ [m] et obtient
correspondant au problème du sac à dos i
facile. Si Estelle intercepte M’, elle se trouve face au problème difficile du sac à dos.
6.3 Fiches pratiques 6.3.1 Le sac à dos Alice a décidé d ’utiliser le cryptosystème du sac à dos. Elle a choisi la suite supercroissante suivante : s = (5,7,13,31,57,127,249,491,983,1980) Elle a demandé à ses correspondants de coder leur texte de la façon suivante : Espace sera codé 00 (décimal) ou (0,0,0,0,0) en binaire. A sera codé 01 (décimal) ou (0,0,0,0,1) en binaire. B ....... Z sera codé 26 (décimal) ou (1,1,0,1,0) en binaire. Espace sera codé 27(décimal) ou ( 1,1,0,1,1 ) en binaire. (Conformément aux procédures to number et from number montrées plus haut)
Initiation à la cryptographie
76
Sac à dos Dans l’exemple ci-dessous, le choix a été fait d’utililser une suite super-croissante de 12 termes. Cela ne permet que de crypter des blocs de 2 lettres. De légères modifications permettront de crypter le texte par blocs de n lettres. L’intérêt est surtout d’illutrer le procédé, et de permettre au lecteur de prendre une feuille et un crayon et de refaire pas à pas tous les calculs à la main. > verifïcation:=proc(suite_sup)
#pour vérifier que la suite utilisée est bien super croissante
> local i,aux,test; > aux:=0;test:=true; > for i from 1 to nops(suite_sup)-l do > aux:=aux+suite_sup[i[; > if aux>suite_sup[i+l] then test:=false;break fi od; > RETURN(test); > end: > s :=(5,7,13,31,57,127,249,491,983,1980,4101,9002) ; > verifïcation(s); true Choisir un nombre m supérieur à la somme des termes de s : > m := convert(s,'+ ')+ 1 0 0 ; #m supérieur à la somme des term es de la suite m := 17146 Choisir u prem ier avec m : > u:=3151; u := 3151 > if ig c d (u ,m )o l then p rin t('e rre u r') fi; #u doit être prem ier avec m > igcdex(u,m ,V ,’b'); #v est l'inverse de u mod(m) 1
Rendre publique la suite S après modifications de s : > S:=|seq(s|i|*u m od(ni),i=l..nops(s))|; #la suite rendue publique S := [15755, 4911, 6671,11951, 8147, 5819,13029, 4001,11153,14982, 11313, 5818) > M :='si';
#le message à envoyer M := si
Chiffrer le message : > crypt:=proc(nom bre)
#to_num ber(M ) fournit un nom bre inférieur à # 2727, ayant donc au maximum 12 chiffres binaires.
> local i,aux,somme; > aux:=convert(nom bre,binary);som m e:= 0 ; > for i from 1 to nops(S) while aux o 0 do somme:=somme+irem(aux,10)*S[nops(S)-i+l|mod(m) ; aux:=trunc(aux/10)od; > RETURN(somme); > end: > M l:=crypt(to_num ber(M »; M l := 15744
Fonctions à sens unique
77
Bob envoie donc le nombre Ml à Alice qui calcule v*Ml > v*M l mod(m); 11900 > > > > >
decrypt:=proc(nom bre) # procédure pour déchiffrer le message reçu local i,aux,résultat; resultat:= 0 ;aux:=nom bre; for i from 1 to nops(s) do if aux>= s[nops(s)-i+l) then resultat:=resultat+ 1 0 A(i-l) ;aux:=aux-s[nops(s)-i+l] fi; > od ; > resultat:=convert(resultat,décim al,binary); > end: > decrypt(v*M l mod(m)); 1909 > from _num ber("); si
6.3.2 Partage de clé Voici un exemple de calculs avec MAPLE du partage de clés : D’abord choisir un grand nombre premier p, et une racine primitive a de p, rendus publics. > with(num theory): #appel du package num theory > p:=nextprim e(10A50); p := 100000000000000000000000000000000000000000000000151 > a:=pprim root(l,p); #Trouver une racine prim itive de p a := 11 Alice choisit X 1, tenu secret : > Xl:=2598795; XI := 2598795 Bob choisit X2 tenu secret : > X2:=4587959; X2 := 4587959 Alice envoie sur le réseau Y1 : > Y l:= a& AX l mod(p); Y1 := 97375648360891427473257516077474150731011970426628 Bob envoie sur le réseau Y2 : > Y2:=a&AX2 mod(p); Y2 := 97236753593149291907467172451874286497588361845598 Bob calcule : > Y1&AX2 mod(p); 23305112400312749219593495061582372828150814462076
78
Initiation à la cryptographie
Alice calcule : > Y2&AX1 ffiod(p); 23305112400312749219593495061582372828150814462076 On peut voir que Bob et Alice sont en possession de la même clé. Le lecteur est invité à tenter de retrouver XI à partir de Y1 avec : >msolve(aAx=Yl,p); Warning, computation interrupted Mesurer ici le temps passé par l’ordinateur avant que vous renonciez !
6.3.3 Cryptosystème sans clé Commençons par chercher un grand nombre premier : >p:=nextprime(58954789623214725648594532215779875236545354654654223315487 43216843213); p := 5895478962321472564859453221577987523654535465465422331548743216843533 Alice choisit a premier avec p - 1, et calcule son inverse modulo p - 1 . > a:=5798756545417; a := 5798756545417 > if ig c d e x ( a ,p -l,'a l')o l then p rin t('erreu r') fi; #a doit être prem ier avec p-1 > a l:= a l m od(p-l); # a l est l'inverse de a modulo p-1 a l := 5210848558332749693865248522235033306566501392896049720794730511750881 Bob choisit b premier avec p - 1, et calcule son inverse modulo p - 1 > b:=687452123569154281; b := 687452123569154281 > if ig c d e x (b ,p -l,'b l')o l then p rin t('e rre u r') fi; #b doit être prem ier avec p -1 > b'l:=bl m od(p-l);# bl est l'inverse de b modulo p -1 b l := 5865126615688536783674065759826885767289884505095017121916033205719401 Alice convertit son message en nombre : > M :=to_num ber('Ie trésor est cache dans la cave'); M := 1205272018051915182705192027030103080527040114192712012703012205 Puis calcule et envoie à Bob : > C :=M & Aa mod(p); C := 3230824800510097143373694609571562006818530769773743110112917441035325 Bob calcule et envoie à Alice ( D est un mot réservé de MAPLE on est obligé d’utiliser l'identificateur D 1 !) : > D l:= C & Ab mod(p); D1 := 4729590480086802862521621673269409537316289926754870078306064912365444
Fonctions à sens unique
79
Alice calcule et envoie à Bob : > E := D l& Aa i mod(p); E := 211094549407533869401665788710057973844216175718126620848398247504668 Enfin Bob calcule : > F:=E& Ab l mod(p); F := 1205272018051915182705192027030103080527040114192712012703012205 Et récupère son message : > fro m n u m b er(F ); le trésor est caché dans la cave
LE RSA 7.1 Le système RSA Le système RSA, du nom de leurs auteurs Rivest, Shamir et Adleman, a été proposé en 1978. Il utilise une fonction à sens unique avec «gâche secrète» (Trapdoor function) permettant l’inversion de la fonction par celui connaissant la gâche secrète. 11 est basé sur la difficulté de factoriser un nombre qui est le produit de deux grands nombres premiers. Données :
p et q deux nombres premiers « grands », et n =p*q. Un nombre d « grand » et premier avec (p - l)*(q - 1). Remarquer que (p - 1)*(q - 1) = cp(n). e - Inv(d) [(p - l)*(q - 1)] (facile à trouver avec l’algorithme d ’Euchde) Tout cela secret.
Public :
(e,n) (la clé publique)
Chiffrement :
Le message M est un nombre appartenant éventuellement le texte en blocs) Le cryptogramme est C = Mc [n]
Déchiffrement :
D = Cd = M (d est la gâche secrète) En effet Cd = (Me)d - Med et ed = 1 fcp(n)] d ’où Med = Mk*‘p(n)+I = 1*M d ’après le théorème d ’Euler.
à Z/nZ. (Découper
Remarquons qu'il y a là une petite difficulté que bien des auteurs sautent : le théorème d’Euler affirme que si M est premier avec n alors Ml|>(n) = 1 [n], mais ne permet pas de conclure en général. En particulier M n’est pas nécessairement premier avec n. Ici il suffit de démontrer le résultat suivant si p et q sont deux nombres premiers distincts, pour tout couple (M.u) vérifiant Mu = M [p] et Mu s M [q] alors M11 = M [pq]. En effet Mu - M est divisible par p et q, donc par pq Exemple (fourni par les auteurs du système) p =■47, q ~ 59 et n = pq = 2773 d premier avec (p - 1)(q - 1) = 2668 est choisi égal à 157 On trouve alors e = 17 En codant à l’aide de la règle Espace = 00, A = 01, B = 02,..., Z = 26, le message ITS ALL GREEK TO ME devient M = 0920 1900 0112 1200 0718 0505 1100 2015 0013 0500 (découpé en blocs de 4 chiffres) Le premier bloc M, = 0920 donne C, = 920l7= 948 [2773]. Etc... On obtient alors C = 0948 2342 1084 1444 2663 2390 0778 0774 0919 1655 Pour déchiffrer C, on calcule 948157 [2773] et on obtient bien 920, soit 09 20, c’est-à-dire IT.
Initiation à la cryptographie
82
Comment casser le système ? Connaissant C, n et e, il s’agit de résoudre xe = C, c’est-à-dire trouver une racine e,eme dans Z/nZ. C’est un problème difficile. Autre approche : Factoriser n, calculer cp(n) puis d. Mais la factorisation est un problème difficile ! Enfin : calculer tp(n) sans factoriser n. On a déjà (2.3.1) vu que si on sait faire cela, alors on factorise n facilement. On peut lire dans les ouvragres spécialisés qu’il est conseillé d’utiliser une valeur de e supérieure à n/4 : des cryptanalyses ont été réussies avec de valeurs de e trop petites Une fois les précautions prises, l’utilisation de RSA est alors quelque chose d’extraordinaire : chacun choisit ses deux nombres publics e et n. Un annuaire, comme l’annuaire téléphonique, permet à n’importe qui d’envoyer un message à son correspondant, et seul le correspondant pourra le déchiffrer. L ’inconvénient de RSA est d’être lent : tous ces calculs dans Z/pZ demandent du temps et le transfert de gros fichiers en est d’autant ralenti. Une des faiblesses du réseau de transmission construit autour de ENIGMA, ayant permis aux Anglais de décrypter de nombreux messages, était de transmettre avec peu de protection, puis avec des protections plus sérieuses des relevés météorologiques identiques. Si bien que les cryptanalistes disposaient de couples (message en clair, message chiffré) pour mener une attaque contre la version sérieuse de ENIGMA. Voyons un exemple d ’erreur semblable sur un réseau de transmission basé sur le RSA Un même texte en clair M est envoyé à deux personnes ayant choisi le même nombre n. Les textes chiffrés sont C, = Mel [n] et C2= M e2 [n]. L’inverse de C, modulo n, C , ' 1 est facilement calculé avec l’algorithme d’Euclide étendu. De même pour C2 '. Si Estelle a connaissance de C,, C2, e l, e2 et n, elle peut retrouver M : Pour commencer écrire la relation de Bezout entre el et e2. r*el + s*e2 = 1 (cela suppose que el et e2 soient premiers entre eux) Dans cette relation, soit r, soit s est négatif. Supposons que r est négatif. Alors (C ,r* C 2s = M'el*('r)*Me2*s = M '* " +5*e2 = M
7.2 Fiches pratiques 7.2.1
RSA et MAPLE
Pour commencer il nous faut deux nombres premiers : > p:=nextprime(12371247788555446551320478301247); p : = 12371247788555446551320478301289 >q:=nextprime(54684665222227225444533546543532485); q := 54684665222227225444533546543532501 > n:=p*q; n := 676517543698373499921863963896914135829392635924099964409841693789
Le système RSA
83
Nous avons besoin maintenant de e premier avec (p - l)*(q - 1) = cp(n), et de son inverse d: > e:=525567875157816551; e := 525567875157816551 > if igcdex(e,(p-l)*(q-l),'d')<>l then p rin t('e rre u r') fi; # e doit être prem ier avec (p -l)* (q -l) # d est le coefficient de la relation de Bezout d*e+v*((p-l)(q-l))=l > d:=d m od((p-l)*(q-l)); #d est l'inverse de e modulo (p-l)*(q-l) d := 126421893239466230284572133848251381387987042058932746949985080951 Alice publie donc la clé : (e,n) et garde secrets p,q et d. Bob convertit son message en nombre (ce nombre doit être plus petit que n) : > M :=to_num ber('le trésor est cache dans la cave'); M := 1205272018051915182705192027030103080527040114192712012703012205 Et envoie à Alice : > C:=M & Ae mod(n); C := 468140650016561405449259701507730876075622764438599125132560813449 Alice calcule : > D l:= C & Ad mod(n); D1:=1205272018051915182705192027030103080527040114192712012703012205 Puis retrouve son message : > from num ber(D l); le trésor est caché dans la cave
LE DES Le DES (Data Encryption Standard) date de 1976. Il a été adopté à cette époque par le bureau fédéral de la NBS (NBS est l’ancien nom de l’Agence Nationale de Sécurité américaine NSA). Il a été régulièrement reconduit depuis. Son principe de fonctionnement est basé sur l’algorithme LUCIFER proposé par IBM quelques années plus tôt. Si tous les éléments du DES sont publics, les détails de sa mise en oeuvre ont été (et sont peut-être toujours) gardés secrets. Ce qui fait que bien des auteurs suspectent que le gouvernement des USA se soit réservé une « gâche secrète ». Nous ne développerons pas ici tous les détails du standard dont le sens mathématique n’est pas aisé à comprendre. Pour une documentation complète le lecteur pourra consulter [8 ] ou [9]. Le gros avantage du DES est d’être extrêmement rapide, en particulier lorsqu’il est implanté sur des cartes spécialisées, 1000 fois plus rapide que RSA.
8.1 L’algorithme LUCIFER a) Le message est partagé en blocs de 2n bits : M = (L 0,R(J), L pour Left et R pour Right, soit la moitié gauche et la moitié droite du message. Dans le cas du DES, 2n = 64. b) La clé K de longueur k permet par un procédé à préciser, de fabriquer d sous clés k,, k2, ..., kd Dans le cas du DES la clé K est constituée de 56 bits. Ce qui représente 2 56 clés possibles. c) On dispose d’une fonction f, dont le choix est essentiel car elle doit être non linéaire et elle doit bien « brouiller les cartes ». Il n’y a pas en principe d ’autre condition à respecter pour le choix de la fonction f. On utilise cette fonction de la façon suivante : Si N est un vecteur de longueur n de (Z/2Z)n. f(N,k,) est un vecteur de (Z/2Z)n, où kj est la clé utilisée. Le message subit un certain nombre de « rondes » : Entrée : (Lo ,Ro) l re ronde : ,R, = L0© f(Rn,k,)) où © est l’addition (L, = Ro vecteurs de (Z/2Z)n. 2 e ronde : (L2 = R, ,R2 = L ,© f(R „ k 2) ie ronde :
(L,= R.,
>Ri= Lj_, © fi^R^k;))
de ronde :
(Ld= Rj -i
,Rd= L d.,© f(R d.,k d))
Ceci signifie qu’après chaque ronde, la partie droite est placée à gauche, tandis que la partie gauche est additionnée modulo 2 avec le résultat de la fonction f appliquée à la partie droite, le résultat étant placé à droite. Le message crypté est C = e(M,K) = (Ld,Rd) obtenu après d « rondes ». Dans le cas du DES, le nombre de rondes est de 16, et on obtient le schéma suivant recopié de [8 ], p 235 :
86
Initiation à la cryptographie
On remarquera pour le DES a été introduit une permutation notée IP avant les 16 rondes, ainsi que sa permutation inverse notée 1P' 1 après les 16 rondes. Celles-ci n’ont aucun intérêt cryptographique. On remarquera aussi qu’à la dernière ronde les parties gauches et droite on été inversées. Quel est l’intérêt de l’algorithme LUCIFER ? Pour le comprendre, regardons comment déchiffrer le message reçu C : il suffit d ’appliquer les mêmes opérations, mais dans l’ordre inverse. En effet, on a C = (Ld,Rd) avec Rd= Ld_, ® f(Rd_, kd) = Ld_, ® f(Ld,kd). D’où en plaçant de l’autre côté de l’égalité f(Ld,kd) : Ld_, = Rd© f(Ld,kd). Non, l’auteur ne s’est pas trompé, il s’agit bien d’un © : il faut se rappeler que l’addition et la soustraction dans Z/2Z sont identiques ! Bref, connaissant Ld, Rd et kd on retrouve Ld_, et ainsi de suite en appliquant l’algorithme LUCIFER dans l’ordre inverse. La conséquence est que le même processeur, la même carte ou le même logiciel sert à chiffrer et à déchiffrer !
87
Le DES
L ’autre intérêt de l ’algorithme LUCIFER est de ne rien imposer concernant la fonction f. L ’auteur d ’un système cryptographique veillera simplement à obtenir que Ja fonction f, ainsi que la génération des sous-clés k„ kd « mélange » bien les bits du message, les bits de la clé et rende le chiffre obtenu le plus « lisse » possible. « Lisse » signifiant ici que les messages chiffrés ne présentent aucune faille statistiquement repérables permettant de trouver des informations sur le message ou la clé utilisés.
8.2 Le DES Examinons plus en détail le fonctionnement du DES. Le schéma suivant indique le fonctionnement d ’une ronde. Lu
Ru
L
Ri
Pour commencer la partie droite Rj_, est envoyée directement sur la sortie gauche Lj. Dans le même temps cette même partie droite R^, subit une « permutation expansive » E, c’est-à-dire que les 32 bits sont permutés et certains sont répétés. Ceci amène le signal à 48 bits qui sont additionnés modulo 2 aux 48 bits de la clé kr On arrive au coeur du système avec la case marquée S : le signal passe au travers de 8 S-Box selon le schéma suivant :
Initiation à la cryptographie
88
Les six premiers bits passent par la boite S, pour former 4 bits en sortie, les six suivants par la boite S2 ... Le fonctionnement de S, sera précisé plus loin. Les 32 bits obtenus en sortie de S subissent une nouvelle permutation P, puis le résultat est additionné modulo 2 à LM. Examinons en détail le fonctionnement de la boite S,. Les autres fonctionnent de manière semblable. Supposons que les six bits à l’entrée de S, soient 110101. Le premier et le dernier bit, soit 11 indiquent la ligne 3 du tableau ci-dessous puisque 11 binaire = 3 décimal. Les quatre bits centraux, soit 1010 qui peuvent être lus comme 10 décimal, indiquent le numéro de la colonne du tableau. A l'intersection de la 3eme ligne et de la ]0emc colonne, on trouve 3 qui. écrit en binaire donne 00 1 1, c ’est-à-dire les 4 bits de sortie. Description de S, 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
14
4
13
1
2
15
U
8
3
10
6
12
5
9
0
7
1
0
15
7
4
14
2
13
1
10
6
12
11
9
5
3
8
2
4
1
14
8
13
6
2
11
15
12
9
7
3
10
5
0
3
15
12
8
2
4
9
1
7
5
11
3
14
10
0
6
13
Bien sûr les tables de la permutation expansive E, des différentes S-box et de la permutation P sont publiques, et peuvent être consultées par tout un chacun. Il reste cependant que la lecture de la table S, ou des autres ne nous renseigne aucunement sur les intentions ou sur les idées qui ont guidé leur conception. Ces mêmes intentions et idées ont longtemps été classées « sensibles » par la NSA, ce qui explique les réticences du monde de la cryptographie vis à vis du DES. Il reste à examiner la génération des clé k, à partir de la clé K. Comme on La vu K est une clé de 56 bits. K est partagée en deux moitiés de 28 bits. À chaque tour de ronde chacune des moitiés est décalée de 1 ou 2 crans vers la gauche (permutation circulaire), puis 48 bits parmi les 58 sont sélectionnés, puis encore permutés pour former la clé k,.
89
Le DES
Du point de vue matériel, le procédé correspond simplement à un plan de câblage de la carte ou du processeur destiné à réaliser le DES, ce qui rend le système aisé à réaliser. Finalement il semble qu’à la sortie des 16 rondes le texte apparaisse comme un message totalement aléatoire, et que la modification d ’un seul bit de l’entrée ou de la clé modifie du tout au tout le message de sortie. Autrement dit le DES semble bien construit. Trop bien ? Position de l’ennemi (Estelle). Récupérer les clés k, revient à résoudre en k, les d équations LM© R, = f(Lj,k,). Si f est linéaire le problème revient à résoudre des équations linéaires dans (Z/2Z)n. Sinon cela revient à résoudre des équation algébriques (recherche de racines carrées, cubiques,...) dans (Z/nZ), ce qui est un problème difficile. Le DES a été critiqué, entre autres, à cause de la longueur trop courte de la clé (56 bits), ce qui permet (difficilement ?) une attaque exhaustive. Par exemple 22.000 abonnés à Internet ont mis 39 jours, en mettant en commun leurs moyens informatiques (qui n ’a pas un ordinateur inoccupé sur le coin de son bureau ?), pour décrypter un message crypté avec le DES (La Tribune, le 2/3/1998). Leur but étant de démontrer que la clé de 56 bits, 56 bits étant le maximum légal pour une clé de cryptage aux USA, n’est pas satisfaisante et qu’il est temps de modifier la législation. Plus récemment, trois sociétés privées, Cryptography Research, Advanced Wireless Technologies et EFF se sont groupées pour construire une machine à décrypter le DES. La « DES Key Search Machine » a gagné le « RSA DES Challenge » (10.000 $) en 56 heures le 15 juillet 1998. La description de la machine, conçue par Paul Kocher, sur le site Internet de Cryptography Research mentionne 27 cartes de 1800 «ch ip s» , soit environ 50.000 « chips » pour un coût total de l’exemplaire de 250.000 $. Pour 1998, la preuve est faite : le DES n ’est plus fiable ! Le 19 janvier 1999 le gouvernement Français « a décidé de relever le seuil de cryptologie, dont l’utilisation est libre, de 40 bits à 128 bits, niveau considéré par les experts comme assurant une très grande sécurité ». Cependant les accords internationaux signés en décembre 1998 par 33 pays limitent l’exportation sans licence de logiciels dont la clé de codage dépasse 64 bits. La Bastille est sérieusement ébranlée par cette décision, mais elle n ’est pas encore abattue.
La Bastille en 1758
90
Initiation à la cryptographie
Et dans le passé ? Dans [8 ], l’auteur signale que la société ROBOTRON en RDA a fabriqué en 1980 des centaines de milliers de puces DES. Quel usage ? Soit l’URSS utilisait le DES (ce qui est peu vraisemblable au vu des critiques sur ce système et le niveau des mathématiques en URSS qui permet d ’imaginer que d ’autres systèmes aient pu être mis au point), et alors il est certain que les USA ont fabriqué une machine pour l’attaque exhaustive du DES afin d ’espionner l’URSS. Soit l’URSS a utilisé ces puces pour fabriquer sa propre machine d ’attaque exhaustive du DES... Enfin signalons qu’un code source en C du DES peut se trouver dans [8 ]. Le DES date de 1976 et aurait du être abandonné quelques années plus tard. Il a cependant été reconduit régulièrement depuis. Des tentatives ont été menées pour l’améliorer, pour le rendre plus transparent ou augmenter la longueur de la clé. La proposition qui semble intéresser le plus le monde de la cryptographie pour lui succéder est le système IDEA que nous allons décrire rapidement.
8.3 IDEA En 1992, IDEA (International Data Encryption Algorithm) a été proposé pour remplacer le DES. Comme le DES, IDEA est un algorithme de chiffrement par blocs de 64 bits, mais avec une clé de 128 bits, ce qui le rend plus sûr, mais aussi d ’utilisation illégale dans certains pays au moment où ces lignes sont écrites. Comme le DES, IDEA fonctionne par « rondes » dont le schéma extrait de [8 ] est reproduit ci-dessous. Il y a 8 rondes au total. Les seules opérations à chaque ronde sont : 1) Ou exclusif (XOR) 2) Addition modulo 2 ' 6 3) Multiplication modulo 2 I6+ 1 (Le lecteur peu familiarisé avec la représentation des nombres dans un ordinateur pourra consulter la fiche en fin de chapitre pour comprendre l’intérêt de ces opérations) Le message de 64 bits est divisé en 4 parties de 16 bits notés X„ X2, X 3 et X 4 sur le schéma. Les sous-clés notées Z,(i), Z 2(i), Z 3(i) et Z 4(i) sur le schéma sont construites par des méthodes similaires à celles du DES. La grande différence vient du fait que les sous-clés de déchiffrement imposent un petit calcul avant leur utilisation : ce petit calcul est négligeable pour l’utilisateur autorisé, par contre il a pour but de compliquer sensiblement la tâche d ’Estelle si elle tente une attaque exhaustive (un petit calcul, si petit soit-il, effectué 2 128 fois demande certainement du temps !).
Le DES
91
Y / 1
Y 12
X j sous-bloc de 16 bits de texte en clair
Y3
Y '4
Yt : sous-bloc de 16 bits de texte chiffré z \ r ^ : sous-bloc de clef de 16 bits
0 : ou exclusif bit à bit de sous-blocs de 16 bits f f l : addition modulo 2 ' 6 d'entiers de 16 bits 0 : multication modulo 2 16+1 d'entiers de 16 bits avec le sous-bloc nul correspondant à 2 16
8.4 Modes de chiffrement par blocs. Modes ECB, CBC, CFB, OFB. Le DES comme IDEA cryptent vos fichiers par blocs de 64 bits, c’est-à-dire par groupes de 8 caractères avec le code ASCII. Un fichier de 8 kilo-octets sera donc partagé en 1000 blocs de 8 octets, les blocs étant chiffrés indépendamment les uns des autres. Ce mode est appelé mode ECB (Electronic Code Book).
92
Initiation à la cryptographie
Si Estelle a la possibilité de crypter, sans connaître la clé, un fichier de 8 kilo-octets et d ’intercepter le chiffre obtenu, elle disposera de 1 0 0 0 couples (texte clair, texte chiffré), ce qui constitue une bonne base de départ pour une attaque par (texte clair, texte chiffré). Même si Estelle n ’a pas accès à la machine à crypter, de nombreux messages électroniques comportant des en-têtes, formules de politesse... permettront une attaque par (texte clair, texte chiffré). Mais il y a plus grave encore : dans certaines circonstances Estelle pourra s’enrichir sans même avoir besoin de trouver la clé de cryptage. Imaginons qu’Estelle soit responsable du service informatique d ’une banque. Le fichier des clients est chiffré avec le DES, IDEA ou un autre système par blocs. Bien sûr seul le responsable de la banque connaît la clé d ’accès au fichier des clients, et Estelle ne peut lire ni modifier les fiches des clients. Cependant Estelle qui connaît bien le logiciel de gestion des clients, sait que pour chaque fiche, 32 caractères, soit 4 blocs du DES sont réservés au nom du client, 32 caractères au prénom, 32 caractères à l’adresse, puis les huit caractères suivants contiennent le solde du compte. En bref, pour chaque fiche le 13e bloc contient le solde du compte de chaque client. Armée de ces informations voici comment Estelle peut procéder : 1) Estelle fait une copie du fichier crypté des clients. 2) Elle ouvre un compte à son nom, puis compare le nouveau fichier des clients à l’ancien. La différence lui permet de retrouver sa fiche personnelle, même si cette fiche est totalement illisible. 3) Elle recommence l’opération le jour où un « gros » client vient ouvrir un compte (ou simplement modifier le solde de son compte). Cela lui permet de repérer la fiche (cryptée) de ce client. 4) Estelle intervertit les blocs 13 de sa fiche et de la fiche du « gros » client, retire tout à fait régulièrement l’argent, puis s’envole vers un pays lointain. D’autres méthodes ne supposant pas la présence d ’Estelle dans la banque sont envisageables. En conclusion, le mode ECB n’est donc pas totalement satisfaisant pour certaines utilisations. Afin de pallier à ces faiblesses du mode ECB, on pourra utiliser le mode CBC (Cipher Block Chaining). Dans ce mode d ’utilisation, avant de passer un bloc à la moulinette du DES (ou de IDEA), celui-ci est additionné modulo 2 au résultat du chiffrement du bloc précédent. Les blocs ne sont donc plus indépendants les un des autres, et les opérations de déchiffrement devront bien sûr commencer par le dernier bloc. Le premier bloc n ’ayant pas de précédent on lui en invente un, totalement quelconque noté IV (Initialisation Vector). Le schéma obtenu est donc le suivant (B,, B, ... B,... Bn étant les différents blocs) : 1) Additionner IV et B, modulo 2. Chiffrer le résultat. On obtient C,. 2) Additionner C, et B2 modulo 2. Chiffrer le résultat. On obtient C2. i)
Additionner CM et B: modulo 2. Chiffrer le résultat. On obtient C;.
Pour déchiffrer on effectuera les opérations dans l’ordre inverse.
Le DES
93
Le mode CBC présente deux inconvénients : d ’abord il impose de déchiffrer la totalité du fichier avant de pouvoir accéder à une partie du fichier (dans une banque, il faudra déchiffrer la totalité du fichier client avant de pouvoir accéder à la fiche de monsieur Dupont), ensuite une erreur sur un bloc va se répercuter sur tous les suivants. Avec ce mode de chiffrement on sera très attentif au contrôle d ’erreurs. Imaginons maintenant qu’Alice travaille sur un réseau informatique Chaque caractère tapé sur le clavier de son terminal est envoyé à l’ordinateur central. Estelle a branché une écoute sur la ligne d’Alice et peut lire toute la correspondance d ’Alice. Pour éviter cela, Alice peut attendre d’avoir tapé 8 caractères (64 bits ou un bloc du DES), le chiffrer et envoyer le tout à l’ordinateur central II est clair que cette méthode ne convient pas ! Les modes CFB (Cipher FeedBack) et OFB (Output FeedBack) résolvent le problème Pour ne pas entrer dans les détails techniques (voir [8 ] page 167), résumons l’idée de la façon suivante : les 8 octets du caractère frappé ne constituant pas un bloc complet, Alice choisit un vecteur d ’initialisation IV quelconque de la taille d’un bloc, case ses huit octets à la partie droite du vecteur (en perdant les huit octets de la partie gauche) puis chiffre le bloc obtenu. Ce bloc chiffré (en fait une partie seulement) est expédié sur le réseau. Par exemple Alice veut envoyer « OUI » : Vecteur d ’initalisation . Frappe O Frappe : U Frappe : I
Bloc à chiffrer (ASJLSETP) (SJLSETPO) (JLSETPOU) (LSETPOUI)
8.5 Fiches pratiques 8.5.1
Ou exclusif et addition modulo 2
L’opérateur logique XOR, traduit en français « ou exclusif » et qu’il serait préférable de traduire par « ou bien » renvoie vrai si un seul des deux opérandes est vrai, et faux dans le cas contraire . (Vrai XOR Vrai) est Faux (Vrai XOR Faux) est Vrai (Faux XOR Vrai) est Vrai (Faux XOR Faux) est Faux Si vrai est codé l et Faux est codé 0 cela donne : 1 X O R 1= I XOR 0 = 0 XO R 1= 0 XOR 0 =
0 1 1 0
II ne s’agit de rien d ’autre que la table d’addition de Z/2Z. La porte logique XOR est un des constituants fondamentaux de tous les circuits électroniques, ce qui explique l’intérêt de cette opération dans le DES ou IDEA
94
Initiation à la cryptographie
Pour le DES comme pour IDEA certaines chaînes de bits sont additionnées modulo 2, addition notée ©. On trouve dans la littérature l’expression « combinés par un ou exclusif». Voyons ce que cela signifie. Soit a= (1,0,1,1,0,1;0,1) et b= ( 1 , 1 ,0 , 1 ,0 , 1 , 1 ,0 ) alors a©b= ( 0 , 1 , 1 ,0 .0 ,0 , 1 , 1 ) Pour le mathématicien, cette opération n’est que l’addition de deux vecteurs de (Z/2Z)8. Terminons en rappelant que la soustraction et l’addition dans Z/2Z sont identiques, ce qui est le point crucial de l’algorithme LUCIFER
8.5.2 Addition modulo 216 Certains langages de programmation comme le C ou le Turbo Pascal exigent qu’une variable soit déclarée avant son utilisation. Par exemple en Turbo Pascal, si A et B sont des variables numériques de type « WORD », la machine réservera 16 bits en mémoire pour caser le contenu de chacune des variables A et B. Ensuite, si A vaut 10, c’est-à-dire 1010 en binaire, alors la zone mémoire de 16 bits réservée à A contiendra 0000000000001010. Avec ce système A peut prendre des valeurs entières de 0 à 65535. Que se passe-t-il si A vaut 65535 et qu’on demande le calcul de A + 1 ? Écrivons l’opération comme à l’école primaire, mais en base 2 : 1111111111111111
+0000000000000001 10000000000000000 (ne pas oublier que 1 plus 1 fait 0 et je retiens 1 ) On se retrouve avec un bit de trop : il y a dépassement de la capacité et la machine ne retient que les 16 bit de droite, soit 0 : 65535 + 1 = 0 ! Le programmeur débutant est toujours surpris par ce résultat, et la seule explication est que ce type de langage effectue tout simplement une addition modulo 2 16. C'est cette particularité (habituellement gênante) des langages de programmation qui est mise à profit avec le système IDEA : IDEA est donc particulièrement adapté à des réalisations logicielles.
IDENTIFICATION, AUTHENTIFICATION ET SIGNATURE
« Who are y ou? » said the Caterpillar. Lewis Carrai I : Alice ’s Adventures in Wonderland. Illustration de Sir John Tenniel.
9.1 Protocole Estelle vient de mettre au point un programme permettant de factoriser de grands nombres entiers. Elle veut pouvoir dater sa découverte, mais sans révéler à quiconque son programme : elle veut se réserver pour elle toute seule la possibilité de lire tous les messages chiffrés avec le RSA. Comment procéder ? Il suffit de mettre le texte du programme dans une enveloppe, cacheter soigneusement l’enveloppe avec de la cire, envoyer l’enveloppe au notaire Ivan. Ivan va à nouveau poser ses cachets sur l ’enveloppe, la dater et la signer, et la renvoyer à Estelle. Ivan n’a pas pu lire le programme sans détruire les cachets d ’Estelle. Estelle ne pourra pas par la suite modifier son programme sans détruire les cachets d ’Ivan. Comment faire si Ivan se doute de l’importance du contenu du programme, et est prêt à risquer sa réputation de notaire intègre pour s’emparer du secret ? Voilà une solution : Estelle prépare 10 enveloppes. Une seule contient le programme. Puis elle les envoie successivement à Ivan pour signature.
96
Initiation à la cryptographie
Si Ivan ouvre une enveloppe, il a une chance sur dix de trouver le programme, et neuf chances sur dix de perdre sa réputation. Le procédé est dissuasif ! Comment réaliser par courrier électronique un tel protocole, sans enveloppes ni cachets de cire ? La cryptographie ne se contente pas d ’assurer la confidentialité des communications, elle a l’ambition de réaliser par courrier électronique tous les protocoles dans lesquels apparaît la notion de méfiance entre les partenaires. Pour commencer essayons de préciser le mot PROTOCOLE. lin protocole n’est qu’un algorithme impliquant au moins deux personnes (ou ordinateurs), dans le but de réaliser une tâche. Dans le cas où deux ordinateurs ou plus échangent des informations dans le but de réaliser un calcul complexe, le protocole décrira les formats de transmission des données, la synchronisation ... On se méfiera simplement des erreurs de transmission. Les protocoles qui intéressent la cryptographie sont ceux comportant une notion de méfiance. Méfiance car l’un des intervenants peut tricher. Méfiance car un intervenant extérieur, Martin, peut tenter de s’introduire dans le protocole pour le détourner à son profit. Voyons par exemple comment Martin peut se faire passer pour un Grand Maître aux échecs : Martin organise une partie d ’échecs par correspondance entre deux Grands Maîtres, K, et K2. Avec K, il joue les noirs, avec K2 il joue les blancs. K, commence la partie. Martin envoie le coup de K, à K2, puis la réponse de K2 à K,. etc. Martin est sûr de gagner contre l’un des deux Grands Maîtres. Cela peut sembler vain à propos d ’un jeu d ’échecs, mais imaginons que Martin arrive à se mettre en position d’intermédiaire entre Alice et Bob à l’occasion d’une transaction commerciale. Il pourra alors empocher la marchandise et les sous. Une des caractéristique des protocoles est d ’être entièrement connu, accepté et contrôlable par tout participant. L’élection est un des protocoles qui résiste à la cryptographie, et c’est probablement bien ainsi une élection doit pouvoir être contrôlée de bout en bout par tout électeur quel que soit son niveau scientifique et technique. La bonne vieille urne, avec son isoloir, sa liste électorale que l’on émarge, la présence physique de l’électeur ... permettent à tout un chacun de contrôler les opérations électorales. On ne peut demander à tous les électeurs d ’être au fait des protocoles cryptographiques. Cet exemple est donné pour rappeler que si certains protocoles sont techniquement possibles grâce à la cryptographie, ils ne sont pas socialement souhaitables. Toutes les relations humaines, qu’on en ait conscience ou pas, sont régies par des protocoles, le premier de tous étant de saluer son interlocuteur, ce qui permet par exemple de lui faire part de son humeur du jour, ou au contraire de la cacher derrière le masque de la politesse. À l’origine le fait de se serrer la main était un acte de méfiance : chacun prouvait ainsi à l’autre qu’il ne cachait pas une arme dans sa main Le lecteur est invité à décrire le plus possible d ’exemples de protocoles, et à essayer d’imaginer comment il pourrait les simuler sur un réseau informatique, en particulier des protocoles incluant la méfiance.
Identification, authentification et signature
97
Comment organiser un partie de poker sur Internet en rendant impossible toute tricherie par exemple ? Il pourra aussi lire les 100 premières pages de [8 ] dans lesquelles il trouvera de nombreux exemples et parades.
Identification, authentification et signature Sur un acte notarié, les signatures en bas de chaque page remplissent à la fois les trois fonctions en révélant l’identité du signataire, en empêchant toute modification du document, et en engageant la responsabilité du signataire. Mais il s’agit bien là de trois notions différentes, même si certains protocoles utilisent une signature pour l’authentification, et inversement.
9.2 Identification Alice veut être certaine qu’elle est bien en relation avec Bob (et pas avec Martin), avant de lui ouvrir les accès à son ordinateur et ses données. (Alice peut vouloir en plus convaincre un tiers (Ivan)que c’estbien Bob quia eu accès aux données confidentielles.) Si Alice et Bob partagent une clé secrète K, n ’importe quel système de cryptographie fera l’affaire : Alice choisit un message M totalement quelconque M, le chiffre et demande à Bob de le déchiffrer. Bob lui renvoie M et Alice peut vérifier que Bob a pu déchiffrer. L’intérêt est que Estelle, qui écoute l’échange sur la ligne téléphonique, n ’apprend rien sur la clé K. Comme on l’a vu a propos des fonctions à sens unique, ce protocole ne peut convenir pour l’accès par mot de passe à un ordinateur : la clé K doit être inscrite quelque part sur le disque dur de l’ordinateur et peut donc être lue par Estelle. Une solution consiste à utiliser une fonction à sens unique f.et à n’écrire sur le disque dur que f(CB) où CBest le code d ’accès de Bob. Si Estelle peut lire f(CB), elle ne peut calculer CB. Cependant ce protocole n ’est pas satisfaisant. Martin peut tenter une ATTAQUE PAR DICTIONNAIRE : Martin qui connaît tout de la fonction f se fabrique un dictionnaire de mots de passe C l, C2, ... C10000 et de leurs correspondants f(Cl), f(C2), ... f(C10000), puis compare f(Cl), ... f(C10000) avec ce qu’il a trouvé sur le disque dur. Avec un peu de chance, il trouvera une coïncidence lui fournissant le code d’accès d’un des utilisateurs. Bien sûr cette méthode n ’a de chance de fonctionner que si de nombreux utilisateurs sont inscrits. Pour éviter une telle attaque on utilisera le SALAGE : le sel est une chaîne aléatoire, inscrite sur le disque dur à côté de l’image du mot de passe combinée avec le sel. Quand Bob entre son mot de passe celui-ci est combiné avec le sel avant d’être passé à la moulinette de la fonction à sens unique. Cela gonfle considérablement le dictionnaire de Martin qui doit joindre à ses 10000 mots de passe toutes les valeurs possibles de salage. L’utilisateur, lui, ne se rend compte de rien !
98
Initiation à la cryptographie
Une autre difficulté provient du fait que Bob ne veut pas dévoiler son mot de passe : la ligne téléphonique peut être écoutée par Estelle qui pourra par la suite se faire passer pour Bob. Qui me garantit que le boîtier du commerçant sur lequel je tape mon numéro de carte de crédit ne garde pas en mémoire ce numéro ? Une solution utilise un système de cryptographie à clé publique : 1) Alice choisit un message aléatoire M et le chiffre avec la clé publique de Bob. Elle envoie C = eB(M). 2) Bob déchiffre C : dB(C) = M (il est le seul à pouvoir le faire) et l’envoie à Alice. 3) Alice compare le message reçu avec M et est satisfaite. Alice peut aussi envoyer son message aléatoire M à Bob, lui demander de le déchiffrer avec sa clé secrète (il est le seul à pouvoir le faire) puis chiffrer le résultat avec la clé publique de Bob. Si le résultat est M, elle est satisfaite. Cette méthode ne fonctionne que si les fonctions de chiffrement e et de déchiffrement commutent : e(d(M)) = d(e(M)), ce qui est le cas pour le RSA. Dans les deux cas Estelle peut écouter le dialogue, elle n’apprendra rien de la clé de Bob. Par contre Martin peut se glisser dans le protocole de la même façon que dans le problème du Grand Maître aux échecs : il se met en contact avec Alice en prétendant être Bob, et avec Bob en prétendant être Alice. Ensuite il transmettra les questions d’Alice à Bob et les réponses de Bob à Alice. À la fin du protocole, Alice et Bob seront dupés croyant être en relation l’un avec l’autre. La seule solution est de continuer la correspondance de façon cryptée : Martin verra passer des messages dont il ne comprendra pas le sens. Toujours est-il que Bob a apporté la preuve qu’il connaissait la clé sans divulguer cette clé il s’agit d ’un protocole de PREUVE A DIVULGATION NULLE. Avec l’exemple ci-dessus il n’est pas si clair que la preuve soit vraiment à divulgation nulle : le protocole génère des paires (message clair-message chiffré) qui peuvent compromettre la clé. Un autre exemple se trouve dans [17] p.. 166 (Protocole d’identification de Fiat-Shamir, 1986), fondé sur l’idée suivante : la racine carrée d ’un nombre est difficile à calculer. Par contre le carré est facile à calculer, s est la clé privée, I = s2 est la clé publique de Bob. Bob doit prouver qu’il connaît s sans révéler s. Voilà comment procéder : Bob choisit un nombre r < N et transmet à Alice x = r2. Alice ne peut trouver r puisque l’extraction de racine est difficile Alice tire à pile ou face et obtient b = 0 ou b = 1. Bob calcule y = rsb , c’est-à-dire r si b = 0 ou rs si b = 1 et le transmet à Alice. Alice ne peut calculer s à partir de rs puisqu’elle ne peut connaître r. Alice calcule y2= (rsb) 2 = r2Ib qui doit être égal à xlb et peut vérifier que Bob a correctement répondu. Si Bob ne connaît pas la réponse, il peut essayer d ’anticiper la question (0 ou 1) : s’il pense que la question est 0 , il se contente de choisir r quelconque, sinon au lieu de transmettre r2 au début du protocole il transmettra x = r t 1 puis en répondant r à la question d’Alice qui calculera alors r2 et obtiendra bien xi. Bob a donc une chance sur deux de répondre juste. En recommençant le protocole n fois, il a une chance sur 2 n de répondre juste.
Identification, authentification et signature
99
Qu’on ne s’y trompe pas : c’est bien ce genre de dialogue qui s’installe entre votre carte de crédit et votre banque lorsque vous faites des achats. Le « code personnel » n’est qu’un fragile lien entre vous et votre carte, fragile car non sécurisé ! Remarquons pour terminer que le premier protocole décrit, utilisant les clés publiques et privées de Bob permet à Alice de convaincre un juge qu’elle est bien en relation avec Bob. Par contre dans le dernier protocole, le juge peut très bien argumenter que Bob et Alice sont complices et qu’Alice transmet les questions à l’avance.
9.3 Authentification L ’authentification consiste à s’assurer que le message M n’a pas été falsifié. Si Bob a signé un chèque de 100 F, il ne veut pas qu’Alice puisse ajouter un ou deux zéros et encaisser un chèque de 1000 F ou de 10000 F. Lorsque vous chargez un fichier sur un ordinateur, celui-ci peut avoir été modifié par un virus. Pour en être averti vous pouvez procéder de la façon suivante : chaque octet du fichier pouvant être considéré comme un nombre de 0 à 255, vous les additionnez tous modulo 255. Vous obtenez un nombre de 0 à 255 qui est l’empreinte de votre fichier. Cette empreinte est gardée soigneusement à part, et vérifiée à chaque utilisation du fichier. Un virus n’a qu’une chance sur 256 de provoquer une modification qui ne change pas l’empreinte. Mais si l’auteur du virus connaît votre algorithme de calcul de l’empreinte, il fera en sorte de rajouter quelques octets pour obtenir une empreinte convenable. C’est facile, sauf si la fonction de calcul de l’empreinte est une fonction à sens unique. Par définition une fonction de hachage est une fonction qui à un message M associe une chaîne de caractères de longueur fixe. La définition d ’une fonction de hachage à sens unique est claire Pour une telle fonction, connaissant l’empreinte de M, il sera difficile de fabriquer M’ ayant la même empreinte. Si M et M’ ont la même empreinte, on parle alors de COLLISION. On peut demander plus : vouloir qu’il soit difficile de trouver deux messages M et M’ ayant la même empreinte, c’est-à-dire qu’il soit difficile de trouver une collision. Cela correspond au souci d’éviter une attaque des anniversaires. Le problème des anniversaires est un vieux problème de probabilité : quelle doit être la taille d’une assemblée pour avoir une chance sur deux de trouver deux personnes ayant leur anniversaire le même jour ? La réponse surprend : il suffit de rassembler 23 personnes. Dans au moins une classe de collège sur deux on trouvera deux élèves ayant leur anniversaire le même jour! Quel rapport avec les fonctions de hachage ? L’empreinte d’un individu est ici sa date d’anniversaire. Voici comment Alice peut mener une attaque des anniversaires : Alice prépare deux contrats, l’un honnête, l’autre à son avantage, puis introduit quantité de subtiles modifications ne compromettant pas le sens des contrats. Par exemple introduire de espaces, des retours à la ligne, des ponctuations ... Alice dispose donc d ’une grande quantité de versions des deux contrats et pour chaque version elle en calcule l’empreinte. Avec un peu de chance elle trouvera deux empreintes identiques!
100
Initiation à la cryptographie
On verra un peu plus loin qu’on fait souvent signer l’empreinte d ’un document plutôt que le document lui-même. Un autre exemple dans lequel la technique de l’empreinte en vue d’authentification peut être mise en défaut : Imaginons un satellite orbitant autour de la terre. Les programmes des ordinateurs de bord doivent être modifiés. Martin a connaissance du programme et surtout de son empreinte. II génère un grand nombre de suites aléatoires et calcule leurs empreintes. Parmi les suites aléatoires, l’une se trouve avoir la même empreinte que celle du programme. Il envoie cette suite en lieu et place du programme, ce qui provoque un plantage complet du satellite.
9.4 Signature La signature doit répondre aux exigences de l’identification du signataire, de l‘authentification du document signé (il n'est pas question de permettre de rajouter un zéro à la somme inscrite sur le chèque) et d’engagement du signataire : un contrat engage son signataire. La signature doit pouvoir être vérifiée par tous, et en cas de litige le document signé doit pouvoir être présenté devant le juge (Ivan). Une difficulté est d ’empêcher dans certains cas une copie du document. Par exemple si Bob signe un chèque remis à Alice, il importe de s’assurer qu’Alice ne présente pas plusieurs fois le chèque à l’encaissement. Ce problème ne relève pas de la notion de signature, mais indiquons cependant qu’il est possible de dater le chèque. Afin de signer, la méthode la plus simple est d’utiliser un cryptosystème à clé publique vérifiant la propriété particulière de commutativité : le chiffrement et le déchiffrement commutent, c’est-à-dire d(e(M)j = e(d(M)) = M. C’est le cas pour le RSA. Pour signer un message M, Bob va utiliser sa clé privée et calculer dB(M). Il est le seul à pouvoir le faire, et ne peut contester ce fait. La signature de M est donc dB(M) = S. Bob envoie alors S à Alice, s’il n ’a pas besoin de confidentialité, ou bien il va crypter S avec la clé publique d’Alice. Il transmet donc eA(S). Alice récupéré S avec sa clé privée : S = d A(eA(s)). Puis elle calcule eB(S) = M pour retrouver le message. En cas de litige : Alice demande à Bob de fournir sa clé privée KB. Il est facile de vérifier que c’est la bonne clé en testant dB(eB(x)) pour x quelconque. Le juge peut calculer dA(M) = S et vérifier la signature. Si Bob refuse de fournir la clé il est supposé de mauvaise foi et perd son procès. Notez que cela impose l’utilisation d ’une clé pour chaque contrat ! A moins d ’utiliser un protocole à divulgation nulle pour la vérification. Il reste cependant un problème : Martin peut se faire passer pour Bob en signant un message quelconque (aléatoire) y de la façon suivante : Martin choisit x quelconque, calcule eB(x) = y et prétend que x est la signature de y. En général y est vide de sens, mais pensez au sabotage du satellite par Martin! Quand la signature sert d ’identification, cela pose problème. Une solution pour éviter une telle attaque est de signer plutôt h(M) où h est une fonction de hachage appliquée à M.
Le DES
101
Si Martin choisit x quelconque il peut bien calculer y = eB(x) et prétendre que x est la signature de y. Mais il ne peut inverser h pour trouver un message M, même vide de sens, tel que h(M) = y. De plus, si le message M est long (quelques Mega-octets) on signera h(M) où h est une fonction de hachage. La signature à l ’aide d ’une fonction de hachage résout le problème du copyright exposé en introduction : Estelle n ’envoie pas le texte de son programme M à Ivan, mais h(M) qui est donc incompréhensible, et demande à Ivan de dater et de signer h(M). La seule difficulté est qu’Ivan se méfie : Estelle peut tenter ainsi de lui faire signer une reconnaissance de dette. Qui l’empêche de rajouter à h(M) le commentaire suivant : « ceci n ’est pas une reconnaissance de dette », et de signer le tout ? Par ailleurs, pour être certain que Bob est bien l’émetteur du message, la clé publique de Bob (ou l’annuaire complet) doit être signée par le responsable de l’annuaire. Sinon Martin peut remplacer la clé de Bob par la sienne dans l’annuaire et demander à Alice de lui envoyer beaucoup de sous à l’adresse indiquée dans le document. Alice fournit l ’argent croyant que l’ordre vient de Bob. Signalons enfin, sans le décrire plus, qu’ont été inventés des protocoles de signature incontestable : la signature ne peut être vérifiée qu’avec le concours de Bob et il existe une procédure de démenti permettant à Bob de montrer qu’une signature est fausse. La première des propriétés permet à Bob de limiter la diffusion du document qu’il a signé. En conclusion de ce chapitre et de ce livre, il apparaît que la cryptographie apporte des réponses efficaces à la simulation, sur courrier électronique, des protocoles de la vie de tous les jours. Ces réponses mêlent intimement des techniques de confidentialité et des fonctions à sens unique. Il n ’y a pas de différence fondamentale entre les techniques visant à protéger les mots de passe ou à réaliser des signatures, et les techniques visant à assurer la confidentialité. Et pourtant les premières sont soumises par la loi (1996) à déclaration aux autorités (sauf si les clés utilisées sont déposées auprès d ’organismes agréés) alors que les secondes sont libres d ’utilisation.
Initiation à la cryptographie
102
LA CRYPTOGRAPHIE À TRAVERS L’HISTOIRE L ’antiquité On trouve des trace de cryptographie (atbash) dans l’Ancien testament ainsi que dans l ’Egypte antique.
L ’âge artisanal Peu ou prou, la sécurité repose sur le secret du système utilisé. S ystè m e à tra n s p o s itio n
404 avant notre ère : le texte étant enroulé sur une scytale permet de changer l ’ordre des lettres du message. S ystèm e à s u b s titu tio n
Cryptanalyse par l’analyse des fréquences des lettres (al-Kindi, IXe1™siècle). Chiffre de César Kama-sutra (Vemesiècle) Introduction de la cryptographie en occident : XIIIemc siècle, Roger Bacon. Système fragilisé par l ’utilisation de clés facilement mémorisables. C h iffre h o m o p h o n iq u e
Cryptanalyse par l’étude des digrammes (groupe de deux lettres consécutives). Chaque lettre est remplacée par un symbole. Le nombre de symboles disponibles est proportionnel à la fréquence de la lettre. De ce fait une même lettre peut être figurée par des symboles différents : le texte chiffré semble régi par une règle d ’équiprobabilité. (Voir les travaux de Shannon en 1949). S ystèm e de V igé nè re (1586)
Cryptanalyse par Babbage (1854) et Kasiski (1863). Chiffre poly-alphabétique. Babbage aurait tenu secrets ses travaux pour en faire bénéficier l’Angleterre pendant la guerre de Crimée. G rand c h iffre de L o u is XIII e t L o u is XIV (1626)
Cryptanalyse par Bazeries (1890). Dû aux père et fils Rossignol. Système à substitution syllabique. Le c h iffre d u liv re
Quelques exemples de cryptanalyse réussie existent (Painvin pendant la Première Guerre mondiale). La clé est un livre convenu. Une lettre est remplacée par le numéro de la page et le numéro de la lettre dans la page.
La cryptographie à travers les âges
103
Invention du télégraphe Problème de la confidentialité des communications M asque je ta b le (o /ie time pad) (Vernam 1917)
Cryptanalyse impossible d ’après les travaux de Shannon (1949). Principe très simple. Distribution des clés compliquée. Problème de création de clés totalement aléatoires.
La mécanisation La cryptanalyse par « texte en clair choisi » devient possible puisque le cryptanalyste peut disposer d ’une machine à crypter. E nigm a (1918) (et autres systèmes à rotors)
Cryptanalyse réalisée en Pologne par Rejewski en 1933, puis par Alan Turing et les équipes de Bletchley Park en 1939-40. Enigma apparaît comme un chiffre de Vigénère de longueur 263 Les travaux de Bletchley Park ont abouti à la création de Colossus, premier ordinateur au monde, dont les plans ont été détruits après la guerre pour des raisons de secret. Invention de l’ordinateur et développement des réseaux informatiques
L ’âge industriel et informatique L ’usage généralisé des réseaux informatiques rend obligatoire la généralisation de la cryptographie : par exemple, en février 2000, l’Europe s’inquiète de l’existence du programme ECHELON de surveillance mondiale de toute les communications par les USA. Le temps du secret est révolu : les systèmes proposés doivent être totalement publics et leurs faiblesses doit pouvoir être discutées publiquement. Ce principe a du mal à entrer dans les esprits : en février 2000 Serge Humpich se voit condamné en France à dix mois de prison avec sursis et 50000F d ’amende pour avoir mis en évidence une faiblesse du système des cartes bancaires. Cryptographie publique et libre ou secrète et tolérée? : les législateurs hésitent. L u c ife r (1970) e t le DES (1976)
DES cassé en juin 1998. Le DES s’est révélé résistant à la cryptanalyse différentielle dont les principes ne seront redécouverts par des universitaires (non tenus au secret) que bien après la création du DES. IDEA (1992)
Systèmes à clé publique ( asymétriques)
104
Initiation à la cryptographie
E change de c lé s (D iffie e t H ellm ann 1976)
Le problème de la distribution des clés est résolu. Sac à d o s (H ellm ann 1978)
Premier exemple de système à clé publique. Cassé très peu de temps après son invention. RSA (R ivest, S ha m ir, A d le m a n 1978)
RSA-155 cassé en août 1999. RSA reste solide avec des clés plus longues que 155 chiffres. C o u rb e s e llip tiq u e s (M ille r e t K o b litz 1985)
L’utilisation des courbes elliptiques permet de résoudre le problème du logarithme discret ainsi que la factorisation des grand nombres : RSA et l’échange de clés sont fragilisés. Les courbes elliptiques permettent de nouveaux développements cryptographiques, déjà implémentées dans les cartes à puces. PGP (P. Z im m e rm a n n 1991)
Le système « grand public » qui a fait trembler la NSA. Utilise IDEA et RSA Mars 2000 : la signature numérique a valeur légale en France
Le Graa/ C ry p to g ra p h ie q u a n tiq u e (1988)
L’ordinateur quantique donnerait des moyens de calculs inégalés à la cryptanalyse. Peut-être la fin de la cryptographie mathématique, mais peut-être enfin la sécurité indiscutable et absolue des communications.
BIBLIOGRAPHIE P our l'algèbre et l'arithm étique, on pourra consulter :
[1] Queysanne Michel, Algèbre, Armand Colin, « Collection U », 1967. En particulier le chapitre sur la divisibilité dans Z, p. 174 à 183. [2] D emazure Michel, Cours d ’algèbre, Cassini, 1997. L’algèbre vue du point de vue algorithmique. Ecole polytechnique. On trouvera en particulier un chapitre sur les critères de primalité. [3] Faraut Jacques & Khalili Elizabeth, Arithmétique, Ellipses, 1990. Travail réalisé à l’IREM de Strasbourg. [4] VÉLU Jacques, M éthodes m athém atiques p o u r l ’informatique, Dunod, 1994. Cours de mathématiques pour l’informatique du cycle A au CNAM. [5] I t a r d Jean, Les nom bres prem iers, Presses Universitaires de France, Collection « Que sais-je ? », 1975. [6] T enenbaum Gérald, Les nom bres prem iers, Presses Universitaires de France, Collection « Que sais-je ? », 1997. [7] Itard Jean, Arithm étique et théorie des nombres, Presses Universitaires de France, Collection « Que sais-je ? », 1973. Pour les questions de cryptographie, on pourra consulter :
[8] S chneier Bruce, Cryptographie appliquée, Vuibert, Collection « Vuibert Informatique », 1994. Ouvrage très complet sur le sujet, facilement accessible, et comportant une bibliographie de 920 références. Néglige un peu les questions mathématiques. [9] Stinson Douglas, Cryptographie, théorie et pratique, Vuibert, Collection « Vuibert Infor matique », 1995. Ouvrage très complet. Les outils mathématiques sont introduits à mesure des besoins. [10] W elsh Dominic, Codes and cryptography, Oxford Science Publications, 1988. Recommandé pour aborder l’ensemble des méthodes mathématiques sur les théories de la communication. Bon niveau en mathématiques nécessaire. [11] Robin Guy, Algorithm ique et cryptographie. Ellipses, 1992. Niveau 3e cycle en mathématiques. [12] Hellman Martin, « Les mathématiques de la cryptographie à clef révélée », in: P our la science N° 24, octobre 1979. [13] Cham David, « Informatique et libertés », in: Pour la science N° 180, octobre 1992. [14] D elahaye Jean-Paul, « Cryptographie Quantique », in: Pour la science N° 178, août 1992. Peut-on se passer de la cryptographie mathématique ? Ouvrages généraux.
[15] D erbyshire Serge C., « Ultra », la plus « bavarde » des machines d’espionnage. in: L es dossiers de l ’histoire N°61, juillet 1986, Les éditions de l’Université et de l’enseignement moderne. [16]H odges Andrew, Alan Turing ou l ’énigme de l ’intelligence, Payot, 1988. Lire le chapitre « L’intelligence au service du chiffre ». [17] S tern Jacques, La science du secret, Odile Jacob. Progam mation avec MAPLE.
[18] K rob Daniel & Legros Stéphane, Le systèm e M APLE, Vuibert, Collection «Vuibert Informatique», 1996. [19] Gomez Cl. & Salvy B. & Z immermann P., Calculfo rm e l : m ode d ’emploi, Masson, 1995.