Vous êtes sur la page 1sur 19

Cryptographie : Fiche

Sommaire
Cryptographie : Fiche
Sommaire
1. Bases mathématiques
1.1. Congruences
1.1.1. Définition
1.1.2. Notation
1.1.3. Remarque
1.1.4. Définition
1.1.5. Exemple
1.1.6 Propriété
1.1.7. Définition
1.1.8. Propriété
1.1.9. Démonstration
1.1.10. Propriété
1.1.11. Propriété
1.2. Interprétation logique
1.2.1. Interprétation
1.3. Permutations d'un ensemble à n éléments
1.3.1. Définition
1.3.2. Notation
1.3.4. Définition
1.3.5. Exercice
1.3.6. Correction
2. Système de chiffrement
2.1. Définition
2.3. Chiffrement symétrique (à clé secrète)
2.3.1. Système DES (Data Encryption Standard)
2.3.1.1. Fonctionnement
3. Bases mathématiques 2 (AES)
3.1. Arithmétique des entiers, suite
3.1.1. Algorithme d'Euclide étendu
3.1.2. Exemple
3.1.3. Théorème de Bézout
3.1.4. Exercice
3.1.5. Correction
3.1.6. Conséquences
3.2. Arithmétique des polynômes
3.2.1. Division
3.2.2. Théorème
3.2.3. Exercice
3.2.4. Correction
3.2.5. Quotients
3.2.6. Exercice
3.2.7. Correction
3.2.8. Théorème
3.2.9. Exemples
3.2.10. Remarque
3.2.11. Exercice
3.2.12. Correction
3.2.13 Exercice
3.2.14 Correction
4. Bases mathématiques 3 (RSA)
4.1. Nombres premiers
4.1.1. Théorème d'Euclide (~-300)
4.1.2. Démonstration
4.2. Nombres premiers entre eux
4.2.1. Définition
4.2.2. Propriété
4.2.3. Remarque
4.3. Indicatrice d'Euler (1707 - 1783)
4.3.1. Définition
4.3.2. Exemples
4.3.3. Remarque générale
4.3.4. Propriété 1
4.3.5. Démonstration
4.3.6. Propriété 2
4.3.6.1. Cas particulier
4.3.7. Démonstration
4.3.8. Propriété 3
4.3.8.1. Remarques
4.4. Exemple d'algorithme d'exponentiation rapide
4.5. Retour sur l'autre façon de calculer x−1 comme application de la propriété 2
4.6. Remarque sur le décryptage RSA
4.7. Théorème chinois des restes
4.7.1. Exercices
4.7.2. Correction
4.7.3. Retour sur le théorème chinois des restes
4.7.4. Démonstration
4.7.5. Exemple : Système bancaire allemand (2015)
4.7.6. Contre-exemple au théorème chinois des restes
4.7.7. Remarque
4.7.8. Un peu d'histoire
5. Exercices
5.1. Exercice 1

1. Bases mathématiques
1.1. Congruences
On fixe un entier n ≥ 2.

1.1.1. Définition
Deux entiers (relatifs) x et y sont congrus modulo n si n divise x − y
Autrement dit : si x et y sont égaux à un multiple de n près.

1.1.2. Notation
x ≡ y mod n
x ≡ y [n]

1.1.3. Remarque
x ≡ y [n] ⇔ (∃k ∈ Z∣y = x + 2k)

1.1.4. Définition
Pour x dans Z, on appelle classe de x modulo n l'ensemble

x = {y ∈ Z ∣ y ≡ x [n]}

1.1.5. Exemple
Soit n = 2 :
0 = { entiers pairs }
1 = { entiers impairs }

1.1.6 Propriété
Pour n ≥ 2 quelconque, il y aura exactement n classes (de 0 à n − 1) ​

1.1.7. Définition
On note Z/nZ l'ensemble des classes modulo n. Z/nZ a exactement n éléments.
​ ​

Z/nZ est l'anneau des entiers modulo n et on le note parfois Zn


​ ​

1.1.8. Propriété
On peut définir une opération + sur Z/nZ , en posant : ​

x + y := x + y
​ ​

Cette opération vérifie les mêmes propriétés que l'addition de Z :


∀x, y ∈ Z/nZ , x + y = y + x
​ ​ ​ ​

∀x, y , z ∈ Z/nZ , (x + y ) + z = x + (y + z )
​ ​ ​ ​

∃e = 0 ∣ ∀x, x + e = x
∀x , ∃y ∣ x + y = 0 ​

1.1.9. Démonstration
Hypothese :
x′ = x
Si { alors x′ + y ′ = x + y
y′ = y
​ ​ ​

​ ​

Vérifions :
x′ = x ⇔ ∃k ∈ Z ∣ x′ = x + kn
y ′ = y ⇔ ∃l ∈ Z ∣ y ′ = y + ln
​ ​

Alors x′ + y ′ = (x + y) + (k + l)n ⇒ x′ + y ′ = x + y ​ ​

1.1.10. Propriété
On peut faire de même pour définir la multiplication dans Z/nZ : ​

x × y := x × y
​ ​

Cette opération vérifie ces propriétés :


∀x, y ∈ Z/nZ , x × y = y × x
​ ​ ​ ​

∀x, y , z ∈ Z/nZ , (x × y ) × z = x × (y × z )
​ ​ ​ ​

∃e = 1 ∣ ∀x, x × e = x
Il n'est pas vrai en général que ∀x, ∃y ∣ x × y = 1 ​ ​

1.1.11. Propriété
∀x, y , z ∈ Z/nZ , x × (y + z ) = x × y + x × z
​ ​ ​ ​

1.2. Interprétation logique


Cas particulier : Z/2Z = {0, 1} ​

+ 0 1 × 0 1
0 0 1 0 0 0
1 1 0 1 0 1

1.2.1. Interprétation
0 → Faux
1 → Vrai
Alors
+ → XOR
× → AN D

1.3. Permutations d'un ensemble à n éléments


Soient n ≥ 1 et X un ensemble à n éléments, en pratique X = {1, 2, ..., n}

1.3.1. Définition
Une permutation de X est une application σ : X → X bijective, c'est-à-dire ∀y ∈ X, ∃!x ∈ X, σ(x) = y

1.3.2. Notation
1 2 3 ... n−1
σ=( )
n
σ(1) σ(2) σ(3) ... σ(n − 1) σ(n)
​ ​ ​ ​ ​ ​

On peut alors les composer. En particulier, on pose σ k := σ ∘ σ ∘ ... ∘ σ(k fois )

1.3.4. Définition
L'ordre de σ est le plus petit entier k ≥ 0 tel que σ k = idX (⇒ σ k−1 = σ −1 ) ​

Un élément i de X est un point fixe de σ si σ(i) = i

1.3.5. Exercice
Dans ces deux cas, déterminer les points fixes, l'ordre et la permutation inverse (= réciproque)
1 2 3 4
1. n = 4, σ1 = ( )
4 1 3 2
​ ​ ​ ​ ​

1 2 3 4 5 6 7 8 9 10
2. n = 10, σ2 = ( )
6 10 3 1 8 4 9 5 2 7
​ ​ ​ ​ ​ ​ ​ ​ ​

1.3.6. Correction
Question 1:
Points fixes : 3
1 2 3 4
4 1 3 2 1 2 3 4
Ordre : ⇒ σ13 = ( ) ⇒ ordre = 3
2 4 3 1 1 2 3 4
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​

1 2 3 4
1 2 3 4
Inverse : σ1−1 = ( )
2 4 3 1
​ ​ ​ ​ ​

Question 2 :
Point fixe : 3
1 2 3 4 5 6 7 8 9 10
6 10 3 1 8 4 9 5 2 7
Ordre : ​4 ​ 7 ​ 3 ​ 6 ​ 5 ​ 1 ​ 2 ​ 8 ​ 10 ​ 9 ​ ​ ⇒ ordre = 12
...
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
Inverse : σ2−1 = ( )
4 9 3 6 8 1 10 5 7 2
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​

2. Système de chiffrement
2.1. Définition
Un système de chiffrement, ou cryptosystème, ou chiffrement, est la donnée de (P, C, ϵ, E, D)
P : ensemble, ses éléments sont appelés messages en clair (plaintext)
C : ensemble, ses éléments sont appelés messages chiffrés (cyphertext)
K : ensemble, ses éléments sont appelés clés (keys)
ϵ : {Ek , k ∈ K} : famille de fonctions Ek : P → C, ses éléments sont appelés fonctions de chiffrement
​ ​

(encryption functions)
D : {Dk , k ∈ K} : famille de fonctions Dk : C → P, ses éléments sont appelés fonctions de déchiffrement
​ ​

(decryption functions)
A chaque clé e ∈ K on sait associer une clé d ∈ K telle que Dd (Ee (p)) = p pour tout message p
​ ​

2.3. Chiffrement symétrique (à clé secrète)


2.3.1. Système DES (Data Encryption Standard)
Chiffrement par blocs : Mots clés de longueur n et les fonctions de chiffrement par bloc sont des permutations.
On prend

P = C = {0, 1}64
S
K = {(b1 , ..., b64 ) ∈ {0, 1}64 ∣ ∀j = 0, ..., 7 ∑ bSj+1 ≡ 1[2]}*
​ ​ ​ ​

i=1

2.3.1.1. Fonctionnement
Le coeur de DES consiste en 1- tours utilisant chacun une clé différente.

Chaque tour est composé de 3 étapes :


1. Expansion : on étend le message de 32 bits à 48 bits en ajoutant des bits de contrôle
2. XOR : on fait un XOR avec la clé
3. Substitution : on remplace chaque groupe de 6 bits par un groupe de 4 bits
On répète ce processus 16 fois

3. Bases mathématiques 2 (AES)


3.1. Arithmétique des entiers, suite
3.1.1. Algorithme d'Euclide étendu
On cherche à déterminer le pgcd de deux entiers positifs a et b par des divisions euclidiennes successives. d =
pgcd(a, b).
a = b × q + r, 0 ≤ r < b alors pgcd(a, b) = pgcd(b, r)
En effet, si k divise a et b, alors k divise r = a − bq , donc k divise b et r. La réciproque est vraie, ainsi les divisuers
communs à a et b sont les mêmes que ceux de b et r.
Le pgcd est le dernier reste non nul obtenu par cette méthode.

On peut exprimer d en fonction de a, b.

3.1.2. Exemple
Calculer le pgcd de a = 126 et b = 33 :

126 = 33 × 3 + 27
33 = 27 × 1 + 6
27 = 6 × 4 + 3
​ ​

6=3×2+0

Donc d = pgcd(126, 33) = pgcd(6, 3) = 3


Expression de d en fonction de a et b :
3 = 27 − 6 × 4
= 27 − (33 − 27 × 1) × 4
= 27 × 5 − 33 × 4
= (126 − 33 × 3) × (5 − 33 × 4) + 33 × 4
​ ​

= 126 × 5 − 33 × 19
= a × 5 − b × 19

3.1.3. Théorème de Bézout


Soient a et b deux entiers relatifs. Alors il existe deux entiers u et v tels que au + bv = pgcd(a, b).

3.1.4. Exercice
Trouver u et v pour a = 261 et b = 25.

3.1.5. Correction
261 = 25 × 10 + 11
25 = 11 × 2 + 3
11 = 3 × 3 + 2
​ ​

3=2×1+1
2=1×2+0

On a donc d = pgcd(261, 25) = pgcd(2, 1) = 1


Expression de d en fonction de a et b :

1=3−2×1
= 3 − (11 − 3 × 3)
= 3 × 4 − 11
= (25 − 11 × 2) × 4 − 11
= 25 × 4 − 11 × 9
​ ​

= 25 × 4 − (261 − 25 × 10) × 9
= 25 × 94 − 261 × 9
= −9a + 94b

Par identification, u = −9 et v = 94

3.1.6. Conséquences
1. Soit n entier ≥ 2, alors a est inversible dans (Z/nZ , ×) ssi pgcd(a, n) = 1. ​

En effet, si pgcd(a, n) = 1, d'après le théorème : ∃(u, v) ∈ Z2 ∣ua + vn = 1. Alors dans Z/nZ : ua + vn = 1. Or ​ ​

ua + vn = ua + vn = u × a + v × n = 0 dans Z/nZ
​ ​

Ainsi, u = a = 1, c'est-à-dire que u est l'inverse de \overline a$ dans (Z/nZ , ×) ​

Remarque : l'algorithme d'Euclide étendu permet de calculer cet inverse (on admet la réciproque).

2. Z/nZ est un corps ssi n est premier.


Rappel : Z/nZ est muni de + et ×. C'est un corps (commutatif) si tout élément non nul est inversible pour ×.

Pour Z/nZ = {0, 1, ..., n − 1}


​ ​

Si n est premier, alors a = 1, 2, ..., n − 1 vérifie pgcd(a, n) = 1


Sinon, on peut écrire n = pq , p et q sont entiers, 2 ≤ p < n et 2 ≤ q < n. Alors n = 0 = p × q avec p et q  =0​ ​ ​ ​

. Ainsi p est un élément non nul de Z/nZ qui n'a pas d'inverse : s'il existait x tel que p × x = 1, on aurait alors
​ ​ ​

q × p × x = q × (p × x) = q = (q × p) × x = 0 × x = 0. D'où q = 0, ce qui est faux puisque 2 ≤ q < n.


​ ​ ​ ​ ​ ​ ​ ​

Notation, si p est premier, on écrira Fp = Z/pZ (field).


​ ​

3.2. Arithmétique des polynômes


On fixe un corps K commutatif (K = R, C, ou Z/pZ (p premier )) ​
On va calculer dans K[X], ensemble des polynômes à coefficients dans K :

P (X) = an X n + an−1 X n−1 + a2 X 2 + a1 X + a0


​ ​ ​ ​ ​

On peut les ajouter, les multiplier mais aussi faire la division euclidienne.

3.2.1. Division
On divise le polynôme A par le polynôme B en écrivant : A = B × Q + R avec Q ∈ K[X] et R ∈ K[X]
Soit R = 0, soit d0 R < d0 B

3.2.2. Théorème
 0 ∃! Q, R.
∀A, B =

3.2.3. Exercice
On prend K = F2 . Soient

A = 1 + X2 + X3 + X5 + X6
B = X + X2 + X3 + X4
1. Calculer A + B et A × B .
2. Trouver C tel que A + C = 0.

3. Faire la division euclidienne de A par B (où on a posé 1 = 1 et 0 = 0 ⇒ X 2 = 1 × X 2 ).

3.2.4. Correction
Question 1 :

A + B = 1 + X + 2X 2 + 2X 3 + X 4 + X 5 + X 6
= 1 + X + X4 + X5 + X6
​ ​

A × B = X + X3 + X4 + X6 + X7
+ X2 + X4 + X5 + X7 + X8

+ X3 + X5 + X6 + X8 + X9 ​

4 6 7 9 10
+X +X +X +X +X
= X + X 2 + X 4 + X 6 + X 7 + X 10

Question 2 :

Soit K = F2 :​

A+C =0 ⟺ C =A

Question 3 :

X 6 + X 5 + X 3 + X 2 + 1 + (X 4 + X 3 + X 2 + X + 1) × X 2 = X 4 + X 2 + 1
X 4 + X 2 + 1 + (X 4 + X 3 + X 2 + X + 1) × 1 = X 3 + X + 1
​ ​

Q = X2 + 1
R = X3 + X + 1
​ ​

Donc A = (X 2 + 1) × B + (X 3 + X + 1)
d0 (X 3 + X + 1) = 3 < d0 B

3.2.5. Quotients
Retour à Z/nZ ≡ {0, 1, ..., n − 1}[n]. Avec :
​ ​

0 = {0, n, 2n, ..., −n, −2n, ...} = 0 + nZ = 0 + {kn, k ∈ Z}


1 = {1, n + 1, 2n + 1, ..., −n + 1, −2n + 1, ...} = 1 + nZ
...
n − 1 = (n − 1) + nZ

Z/nZ c'est Z où on a "tué" tous les multiples de n.


Dans K[X], on peut faire de même, on fixe un polynôme f =


0:
On définit K[X]/(f ) ou K[X]/f K[X] comme étant K[X] où on a "tué" tous les polynômes multiples de f .
​ ​

Les objets de K[X]/(f ) sont les objets de la forme P (X) ∈ K[X], P (X) + f K[X] = {P (X) +

f (X)A(X) ∣ A(X) ∈ K[X]} qu'on notera P (X). ​

On peut calculer dans K[X]/(f ) avec les opérations suivantes (∀P , Q ∈ K[X]/(f ) )) : ​ ​ ​

Addition :

P (X) + Q(X) := P (X) + Q(X)
​ ​ ​

(P (X) + f K[X]) + (Q(X) + f K[X]) = (P (X) + Q(X)) + f K[X]


​ ​ ​

Multiplication :

P (X) × Q(X) := P (X) × Q(X)
​ ​ ​

(P (X) + f K [X ]) × (Q(X) + f K [X ]) = (P (X) × Q(X)) + f K [X ]


​ ​ ​

On a ainsi sur K[X]/(f ) une sructure d'anneau (commutatif), mais pas de corps en général : un élément P (X) n'a
​ ​

pas forcément d'inverse pour x. Il n'existe pas forcément de Q(X) tel que P (X) × Q(X) = 1. ​ ​ ​

3.2.6. Exercice
1. Qu'est-ce que R[X]/(X 2 +1) ? ​

2. Dans F2 [X], on prend f (x) = X 2 + X + 1. Faire la liste de éléments de F2 [X]/(f ) et les tables de + et ×.
​ ​ ​

3.2.7. Correction
Question 1 :

R[X]/(X 2 +1) ⇒ X 2 + 1 = 0 ​ ​


⇒ X2 +1=0 ​

⇒ X2 = −1

⇒ g = a0 + a1 X + a2 X 2 + a3 X 3 → g = a0 + a1 X − a2 − a3 X
​ ​ ​ ​ ​ ​ ​ ​ ​

Opérations :

P +Q=P +Q ​ ​

P ×Q=P ×Q ​ ​

(a × 1 + bX ) + (c × 1 + dX ) = (ac) × 1 + (bc + ad)X + bd × (−1)


= (ac − bd) × 1 + (bc + ad) × X
​ ​

En fait, R[X]/(X 2 +1) est le corps des complexes C.


Question 2 :
Posons B = F2 [X]/(f ) . ​ ​

P (X) = a0 + a1 X + a2 X 2 + a3 X 3 + ... + an X n avec ai ∈ F2 = {0, 1}


​ ​ ​ ​ ​ ​ ​

F2 [X]/(f ) ⇒ X 2 + X + 1 = 0
​ ​

⇒ X 2 = −(X + 1) = 1 × 1 + 1 × X ​

⇒ X3 =X× X2 = ... = 1
​ ​

⇒ X 4 = X × X 3 = ... = X ​

Tout élément de B peut s'écrire :

P = a × 1 + b × X , a et b ∈ F2 ​

Donc a et b velent soit 0 soit 1.


Ainsi :
B = {0 = 0 × 1 + 0 × X ,
1 = 1 × 1 + 0 × X,
X = 0 × 1 + 1 × X,
​ ​

1 + X = 1 × 1 + 1 × X}

On a pour les opérations :


Addition :

+ 0 1 X 1+X
0 0 1 X 1+X
1 ​ 1 ​ 0 ​ 1+X ​ X ​ ​

X X 1+X 0 1
1+X 1+X X 1 0

Multiplication :

× 1 X 1+X
1 1 X 1+X
X X 1+X 1
​ ​ ​ ​ ​

1+X 1+X 1 X

Remarque : pour tout élément P (X) de B , il existe un unique élément Q(X) tel que P (X) × Q(X) = 1. Ainsi, B ​ ​ ​

est un corps commutatif. F2 [X]/(X 2 +X+1) est donc le corps à 4 éléments noté F4 .
​ ​ ​

3.2.8. Théorème
Pour tout nombre premier p et tout entier k ≥ 1, il exitste un unique corps commutatif à pk éléments. On le
notera Fpk . ​

Si k = 1, on a Fp1 = Z/pZ .
​ ​

3.2.9. Exemples
p = 2 et k = 2, on a F22 = F4 = F2 [X]/(X 2 +X+1) .
​ ​ ​ ​

Exemple très important, à réviser :


p = 2 et k = 8, on a F28 = F256 = F2 [X]/(X 8 +X 4 +X 3 +X+1) .
​ ​ ​ ​

3.2.10. Remarque
Désormais, on ne met plus les barres car c'est lourd

3.2.11. Exercice
Dans F256 , calculer :

1. (X 7 + X 4 + X 3 + X + 1) × (X 7 + X 6 + X 3 + X 2 + 1)

2. L'inverse de (X 7 + X 4 + X 3 + X + 1) (Utiliser l'algorithme d'Euclide étendu)


3. En déduire l'image de a par SubBytes
Soit C = a3 Y 3 + a2 Y 2 + a1 Y + a0 , ai ∈ F256 . Par défintion, l'image de C par MixColumns est :
​ ​ ​ ​ ​

m(C) = C(Y ) + ((03)16 Y 3 + (01)16 Y 2 + (01)16 Y + (02)16 ) rˊeduit modulo Y 4 + 1


​ ​ ​ ​

3.2.12. Correction
Question 1 :

(X 7 + X 4 + X 3 + X + 1) × (X 7 + X 6 + X 3 + X 2 + 1) → (1001 1011)2 × (1100 1101)2 ​ ​

=X 14 + X 13 + X 10 + X 9 + X 7
+ X 11 + X 10 + X 7 + X 6 + X 4
+ X 10 + X 9 + X 6 + X 5 + X 3
+ X8 + X7 + X4 + X3 + X
​ ​

+ X7 + X6 + X3 + X2 + 1
=X 14 + X 13 + X 11 + X 10 + X 8 + X 6 + X 5 + X 3 + X 2 + 1
Question 2 :

On cherche l'inverse de a = X 7 + X 4 + X 3 + X + 1 dans F256 .


On fait la division euclidienne de f par a.
On obtient f = X × a + R1 avec R1 = X 5 + X 3 + X 2 + 1, d°R1 < d°a ​ ​

On fait la division euclidienne de a par R1 . ​

On obtient a = (X 2 + 1) × R1 + R2 avec R2 = X, d°R2 < d°R1 ​ ​ ​ ​ ​

On fait la division euclidienne de R1 par R2 . ​ ​

On obtient R1 = (X 4 + X 2 + X) × R2 + R3 avec R3 = 1, d°R3 < d°R2


​ ​ ​ ​ ​ ​

On fait la division euclidienne de R2 par R3 . ​ ​

On obtient R2 = R2 × 1 ​ ​

Comme pour les entiers :

pgcd(f , a) = pgcd(a, R1 ) ​

= pgcd(R1 , R2 ) ​ ​

= pgcd(R2 , R3 )
​ ​

​ ​

=1

En remontant :

1 = R1 − (X 4 + X 2 + X) × R2
​ ​

= R1 + (X + X + X) × (a − (X 2 + 1) × R1 )

4 2


= R1 (1 + (X + X + X) × (X + 1)) + (X + X 2 + X) × a

4 2 2 4

= (f − Xa)(1 + X 6 + X 4 + X 3 + X 4 + X 2 + X) + (X 4 + X 2 + X)a
= f (X 6 + X 3 + X 2 + X + 1) + a(X 7 + X 4 + X 3 + X 2 + X + X 4 + X 2 + X)

Ainsi, 1 = U f + Va, U , V ∈ F2 [X] avec : ​

U = X6 + X3 + X2 + X + 1
V = X7 + X3
​ ​

Alors, dans F256 : ​

ˋ V = X7 + X3
1 = 0 + Va ou

= (10001000)2 ​

= (88)16 ​

Question 3 :
s(a) = inv(a) ∗ A1 + A0 avec : ​ ​

inv(a) = (88)16 ​

A1 = (1F )16
​ ​

A0 = (63)16
​ ​

On a :

s(a) = (X 7 + X 3 ) ∗ (X 4 + X 3 + X 2 + X + 1) + (X 6 + X 5 + X + 1)

On prend R = F2 [X]/(g) ; g = X 8 + 1
​ ​

(X 7 + X 3 ) ∗ (X 4 + X 3 + X 2 + X + 1) = (X 7 + X 3 )(X 4 + X 3 + X 2 + X + 1) rˊeduit modulo g


= X 11 + X 10 + X 9 + X 8 + X 7 + X 7 + X 6 + X 5 + X 4 + X 3 modulo g
= X 11 + X 10 + X 9 + X 8 + X 6 + X 5 + X 4 + X 3 modulo g
= X 8 (X 3 + X 2 + X + 1) + X 6 + X 5 + X 4 + X 3 modulo g
​ ​

= X3 + X2 + X + 1 + X6 + X5 + X4 + X3
= X6 + X5 + X4 + X2 + X + 1

Finalement :
s(a) = inv(a) ∗ A1 + A0 ​ ​

= X6 + X5 + X4 + X2 + X + 1 + X6 + X5 + X + 1

= X4 + X2 ​

= (00010100)2 ​

= (14)16 ​

3.2.13 Exercice
1. Montrer que l'application S ⟶ S utilisée pour MixColumns est celle qui, à l'octet (a3 , a2 , a1 , a0 ) associe son ​ ​ ​ ​

produit par la matrice d'octets (chaque octet est ici écrit comme un couple de nombres hexadécimaux)

02 01 01 03
03 02 01 01
M=
01 03 02 01
​ ​ ​ ​ ​ ​

01 01 03 02

2. Vérifier que, dans S , l'inverse du polynôme

(00000011)2 Y 3 + (00000001)2 Y 2 + (00000001)2 Y + (00000010)2 = 03Y 3 + 01Y 2 + 01Y + 02


​ ​ ​ ​

est le polynôme :

0BY 3 + 0DY 2 + 09Y + 0E = (00001011)2 Y 3 + (00001101)2 Y 2 + (00001001)2 Y + (00001110)2 ​ ​ ​ ​

3.2.14 Correction
Question 1 :
S = F256 [Y ]/(Y 4 +1)
​ ​

L'applicaion de MixColumns est :


Pour (a3 a2 a1 a0 ) = a3 Y 3 + a2 Y 2 + a1 Y + a0 , l'image est m(c) = (a3 Y 3 + a2 Y 2 + a1 Y + a0 )(03Y 3 +
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​

01Y 2 + 01Y + 02).


Où par exemple 03 = (03)16 est un octet, élément de F256 = Ff [X]/(f ) . ​ ​ ​ ​

m(C) =(03 × a3 )Y 6 + (01 × a3 + 03 × a2 )Y 5 + (01 × a3 + 01 × a2 + 03 × a1 )Y 4


​ ​ ​ ​ ​


+ (02 × a3 + 01 × a2 + 01 × a1 + 03 × a0 )Y + (02 × a2 + 01 × a1 + 01 × a0 )Y 2
​ ​ ​ ​
3
​ ​

+ (02 × a1 + 01 × a0 )Y + 02 × a0 ​ ​ ​

⇒ m(C) = 3a3 Y 6 + (a3 + 3a2 )Y 5 + (a3 + a2 + 3a1 )Y 4 + (2a3 + a2 + a1 + 3a0 )Y 3 + (2a2 + a1 + a0 )Y 2 + (2a1 + a0 )Y + 2a0
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​

A comparer avec :

02 01 01 03
03 02 01 01
M=
01 03 02 01
​ ​ ​ ​ ​ ​

01 01 03 02

2a3 + a2 + a1 + 3a0
=(2a3 + a2 + a1 + 3a0 )Y 3 + (3a3 + 2a2 + a1 + a0 )Y 2
​ ​ ​ ​

3a3 + 2a2 + a1 + a0 ​ ​ ​ ​ ​ ​ ​ ​

MC =
​ ​ ​ ​

a3 + 3a2 + 2a1 + a0 + (a3 + 3a2 + 2a1 + a0 )Y + (a3 + a2 + 3a1 + 2a0 )


​ ​ ​ ​ ​

​ ​ ​ ​
​ ​ ​ ​ ​ ​ ​ ​

a3 + a2 + 3a1 + 2a0
​ ​ ​ ​

On réduit m(C) modulo Y 4 + 1 (car S = F256 [Y ]/(Y 4 +1) ) : ​ ​

m(C) =Y 4 (3a3 Y 2 + (a3 + 3a2 )Y + (a3 + a2 + 3a1 )) ​ ​ ​ ​ ​

+ (2a3 + a2 + a1 + 3a0 )Y 3 + (2a2 + a1 + a0 )Y 2 + (2a1 + a0 )Y + 2a0 modulo Y 4 + 1


​ ​

​ ​ ​ ​ ​ ​ ​ ​ ​ ​

⇒ m(c)(2a3 + a2 + a1 + 3a0 )Y 3 + (3a3 + 2a2 + a1 + a0 )Y 2 + (a3 + 3a2 + 2a1 + a0 )Y + (a3 + a2 + 3a1 + 2a0 )
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​

Question 2 :
Il faut vérifier que (03Y 3 + 01Y 2 + 01Y + 02)(0BY 3 + 0DY 2 + 09Y + 0E) modulo = 1.
Etape par étape :

3 3 2
03Y 3 (0BY 3 + 0DY 2 + 09Y + 0E)
= (00000011)2 Y 3 × ((00001011)2 Y 3 + (00001101)2 Y 2 + (00001001)2 Y + (00001110)2 )
​ ​

​ ​ ​ ​ ​

Soit f = X 8 + X 4 + X 3 + X + 1, Calculons 03 × 0B :

03 × 0B = (00000011)2 × (00001011)2 ​ ​

→ (X + 1)(X 3 + X + 1) modulo f = X 4 + X 2 + X + X 3 + X + 1 modulo f



= X4 + X3 + X2 + 1 ​

⇒ (00011101)2 = 1D ​

Calculons la suite :

03 × 0D = (X + 1)(X 3 + X 2 + 1) = X 4 + X 2 + X + 1 = 17
03 × 09 = (X + 1)(X 3 + 1) = X 4 + X 3 + X + 1 = 1B
​ ​

03 × 0E = (X + 1)(X 3 + X 2 + X) = X 4 + X = 12

Donc :

03Y 3 (0BY 3 + 0DY 2 + 09Y + 0E) = (1D)Y 6 + (17)Y 5 + (1B)Y 4 + (12)Y 3

Suite :

02 × 0B = 16
02 × 0D = 1A
02 × 09 = 12
​ ​

02 × 0E = 1C

On a :

p =(1D)Y 6 + ((OB) + (17))Y 5 + ((1B) + (OD) + (OB))Y 4


+ ((12) + (09) + (0D) + (16))Y 3 + ((OE) + (09) + (1A))Y 2 + ((0E) + (12))Y + (1C)
​ ​

Somme bit à bit (XOR), par exemple :

(OB) + (17) = (00001011)2 + (00010111)2 ​ ​


= (00011100)2 ​

= 1C

On obtient :

p = (1D)Y 6 + (1C)Y 5 + (1D)Y 4 + (00)Y 3 + +((OE) + (09) + (1A))Y 2 + ((0E) + (12))Y + (1C)

= 1DY 2 + 1CY + 1D + 1DY 2 + 1CY + 1C ​

= 1D + 1C = 01 = 1

4. Bases mathématiques 3 (RSA)


Dans tout ce chapitre, lorsque nous parlerons de nombre, il s'agira de nombres entiers strictement supérieurs à 0.

4.1. Nombres premiers


4.1.1. Théorème d'Euclide (~-300)
Il existe une infinité de nombres premiers.

4.1.2. Démonstration
Supposons qu'il n'existe qu'un nombre fini de nombres premiers. Alors, on peut les énumérer : p1 , p2 , … , pn . Posons
​ ​ ​

A = p1 × p2 × ⋯ × pn + 1 :
​ ​ ​

Si A est premier, alors on a une contradiction car A > pi pour tout i.


Sinon, A est divisible par un des pi mais pi divise p1 × p2 × ⋯ × pn donc ne peut diviser A.
​ ​ ​ ​ ​

4.2. Nombres premiers entre eux


Soient$a, b$ deux nombres.

4.2.1. Définition
a et b sont dits premiers entre eux si leur plus grand diviseur commun est égal à 1.

4.2.2. Propriété
a et b sont premiers entre eux si et seulement si il existe u, v dans Z tels que ua + vb = 1.

4.2.3. Remarque
L'algorithme d'Euclide étendu permet de trouver explicitement u et v vérifiant cette égalité, alors pour tout entier k ,
(u + kb, v − ka) marchera aussi :

(u + kb)a + (v − ka)b = ua + vb = 1

4.3. Indicatrice d'Euler (1707 - 1783)


Soit n un entier, n ≥ 2.

4.3.1. Définition
1≤m≤n−1
On note Φ(n) le nombre d'entiers m vérifiant : {
m est premier avec n

4.3.2. Exemples
Calculer Φ(7) et Φ(8). On trouve :
Φ(7) = 6 car 1, 2, 3, 4, 5, 6 sont premiers avec 7.
Φ(8) = 4 car 1, 3, 5, 7 sont premiers avec 8.

4.3.3. Remarque générale


Si n est premier, alors Φ(n) = n − 1.

4.3.4. Propriété 1
Φ(n) est le nombre d'éléments inversibles dans le groupe (Z/nZ )∗ des éléments inversibles de Z/nZ pour la
​ ​

multiplication.

4.3.5. Démonstration
Si a est inversible dans (Z/nZ , ×), cela veut dire qu'il existe u dans (Z/nZ , ×) tel que a × u = 1. C'est-à-dire a × u = 1.
​ ​ ​

Ainsi au est congru à 1 modulo n. Donc il existe un entier k tel que au = 1 + kn.
Posant v = −k , on obtient ua + vn = 1. Par l'identité de Bézout, a et n sont premiers entre eux.
Réciproquement, si pgcd(a,n) = 1, par Bézout : ∃(u, v) ∈ Z2 ∣ua + vn = 1, alors modulo n : ua + 0 = 1. Donc u ×
a = 1, donc a est inversible dans (Z/nZ , ×).

4.3.6. Propriété 2
Soient n ≥ 2 et x premier avec n. Alors xΦ(n) ≡ 1 mod n.

4.3.6.1. Cas particulier


Si p est un nombre premier, alors pour x non multiple de p, xp−1 ≡ 1 mod p. C'est le "petit théorème de Fermat".
(Le "grand théorème de Fermat" dit que l'équation xn + y n = z n n'a pas de solution entière pour n ≥ 3. Démonstration
par Wiles en 1993.)

4.3.7. Démonstration
Pour un tel x, considérons :

f : (Z/nZ )∗ ⟶ (Z/nZ )∗ ​ ​

t ⟼ x, t
​ ​

Par hypothèse pgcd(x, n) = 1 donc x est inversible pour × (propriété 1)


f est injective, en effet :

f (t) = f (t′ ) ⇒ xt = xt′



⇒ (x)−1 xt = (x)−1 xt′ ​

⇒t= t′

Comme (Z/nZ )∗ est fini, f est surjective donc bijective.


Ainsi :

∏ ​ f (t ) = ∏ ​ t
t∈(Z/nZ )∗ ​ t∈(Z/nZ )∗ ​

Or :

∏ ​
t= ∏ ​
x×t
t∈(Z/nZ )∗
​ t∈(Z/nZ )∗ ​

= ∏ ​ x× ∏ ​ t
t∈(Z/nZ )∗ ​ t∈(Z/nZ )∗ ​



= xcard((Z/nZ ) ) ×
​ ​

​ t
t∈(Z/nZ )∗ ​

=x Φ(n)
× ∏ ​ t
t∈(Z/nZ )∗

D'où, en simplifiant :

xΦ(n) = 1 dans Z/nZ ​

4.3.8. Propriété 3
Si m et n sont deux nombres premiers entre eux, alors Φ(mn) = Φ(m) × Φ(n).

4.3.8.1. Remarques
L'hypothèse est nécessaire, voici un exemple : Φ(2) = 1 et Φ(4) = 2 =
 1 = Φ(2) × Φ(2)
Si p et q sont premiers, on a donc Φ(pq) = (p − 1)(q − 1).
Démonstration avec le "théorème chinois des restes".

4.4. Exemple d'algorithme d'exponentiation rapide


Calcul rapide de x37 = z
Algorithme de base :

z = 1
Pour i allant de 1 à 37 faire :
z = z * x

37 produits.
Idée : x37 = x32+4+1
On calcule x2 , x4 , (x4 )2 = x8 , (x8 )2 = x16 , (x16 )2 = x32
Alors z = x32 × x4 × x → 32 = (100101)2 ​

7 produits.

4.5. Retour sur l'autre façon de calculer x−1 comme application de la propriété 2
En effet, dans Z/nZ cette congruence devient :

xΦ(n) = 1

Donc x × xΦ(n)−1 = 1. C'est-à-dire que xΦ(n)−1 est l'inverse de x dans Z/nZ .. or pour n premier, Φ(n) = n − 1 et si n = ​

pq avec p et q premiers, Φ(n) = (p − 1)(q − 1).


On sait donc calculer l'inverse de x au moins dans ces cas là.

4.6. Remarque sur le décryptage RSA


Avec les notations du diaporama (page 30), on a besoin de savoir que x est premier avec N pour pouvoir dire que
xΦ(N ) = 1.
Si ce n'est pas le cas : x ∈ [[0, N − 1]] et N = pq , p et q premiers, donc x est divisible par p ou q . On écarte les cas
x = 0 ou x = 1.
En fait :

On peut montrer que xΦ(N ) ≡ 1 (mod n) reste vrai.


Ce cas est peu probable : le risque de "tirer" un message clair x divisible par p ou q parmi tous les messages en
clair possibles est :

Φ(N )
1−
N

Soit, avec n le nombre de bits de N à peu près :


n
p+q−1 2 × 22 ​


2n
​ ​

pq
n
en considérant que p et q sont de même ordre de grandeur : p ≃ q ≃ N ≃ 2 2 . Donc ce risque est négligeable.

4.7. Théorème chinois des restes


Préliminaires : peut-on comparer Z/nZ et Z/mZ pour n =
​ m? ​

On va noter :

fn,m : Z/nZ ⟶ Z/mZ


​ ​ ​

x mod n ⟼ x (mod m)
​ ​

4.7.1. Exercices
1. f2,3 est-elle bien définie ? Si oui, est-il vrai que ∀a, b ∈ Z/nZ :
​ ​

f2,3 (a + b) = f2,3 (a) + f2,3 (b) et f2,3 (ab) = f2,3 (a) × f2,3 (b)
​ ​ ​ ​ ​ ​

Même question pour f3,2 . ​

Même question pour f6,3 . ​

2. Trouver tous les entiers x vérifiant :

⎧x ≡ 1 (mod 3) (1)
∗ ⎨x ≡ 2 (mod 4) (2)

​ ​

x ≡ 0 (mod 5) (3)

4.7.2. Correction
Question 1 :

Pour f2,3 , on a :

~ ~ ~
Z/2Z = {0, 1}, Z/3Z = {0, 1, 2}
​ ​
~
x⟼x

0 = {0 + 2k, k ∈ Z}
1 = {1 + 2k, k ∈ Z}
​ ​

~
f2,3 : 0 ⟼ 0 = {0, 3, 6, 9, … , −3, … }

~
= 2 ⟼ 2 = {2, 5, 8, 11, … , −1, … }
​ ​

Donc f2,3 n'est pas définie.


Même réponse pour f3,2 . ​

Pour f6,3 , on a :

f6,3 : Z/6Z ⟶ Z/3Z​ ​ ​

x = {x + 6k, k ∈ Z} ⟼ x ~ = {x + 3l, l ∈ Z}
​ ​

~ ~ dans Z .
Si x = x′ , on peut écrire x′ = x + 6k, k ∈ Z alors x′ = 3 × (2k), avec 2k ∈ Z donc x′ = x /3Z ​

Bilan à ce stade : fn,m est bien définie si et seulement si n et multiple de m.


Opérations :

f6,3 (a + b) = f6,3 (x + y )
​ ​ ​

= f6,3 (x + y ) ​ ​

=x+y ​

~ + y~
=x ​

= f6,3 (x) + f6,3 (y )


​ ​ ​

= f6,3 (a) + f6,3 (b)


​ ​

De même pour ×.

Question 2 :
Soit x dans Z vérifiant ∗.

Par (3), x est multiple de 5.


Par (2), x est pair donc x est multiple de 10.
Testons :

x x (mod 3) x (mod 4) x (mod 5)


0 0 0 0
10 1 2 0
20 2 0 0
30 0 2 0

40 1 0 0
50 2 2 0
60 0 0 0
70 1 2 0
… … … …

Ca marche donc pour x = 10 + 60k avec k ∈ Z.

4.7.3. Retour sur le théorème chinois des restes


Soient n et m dans Z premier entre eux. ALors l'application
f : Z/nmZ ⟶ Z/nZ × Z/mZ ​ ​ ​

x (mod nm) ⟼ (x (mod n), x (mod m))


​ ​

est bien définie, elle respecte les opérations + et × et est bijective.

4.7.4. Démonstration
Il reste à montrer que f est bijective. On va construire sa réciproque.
Comme n et m sont premiers entre eux, par l'identité de Bezout, il existe u, v dans Z tels que un + vm = 1, alors :

Z/nZ × Z/mZ ⟶ Z/nmZ ​ ​ ​

(a, b) ⟼ bum + avn


​ ​

définit g qui satisfait g = f −1 (… ).


Conséquence déjà vue : sous la méme hypotèse :

Φ(nm) = Φ(n) × Φ(m)

En effet, Φ(n) est le nombre d'élements inversibles pour x dans Z/nZ , c'est-à-dire $\text{card }((\mathbb Z_{/n \mathbb ​

Z})^*) et par le théorème :

(Z/nmZ )∗ ⟶bijective (Z/nZ )∗ × (Z/mZ )∗


f
​ ​ ​ ​

Φ(nm) ⟼ Φ(n) × Φ(m)


​ ​

4.7.5. Exemple : Système bancaire allemand (2015)


RSA avec n = 1024, chaque usager à un N différent, mais e = 21 6 + 1 est la même pour tous. (e est un nombre
premier, donc il suffit de prendre, pour N = pq , p, q =
 e ).
Il est envisageable que le même message m soit envoyé à beaucoup d'utilisateurs différents, au moins e. On note
N1 , … , Ne les différents modules N utilisés. Pour chaque client i (i = 1, … , e), le message m est crypté par RSA
​ ​

avec la clé (Ni , e). ​

Le message crypté est donc ci = me (mod Ni ).


​ ​

Quelqu'un intercepte ces messages cryptés.

Supposons de plus que les pi , qi définissant Ni = pi qi soient tous distincts. On peut alors utiliser le théorème chinois
​ ​ ​ ​ ​

1
des restes. On a alors X dans Z tel que X ≡ c1 (mod Ni ) pour tout i = 1, … , e. On peut donc calculer X e dans Z.
​ ​

1
Alors m = X e (mod u ∩ Ni ).

4.7.6. Contre-exemple au théorème chinois des restes


Z/4Z ⟶ Z/2Z × Z/2Z ​ ​ ​

Rappel:

Z/nZ ⟶ Z/mZ ​ ​

x (mod n) ⟼ x (mod m)
​ ​

est bien définie si m divise n et respecte les opérations.

x (mod 4) ⟼ (x (mod 2), x (mod 2))

Table de (Z/4Z , +) : ​

0 1 2 3
0 0 1 2 3
1 1 2 3 0
2 2 3 0 1

3 3 0 1 2

Table de (Z/2Z × Z/2Z , +) :


​ ​
(0 , 0 ) (0 , 1 ) (1 , 0 ) (1 , 1 )
(0 , 0 ) (0 , 0 ) (0 , 1 ) (1 , 0 ) (1 , 1 )
(0 , 1 ) (0 , 1 ) (0 , 0 ) (1 , 1 ) (1 , 0 )
(1 , 0 ) (1 , 0 ) (1 , 1 ) (0 , 0 ) (0 , 1 )
(1 , 1 ) (1 , 1 ) (1 , 0 ) (0 , 1 ) (0 , 0 )

Nous regardons où nous retrouvons des 0 dans la table de (Z/4Z , +), et nous regardons où nous retrouvons des ​

(0, 0) dans la table de (Z/2Z × Z/2Z , +).


​ ​

Nous voyons que Z/4Z est cyclique :


1=0+1
2=1+1
​ ​

3=1+1+1

Nous voyons que Z/2Z × Z/2Z ne l'est pas ((0, 0) dans la diagonale) :
​ ​

(1 , 0 ) 
= (0 , 1 ) + (0 , 1 )

Donc ils ne sont pas isomorphes.

4.7.7. Remarque
Soit :

{
x ≡ a1 (mod N )1 ​ ​

x ≡ a2 (mod N )2

​ ​

Résoudre ce système, c'est chercher x dans Z/N Z tel que : ​

Z/N Z ⟶ Z/N1 Z × Z/N2 Z




x ⟼ (a1 , a2 )
​ ​

​ ​

4.7.8. Un peu d'histoire


Pourquoi le théorème chinois des restes ? (∼ 1200)
Parce que les Chinois l'ont utilisé en astronomie pour déterminer :

{
x ≡ a1 (mod N )1 ​ ​

x ≡ a2 (mod N )2

​ ​

Avec :

N1 = 28, N2 = 365
​ ​

28 : nombre de jours dans un mois lunaire


365 : nombre de jours dans une année
Afin de répondre à la question : Dans combien de jours la pleine lune tombera-t-elle au solstice d'hiver ?

5. Exercices
5.1. Exercice 1
Sujet :
On pose x = [1, 0, 1, 0, 1, 0, 1, 0]

Calculer SubBytes(x).

Méthode :
1. Cacluler inv(x) dans F256 = F8 [X]/(f ) par l'algorithme d'Euclide étendu.
​ ​ ​

2. Calculer SubBytes(x) = inv(x) ∗ A1 + A0 ​ ​


+ : Somme bit à bit.
∗ : Produit modulo g = X 8 + 1.

Vous aimerez peut-être aussi