Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Cryptographie
SageMath et Python (3OCmath)
Cruptos (χρυπτoς) : caché, dissimulé
Graphein (γραφιν) : écrire
Jean-Philippe Javet
www.javmath.ch
Table des matières
2 Nombres premiers 15
2.1 Quoi de plus simple qu’un nombre premier ? . . . . . . . . . . . . . . . . . . . . . . 15
2.2 Test de primalité d’un nombre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.3 Le crible d’Ératosthène . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.4 Pour aller un peu plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
I
II
A Bibliographie 73
Malgré le soin apporté lors de sa conception, le polycopié que vous avez entre les mains contient certainement
quelques erreurs et coquilles. Merci de participer à son amélioration en m’envoyant un mail :
jeanphilippe.javet@vd.educanet2.ch
Merci ;-)
Un doigt d’algorithmique, intro à SageMath
1
1.1 Algorithmes, pseudo-code, SageMath
1
2 CHAPITRE 1. UN DOIGT D’ALGORITHMIQUE, INTRO À SAGEMATH
fonction factoriellepnq :
pÐ1
pour k P r1 , ns :
pÐp¨k
retourner p
Variables
n k p
Entrée
Initialisation
1re boucle
2e boucle
3e boucle
...........
2e étape: Programmation en SageMath :
def factorielle ( n ):
p =1
for k in [1.. n ]:
p=p*k
return p
Après avoir validé cette fonction en appuyant simultanément sur les
touches [Majuscule] et [Retour], on obtient :
factorielle (17)
|355687428096000
Exercice 1.1 Programmer les lignes ci-dessus dans SageMath puis vérifier la valeur
obtenue pour 17 !
Calculer ainsi 40 ! puis 100 !
CHAPITRE 1. UN DOIGT D’ALGORITHMIQUE, INTRO À SAGEMATH 3
Exercice 1.2 Et si les résultats partiels des calculs nous intéressent, on peut
créer une liste dans laquelle on va stocker toutes les factorielles
précédentes. Programmer les lignes suivantes :
def newfactorielle ( n ):
p =1; Liste =[]
for k in [1.. n ]:
p=p*k
Liste = Liste +[ p ]
return Liste
Et vérifiez que vous obtenez bien :
newfactorielle (7)
|[1 , 2 , 6 , 24 , 120 , 720 , 5040]
nÐ3
nÐn`1
afficher n
fonction successeurpnq :
nÐn`1
retourner n
3 4
n n`1
CHAPITRE 1. UN DOIGT D’ALGORITHMIQUE, INTRO À SAGEMATH 5
fonction mysterepa,bq :
aÐa`b
bÐa´b
aÐa´b
retourner a,b
mystere (2 ,10)
|(10 ,2)
p2 , 10q p10 , 2q
pa , bq pb , aq
6 CHAPITRE 1. UN DOIGT D’ALGORITHMIQUE, INTRO À SAGEMATH
‚ Lorsque l’on crée une liste par ajout d’éléments, il faut toujours
s’assurer que cette liste ait été définie préalablement. La fonction
suivante va engendrer une erreur :
def liste (a , b ):
Maliste = Maliste +[ a ]+[ b ]
return Maliste
En effet, on obtient plusieurs lignes dont la dernière :
CHAPITRE 1. UN DOIGT D’ALGORITHMIQUE, INTRO À SAGEMATH 7
liste (2 ,3)
| Error in lines 1 -1
|(...)
| local variable ’ Liste ’ referenced before assignment
La liste Maliste doit donc être initialisée vide au début de la
fonction :
def liste (a , b ):
Maliste =[]
Maliste = Maliste +[ a ]+[ b ]
return Maliste
Et ainsi :
liste (2 ,3)
|[2 , 3]
for . . . in . . . : Les boucles de type for permettent d’effectuer les mêmes calculs pour
toutes les valeurs entières d’un compteur k P ta, . . . ,bu. L’exemple
suivant affiche le début de la table de multiplication par 7 :
Mult7 =[]
for k in [1..5]:
Mult7 = Mult7 +[ k *7]
print Mult7
|[7 , 14 , 21 , 28 , 35]
Attention de ne pas oublier d’initialiser la liste Mult7 avant d’y
ajouter les multiples.
|[ -3 , -2 , -1 , 0 , 1 , 2 , 3]
|[4 , 1 , 0 , 1 , 4 , 9 , 16]
|[ -3 , -2 , -1 , 0 , 1 , 2 , 3 , 4 , 1 , 0 , 1 , 4 , 9 , 16]
|[1 , -1 , -1 , 1 , 5 , 11 , 19]
while: L’autre famille de boucles est constituée des boucles tant que. Comme
les boucles de type for, elles permettent d’effectuer un certain nombre
de fois les mêmes instructions ; en revanche le nombre de répétitions
n’est pas fixé au début, mais dépend de la réalisation d’une condition.
L’exemple suivant calcule et stocke dans une liste les multiples de 7
inférieurs à 60 :
Mult7 =[]; k =1
while 7* k <60:
Mult7 = Mult7 +[7* k ]
k = k +1
print Mult7
|[7 , 14 , 21 , 28 , 35 , 42 , 49 , 56]
fonction mysterepnq :
pÐ1
kÐ1
tant que k ă n ` 1 :
pÐp¨k
k Ðk`1
retourner p
mystere (11)
|39916800
fonction divmodpn,pq :
jÐ0
tant que n ą“ p :
nÐn´p
j Ðj`1
retourner j,n
142//6
|23
‚ Le reste de la division d’un nombre n par p s’obtient à l’aide
de la commande :
142%6
|4
Cette dernière commande se lit : 142 modulo 6 et donne 4.
10 CHAPITRE 1. UN DOIGT D’ALGORITHMIQUE, INTRO À SAGEMATH
p =1 def factorielle ( n ):
for k in [1..5]: p =1
p=p*k for k in [1.. n ]:
print p p=p*k
|120 return p
puis
factorielle (5)
|120
fonction sommefactopnq :
somme Ð 0
pour k P r0..ns :
somme “ somme ` 1{f actoriellepkq
afficher somme
1 1
6 8
e) Calculer puis en déduire une approximation de .
ÿ ÿ
k“0
k! k“0
k!
1. La commande SageMath N(nombre) permet de convertir le résultat d’un calcul (code fractionnaire) en un
nombre en code décimal.
12 CHAPITRE 1. UN DOIGT D’ALGORITHMIQUE, INTRO À SAGEMATH
Exercice 1.11 En appliquant une démarche comparable, calculer les sommes sui-
vantes :
1
7 12
i
a) b)
ÿ ÿ
lnp3k ` 1q 2i ´ 1
a
k“3 i“5
fonction factopnq :
si n “ 0 :
retourner 1
else:
retourner n ¨ f actopn ´ 1q
facto (5)
|120
n!
Combinaisonpn , pq “
p! ¨ pn ´ pq!
En utilisant la fonction facto(n), proposer la fonction
combi(n,p) et vérifiez que vous obtenez :
combi (9 ,3)
|84
CHAPITRE 1. UN DOIGT D’ALGORITHMIQUE, INTRO À SAGEMATH 13
6 , 3 , 10 , 5 , 16 , 8 , 4 , 2 , 1 , 4 , 2 , 1 , . . .
Exercice 1.13 a) Proposer une première fonction syra(n) qui permet de calculer
le terme suivant le nombre n proposé tout en respectant la règle
ci-dessus. Par exemple :
syra (6)
|3
Rappel: Un entier naturel est dit premier s’il est supérieur ou égal à 2 et
n’est divisible que par 1 et lui-même.
Quoi de plus simple ?: Et pourtant, ils renferment tant de mystères que les plus grands esprits
depuis des siècles n’ont toujours pas réussi à en percer tous les secrets, et
ce malgré les énormes progrès technologiques et les investissements colos-
saux consentis par les pouvoirs tant civils que militaires pour assurer ou
percer la confidentialité des transmissions de toutes natures qui continue
de dépendre d’une meilleure connaissance des nombres premiers, ce que
nous verrons un peu plus loin.
Qui sont-ils ? Combien sont-ils ? Où sont-ils ? À quoi servent-ils ? Nous
essaierons de donner quelques éléments de réponses à ces questions.
Mais tout d’abord, pourquoi jouent-ils un rôle si important ?
Fondamentalement, il existe deux manières d’engendrer N:
N
‚ si on veut engendrer en utilisant l’addition, on s’aperçoit que
le nombre 1 nous suffit : on « fabrique » 2 en additionnant 1 avec
lui-même ; 3 en additionnant 1 avec 2, etc.
‚ si on veut engendrer N
en utilisant la multiplication, là, les
choses se compliquent. Pour « fabriquer » 2, il faut le créer ; même
problème pour 3. On fabrique 4 en multipliant 2 avec lui-même,
mais il faut créer 5. On fabrique 6 en multipliant 3 avec 2. On
crée 7. On fabrique 8 à partir de 2. On fabrique 9 à partir de 3.
On fabrique 10 à partir de 2 et 5, etc.
Les nombres que l’on est obligé de créer sont les briques nécessaires
à fabriquer tous les autres. C’est bien plus compliqué que l’addition
me direz-vous, mais la multiplication est plus « puissante » et
nous permet d’aller bien plus vite et plus loin.
Les nombres premiers sont donc ces éléments qui nous permettent
de fabriquer tous les autres. Un des premiers problèmes étudiés a
été de savoir s’ils peuvent tenir dans une boîte, comme les Legos
dans la chambre d’un enfant. Euclide a répondu à cette question il
Euclide d’Alexandrie y a vingt-trois siècles et la réponse est non.
-325 à -265 av. J.-C. Pour le prouver, nous aurons besoin d’un résultat intermédiaire :
15
16 CHAPITRE 2. NOMBRES PREMIERS
Preuve: 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.
1. Great Internet Mersenne Prime Search est un projet de calcul partagé où les volontaires utilisent un logiciel
pour chercher les nombres premiers de Mersenne de la forme 2p ´ 1, avec p premier.
CHAPITRE 2. NOMBRES PREMIERS 17
est_premier (1321)
| True
est_premier (1322)
| False
18 CHAPITRE 2. NOMBRES PREMIERS
Premier algorithme: Essayer toutes les divisions de 1321 par D, pour D allant de 2 à
1320. Si aucune division ne “tombe juste”, alors on peut affirmer
que 1321 est premier.
C’est probablement un algorithme semblable à celui que vous avez
proposé dans l’exercice précédent.
def est_premier ( p ):
if p ==0 or p ==1:
return False
else :
if p ==2:
return True
else :
for k in [2.. p -1]:
if p % k ==0:
return False
return True
On obtient alors :
est_premier (1321)
| True
Cet algorithme peut être optimisé. Proposer 1319 calculs lorsque
36 peuvent suffire. . .
Deuxième algorithme: Essayer ‰ toutes les divisions de 1321 par D, pour D allant de 2 à
2
1321 ` 1.
“?
Exercice 2.5 Leonard Euler proposa une formule permettant de générer une
multitude de nombres premiers :
f pnq “ n2 ´ n ` 41 nP N
a) Proposer une fonction euler(n) qui, appelant la fonction
est_premier2(n), permet de vérifier la formule d’Euler pour la
valeur de n proposée.
b) Vérifier que f p2q, f p40q sont premiers, mais f p41q, f p42q ne
le sont pas.
En modifiant votre fonction :
c) Montrer que pour n P r0 ; 100s, la formule d’Euler fournit dans
Leonard Euler près de 86% des cas un nombre premier.
(1707-1783) d) Parmi les nombres n P r0 ; 100s, lesquels ne fournissent pas un
nombre premier ?
2. rns est un codage exprimant la partie entière du nombre réel n et correspondant à l’entier qui lui est
immédiatement inférieur ou égal. La fonction correspondante en Python est int().
20 CHAPITRE 2. NOMBRES PREMIERS
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
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100
1 def crible ( n ) :
2 L = [0.. n ]
3 L [1] = 0 # L [1]=0 , car 1 n ’ est pas un nombre premier
4 i = 2 # on commence avec le nombre i =2
5 while i <= n :
6 j = i + i
7 while j <= n :
8 L[j] = 0 # multiples de i remplace par 0
9 j = j + i
10 i = i + 1 # considerer le nombre i suivant
11 while i < n and L [ i ] == 0 : # tant qu ’ il est nul
12 i = i + 1 # passer au suivant
13 M = [] # liste vide qui contiendra les nbres premiers
14 for j in [0.. n ]:
15 if L [ j ] <> 0: # si le nombre est pas nul
16 M = M + [ L [ j ]] # l ’ ajouter a la liste
17 return M
3. Né 276 années av. J.-C., directeur de la Bibliothèque d’Alexandrie, on lui doit aussi une approximation du
diamètre de la Terre. Devenu aveugle, il s’est laissé mourir de faim...
CHAPITRE 2. NOMBRES PREMIERS 21
et on obtient :
crible (100)
| [2 , 3 , 5 , 7 , 11 , 13 , 17 , 19 , 23 , 29 , 31 , 37 , 41 , 43
| 47 , 53 , 59 , 61 , 67 , 71 , 73 , 79 , 83 , 89 , 97]
Exercice 2.7 Afin de bien décoder la fonction crible, écrire le pseudo-code corres-
pondant.
Tester votre pseudo-code pour n “ 7 en observant le contenu de la
liste L en cours de calculs.
Théorème: Tout entier n supérieur à 2 admet une et une seule (à l’ordre près
des termes) décomposition en produit fini de nombres premiers.
Par exemple, 150 “ 2 ¨ 3 ¨ 52 , les facteurs premiers ne sont pas forcément
distincts. On a alors l’habitude d’écrire la décomposition sous la forme :
def decomp ( n ):
Div = []
P = crible ( n ) # P contient la liste des nbres prem . <= n
for j in [0.. len ( P ) -1]:
while n % P [ j ]==0:
# tant que n divisible par l ’ element j de P
Div = Div + [ P [ j ]]
# on ajoute a Div ce div . premier
n = n / P[j]
# on divise n par ce div . premier
return Div
22 CHAPITRE 2. NOMBRES PREMIERS
et on obtient :
decomp (12200)
| [2 , 2 , 2 , 5 , 5 , 61]
Pour être honnête, il existe la fonction factor qui donne directement
la décomposition d’un nombre en facteurs premiers.
factor (12200)
| 2^3 * 5^2 * 61
Exercice 2.9 a) À l’aide du pseudo-code que vous avez proposé dans l’exer-
cice précédent, reconstituez la fonction decomp et testez-la sur
SageMath.
b) 168’399 n’étant pas un nombre premier, factorisez-le avec avec
votre fonction decomp puis avec la fonction factor proposée par
SageMath.
Remarque: Vous avez dû constater que toutes les fonctions proposées pour
factoriser en nombres premiers ou déterminer des nombres premiers
sont rapides au début, mais deviennent inefficaces avec des grands
nombres. Estimons le nombre de divisions à effectuer pour tester
267 ´ 1, qui vaut approximativement 1,47 ¨ 1020 . On constate qu’il
s’écrit avec 21 chiffres. Sa racine carrée vaut approximativement
12’000’000’000. Il faudra donc un peu plus de 12 milliards de divi-
sions, certaines à dix chiffres ! Bon courage !
(F. Cole a calculé en 1903 que 267 ´ 1 “ 193707721 ¨ 761838257287)
Une nouvelle commande: SageMath propose une fonction is_prime(. . .), qui permet de contrô-
ler si un nombre est premier, et ceci même s’il est grand.
Exercice 2.10 Vérifier que 2’027’651’281 n’est pas un nombre premier. Factorisez-le.
CHAPITRE 2. NOMBRES PREMIERS 23
def mystere ( n ):
Liste =[]
i =2
while len ( Liste ) < n :
if is_prime ( i ):
Liste = Liste + [ i ]
i = i + 1
return Liste
Pierre de Fermat
(1607(?) -1665)
Exercice 2.13 Dans un inédit de Marcel Pagnol, celui-ci affirme que le nombre :
N “ n ` pn ` 2q ` npn ` 2q
Exercice 2.14 Est-il possible de trouver un nombre premier p tel que p ` 100 et
p ` 200 soient aussi premiers ?
est-elle exacte ?
Voici encore quelques informations à propos des premiers de Mer-
senne :
‚ Le 8e nombre de Mersenne premier a été découvert en 1772
par Euler.
‚ La liste des 12 premiers nombres de Mersenne premiers a été
définitivement établie en 1947.
‚ L’arrivée des ordinateurs a permis d’accélérer les découvertes.
Comme déjà mentionné, le record actuel est établi avec le
nombre M777232917 . Vous pouvez télécharger un fichier conte-
nant les chiffres de ce nombre sur http://www.mersenne.org.
Ne vous avisez pas d’imprimer ce fichier, car il vous faudrait
près de 6’840 pages entièrement remplies.
Chiffrement de César et congruence
3
3.1 Trois exercices en guise d’introduction
‚ Une question de dates
Un élève qui aime bien les congés le jour de son anniversaire constate qu’en 2008, le 6 décembre
tombait un samedi. Comment peut-il savoir, sans trop se fatiguer, si en 2009 puis en 2010
son anniversaire tombera sur un week-end ?
‚ On prépare la crypto
Imaginons une bande de papier infinie sur laquelle, on place les lettres de l’alphabet dans l’ordre
alphabétique puis arrivé à Z, on recommence à A comme le suggère la figure ci-dessous :
…
B …
A B … Z A B … Z A B … …
… …
0 1 … 25 26 27 … 51 52 53
Montrer que, pour gagner, le candidat doit laisser, à chaque étape, un nombre de bâtonnets
dont le reste par la division par 4 est de 1.
25
26 CHAPITRE 3. CHIFFREMENT DE CÉSAR ET CONGRUENCE
x”y pmod nq
s’ils ont le même reste (positif) dans leurs divisions respectives par n.
Exercice 3.2 Sur la droite graduée ci-dessous, colorier en rouge les entiers congrus
à 0 mod 3, en bleu ceux congrus à 1 mod 3 et en vert ceux congrus
à 2 mod 3. Que constatez-vous ?
´4 ´3 ´2 ´1 0 1 2 3 4 5 6 7
Exercice 3.4 Déterminer si chacun des entiers suivants est congru à 22 pmod 17q :
212%7
| 2
Ainsi donc 212 ” 2 pmod 7q.
Introduction: Depuis les temps historiques les plus reculés, les hommes ont utilisé di-
verses méthodes pour chiffrer des messages et rendre ceux-ci inintelligibles
à des lecteurs indésirables. C’est essentiellement dans les domaines mili-
taires et diplomatiques que le chiffrement de messages était utilisé. Les
Anglais, avec des mathématiciens comme Alan Turing, se sont illustrés
pendant la Seconde Guerre mondiale, en décryptant les messages que
la marine allemande chiffrait avec la machine Enigma dont le principe
remontait à la fin de la Première Guerre mondiale. Aujourd’hui, le champ
d’application de la cryptologie s’est élargi et a trouvé un regain d’actualité
avec les problèmes posés par la sécurité des transactions bancaires, des
transmissions de fichiers et de bases de données sous forme électronique.
Nous entrons, en effet, dans un jeu qui se joue avec trois personnages : le
Alan Turing premier envoie un message au second, le problème étant alors d’interdire
Mathématicien anglais l’accès de ce message au troisième. On peut, bien sûr, envisager des
(1912 ´ 1954) parades physiques visant à faire que le troisième personnage ne puisse
accéder au message, mais l’expérience montre que ces parades sont trop
souvent déjouées par l’adversaire. Une façon de procéder est de chiffrer
le message de façon à ce que, même intercepté, il ne puisse être lu par le
troisième personnage.
Les deux premiers joueurs qui jouent ensemble contre le troisième auront
gagné :
‚ s’ils peuvent chiffrer et déchiffrer facilement des messages, et ce
dans un temps humainement raisonnable ;
‚ si le troisième personnage, le cryptanalyste ne peut décrypter le
message, même avec la puissance calculatoire des ordinateurs, en
un temps raisonnable.
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
0 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
CHAPITRE 3. CHIFFREMENT DE CÉSAR ET CONGRUENCE 29
26 ! = 403’291’461’126’605’635’584’000’000
M 1 ” M ` 3 pmod 26q
Alphabet 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
en clair 0 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
Alphabet Ó Ó Ó Ó Ó Ó Ó Ó Ó Ó Ó Ó Ó Ó Ó Ó Ó Ó Ó Ó Ó Ó Ó Ó Ó Ó
Alphabet 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 0 1 2
chiffré D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
Dans ce premier exemple, nous laissons les blancs des textes pour en
faciliter la lecture, mais il conviendra de les supprimer ! Les blancs
seraient autant d’indices mis à la disposition des cryptanalystes. De plus,
seules les lettres majuscules seront utilisées
FHPHVVDJHHVWVHFUHW
TU QUOQUE MI FILI
DYHFDHVDUPRULWXULWHVDOXWDQW
Comment déchiffrer ?: Pour chiffrer, on décale le rang des lettres de trois vers la droite,
pour déchiffrer on décale les lettres du cryptogramme de trois rangs
vers la gauche de l’alphabet : les lettres A, B, C, quant à elles sont
transformées en X, Y, Z.
Traduisons cette façon de faire “arithmétiquement” avec les équiva-
lents numériques.
Si M 1 est le symbole d’une lettre chiffrée, M le symbole de la lettre
en clair lui correspondant, on a :
ord(. . .)
La fonction :
def code_ascii ( message_clair ):
Liste =[]
for lettre in message_clair :
ascii = ord ( lettre )
Liste = Liste +[ ascii ]
return ( Liste )
permet de
code_ascii ( " PAX " )
| [80 ,65 ,88]
fonction cesarpmessage_clairq :
message_code Ð rs
pour lettre dans message_clair :
ascii Ð ordplettreq ´ 65
ascii_crypt Ð pascii ` 3q mod 26
lettre_crypt Ð chrpascii_crypt ` 65q
message_code Ð message_code`rlettre_crypts
message_crypt Ð ””.joinpmessage_codeq
retourner message_crypt
2. Afin d’éviter les éventuelles erreurs de transcription des chaînes de caractères des exercices qui suivent, vous
pouvez les retrouver sur http://www.javmath.ch afin de les copier-coller.
CHAPITRE 3. CHIFFREMENT DE CÉSAR ET CONGRUENCE 33
LOHVWWHPSVGHSDVVHUDDXWUHFKRVH
“XQETAYYQEODAUQZFQZOQCGUXEPQEUDQZF”
“ARZDVIRZJDZVLOVKIVCVGIVDZVIUREJLE
MZCCRXVHLVCVJVTFEURIFDV”
34 CHAPITRE 3. CHIFFREMENT DE CÉSAR ET CONGRUENCE
Preuve:
CHAPITRE 3. CHIFFREMENT DE CÉSAR ET CONGRUENCE 35
N
ˇ
ˇ xp ” y p pmod nq @p P
Exemple 4:
36 CHAPITRE 3. CHIFFREMENT DE CÉSAR ET CONGRUENCE
Preuve:
ˇ
ˇ x ` x1 ” y ` y 1 pmod nq
ˇ
ˇ x ´ x1 ” y ´ y 1 pmod nq
ˇ
ˇ x ¨ x1 ” y ¨ y 1 pmod nq
ˇ
N
ˇ
ˇ xp ” y p pmod nq @p P
CHAPITRE 3. CHIFFREMENT DE CÉSAR ET CONGRUENCE 37
Exercice 3.19 Quel est le chiffre des unités de 41 5687 (sans SageMath. . . ) ?
Indication : le chiffre des unités d’un entier n est le reste de la division
de n par . . .
¨ 0 1 2 3 4
0
1
2
3
4
a) 4 ¨ x ” 2 pmod 5q b) 3 ¨ x ” 1 pmod 5q
Remarque: Dans ce dernier cas, on dit que 2 est l’inverse de 3 modulo 5 car :
3¨2”1 pmod 5q
•Pour n “ 4 •Pour n “ 6
¨ 0 1 2 3 ¨ 0 1 2 3 4 5
0 0
1 1
2 2
3 3
4
5
CHAPITRE 3. CHIFFREMENT DE CÉSAR ET CONGRUENCE 39
Exercice 3.24 1) Montrer que chaque nombre non nul modulo 7 admet un inverse.
2) Résoudre les équations suivantes :
a) 4 ¨ x ” 3 pmod 7q b) 5 ¨ x ” 0 pmod 7q
c) 12 ¨ x ” 20 pmod 7q
Exercice 3.25 Après avoir observé que 3 est l’inverse de 6 modulo 17, résoudre :
M 1 ” a ¨ M ` b pmod 26q
Exercice 4.2 Le but de cet exercice est d’observer l’influence du choix des clés a
et b dans le chiffrement d’un caractère.
‚ Avec a “ 1, b “ 0, nous obtenons le tableau de conversion :
Alphabet 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
en clair 0 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
Alphabet 0 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
chiffré 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
On a vu mieux comme chiffrement. . .
‚ Avec a “ 2, b “ 0, nous obtenons le tableau de conversion :
Alphabet 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
en clair 0 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
Alphabet 0 2 4 6 8 10 12 14 16 18 20 22 24 0 2 4 6 8 10 12 14 16 18 20 22 24
chiffré A C E G I K M O Q S U W Y A C E G I K M O Q S U W Y
a) Expliquer pourquoi ces clés a et b de chiffrement affine ne
doivent pas être utilisées.
41
42 CHAPITRE 4. CHIFFREMENT AFFINE, ALGORITHMES D’EUCLIDE ET BÉZOUT
Alphabet 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
en clair 0 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
Alphabet 0 3 6 9 12 15 18 21 24 1 4 7 10 13 16 19 22 25 2 5 8 11 14 17 20 23
chiffré A D G J M P S V Y B E H K N Q T W Z C F I L O R U X
a P t1 ; 3 ; 5 ; . . . . . . u
Exemple 1: Chiffrer, à la main, le message “Le roi est mort” à l’aide d’un
chiffrement affine avec a “ 3, b “ 5.
message L E R O I E S T M O R T
en clair
message
chiffré
CHAPITRE 4. CHIFFREMENT AFFINE, ALGORITHMES D’EUCLIDE ET BÉZOUT 43
Exercice 4.3 Chiffrer, à la main, le message “Alea jacta est” à l’aide d’un chiffre-
ment affine avec a “ 7, b “ 3.
Exercice 4.4 Après avoir proposé le pseudo-code, proposer une fonction af-
fine(phrase,a,b) permettant à l’aide de SageMath de chiffrer une
phrase avec les clés a et b. Contrôler que :
Définition: On dit que deux nombres entiers relatifs non nuls a et b sont pre-
miers entre eux lorsqu’ils n’admettent pas de diviseur commun
autre que le nombre 1.
Définitions équivalentes: ‚ On dit que deux nombres entiers relatifs non nuls a et b sont
premiers entre eux lorsque leur PGDC est égal à 1.
‚ On dit que deux nombres entiers relatifs non nuls a et b sont
a
premiers entre eux lorsque la fraction est irréductible.
b
44 CHAPITRE 4. CHIFFREMENT AFFINE, ALGORITHMES D’EUCLIDE ET BÉZOUT
Exercice 4.8 Les couples de nombres suivants sont-ils premiers entre eux ?
a) 122 et 49 b) 352 et 33
Exercice 4.11 Les entiers 5617 et 1515 sont-ils premiers entre eux ?
Euclide généralisé: Soit a et b deux entiers naturels non nuls. La suite des divisions
euclidiennes :
‚ de a par b a “ q 0 ¨ b ` r0
‚ de b par r0 (si r0 ‰ 0) b “ q1 ¨ r0 ` r1
‚ de r0 par r1 (si r1 ‰ 0) r0 “ q2 ¨ r1 ` r2
.. ..
. .
‚ de rn´1 par rn (si rn ‰ 0) rn´1 “ qn`1 ¨ rn ` rn`1
finit par s’arrêter, la suite des restes ri finissant par être nulle.
a et b deux entiers
naturels non nuls
r ≡ a (mod b)
OUI NON
r≠0
a prend la valeur de b
PGDC(a , b) = b
b prend la valeur de r
r ≡ a (mod b)
L’égalité de Bézout: Soit a et b deux entiers relatifs non nuls et D leur PGDC. Il existe
deux entiers relatifs u et v tels que :
au ` bv “ D
Exemple 4: Nous avons montré que PGDC(4539, 1958) = 89. L’encadré précé-
dent affirme donc qu’il existe deux entiers u et v tels que :
Étienne Bézout
(1730 – 1783)
62u ` 43v “ 1
Euclide Reste
• 2244 “ 2 ¨ 780 ` 684 684 “ 2244 ´ 2 ¨ 780 (1 ; 0q ´ 2p0 ; 1q p1 ; ´2q
• 780 “ 1 ¨ 684 ` 96 96 “ 780 ´ 1 ¨ 684 p0 ; 1q ´ 1p1 ; ´2q p´1 ; 3q
• 684 “ 7 ¨ 96 ` 12 12 “ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. . . . ; . . . . q
• 96 “ . . . . . . . . . . . . . . . . . . . . “ . . . . . . . . . . . . . . . . .
Exercice 4.18 À l’aide de vos fonctions euclide et bezout développées sur SageMath,
déterminer les PGDC des deux nombres proposés ainsi que les
coefficients u et v de l’égalité de Bézout
Exercice 4.19 Montrer que le choix de la clé a “ 13 induit que toutes les lettres
ayant un équivalent numérique pair seront chiffrées de la même
façon.
On rappelle qu’un tel choix de clé ne convient pas, car on doit exiger
qu’à deux lettres différentes au départ correspondent deux lettres chiffrées
différentes.
Qu’est-ce que cette condition implique pour les valeurs possibles de a ?
Question: On sait, après avoir fait un choix de a satisfaisant (par exple a “ 7),
chiffrer un texte grâce à un chiffrement affine. Peut-on alors toujours
le déchiffrer ?
Oui, bien sûr ! On est assuré de pouvoir déchiffrer, car la transfor-
mation affine assure une correspondance terme à terme entre toutes
les lettres de l’alphabet, c’est une bijection et vous avez dû voir dans
un cours de base qu’il existe alors une transformation réciproque.
Cependant, on peut se demander si la recherche des clés de déchif-
frement peut se faire via l’utilisation d’une opération arithmétique
modulo 26. La réponse est oui ; on le montre en utilisant Bézout :
‚ a est premier avec 26, donc PGDC(a , 26) = 1. Ainsi, d’après
Bézout, il existe a1 et v tel que :
a ¨ a1 ` 26v “ 1
50 CHAPITRE 4. CHIFFREMENT AFFINE, ALGORITHMES D’EUCLIDE ET BÉZOUT
ou, modulo 26 :
“JKYJMMGNFKXGJKREONM”
M ” 15 ¨ M 1 ` 6 pmod 26q
CHAPITRE 4. CHIFFREMENT AFFINE, ALGORITHMES D’EUCLIDE ET BÉZOUT 51
Exercice 4.20 Sans utiliser SageMath, on considère les clés de chiffrement affine
a “ 11 et b “ 22.
On s’intéresse alors aux clés de déchiffrement a1 et b1 .
a) Montrer que a1 “ 19 est l’inverse de a pmod 26q.
b) Montrer que b1 “ 24 est l’autre clé.
c) Montrer que le chiffrement affine de la lettre “C” correspond
à “S”, puis que les clés de déchiffrement a1 “ 19 et b1 “ 24
retransforme bien “S” en “C”.
Exercice 4.21 On sait que Roméo a envoyé à Juliette le message chiffré suivant 1 :
“ZXTHAWBNJQBDQIEZMBJOHADRDQIIZB”.
Exercice 4.22 À l’aide des différentes fonctions développées sous SageMath, dé-
chiffrer le message suivant sachant qu’il a été chiffré avec les clés
a “ 23 et b “ 23 :
“LSVZHKKLRHKKXZSEXVQXRQLI”.
1. Afin d’éviter les éventuelles erreurs de transcription des chaînes de caractères des exercices qui suivent, vous
pouvez les retrouver sur http://www.javmath.ch afin de les copier-coller.
52 CHAPITRE 4. CHIFFREMENT AFFINE, ALGORITHMES D’EUCLIDE ET BÉZOUT
La cryptanalyse: Elle désigne l’ensemble des procédés pouvant être mis en œuvre
pour percer à jour un texte chiffré, sans connaître, à priori, la ou
les clés de chiffrement et de déchiffrement.
Plaçons-nous dans le cas où le cryptanalyste sait, cependant, que
le mode de chiffrement est une transformation affine du genre de
celles vues dans les paragraphes précédents. Il lui reste à découvrir
les clés a et b ayant servis à faire la transformation. Il pourra alors,
sans difficulté, procéder au déchiffrement.
On l’a vu, il y a 311 transformations affines possibles : il est toujours
possible “théoriquement” d’envisager chacune de ces transformations
et d’examiner, avec le cryptogramme ce que chacune d’entre elles
produit comme texte supposé en clair. On le devine, cela va être bien
fastidieux ! C’est encore un principe retenu aujourd’hui ; la recherche
d’une clé de déchiffrement est toujours réalisable théoriquement,
mais les “codeurs” choisissent des systèmes de chiffrement tels que
la découverte de la clé demande plusieurs années de calculs à des
ordinateurs puissants.
“YMQMGGKAMMGNNELGMYZMN”.
a1 ” 2 pmod 13q
Donc a1 P t2 ; 15 ; 28 ; . . .u.
Modulo 26, cela nous donne a1 ” 2 pmod 26q ou a1 ” 15
pmod 26q. Comme de plus a1 doit être premier avec 26 pour
être admissible, cela nous donne comme seule solution possible
a1 “ 15.
‚ De (1) ou (2), on déduit que b1 “ 6.
On retrouve ainsi la transformation affine de déchiffrement :
affine ( " Y M Q M G G K A M M G N N E L G M Y Z M N " ,15 ,6)
| " CEMESSAGEESTTOPSECRET "
Exercice 4.23 En appliquant une démarche analogue, retrouver les clés de chiffre-
ment vérifiant :
clair chiffré
E Ñ 4 ,Ñ 12 Ñ M
S Ñ 18 ,Ñ 6ÑG
OFVVFSGBXVGPBPWXGDHQXFRMXM
PDOEFSGXBXVGWRPZRPGFOOKXSMWXSD
HQKXMFSSXXVZRPWFCXBRVFAXRSXVVXXSFDB
BROXWFVPYPXHXOFKGPXORPVVFADRXVXBDRCKPGM
RSOKXHPXKMRCXGOXSMFSGWFMDRUPXHXPWOFVVFX
SBDKXWXVXOGPXHXMXVFCPXFCFSGMXOKXSMKXRSX
XODRVXXGBPSZFSVOWRVGFKMPWXRGRSQXWXSIFS
GZRPFOKXVFCDPKFGGXPSGWFHDPGPXMXWFT
XIPSFWMXVDSOXKXOXKPGMRSXHDKGHFWE
XRKXRVXVDSOXKXWRPVRKCXBRGZRFGK
XFSSXXVMXGDRGBXBPMXMRPVVDSFTX
message C E M E S S A G E E S T S E C R E T
en clair 2 4 12 4 18 18 0 6 4 4 18 19 18 4 2 17 4 19
Clé C O D E C O D E C O D E C O D E C O
"bout à bout" 2 14 3 4 2 14 3 4 2 14 3 4 2 14 3 4 2 14
message 4 18 15 8 20 6 3 10 6 18 21 23 20 18 5 21 6 7
chiffré E S P I U G D K G S V X U S F V G H
CHAPITRE 4. CHIFFREMENT AFFINE, ALGORITHMES D’EUCLIDE ET BÉZOUT 55
Exercice 4.25 a) Combien de fois faudra-t-il mettre bout à bout la clé “BO” pour
chiffrer le message :
“MONPREMIERMESSAGE” ?
Exercice 4.26 Pour finir, déchiffrer le message suivant sachant que la clé de chif-
frement était “BIENVU” :
“OMQNIKVMDCVMMMWVOYBZWPMSQBSTMUQPMPV”
La cryptographie à clé publique : RSA
5
5.1 Quelques nouveaux outils mathématiques
d ¨ e ” 1 pmod nq.
invmod (5 ,1848)
|1109
SageMath: Vous avez peut-être constaté que votre fonction peut être particuliè-
rement lente. On peut alors utiliser la fonction prédéfinie :
ab pmod nq
57
58 CHAPITRE 5. LA CRYPTOGRAPHIE À CLÉ PUBLIQUE : RSA
Introduction: Dans les années 1970, la cryptographie n’est plus seulement l’apanage
des militaires. Les banques, pour la sécurité de leurs transactions,
sont devenues de grandes consommatrices de messages chiffrés. Les
chiffrements disponibles alors sont sûrs, eu égard aux possibilités
d’attaques contemporaines. Le problème essentiel est alors la distri-
bution des clés, ce secret que l’envoyeur et le destinataire doivent
partager pour pouvoir respectivement chiffrer et déchiffrer. Les ar-
mées et les états ont recours aux valises diplomatiques pour ces
échanges, mais ceci n’est pas accessible aux civils...
gpf pM qq “ gpM 1 q “ M.
Exercice 5.4 À l’aide de SageMath, contrôler que toutes les valeurs 1 proposées
dans l’exemple précédent (p, q, n, ϕpnq, e, d, M 1 ) vérifient bien les
conditions de la marche à suivre.
Rappelons quelques commandes pratiques de SageMath :
p51201345568138081747 , 158792633q
d “ 39115303732664896793
O U I
M (en clair) 14 20 08
M 1 ” M 3 pmod 253q 214 157 006
Exercice 5.6 À l’aide de SageMath, déterminer dans ce cas simple, les 2 nombres
premiers p et q, ϕpnq et la clé d de déchiffrement. Assurez-vous, en
déchiffrant le message, que vous obtenez bien le message OUI en
clair.
OKPOURLUNDI
O K P O U R L U N D I
14 10 15 14 20 17 11 20 13 03 08
OK PO UR LU ND IA
14 10 15 14 20 17 11 20 13 03 08 00
OK PO UR LU ND IA
M 374 404 537 306 341 208
M 1 “ M 5 pmod 1943q 1932 635 68 1705 71 660
64 CHAPITRE 5. LA CRYPTOGRAPHIE À CLÉ PUBLIQUE : RSA
CWI YL CQ CNP CT ZK
CWI YL CQ CNP CT ZK
M 1
1932 635 68 1705 71 660
M ” pM q1 1109
pmod 1943q 374 404 537 306 341 208
14 ¨ 26 ` 10 15 ¨ 26 ` 14 20 ¨ 26 ` 17 11 ¨ 26 ` 20 13 ¨ 26 ` 03 08 ¨ 26 ` 00
OK PO UR LU ND I(A)
3 261 833.
Exercice 5.10 Votre professeur d’OC envoie votre moyenne au secrétariat via un
courriel chiffré en RSA. La clé publique du secrétariat est p55 , 7q et
le message chiffré envoyé est 25.
Quelle est votre moyenne ?
CHAPITRE 5. LA CRYPTOGRAPHIE À CLÉ PUBLIQUE : RSA 65
Remarque: Les algorithmes à clé publique (on parle aussi de chiffrement asymétrique)
ont pourtant un grave défaut : ils sont lents, beaucoup plus lents que leurs
homologues symétriques. Pour des applications où il faut échanger de
nombreuses données, ils sont inutilisables en pratique. On a alors recours
à des cryptosystèmes hybrides. On échange des clés pour un chiffrement
asymétrique grâce à la cryptographie à clé publique, ce qui permet de
sécuriser la communication de la clé. On utilise ensuite un algorithme de
chiffrement symétrique. Le célèbre PGP, notamment utilisé pour chiffrer
le courrier électronique, fonctionne sur ce principe.
Comment ça marche ?: La majorité des transactions sécurisées sur Internet utilisent l’algo-
rithme RSA avec des clés publiques de différentes tailles. En voici
une, fictive, qui pourrait être celle de votre banque :
ED 74 A7 6C D3 3A E3 77 0B BC FC DF E5 0D 32 C4 35 10 86 D8 B8 89 5E F8 AC 23 14
1D 27 7F D3 FA 78 4F 55 60 0B 6A C9 C0 83 0B 90 A0 5F 6B 69 2A F7 12 23 44 25 A7 C0
5F 96 28 35 EB B4 C8 BE DE 3C 35 59 EF 92 49 17 F6 1D A6 6B 75 3E 78 BD 9C 6C 14
0A 7C 09 35 29 9C C2 B9 F2 1C 77 2C 57 1F D4 04 0B 09 C6 1D A4 F4 13 27 45 0B 2C D7
8B B5 9C 75 5C 38 AF 18 78 04 9B F6 A6 0E DD EB 18 AE 2A 8D 96 35 28 63 48 F2 A5
92 C0 4C D5 4B 02 39 38 35 73 74 04 CE 6C F6 CB F1 55 08 FC EA DA 17 C6 A7 7C C0
EE E7 0B FB CB 99 B3 11 94 C4 26 A1 C5 EE 31 FC CB 1F F2 89 0F A9 CD E1 10 E6
0F 96 D3 6B FE D0 65 F7 A0 95 95 31 35 96 13 74 8F 7D 08 13 6E 1D DA 8F 7C 59 FC 62
BC 0F CD 80 72 3E 2D 29 4A 8C 78 C0 23 86 6D EF FB 8C C3 3F 73 0C AE 24 5D 25 90
86 44 DD 81 45 A5 A6 37 81 0F 7D
https://fr.wikipedia.org/wiki/Infrastructure_à_clés_publiques
2 0 9
2 1 0
.. ..
2 . .
2 9 9
3 0 0
4000 ` 300 ` 20 ` 2
ou plutôt
4 ¨ 10 ` 3 ¨ 102 ` 2 ¨ 101 ` 2 ¨ 100
3
CHAPITRE 5. LA CRYPTOGRAPHIE À CLÉ PUBLIQUE : RSA 67
a) 1101010012 b) 1101010013
c) 4445 d) 199311
e) 7A616
On utilise les lettres A à F pour noter les “chiffres” de 10 à 15 dans la base 16
a) 999210 b) NON26
2.
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
0 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
CHAPITRE 5. LA CRYPTOGRAPHIE À CLÉ PUBLIQUE : RSA 71
Exercice 5.16 Effectuer les opérations suivantes dans les bases indiquées, puis
après conversion en base 10, vérifier le résultat :
Bibliographie
1. SIMON SINGH, Histoire des codes secrets, Livre de Poche, 2001
Sur le WEB
1. Le site compagnon du polycopié :
www.javmath.ch
2. Ars Cryptographica :
www.apprendre-en-ligne.net/crypto
3. La Cryptogr@phie expliquée :
www.bibmath.net/crypto
73
Quelques éléments de solutions
A
A.1 Un doigt d’algorithmique avec SageMath
Exercice 1.1:
factorielle (40)
|815915283247897734345611269596115894272000000000
factorielle (100)
| 9 3 3 2 6 2 1 5 4 4 3 9 4 4 1 5 2 6 8 1 6 9 9 2 3 8 8 5 6 2 6 6 7 0 0 4 9 0 7 1 5 9 6 8 2 6 (...)
Exercice 1.2:
Pas de corrigé
Exercice 1.3:
def successeur ( n ):
n = n +1
return n
Exercice 1.4:
a) Il permute les 2 valeurs a et b. On peut s’en convaincre à l’aide du tableau :
Variables
a b
Entrée 7 5
aÐa`b 12 5
bÐa´b 12 7
aÐa´b 5 7
b) Il s’agit de :
def mystere (a , b ):
a=a+b
b =a - b
a =a - b
return a , b
I
II ANNEXE A. QUELQUES ÉLÉMENTS DE SOLUTIONS
Exercice 1.5:
L1 =[]; L2 =[]; L3 =[]; L4 =[];
for i in [ -3..3]:
L1 = L1 +[ i ]
print L1
for i in [ -2..4]:
L2 = L2 +[ i ^2]
print L2
L3 = L1 + L2
print L3
for i in [0..6]:
L4 = L4 +[ L1 [ i ]+ L2 [ i ]]
print L4
Exercice 1.6:
a) Le pseudo-code :
Exercice 1.7:
a) Il s’agit à nouveau de calculer la factorielle : n!
Le pseudo-code “testé à la main” donne pour n “ 3 :
Variables
n k p
Entrée 3 - -
Initialisation - 1 1
1re boucle 3 2 1
2e boucle 3 3 2
3e boucle 3 4 6
b)
def mystere ( n ):
p =1
k =1
while k < n +1:
p=p*k
k = k +1
return p
ANNEXE A. QUELQUES ÉLÉMENTS DE SOLUTIONS III
Exercice 1.8:
a) Cette fonction permet de calculer le quotient et le reste de la division de n par p.
On peut s’en convaincre en “testant à la main” le pseudo-code avec n “ 17 et p “ 6 :
Variables
n p j
Entrée 17 6 -
Initialisation - - 0
1re boucle 11 6 1
2e boucle 5 6 2
Et en effet : 17 “ 2 ¨ 6 ` 5
b)
def divmod (n , p ):
j =0
while n >= p :
n =n - p
j = j +1
return j , n
Exercice 1.9:
On peut par exemple proposer :
tableau ( -3 ,3)
| si x = -3 alors f ( -3 )= -34
| si x = -2 alors f ( -2 )= -10
| si x = -1 alors f ( -1 )= 0
| si x = 0 alors f ( 0 )= 2
| si x = 1 alors f ( 1 )= 2
| si x = 2 alors f ( 2 )= 6
| si x = 3 alors f ( 3 )= 20
Exercice 1.10:
1
n
c) Elle permet de calculer
ÿ
k“0
k!
Variables
n somme k
Entrée 3 - -
Initialisation - 0 -
1re boucle 3 1 0
2e boucle 3 1`1 1
3e boucle 3 1`1` 1
2
2
4e boucle 3 1`1` ` 1
2
1
6
“ 8
3
3
e)
def sommefacto ( n ):
somme =0
for k in [0.. n ]:
somme = somme +1/ factorielle ( k )
return ( somme )
Exercice 1.11:
def monlog ( n ):
return log (3* n +1)
qui sera ensuite appelé dans une deuxième fonction pour donner le résultat :
masomme (3 ,7)
|1. 847978 212420 55
12
i
b) Démarche comparable. On obtient : – 16.859914
ÿ
2i ´ 1
a
i“5
ANNEXE A. QUELQUES ÉLÉMENTS DE SOLUTIONS V
Exercice 1.12:
a) def facto ( n ):
if n ==0:
return 1
else :
return n * facto (n -1)
b) Cette troisième façon d’obtenir n! est certainement la plus subtile, car à l’intérieur de la
fonction elle-même, la commande factorielle est appelée.
On appelle ceci une fonction récursive.
c) def combi (n , p ):
c = facto ( n )/( facto ( p )* facto (n - p ))
return c
Exercice 1.13:
a) def syra ( n ):
if n %2==0:
return ( n /2)
else :
return (3* n +1)
Exercice 2.2:
n “ 41 nous fournit un contre-exemple, car n2 ´ n ` 41 sera alors forcément un multiple de 41.
Exercice 2.3:
fonction est_premier pnq :
pour k P r2 , n ´ 1s :
si n mod k ““ 0 :
retourner False
retourner True
def est_premier ( n ):
for k in [2.. n -1]:
if n % k ==0:
return False
return True
Exercice 2.4:
fonction est_premier2 pnq :
si n ““ 0 ou n ““ 1 :
retourner False
sinon:
si n ““ 2 :
retourner True
sinon: ?
maxi Ð r n s ` 1
pour k P r2 , maxis :
si n mod k ““ 0 :
retourner False
retourner True
ANNEXE A. QUELQUES ÉLÉMENTS DE SOLUTIONS VII
def est_premier2 ( n ):
if n ==0 or n ==1:
return False
else :
if n ==2:
return True
else :
maxi = int ( sqrt ( n ))+1
for k in [2.. maxi ]:
if n % k ==0:
return False
return True
Exercice 2.5:
a)
def euler ( n ):
f = n ^2 - n +41
print est_premier2 ( f )
b) Ce qui donne
euler (2)
| True
euler (40)
| True
euler (41)
| False
euler (42)
| False
c) + d) Nouvelle fonction :
def euler2 ( n ):
L =[]
for i in [0.. n ]:
f = i ^2 - i +41
if est_premier2 ( f )== False :
L = L +[ i ]
print ( L )
val =100*(101 - len ( L ))/101
print " Il y a donc " ,(101 - len ( L )) ,
" nombres premiers , soit dans : " ,
N ( val , digits =3) , " % des cas "
Ce qui donne :
euler2 (100)
|[41 , 42 , 45 , 50 , 57 , 66 , 77 , 82 , 83 , 85 , 88 , 90 , 92 , 97]
| Il y a donc 87 nombres premiers , soit dans : 86.1 % des cas
VIII ANNEXE A. QUELQUES ÉLÉMENTS DE SOLUTIONS
Exercice 2.6:
a) + b) On obtient (extrait) :
crible (1000)
| [2 , 3 , 5 , 7 , 11 , 13 , ... , 983 , 991 , 997]
crible (100000)
| [2 , 3 , 5 , 7 , 11 , 13 , ... , 99971 , 99989 , 99991]
Exercice 2.7:
fonction criblepnq :
L Ð r0..ns
Lr1s Ð 0
iÐ2
tant que i ď n :
j Ði`i
tant que j ď n :
Lrjs Ð 0
j Ðj`i
iÐi`1
tant que i ă n et Lris “ 0 :
iÐi`1
M Ð rs
pour j de 0 jusqu’à n :
si Lrjs ‰ 0 :
M Ð M ` rLrjss
retourner M
Exercice 2.8:
fonction decomppnq :
Div Ð rs
P Ð criblepnq
pour j de 0 jusqu’à card pP q ´ 1 1 :
tant que n mod P rjs “ 0 :
Div Ð Div ` rP rjss
n Ð n{P rjs
retourner Div
factor (168399)
|3^7 * 7 * 11
mystere (14)
|[2 , 3 , 5 , 7 , 11 , 13 , 17 , 19 , 23 , 29 , 31 , 37 , 41 , 43]
Exercice 2.12:
Vous obtiendrez (par exemple) :
def Fer ( n ):
for i in [0.. n ]:
k =2^(2^( i ))+1
if is_prime ( k ):
print " Fer ( " ,i , " )= " ,k , " est premier "
else :
print " Fer ( " ,i , " )= " ,k , " n ’ est pas premier "
X ANNEXE A. QUELQUES ÉLÉMENTS DE SOLUTIONS
Exercice 2.13:
Vous obtiendrez (par exemple) :
def Pagnol ( n ):
for i in [0.. n ]:
impair =2* i +1
pagnol = impair +( impair +2)+ impair *( impair +2)
if is_prime ( pagnol ):
print " La conjecture de Pagnol est vraie pour " , impair
else :
print " La conjecture de Pagnol est fausse pour " , impair
Exercice 2.14:
Vous obtiendrez :
def possible ( n ):
L =[] , M =[]
for i in [2.. n ]:
if is_prime ( i ):
if is_prime ( i +100):
L = L +[ i ]
if is_prime ( i +200):
M = M +[ i ]
if len ( L )==0:
print " p et p +100 premiers : liste vide "
else :
print " p et p +100 premiers : " ,L
if len ( M )==0:
print "p , p +100 et p +200 premiers : liste vide "
else :
print "p , p +100 et p +200 premiers : " ,L
Exercice 2.15:
Je vous met au défi. . . Et si on faisait un petit concours. J’attends votre réponse par mail ;-)
ANNEXE A. QUELQUES ÉLÉMENTS DE SOLUTIONS XI
Exercice 2.16:
Voici quelques pistes de réponses proposées :
Exercice 3.1:
‚ Oui 17 ” 5 pmod 6q car 17 “ 2 ¨ 6 ` 5
5“0¨6`5
‚ Non 24 ı 14 pmod 6q car 24 “ 4 ¨ 6 ` 0
14 “ 2 ¨ 6 ` 2
Exercice 3.2:
Tous les entiers sont coloriés selon la séquence :
Exercice 3.3:
Par exemple, observons la situation modulo 3 :
… … 3(a …
0 1 2 3a 3a 3a 3(a 3(a +1
+0 +1 +2 +1
)+
+1
)+ )+
0 1 2
Lors d’une division par n, le reste de celle-ci est forcément un nombre compris entre 0 et n ´ 1.
Ainsi quelque soit le nombre choisit, il sera congru à un nombre entier compris entre 0 et n ´ 1.
Exercice 3.4:
a) Non car 80 “ 4 ¨ 17 ` 12 ñ 80 ” 12 pmod 17q
b) Non car 103 “ 6 ¨ 17 ` 1 ñ 103 ” 1 pmod 17q
c) Oui car ´29 “ ´2 ¨ 17 ` 5 ñ ´29 ” 5 pmod 17q
d) Non car ´122 “ ´8 ¨ 17 ` 14 ñ ´122 ” 14 pmod 17q
ANNEXE A. QUELQUES ÉLÉMENTS DE SOLUTIONS XIII
Exercice 3.5:
a) 1 b) 3 c) 2 d) 9
Exercice 3.6:
a) Il suffit de comparer 18ˆ(9)%7 avec 9ˆ(18)%7
b) Une fonction comme par exemple :
def equation ( n ):
for i in [0.. n ]:
if 18^( i )%7== i ^(18)%7:
print " n = " ,i , " verifie bien l ’ equation "
permet de se convaincre que n semble devoir être un multiple de 3, non multiple de 7.
Exercice 3.7:
WXTXRTXHPLILOL
“Toi aussi, mon fils !”, ou les derniers mots
de César mourant, criant à Brutus, qu’il
aimait comme son propre fils, sa
douloureuse surprise de le voir parmi ses
assassins : quoi de plus connu ? Si connu,
en fait, que nombre d’entre nous sont
encore capables de le dire en latin :
tu quoque, mi fili...
Exercice 3.8:
AVE CAESAR MORITURI TE SALUTANT
Exercice 3.10:
À l’aide de la fonction cesar, on obtient :
Exercice 3.14:
Pour résoudre cet exercice, 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, A puis S), soit tenter
une attaque exhaustive, c’est-à-dire essayer toutes les clés, ce qui n’est pas long ici, puisqu’il y
en a que 25. Vous obtiendrez pour la clé k “ 17 :
“J’aimerais mieux être le premier dans un village que le second à Rome” (phase attribuée à César)
Malgré (ou à cause de) sa simplicité, cette méthode de chiffrement fut encore employée par des officiers
sudistes pendant la guerre de Sécession et par l’armée russe en 1915.
Exercice 3.15:
a) Vrai car 471 – 11 = 460 qui est bien un multiple de 23.
b) Faux car 370 – 17 = 353 qui n’est pas un multiple de 13.
c) Vrai car 29 – (-121) = 150 qui est bien un multiple de 5.
d) Vrai.
e) Vrai. (cf. exercice 3.2)
f) Vrai, voici le début de la preuve que je vous laisse compléter :
*
a ” b pmod nq ðñ a “ k ¨ n ` . . .
ùñ a “ k ¨ n ` pk 1 ¨ . . . ` . . . q
b ” c pmod nq ðñ b “ k 1 ¨ . . . ` . . .
a “ p. . . ` . . . q ¨ n ` . . . ðñ a ” . . . pmod . . . q
g) Vrai dans les 2 cas, il s’agit d’effectuer deux preuves très semblables à celle de la question
précédente.
ANNEXE A. QUELQUES ÉLÉMENTS DE SOLUTIONS XV
Exercice 3.16:
a) 73 ` 231 525 ” 3 pmod 5q car :
73 ” 3 pmod 5q et 231 525 ” 0 pmod 5q
b) 212 ´ 414 ” 3 pmod 5q car :
212 ” 2 pmod 5q et 414 ” ´1 pmod 5q
c) 21 342 ¨ 59 ” 3 pmod 5q car :
21 342 ” 2 pmod 5q et 59 ” 4 pmod 5q
d) 26 ” 4 pmod 5q
e) 176 ” 26 pmod 5q ” 4 pmod 5q
Exercice 3.17:
a) 3527 ” 027 pmod 7q car 35 ” 0 pmod 7q ; le reste de la division par 7 est de 0.
b) 89 35
”135
pmod 11q car 89 ” 1 pmod 11q ; le reste de la division par 11 est de 1.
c) 7720 ” p´1q20 pmod 13q car 77 ” ´1 pmod 13q ; le reste de la division par 13 est de 1.
Exercice 3.18:
a) 35228 ` 84501 ” 1228 ` p´1q501 pmod 17q ” 0 pmod 17q
b) 2 ¨ 352009 ´ 3 ¨ 842010 ” 2 ¨ 12009 ´ 3 ¨ p´1q2010 pmod 17q
” 2 ´ 3 pmod 17q ” 16 pmod 17q
Exercice 3.19:
Le chiffre des unités d’un entier n est le reste de la division de n par 10.
41 5687 ” 87 pmod 10q
” 643 ¨ 8 pmod 10q
” 43 ¨ 8 pmod 10q
” 4 ¨ 8 pmod 10q
” 2 pmod 10q
Exercice 3.20:
a) x ” 3 pmod 5q b) x ” 2 pmod 5q
Exercice 3.21:
l’inverse de 4 pmod 5q est 4 pmod 5q car 4 ¨ 4 “ 16 – 1 pmod 5q.
XVI ANNEXE A. QUELQUES ÉLÉMENTS DE SOLUTIONS
Exercice 3.22:
Les tables de multiplications :
•Pour n “ 2 •Pour n “ 3
¨ 0 1 ¨ 0 1 2
0 0 0 0 0 0 0
1 0 1 1 0 1 2
2 0 2 1
•Pour n “ 4 •Pour n “ 6
¨ 0 1 2 3 ¨ 0 1 2 3 4 5
0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 1 0 1 2 3 4 5
2 0 2 0 2 2 0 2 4 0 2 4
3 0 3 2 1 3 0 3 0 3 0 3
4 0 4 2 0 4 2
5 0 5 4 3 2 1
Exercice 3.23:
1) a) x ” 0 pmod 3q b) x ” 2 pmod 4q c) x ” 4 pmod 6q
2) a) pas de solution b) pas de solution c) x ” 0 ou x ” 3 pmod 6q
3) si n “ 4 : ‚ 2 ¨ 2 ” 0 pmod 4q
si n “ 6 : ‚ 3 ¨ 2 ” 0 pmod 6q ‚ 2 ¨ 3 ” 0 pmod 6q
‚ 3 ¨ 4 ” 0 pmod 6q ‚ 4 ¨ 3 ” 0 pmod 6q
4) Il s’agit de la ligne 2 grisée, elle ne contient pas de 1 (inverse
0 1 2 3
modulo) et pas de 3.
¨
0 0 0 0 0
Pour n “ 6, les 3 lignes correspondantes à 2, 3 et 4 sont 1 0 1 2 3
également “incomplètes”. 2 0 2 0 2
Pour n “ 8, les lignes 2, 4 et 6 seront probablement 3 0 3 2 1
“incomplètes”.
Devinez-vous pourquoi ? Vérifiez-le en constituant le tableau.
5) a) x ” 3 pmod 4q b) pas d’inverse
c) x ” 5 pmod 6q d) pas d’inverse
Exercice 3.24:
¨ 0 1 2 3 4 5 6
1) Il s’agit de l’observer dans la table de multiplication 0 0 0 0 0 0 0 0
correspondante. 1 0 1 2 3 4 5 6
2 0 2 4 6 1 3 5
2) a) x ” 6 pmod 7q
3 0 3 6 2 5 1 4
b) x ” 0 pmod 7q 4 0 4 1 5 2 6 3
5 0 5 3 1 6 4 2
c) x ” 4 pmod 7q
6 0 6 5 4 3 2 1
ANNEXE A. QUELQUES ÉLÉMENTS DE SOLUTIONS XVII
Exercice 3.25:
3 est bien l’inverse de 6 modulo 17 car 6 ¨ 3 “ 18 ” 1 pmod 17q
Exercice 3.26:
2) a) x ” 4 pmod 6q
b) x ” 3 pmod 6q Table d’addition :
` 0 1 2 3 4 5
3) Ce type d’équations se manipule “naturellement” par 0 0 1 2 3 4 5
une soustraction des deux côtés du égal. 1 1 2 3 4 5 0
2 2 3 4 5 0 1
3 3 4 5 0 1 2
4) a) x ” 3 pmod 6q 4 4 5 0 1 2 3
b) pas de solution 5 5 0 1 2 3 4
c) x ” 2 ou x ” 5 pmod 6q
XVIII ANNEXE A. QUELQUES ÉLÉMENTS DE SOLUTIONS
2 ¨ 3 ` 5 ” 11 pmod 26q
Exercice 4.2:
a) Cette clé n’est pas bijective (one-to-one en anglais), c’est-à-dire qu’à 2 lettres différentes
(par exemple A et N) correspondent une unique lettre de codage (A). Comment pourra-t-on
alors définir la fonction réciproque permettant de revenir au message clair ?
b) Cette clé est bijective, il n’y a pas de risque d’ambiguïté dans la correspondance des lettres
en clairs et celles codées.
c) À nouveau, cette clé n’est pas bijective. À éviter donc. . .
d) Tableau de conversion :
en clair 0 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
codé 2 12 22 6 16 0 10 20 4 14 24 8 18 2 12 22 6 16 0 10 20 4 14 24 8 18
Exercice 4.4:
Une fonction possible :
Exercice 4.6:
Dans l’état de nos connaissances en programmation, il n’y a pas d’autres manières que de tenter
une attaque exhaustive (appelé aussi attaque par force brute) en testant les 12 ¨ 26 possibilités.
Il reste à trouver visuellement parmi les 312 résultats affichés, celui qui correspond à une phrase
cohérente.
Il s’agissait de la clé de déchiffrement a “ 3 et b “ 21 pour la phrase :
“BRAVOCENESTPASFACILE”
Une fonction SageMath possible :
Cette fonction attaque appelle donc la fonction affine que vous avez programmé et utilisé dans
les exercices précédents.
Exercice 4.7:
a) 7 b) 13 c) 6 d) 15
Exercice 4.8:
a) Oui, car le PGDC(122, 49) = 1
b) Non car le PGDC(352, 33) = 11
Exercice 4.9:
PGDC(4539, 1958) = 89.
La méthode par décomposition en facteurs premiers montre déjà ici ses limites. Les calculs sont
relativement longs et fastidieux. La suite des éléments théoriques nous fournira un moyen beaucoup plus
élégant : L’algorithme d’Euclide.
XX ANNEXE A. QUELQUES ÉLÉMENTS DE SOLUTIONS
Exercice 4.10:
a) 21 b) 167 c) 1 les nombres 1600 et 259 sont donc premiers entre eux.
Exercice 4.11:
Oui, car le PGDC(5617, 1515) = 1
Exercice 4.14:
Il s’agit d’une fonction récursive, c’est-à-dire qu’à l’intérieur de sa programmation, elle contient
un appel à elle-même. On obtient alors :
def mystere (a , b ):
if b ==0:
resultat = a
else :
r=a%b
resultat = mystere (b , r )
return ( resultat )
ANNEXE A. QUELQUES ÉLÉMENTS DE SOLUTIONS XXI
Exercice 4.15:
a) algorithme d’Euclide : 383 “ 3 ¨ 127 ` 2 (1)
127 “ 63 ¨ 2 ` 1 (2)
2“2¨1`0
Le dernier reste non nul vaut bien 1
‚ D’après l’égalité (2), on peut écrire : 1 “ 127 ´ 63 ¨ 2 (3)
‚ D’après l’égalité (1), on peut écrire : 2 “ 383 ´ 3 ¨ 127 que l’on substitue dans (3)
Ainsi 1 “ 127 ´ 63 ¨ p383 ´ 3 ¨ 127q “ ´63 ¨ 383 ` 190 ¨ 127.
On obtient alors : u “ ´63 et v “ 190.
b) Les valeurs proposées vérifient également 383u ` 127v “ 1.
c) Le couple pu , vq obtenu à l’aide de l’algorithme d’Euclide fournit une solution de l’équation,
mais cette solution n’est pas unique.
Exercice 4.16:
a) u “ 7 et v “ ´30
b) u “ ´9 et v “ 13 puis u1 “ ´9 ¨ 5 “ ´45 et v 1 “ 13 ¨ 5 “ 65
c) u “ 8 et v “ ´23
Exercice 4.17:
b) On utilise le même type de tableau que la partie a)
• Initialisation : 1534 “ 1 ¨ 1534 ` 0 ¨ 180 p1 ; 0q
180 “ 0 ¨ 1534 ` 1 ¨ 180 p0 ; 1q
Euclide Reste
• 1534 “ 8 ¨ 180 ` 94 94 “ 1534 ´ 8 ¨ 180 (1 ; 0q ´ 8p0 ; 1q p1 ; ´8q
• 180 “ 1 ¨ 94 ` 86 86 “ 180 ´ 1 ¨ 94 p0 ; 1q ´ 1p1 ; ´8q p´1 ; 9q
• 94 “ 1 ¨ 86 ` 8 8 “ 94 ´ 1 ¨ 86 p1 ; ´8q ´ 1p´1 ; 9q p2 ; ´17q
• 86 “ 10 ¨ 8 ` 6 6 “ 86 ´ 10 ¨ 8 p´1 ; 9q ´ 10p2 ; ´17q p´21 ; 179q
• 8“1¨6`2 2“8´1¨6 p2 ; ´17q ´ 1p´21 ; 179q p23 ; ´196q
• 6“3¨2`0 reste de zéro
Ainsi u “ 23 et v “ ´196
c) u “ ´20 et v “ 121
d) Voici une programmation SageMath. Mais ne le regardez pas trop vite. . . Le but est que
vous programmiez vous-même cette fonction !!
XXII ANNEXE A. QUELQUES ÉLÉMENTS DE SOLUTIONS
def bezout (a , b ):
U =[1 ,0]
V =[0 ,1]
i =1
reste = a % b
while reste < >0:
quotient = a // b
i = i +1
newu = U [i -2] - quotient * U [i -1]
newv = V [i -2] - quotient * V [i -1]
U = U +[ newu ]
V = V +[ newv ]
a=b
b = reste
reste = a % b
print " u = " ,U [ i ] , " et v = " ,V [ i ]
Exercice 4.18:
a) PGDC(322,17) = 1 p´1q ¨ 322 ` 19 ¨ 17 “ 1
b) PGDC(512,28) = 4 p´3q ¨ 512 ` 55 ¨ 28 “ 4
c) PGDC(1321,314) = 1 29 ¨ 1321 ` p´122q ¨ 314 “ 1
Exercice 4.19:
Soit P “ 2k l’équivalent numérique pair d’une première lettre et P 1 “ 2k 1 l’équivalent numérique
pair d’une deuxième lettre.
On obtient : C ” 13 ¨ p2kq ` b pmod 26q c’est-à-dire C ” b pmod 26q
Mais aussi : C 1 ” 13 ¨ p2k 1 q ` b pmod 26q c’est-à-dire C 1 ” b pmod 26q
Ces deux lettres seront donc codées de la même façon. Et ceci sera toujours vrai quelque soit le
choix de ces lettres à équivalent numérique pair.
Exercice 4.20:
a) Il suffit de montrer que a ¨ a1 ” 1 pmod 26q. Ce qui est bien le cas ici.
b) b1 “ ´a1 ¨ b “ ´19 ¨ 22 “ ´418 ” 24 pmod 26q
c) 11 ¨ 2 ` 22 “ 44 ” 18 pmod 26q
19 ¨ 18 ` 24 “ 366 ” 2 pmod 26q
Exercice 4.21:
a) a1 “ 11 et b1 “ 19
b) Il s’agit de la lettre I.
c) “IMUSTBEGONEANDLIVEORSTAYANDDIE”
Roméo et Juliette : Act 3, Scene 5 de William Shakespeare
ANNEXE A. QUELQUES ÉLÉMENTS DE SOLUTIONS XXIII
Exercice 4.22:
Il s’agit de :
“ETSIONNECONNAITPASLACLEF”
avec les clés a1 “ 17 et b1 “ 25.
Exercice 4.23:
Il s’agit de résoudre le système :
12 ” 4a ` b pmod 26q
#
Exercice 4.25:
a) Au moins 9 fois (c’est-à-dire r17{2s ` 1)
b) Au moins rm{ns ` 1 fois
c)
def vigenere ( message , cle ):
message_code =[]
cle_code =[]
new_cle =[]
new_message =[]
Exercice 4.26:
Il suffit de remplacer un + par un – dans la fonction précédente.
Et si vous alliez directement faire un tour sur Ars Cryptographica :
www.apprendre-en-ligne.net/crypto
ANNEXE A. QUELQUES ÉLÉMENTS DE SOLUTIONS XXV
Exercice 5.2:
a) 8 b) 3336670
Exercice 5.3:
a) 69 car
5^51%97
|69
b) 7
c) Le calcul de 123456789ˆ987654321%11 risque bien de vous faire perdre patience. . ..
N’hésitez pas à l’interrompre avec le bouton : Stop
XXVI ANNEXE A. QUELQUES ÉLÉMENTS DE SOLUTIONS
Exercice 5.4:
On peut proposer par exemple :
def controle (p ,q ,e , M ):
if is_prime ( p ) and is_prime ( q ):
print " p et q premiers : OUI "
else :
print " p et q premiers : NON "
n=p*q
print " n : " ,n
phi_n =( p -1)*( q -1)
print " phi ( n ): " , phi_n
if gcd (e , phi_n ):
print " e et phi ( n ) premiers entre eux : OUI "
else :
print " e et phi ( n ) premiers entre eux : NON "
d = inverse_mod (e , phi_n )
print " cl é priv é e : " ,d
M_prime = power_mod (M ,e , n )
print " message code : " , M_prime
new_M = power_mod ( M_prime ,d , n )
print " message decode : " , new_M
if new_M == M :
print " Tout est en ordre ; -) "
else :
print " Il y a comme un probleme : -/ "
qui fournira :
controle (9 760 95 975 11 111 120 41 886 431 , 834 55 239 986 78 341 25 649 111 1 ,
45879256903 ,12345678909876540106)
| p et q premiers : OUI
|n: 81460323853031154412157864943449033559900223014841
| phi ( n ): 8 1 4 6 0 3 2 3 8 5 3 0 3 1 1 5 4 4 1 2 1 5 7 8 4 6 8 3 6 9 6 5 2 8 3 7 7 0 4 4 6 9 2 4 6 3 7 3 0 0
| e et phi ( n ) premiers entre eux : OUI
| cl é priv é e : 6 1 4 2 4 9 3 1 6 5 1 8 6 6 1 7 1 4 5 0 2 6 7 5 8 9 9 9 2 1 8 0 1 7 5 6 1 2 1 6 7 4 7 5 7 4 0 1 6 7
| message code : 6 2 5 1 7 6 5 1 0 6 2 6 0 5 9 1 1 0 9 7 9 4 0 7 4 6 0 3 6 1 9 9 0 0 2 3 4 5 5 5 2 6 6 9 4 6 4 8 5
| message decode : 1 2 3 4 5 6 7 8 9 09 8 7 6 5 4 0 1 0 6
| Tout est en ordre ; -)}
Exercice 5.5:
a) M 1 ” M e pmod nq “ 8341481710297804401
b) pM 1 qd pmod nq “ 12345678909876540106. (Ok ! !)
ANNEXE A. QUELQUES ÉLÉMENTS DE SOLUTIONS XXVII
Exercice 5.6:
‚ p “ 11, q “ 23, ϕpnq “ 220, d “ 147
Exercice 5.7:
a) 1420083 ” 124 pmod 253q. La clé d, obtenue dans l’exercice précédent étant de 147, on
obtient : 124147 ” 75 pmod 253q qui ne correspond pas à ce qui est attendu !
b) On obtient les valeurs suivantes :
‚ n “ 5147 ¨ 7351 “ 37835597 ;
‚ ϕpnq “ 5146 ¨ 7350 “ 37823100 ;
‚ PGDC(37823100 ; 307) = 1 ;
‚ 142008307 ” 36481808 pmod 37835597q.
c) d “ 34743043 est l’inverse de e modulo ϕpnq et on obtient :
Exercice 5.8:
a) Il s’agit de 1377 1565 508 1913
JE TA IM EA
M 238 494 220 104
M 1 “ M 19 pmod 2077q 1377 1565 508 1913
b) En factorisant 2077, on obtient p “ 31 et q “ 67 donc ϕpnq “ 1980 et finalement d “ 1459.
M1 3 261 833
M “ pM 1 q1459 pmod 2077q 43 21 364
1 ¨ 26 ` 17 0 ¨ 26 ` 21 14 ¨ 26 ` 0
BR AV O(A)
BRAVO !!
Exercice 5.9:
Pas de corrigé.
Exercice 5.10:
Votre moyenne est 5 car :
Exercice 5.11:
a) 42510 b) 901910 c) 12410
d) 252210 e) 195810
Exercice 5.12:
a) 111111112 b) 1107 c) 158A11
Exercice 5.13:
a) 1010002 b) 207
Exercice 5.14:
Pas de réponse proposée
Exercice 5.15:
a) OUI26 b) 916510
Exercice 5.16:
a) 2110123 ðñ 59910 b) 110111012 ðñ 22110
c) B2612 ðñ 161410 d) 119911 ðñ 156010
Si vous souhaitez commander ou utiliser ce polycopié dans vos
classes, merci de prendre contact avec son auteur en passant par
son site web :
www.javmath.ch