Mathématiques - Le chiffrement RSA

publicité
ENSEIGNEMENT DE PROMOTION SOCIALE
——————————————————————
Cours de
MATHEMATIQUES
- Chiffrement RSA ——————————————————————
H. Schyns
Mai 2008
Chiffrement RSA
Sommaire
Sommaire
1.
INTRODUCTION
2.
DÉFINITIONS
2.1. Nombres premiers
2.2. Nombres premiers entre eux
2.3. Fonction modulo
2.4. Décomposition binaire.
3.
LE CRYPTAGE RSA
3.1. Principe
3.2. Les clés
3.3. Le cryptage
3.4. Le décryptage
3.5. RSA dans un tableur
4.
SOURCES
H. Schyns
S.1
Chiffrement RSA
1.
1 - Introduction
Introduction
De nombreux documents exposent la théorie du systeme de chiffrementr à clé
publique / clé privée encore appelé système RSA.
Ces exposés utilisent un formalisme mathématique qui est souvent obscur pour le
non initié.
Si les quelques exemples fournis illustrent la suite des opérations, ils ne donnent
que rarement le détail du calcul et ses limites.
Le présent document a pour objectif d'illustrer la méthode aussi simplement que
possible à l'aide de nombreux exemples détaillés.
H. Schyns
S.1.1
Chiffrement RSA
2.
2 - Définitions
Définitions
Le système RSA repose sur quatre concepts arithmétiques :
-
les nombres premiers,
les nombres premiers entre eux,
la fonction modulo,
la décomposition binaire.
Nous allons illustrer ces principes ci-après.
Le lecteur déjà familiarisé avec ces concepts peut passer directement au chapitre
suivant.
2.1.
Nombres premiers
Definition
Exemple
Recherche si un nombre est premier ou non
Premier voisin de 6
Suite des premiers est infinie
2.2.
Nombres premiers entre eux
PGCD
Euclide
Euclide étendu
2.3.
Fonction modulo
Division Euclidienne
Modulo d'un carré à partir du modulo de la base
Modulo d'une somme ou d'une différence
2.4.
H. Schyns
Décomposition binaire.
2.1
Chiffrement RSA
3.
3 - Le cryptage RSA
Le cryptage RSA
3.1.
Principe
Le cryptage RSA repose sur le choix d'un couple de deux nombres premiers
généralement appelés [ p ] et [ q ] que l'on doit absolument garder secrets.
Les nombres premiers choisis doivent être les plus grands possible afin de
compliquer au maximum la tâche de celui qui veut craquer le système.
Ce couple élu va engendrer d'autres nombres qui vont constituer la clé du procédé.
3.2.
Les clés
Le principe du système RSA est beaucoup plus facile à comprendre à partir d'un
exemple. Commençons avec deux nombres premiers simples à garder secrets :
p = 11
q = 23
Le nombre [ n ] qui résulte de leur produit constitue la clé publique du système.
Elle peut être connue de tout le monde :
n = p⋅q
[3.1]
n = 11 ⋅ 23 = 253
Certes, le choix de notre exemple n'est pas vraiment génial car il ne faudra pas
longtemps à quelqu'un connaissant ses tables de multiplications pour factoriser ce
nombre et retrouver [ p ] et [ q ]. Dans la réalité, [ p ] et [ q ] sont des nombres de
plus de cent chiffres, ce qui donne plus de deux cents chiffres pour [ n ] ce qui
demande des outils informatiques particuliers. Mais continuons...
A partir des nombres [ p ] et [ q ], nous allons générer un autre nombre [
appelé fonction indicatrice d'Euler tel que
ϕ (n) = (p − 1) ⋅ (q − 1)
ϕ(n) ]
[3.2]
ϕ (253 ) = (11 − 1) ⋅ (23 − 1)
ϕ (253 ) = 10 ⋅ 22 = 220
C'est ce nombre [ ϕ(n) ] et non [ n ] qui consitute le secret du cryptage. L'astuce est
que [ n ] est tellement grand qu'il est pratiquement impossible de le factoriser pour
retrouver [ p ] et [ q ] et, à partir de ces valeurs, de reconstituer [
ϕ(n) ].
La fonction indicatrice d'Euler nous dit qu'il y a 220 nombres inférieurs à 253 et qui
sont premiers avec 253. Autrement dit, dans l'ensemble des nombres compris entre
1 et 253, on peut en trouver 220 qui n'ont aucun facteur premier commun avec 253
(1).
1 Ce nombre de 220 peut sembler très élevé mais il ne faut pas oublier que le nombre choisi 253 est le
produit des deux nombres premiers 11 et 23. Donc, dans la liste de tous les nombres allant de 1 à 253, il
suffit de supprimer tous les multiples de 11 (il y en a 22) et tous les multiples de 23 (il y en a 10).
H. Schyns
3.1
Chiffrement RSA
3 - Le cryptage RSA
Nous choisissons ensuite un nombre [ e ], "presque" quelconque, qui sera
l'exposant de chiffement. Il y a deux conditions sur ce nombre :
-
il doit être supérieur à 3,
-
il ne doit pas nécessairement être premier mais il doit être premier avec [ ϕ(n) ]
en d'autres mots leur PGCD doit être égal à 1.
Prenons par exemple :
e = 17
Comme 17 est un nombre premier, il est fatalement premier avec 220.
Le couple (253, 17) constitue la clé publique proprement dite.
Que nous ayons choisi un nombre premier est purement fortuit; nous aurions tout
aussi bien pu prendre 21, 39 ou 49 qui ne sont pas premiers.
Ceci a une première conséquence importante :
Pour une clé publique [ n ] donnée, plusieurs exposants de chiffrements [ e ]
sont possibles. Plus [ n ] est grand, plus il existe de possibilités pour [ e ].
Chaque couple (n,e) donne une clé publique de cryptage différente et
unique.
A ce stade, nous avons publié deux nombres connus de tous :
-
n = 253
e = 17
comme clé publique
comme exposant de chiffrement
Maintenant, n'importe qui peut nous envoyer un message chiffré et, ce qui est plus
surprenant, l'auteur lui-même ne pourra pas décrypter son propre message à l'aide
de la clé publique.
Une personne qui aurait choisi un exposant différent pourrait crypter ses propres
messages sans être pourtant capable de déchiffrer les nôtres et réciproquement.
L'étape suivante consiste à créer un exposant de décryptage.
La procédure est plus délicate. Il nous faut trouver un nombre [ d ] tel que :
(d ⋅ e ) mod ϕ (n) = 1
[3.3]
Ceci signifie qu'il doit rester 1 quand on divise le produit des exposants de cryptage
[ e ] et de décryptage [ d ] par [ ϕ(n) ].
Dans le cas qui nous intéresse, l'expression devient
(d ⋅ 17 ) mod 220 = 1
[3.4]
Nous pouvons écrire cette expression sous une autre forme en disant que le produit
[ d.17 ] doit être un multiple de 220 auquel on a ajouté 1.
d ⋅ 17 = k ⋅ 220 + 1
[3.5]
où k est un entier positif à déterminer.
H. Schyns
3.2
Chiffrement RSA
3 - Le cryptage RSA
Ca a l'air un peu compliqué comme ça mais dans le cas de cet exemple, c'est
relativement simple.
-
d'une part, le produit recherché doit être très proche d'un multiple 220 puisque
le reste de la division est petit et vaut 1 :
d≅
k ⋅ 220
≅ k ⋅ 13
17
[3.6]
[ d ] doit être un multiple de 13 ou proche d'un multiple de 13.
d = 13, 26, 39, 42...
-
d'autre part, le membre de droite de l'expression [3.5] se termine par 1, or les
seuls multiples de 17 qui se terminent par 1 sont ceux pour lesquels [ d ] se
termine par 3 :
d = 3, 13, 23, 33...
En comparant les deux séries, nous trouvons
d = 13
e ⋅ d = 13 ⋅ 17 = 221
221 mod 220 = 1
Le couple (253, 13) constitue la clé privée proprement dite.
A partir de maintenant, tout le monde peut oublier [ p ], [ q ] et [
ϕ(n) ].
En réalité, ce n'est pas le cas et des organismes tels que VeriSign et Thawte
vendent des couples de clés privées et clés publiques à tout ceux qui le désirent.
Vu la taille des nombres, il y a des milliards de milliards de combinaisons possibles.
Remarquons que les exposants de cryptage [ e ] et de décryptage [ d ] sont
interchangeables : un texte codé avec [ e ] peut être décodé avec [ d ] et
réciproquement.
Notons que le choix
e = 21
comme exposant de cryptage aurait été particulièrement malheureux car il conduit à
prendre
d = 21
comme exposant de décryptage. En effet,
(21⋅ 21) mod 220 = 1
or, pour assurer la confidentialité il est évident que l'exposant de cryptage qui est
public doit être différent de l'exposant de décryptage, qui est secret.
Dans la réalité, les nombres sont plus grands, la recherche de [ d ] à partir de [ e ]
n'est pas aussi simple mais elle est néanmoins très rapide grâce à une technique
connue sous le nom d'algorithme d'Euclide étendu.
H. Schyns
3.3
Chiffrement RSA
3.3.
3 - Le cryptage RSA
Le cryptage
Le cryptage permet de transformer un nombre [ x ] strictement plus petit que [ n ] en
un autre nombre [ y ], lui aussi strictement plus petit que [ n ].
Pour imposer la règle strictement plus petit que [ n ] l'algorithme utilise la fonction
"modulo n" ou "mod n" c'-est-à-dire le reste de la division par [ n ]. En effet, le reste
de la division par [ n ] est forcément un nombre compris entre 0 et [ n-1 ].
Dans le cas de notre exemple, nous pouvons coder 253 valeurs différentes soit
pratiquement tous les codes ASCII.
Supposons que nous voulions envoyer la chaîne Ascii contenant le mot "RSA" :
Lettre
R
S
A
Ascii
82
83
65
Chaque nombre [ x ] (code Ascii) subit l'opération
(x e ) mod n
soit, dans le cas de la lettre R
[3.7]
(82 ) mod 253
17
Pas de panique ! Il n'est pas nécessaire de calculer
8217
Il suffit de savoir que tout nombre [ x ] peut s'écrire sous la forme
x = k ⋅ 253 + r
[3.8]
x mod 253 = r
[3.9]
x 2 = (k ⋅ 253 + r ) = k 2 ⋅ 253 2 + 2 ⋅ k ⋅ 253 ⋅ r + r 2
[3.10]
d'où
Considérons à présent
2
Les deux premiers termes sont des multiples de 253; il n'interviennent donc pas
dans le calcul du modulo. On en déduit que :
x 2 mod 253 = r 2 mod 253
[3.11]
Autrement dit, nous pouvons calculer facilement le modulo du carré d'un nombre à
partir du carré de son modulo.
En appliquant plusieurs fois le processus, nous calculons facilement les modulos de
[ x ] élevé aux puissances 2, 4, 8, 16, etc.
Pour calculer le modulo d'une puissance quelconque de [ x ], nous appliquerons une
décomposition binaire à l'exposant.
Dans le cas de notre exemple :
17 = 16 + 1
x e = x 17 = x16 ⋅ x1
H. Schyns
3.4
Chiffrement RSA
3 - Le cryptage RSA
La première étape consiste à remplir un tableau des modulos de [ x ] exposant une
puissance de 2 :
x = 82 e=17
rang e
x
1
82
r
mod 253
82
2
-
2
2
146
2
64
2
48
2
82 = 6 724
4
146 = 21 316
8
64 = 4 096
16
48 = 2 304
27
17=1+16
82.27 = 2 214
190
la première ligne contient la valeur x et son modulo n.
les lignes suivantes reprennent le carré du modulo de la ligne prédécente et
calculent le modulo de ce carré
Nous établissons la dernière ligne en sachant que :
8217 = 8216 ⋅ 821
et que
(
)(
)
8217 mod 253 = 8216 mod 253 ⋅ 821 mod 253 mod 253
[3.12]
8217 mod 253 = (27 ⋅ 82)mod 253 = 190
Dans notre exemple, la lettre R de code Ascii 82 est codée sous le nombre 190, ce
qui est le code Ascii du caractère ¾.
Nous procédons de la même manière pour les lettres suivantes [ S ] et [ A ]. Nous
voyons dans le tableau ci-dessus, nous pouvons faire l'économie d'une colonne en
2
inscrivant directement la valeur initiale dans la colonne [ r ] :
x = 83 e=17
rang e
2
mod 253
rang e
83
83
1
r
1
r
2
mod 253
65
65
2
2
65 = 4 225
177
75
4
177 = 31 329
2
210
2
59
8
210 = 44 100
2
78
2
192
16
78 = 6 084
2
12
250
17=1+16
65.12 = 780
21
2
58
2
2
83 = 6 889
4
58 = 3 364
8
75 = 5 625
16
59 = 3 481
17=1+16
x = 65 e=17
83.192
= 15 936
Ainsi, la lettre S de code Ascii 83 est codée sous le nombre 250, tandis que la lettre
A de code Ascii 65 est codée sous le nombre 21 :
H. Schyns
Lettre
R
S
A
Ascii
82
83
65
Code
190
250
21
3.5
Chiffrement RSA
3.4.
3 - Le cryptage RSA
Le décryptage
Le décryptage utilise exactement le même processus pour transformer un nombre
[ y ] strictement plus petit que [ n ] dans le nombre [ x ] initial, lui aussi strictement
plus petit que [ n ].
Chaque nombre y subit l'opération
(y ) mod n
d
[3.13]
soit, dans le cas de la valeur codée 190
(190 ) mod 253
13
A nouveau, il n'est pas nécessaire de calculer
190
13
nous utilisons un tableau comme à l'étape précédente
y = 82 d=13
rang e
y
1
190
r
2
mod 253
190
2
174
2
169
2
225
2
25
2
190 = 36 100
4
174 = 30 276
8
169 = 28 561
16
225 = 60 625
225.169.190
13
82
= 7 224 750
Nous retrouvons bien la valeur initiale 82. Nous procédons de la même manière
pour les codes suivants [ 250 ] et [ 21 ] :
y = 250 d=13
mod 253
rang e
250
250
1
rang e
r
1
2
y = 21 d=13
2
2
250 = 62 500
2
4
9 = 81
8
81 = 6 561
16
13=1+4+8
9
2
mod 253
21
21
21 = 441
188
r
2
2
2
177
2
210
2
81
4
188 = 35 344
2
236
8
177 = 31 329
236 = 55 696
2
36
16
210 = 44 100
78
250.81.236
= 4 779 000
83
13=1+4+8
21.177.210
= 780 570
65
Nous retombons donc sur la séquence initiale de codes Ascii :
H. Schyns
Code
190
250
21
Decryp
82
83
65
Ascii
R
S
A
3.6
Chiffrement RSA
3.5.
3 - Le cryptage RSA
RSA dans un tableur
Le cryptage et le décryptage RSA, avec [ n ] et [ e ] ou [ d ] connus, reposent sur
des calculs qui ne sont pas difficiles mais seulement fastidieux.
Il est très facile de les implémenter dans une feuille de tableur de type Excel.
Les cellules encadrées contiennent une donnée ou une formule originale
Les pointillés indiquent que la formule de la cellule est simplement recopiée en la
tirant vers le haut ou vers le bas.
fig. 3.1 Décomposition binaire de l'exposant
fig. 3.2 Calcul des modulos
H. Schyns
3.7
Chiffrement RSA
3 - Le cryptage RSA
fig. 3.3 Calcul du produit cumulé et son modulo
C'est le même tableau qui sert aussi bien au codage qu'au décodage, ce qui rend
l'algorithme RSA particulièrement simple à programmer.
H. Schyns
3.8
Chiffrement RSA
4.
3 - Le cryptage RSA
Sources
-
Mathématiques et cryptographie
Michel Rigo
Département de Mathématiques, Université de Liège
http://www.discmath.ulg.ac.be
-
Mathématiques discrètes - Notes de cours 2007-2008
Michel Rigo
Département de Mathématiques, Université de Liège
-
Le chiffrement par clé publique - Notes provisoires, chapitre 6
R. Dumont
H. Schyns
4.1
Téléchargement