Initiation à la Cryptographie et Maths
Initiation à la Cryptographie et Maths
Initiation à la cryptographie
discipline, servant à assurer la sécurité et la confidentialité des communications et des données,
s’impose à tous.
Cette nouvelle édition, revue et augmentée pour prendre en compte les technologies actuelles et
les développements futurs en matière de sécurité, est destinée aux étudiants en premier cycle des
études supérieures des cursus mathématiques et informatique.
On y trouve, dans chaque chapitre, un cours complet et de nombreux exercices corrigés
(actualisés), pour comprendre et maîtriser les mécanismes à l’œuvre dans les échanges de
données. L'ouvrage intègre également toutes les nouvelles méthodes de cryptographie (AES,
chiffrement homomorphe, etc.)
SOMMAIRE
1. Les nombres premiers 10. Courbes elliptiques
2. Éléments d’arithmétique 11. Fonction de Hachage
3. L’algorithme d’Euclide étendu 12. Protocole ZK : Zero Knowledge
4. Le logarithme discret
5. Cryptosystèmes
13. Identification, Authentification, Signature ➔ Cours complet
14. Horodatage et Blockchain
6. Fonctions à sens unique 15. Exemples d’applications à la cryptographie ➔ Plus de 100 exercices
7. Le RSA et le chiffrement Elgamal
8. Le DES
16. Cryptanalyse
17. La cryptographie à travers l’Histoire
d’application corrigés
9. Advanced Encryption Standard (AES)
➔ Programmation avec Maple
Professeur certifié de mathématiques, Gilles Dubertret a enseigné de nombreuses années les mathématiques
et l'informatique au lycée de Sèvres et à l'IUT de Paris (université Paris V / René Descartes).
ISBN : 978-2-311-40615-3
www. .fr
Initiation
à la cryptographie
Gilles Dubertret
✐ ✐
✐ ✐
✐ ✐
ISBN : 978-2-311-40615-3
La loi du 11 mars 1957 n’autorisant aux termes des alinéas 2 et 3 de l’article 41, d’une part, que
les « copies ou reproductions strictement réservées à l’usage privé du copiste et non destinées à
une utilisation collective » et, d’autre part, que les analyses et les courtes citations dans un but
d’exemple et d’illustration, « toute représentation ou reproduction intégrale, ou partielle, faite sans
le consentement de l’auteur ou de ses ayants droit ou ayants cause, est illicite » (alinéa 1er de l’article
40). Cette représentation ou reproduction, par quelque procédé que ce soit, constituerait donc une
contrefaçon sanctionnée par les articles 425 et suivants du Code pénal. Le « photocopillage », c’est
l’usage abusif et collectif de la photocopie sans autorisation des auteurs et des éditeurs. Largement
répandu dans les établissements d’enseignement, le « photocopillage » menace l’avenir du livre, car
il met en danger son équilibre économique. Il prive les auteurs d’une juste rémunération. En dehors
de l’usage privé du copiste, toute reproduction totale ou partielle de cet ouvrage est interdite. Des
photocopies payantes peuvent être réalisées avec l’accord de l’éditeur.
S’adresser au Centre français d’exploitation du droit de copie : 20, rue des Grands Augustins, F-75006
Paris. Tél. : 01 44 07 47 70
✐ ✐
✐ ✐
✐ ✐
Introduction xi
2 Éléments d’arithmétique 13
2.1 Congruences dans Z . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.2 Congruence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.3 Ensemble quotient Z/nZ . . . . . . . . . . . . . . . . . . . . . . 17
2.1.4 Structure algébrique de Z/nZ . . . . . . . . . . . . . . . . . . . 17
2.1.5 Groupe, anneau et corps . . . . . . . . . . . . . . . . . . . . . . 18
2.1.6 Relation d’équivalence . . . . . . . . . . . . . . . . . . . . . . . 19
2.2 Cryptographie : César, Vigenère, permutation (Programmation) . . . 20
2.2.1 Système de cryptographie de César . . . . . . . . . . . . . . . . 20
2.2.2 Système cryptographique de Vigenère . . . . . . . . . . . . . . 22
2.2.3 Permutations alphabétiques . . . . . . . . . . . . . . . . . . . . 23
2.3 Divisibilité dans Z . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.3.1 Idéal des multiples de a : (a) . . . . . . . . . . . . . . . . . . . 24
2.3.2 Divisibilité et idéaux de Z . . . . . . . . . . . . . . . . . . . . . 25
2.3.3 PPCM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.3.4 PGCD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.3.5 Le Théorème de Gauss . . . . . . . . . . . . . . . . . . . . . . . 27
2.4 PGCD, PPCM et Maple (Programmation) . . . . . . . . . . . . . . . . 29
2.5 Retour aux nombres premiers . . . . . . . . . . . . . . . . . . . . . . . 30
2.6 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.7 Éléments inversibles de Z/nZ . . . . . . . . . . . . . . . . . . . . . . . 35
✐ ✐
✐ ✐
✐ ✐
4 Le logarithme discret 47
4.1 Racine primitive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.2 Critère de primalité de Lehmer . . . . . . . . . . . . . . . . . . . . . . 48
4.3 Racine primitive, grands nombres premiers (Programmation) . . . . . 49
4.3.1 Recherche de racine primitive . . . . . . . . . . . . . . . . . . . 49
4.3.2 Recherche de grands nombres premiers . . . . . . . . . . . . . . 50
5 Cryptosystèmes 53
5.1 Exemples de cryptosystèmes classiques . . . . . . . . . . . . . . . . . . 54
5.1.1 Trois exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.1.2 N-gramme substitution . . . . . . . . . . . . . . . . . . . . . . 54
5.1.3 Permutation d’ordre d . . . . . . . . . . . . . . . . . . . . . . . 54
5.1.4 Playfair Cipher . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.1.5 Transformation linéaire . . . . . . . . . . . . . . . . . . . . . . 55
5.1.6 La machine Enigma . . . . . . . . . . . . . . . . . . . . . . . . 55
5.2 Casser un cryptosystème . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.3 Différents niveaux d’attaque . . . . . . . . . . . . . . . . . . . . . . . . 62
5.4 Masque jetable, Vernam (One time pad) . . . . . . . . . . . . . . . . . 63
5.5 Cryptographie quantique . . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.6 La Cryptographie militaire (1883), Kerckhoffs . . . . . . . . . . . . . . 64
5.7 Communication Theory of Secrecy Systems, Shannon . . . . . . . . . . 65
5.8 Convertir du texte en nombre (Programmation) . . . . . . . . . . . . . 66
✐ ✐
✐ ✐
✐ ✐
8 Le DES 85
8.1 L’algorithme LUCIFER : notion de ronde . . . . . . . . . . . . . . . . 85
8.2 Le DES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
8.3 IDEA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
8.4 Modes de chiffrement par bloc. Mode ECB, CBC, CFB, OFB . . . . . 91
8.5 Ou exclusif et addition modulo 2 (Programmation) . . . . . . . . . . . 93
8.6 Addition modulo 216 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
✐ ✐
✐ ✐
✐ ✐
16 Cryptanalyse 169
✐ ✐
✐ ✐
✐ ✐
Bibliographie 175
Index 177
Les nombres entre crochets, tels que [13], présents dans le texte, renvoient à la biblio-
graphie, en fin d’ouvrage.
✐ ✐
✐ ✐
✐ ✐
✐ ✐
✐ ✐
✐ ✐
Introduction
Contrairement à une idée fort répandue, la cryptographie n’a pas pour seule finalité
la confidentialité des communications, même si cet aspect est absolument essentiel.
Le tableau suivant copié de [14], paru en 1996, le montre bien.
Remarquons tout de suite que les protocoles de preuve à divulgation nulle n’y
apparaissent pas : les développements récents ont conduit la cryptologie vers des
considérations mathématiques très théoriques.
Cette science est un beau mélange de :
— pratiques souvent empiriques ;
— mathématiques élémentaires utilisées avec les systèmes à clé publique ;
— mathématiques au plus haut niveau théorique avec la théorie des langages et
la complexité ;
— informatique tout ce qu’il y a de plus pratique afin d’implémenter correctement
les primitives utilisées ;
✐ ✐
✐ ✐
✐ ✐
x Introduction
✐ ✐
✐ ✐
✐ ✐
CHAPITRE 1
Définition 1.1 Un nombre p est premier s’il admet exactement deux diviseurs, 1 et
lui-même.
Diviseur 2 3 4 5 6
Quotient 14.5 9.6 7.2 5.8 4.8
Le tableau ci-dessus nous indique que les quotients vont en décroissant. À partir de 6,
les quotients sont plus petits que le diviseur. Aucun de ces quotients pour un diviseur
supérieur à 6 ne peut être entier puisque cela signifierait que 4999 est divisible par
ce quotient. Mais aucune division par un nombre inférieur à 6 n’a donné de quotient
entier. D’où la simplification suivante : √
Essayer toutes les divisions de 29 par D,√pour D allant de 2 à 29
(Plus précisément à la partie entière de 29 + 1)
Avec 4999, on est passé de 4 997 divisions à 70 divisions, ce qui est un gain appréciable
de temps.
✐ ✐
✐ ✐
✐ ✐
Proposition 1.2 Pour vérifier que√N est premier, il suffit de tester toutes les divisions
de N par D, avec D allant de 2 à N + 1
Cela donne le programme suivant avec MAPLE :
prime1 := proc(n)
local d, t;
t := time() ;
for d from 2 while d2 < n + 1 do
if irem(n, d) = 0 then RETURN(false) fi
od;
RETURN(true, time() − t)
end
Remarque : La variable t n’est utilisée ici que pour connaître le temps de calcul de
cet algorithme, et sera supprimée par la suite.
Troisième algorithme
On peut même encore améliorer √ la méthode en n’essayant que les divisions par les
nombres premiers inférieurs à N + 1, à condition de disposer d’une liste des nombres
premiers.
En effet, si la division par 2 ne tombe pas juste, il est inutile d’essayer les divisions
par les multiples de 2. On les raie tous de la liste des divisions à tester.
Si la division par 3 ne tombe pas juste, il est inutile d’essayer les divisions par les
multiples de 3... √
Il ne reste plus qu’à essayer les divisions par les nombres premiers inférieurs à N +1
Si vous avez une telle liste jusqu’à 1000, cela permet de tester rapidement si un nombre
inférieur à 10002 est premier.
Avec 4999, il ne reste plus que 20 divisions à tester.
Ces considérations nous amènent tout naturellement au crible d’Ératosthène.
✐ ✐
✐ ✐
✐ ✐
listprim1 := proc(n)
local i;
global l;
l := [] ;
for i from 2 to n do if prime1(i) then l := [op(l), op(i)] fi od ;
RETURN(l)
end
Remarque : les procédures présentées dans cet ouvrage sont rédigées avec MAPLE,
mais n’utilisent pratiquement que les boucles classiques « for », « 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.
l 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 267 − 1, qui vaut approxi-
mativement 1.47 × 1020 , c’est-à-dire qui s’écrit avec 21 chiffres. Sa racine carrée vaut
approximativement [Link]. Il faudra donc un peu plus d’un milliard de divi-
sions, certaines à dix chiffres ! Bon courage !
(F. Cole a calculé en 1903 que 267 − 1 = 193707721 × 761838257287)
Le package numtheory 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 pre-
miers. 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).
✐ ✐
✐ ✐
✐ ✐
Théorème 1.5 Tout entier peut se décomposer en produit de facteurs premiers (sauf
0 et 1, bien sûr) : n = pa1 1 × pa2 2 × ... × par r .
(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 p1 , et un quotient q1 : n = p1 × q1 avec q1 < n.
On recommence avec q1 jusqu’à obtenir un quotient premier.
Conclusion : tout entier n peut s’écrire n = pa1 1 × pa2 2 × ... × par r .
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 P le produit des n premiers
nombres premiers, alors tous les nombres P + 2, P + 3, P + 4, ..., P + n sont composés.
✐ ✐
✐ ✐
✐ ✐
(Ce livre n’ayant pas pour objet le calcul statistique, le deux calculs ci-dessous ne
seront pas détaillés.)
>with ( s t a t s ) :
>Xdata : = [ 6 , 7 , 8 , 9 , 1 0 , 1 1 , 1 2 , 1 3 ] : # nombre de c h i f f r e s
>Ydata := [ 5 5 , 1 6 5 , 5 4 9 , 2 0 3 2 , 6 5 3 6 , 2 2 4 6 4 , 7 2 1 1 6 , 2 2 5 6 8 9 ] :
>LYdata : = [ 4 , 5 . 1 , 6 . 2 , 7 . 6 , 8 . 7 , 1 0 , 1 1 . 2 , 1 2 . 3 ] : #Logarithme
du temps de c a l c u l
>p l o t s [ d i s p l a y ]
> s t a t p l o t s [ s c a t t e r 2 d ] ( Xdata , LYdata ) , # s c a t t e r p l o t
view = [ 0 . . 1 3 , 0 . . 1 3 ] , a x e s = FRAME) ;
Le graphique obtenu est le suivant :
✐ ✐
✐ ✐
✐ ✐
Cela signifie, en supposant que cette relation reste exacte pour d’autres valeurs que
celles testées, que, pour vérifier par cette méthode qu’un nombre de 100 chiffres est
premier, il faudrait environ 5 × 1050 secondes, soit environ 1, 5 × 1043 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
performant, é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 expo-
nentielle 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é).
Exercice 1.1. Écrire une procédure qui calcule le carré de 1.000 nombres de 100,
1.000, 10.000 ... chiffres (utiliser la boucle « do ... n2 ... od »), et vérifier cette affirma-
tion avec les méthodes exposées ci-dessus.
Résumé
Un algorithme de complexité exponentielle est en pratique inutilisable.
Des algorithmes de complexité linéaire, en n × Log(n) ou en n2 sont consi-
dé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 ha-
sard, 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érieu-
sement que le nombre est premier.
Bien sûr, les tests utilisés par « isprime(n) » sont plus sophistiqués que ceux décrits
ci-dessus (voir 2.8.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 pre-
miers industriels pour de tels nombres. Leur utilisation en cryptographie est am-
plement satisfaisante.
Insistons : s’il est rapide de vérifier avec une probabilité très proche de 1 qu’un nombre
de 100 chiffres est premier, ou mieux encore si on peut trouver rapidement des nombres
premiers de 200 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 trou-
ver les diviseurs de n = p × q, avec p et q premiers, p et q s’écrivant avec
100 chiffres.
✐ ✐
✐ ✐
✐ ✐
listprim1 := proc(n)
local i;
global l;
l := [] ;
for i from 2 to n do if prime1(i) then l := [op(l), op(i)] fi od ;
RETURN(l)
end
listprim2 := proc(N )
local l, n, d, premier ;
l := [2] ;
for n from 3 to N do
premier := true ;
for d in l while d2 < n + 1 do
if irem(n, d) = 0 then premier := false ; break fi
od;
if premier then l := [op(l), op(n)] fi
od;
RETURN(l)
end
✐ ✐
✐ ✐
✐ ✐
ulam0 := proc(n)
local i, points;
points := [] ;
for i from 2 to n do
if isprime(i) then points := [op(points), [i, 1/100 × i]] fi
od;
plot([points, [t, 1/100 × t, t = 0..n]], style = [point, line],
color = [red, blue], coords = polar , axes = none, symbol = CROSS)
end
La même spirale, sur laquelle ne sont tracés que les nombres premiers jusqu’à 100.000
permet de deviner certaines régularités.
Bien sûr, d’autres façons de construire la spirale sont possibles et permettent de trou-
ver des idées intéressantes sur les nombres premiers.
Signalons enfin un résultat trèsQimportant sur le nombre de nombres premiers infé-
rieurs à n, noté habituellement (n), Q et démontré par des méthodes analytiques qu’il
n’est pas question de développer ici : (n) ≈ n/Log(n) pour n « grand ».
✐ ✐
✐ ✐
✐ ✐
facteurs_premiers := proc(n)
local l, d, N ;
l := [] ;
N := n ;
while not isprime(N ) dofor d from 2 while d2 < N + 1 do
if irem(N, d) = 0 then l := [op(l), op(d)] ; N := iquo(N, d) ;
break fi
od
od;
l := [op(l), op(N )]
end
>f a c t e u r s _ p r e m i e r s ( 5 5 5 5 2 5 ) ;
[3 , 3 , 3 , 5 , 5 , 823]
MAPLE p r o p o s e :
>i f a c t o r (555525);
3 2
(3) (5) (823)
1.6 Exercices
Exercices pour programmer
Exercice 1.3. Écrire une procédure vérifiant, pour les entiers inférieurs à 1 000,
10 000..., la conjecture de Goldbach 5 : « Tout entier pair supérieur à 3 peut s’écrire
comme somme de deux nombres premiers ».
Exercice 1.4. De la même façon que dans 1), vérifier que tout entier supérieur à 12
est la somme de deux entiers composés.
✐ ✐
✐ ✐
✐ ✐
n
Exercice 1.5. On note Fer(n) le nombre 22 + 1, c’est-à-dire le ne nombre de
Fermat 6 . Fermat pensait que Fer(n) était premier pour tout n. Utilisez l’ordinateur
pour montrer qu’il se trompait.
Exercice 1.6. 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 100 nombres consécutifs dont aucun n’est premier ?
Exercice 1.9. Vrai/faux : la somme de deux entiers impairs consécutifs est composée.
6 Pierre de Fermat : mathématicien français (Beaumont de Lomagne, 1601 - Castres, 1665). On lui
doit de nombreux résultats en arithmétique, certains utilisés dans ce livre. Le grand théorème de
Fermat n’a été démontré qu’en 1998.
7 William George Horner : mathématicien britannique (1786-1837).
8 L’abbé Marin Mersenne : philosophe et savant français (1588-1648).
✐ ✐
✐ ✐
✐ ✐
1.6 Exercices 11
✐ ✐
✐ ✐
✐ ✐
✐ ✐
✐ ✐
✐ ✐
CHAPITRE 2
Éléments d’arithmétique
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 11+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 11+2=1 Mod(12) ou encore 11+2=1 [12].
On peut, bien sûr, généraliser et faire des calculs modulo n, n étant un entier quel-
conque.
Si, avec les heures, on travaille avec douze nombres de 0 à 11, dans les calculs modulo
n, on travaille avec n nombres, de 0 a n − 1.
On trouvera ci-après 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.)
Exercice 2.1. 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éserve 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 pas simplifier le 4 dans l’égalité 4×2=4×5
En revanche, ces problèmes n’apparaissent pas dans la table de multiplication modulo
31 (à condition de ne pas inclure le 0).
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 par ligne ou par colonne le nombre 1.
Par exemple, 14×20=1 [31], ce qui signifie que l’inverse, pour la multiplication modulo
31, de 14 est 20, de la même façon que l’inverse de 5 pour la multiplication ordinaire
est 15 puisque 5 × 15 = 1.
1
Ce résultat peut s’écrire Inv(14)=20 [31] ou encore 14 = 20 [31] ou encore 14−1 =
✐ ✐
✐ ✐
✐ ✐
✐ ✐
✐ ✐
✐ ✐
2.1.2 Congruence
Depuis l’école primaire, chacun sait faire une 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 2.1 Z est un anneau euclidien, c’est-à-dire que, pour a et b entiers don-
nés, il existe q et r uniques tels que a = bq + r avec 0 ≤ r < |b|.
Remarque : Z est l’ensemble des entiers relatifs. |b| est la valeur absolue de b.
Attention : le reste de la division de −7 par 3 est 2, puisque −7 = 3 × (−3) + 2.
Définition 2.2 a et b sont congrus modulo n s’ils ont le 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) ou, plus simplement, 10=1 [9] s’il n’y a pas
d’ambiguïté.
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ù la seconde définition possible :
✐ ✐
✐ ✐
✐ ✐
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 logiciels : Mod(25,9)=7.
Avec MAPLE : irem(25,9)=7.
✐ ✐
✐ ✐
✐ ✐
Par exemple, l’opposé de 3 dans Z/9Z, 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).
Remarque : 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.
✐ ✐
✐ ✐
✐ ✐
✐ ✐
✐ ✐
✐ ✐
1 Jules César : homme d’État romain (101 av. J.C. - 44 av. J.C.)
✐ ✐
✐ ✐
✐ ✐
l o c a l t a b l e 1 , t a b l e 2 , l l , i i , nb , s e c r e t ;
#ne pas u t i l i s e r l a v a r i a b l e i q u i s e r a i t co nfo ndue
a vec l a l e t t r e i
t a b l e 1 := t a b l e ( [ ’ a ’ = 1 , ’ b ’ = 2 , ’ c ’ = 3 , ’ d ’ = 4 , ’ e ’ = 5 , ’ f ’ = 6 , ’ g ’= 7 ,
’ h ’ = 8 , ’ i ’ = 9 , ’ j ’ = 1 0 , ’ k ’ = 1 1 , ’ l ’ = 1 2 , ’m’ = 1 3 , ’ n ’ = 1 4 , ’ o ’=1 5 ,
’ p ’ = 1 6 , ’ q ’ = 1 7 , ’ r ’ = 1 8 , ’ s ’ = 1 9 , ’ t ’ = 2 0 , ’ u ’ = 2 1 , ’ v ’ = 2 2 , ’w’= 2 3 ,
’x ’=24 , ’y ’=25 , ’ z ’=26 , ‘ ‘=27 , ‘ , ‘=28 , ‘. ‘=29 , ‘? ‘=30 , ‘: ‘=0]):
t a b l e 2 := t a b l e ( [ 1 = ’ a ’ , 2 = ’ b ’ , 3 = ’ c ’ , 4 = ’ d ’ , 5 = ’ e ’ , 6 = ’ f ’ , 7 = ’ g ’ ,
8= ’h ’ ,9 = i ,10= j ,11=k ,12= l ,13=m,14=n,15=o ,16=p,17=q ,18= r ,
19=s ,20= t ,21=u,22=v ,23=w,24=x ,25=y ,26= z ,2 7 = ‘ ‘ , 2 8 = ‘ , ‘ ,
29= ‘. ‘ ,30= ‘? ‘ ,0= ‘: ‘]):
l l := l e n g t h ( s t ) ; i f l l =0 then RETURN f i ;
secret := ‘ ‘;
f o r i i from 1 t o l l do
nb:= t a b l e 1 [ s u b s t r i n g ( s t , i i ) ] ;
# l a l e t t r e e s t t r a n s f o r m é e en nombre
nb:=nb+3 mod 3 1 ; #D é c a l a g e de 3 u n i t é s .
#Mettre i c i l a t r a n s f o r m a t i o n de v o t r e c h o i x
s e c r e t := c a t ( s e c r e t , t a b l e 2 [ nb ] ) ;
od ;
RETURN( s e c r e t ) ;
end :
Exemple :
> c e s a r ( ‘ b o n j o u r mo nsieur l e p r e s i d e n t ,
comment a l l e z vous ? ‘ ) ;
erqmrxu ? pr qvlhxu ? oh ? suhvlghqw : ? frpphqw ? dooh . ? yrxvb
Explication : avec table1, la procédure convertit chaque lettre en nombre ; ce nombre
est augmenté de 3 modulo 31 à la ligne 16. Table2 restitue la lettre correspondant au
résultat.
Pour déchiffrer le message il suffit de remplacer la ligne 16 par :
>nb :=nb-3 mod 31 ;
La ligne (>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 = 28 [31] -> ’,’
b -> 2 -> 15*2+13 = 12 [31] -> l
Pour déchiffrer un message obtenu avec cette règle, il conviendra de remplacer la
ligne (nb :=nb+3 mod 31 ;) par : 29*(nb-13) ; Que vient faire ce 29 ? l’explication sera
donnée en 2.7.1.
Exercice 2.6.
— 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‘
✐ ✐
✐ ✐
✐ ✐
✐ ✐
✐ ✐
MATHÉMATIQUES ET INFORMATIQUE
Gilles Dubertret informatique Gilles Dubertret
BTS – DUT – LICENCE
MATHÉMATIQUES ET INFORMATIQUE
INITIATION
Initiation à la cryptographie
discipline, servant à assurer la sécurité et la confidentialité des communications et des données,
s’impose à tous.
Cette nouvelle édition, revue et augmentée pour prendre en compte les technologies actuelles et
les développements futurs en matière de sécurité, est destinée aux étudiants en premier cycle des
études supérieures des cursus mathématiques et informatique.
On y trouve, dans chaque chapitre, un cours complet et de nombreux exercices corrigés
(actualisés), pour comprendre et maîtriser les mécanismes à l’œuvre dans les échanges de
données. L'ouvrage intègre également toutes les nouvelles méthodes de cryptographie (AES,
chiffrement homomorphe, etc.)
SOMMAIRE
1. Les nombres premiers 10. Courbes elliptiques
2. Éléments d’arithmétique 11. Fonction de Hachage
3. L’algorithme d’Euclide étendu 12. Protocole ZK : Zero Knowledge
4. Le logarithme discret
5. Cryptosystèmes
13. Identification, Authentification, Signature ➔ Cours complet
14. Horodatage et Blockchain
6. Fonctions à sens unique 15. Exemples d’applications à la cryptographie ➔ Plus de 100 exercices
7. Le RSA et le chiffrement Elgamal
8. Le DES
16. Cryptanalyse
17. La cryptographie à travers l’Histoire
d’application corrigés
9. Advanced Encryption Standard (AES)
➔ Programmation avec Maple
Professeur certifié de mathématiques, Gilles Dubertret a enseigné de nombreuses années les mathématiques
et l'informatique au lycée de Sèvres et à l'IUT de Paris (université Paris V / René Descartes).
ISBN : 978-2-311-40615-3
www. .fr