Cryptographie
Jean-Marc Alliot*
- *
- e-mail : alliot@recherche.enac.fr
Chapter 1 Éléments mathématiques
La plupart des systèmes de cryptographie à clef publique sont basés
sur des techniques mathématiques, qu'elles soient arithmétiques,
algébriques ou analytiques.
L'outil indispensable à connaître est la théorie des corps quotients
de Z, que nous allons rapidement présenter.
1.1 Définitions élémentaire
Définition 1 [Groupe]
Un groupe est un couple (G,+) où + est une loi de composition
interne sur G, associative, possédant un élément neutre, et telle
que tout élément de G admet un symétrique pour cette loi. Si +
est commutative, le groupe est dit commutatif, ou abélien.
S'il n'y a pas d'ambiguïté sur la loi, on parlera parfois simplement
du groupe G. Le couple (Z,+) composé de l'ensemble des entiers
relatifs et de l'addition usuelle est un groupe abélien.
Définition 2 [Sous-groupe]
Soit le groupe (G,+). On dit que (S,+) est un sous-groupe de G
si S est une partie de G stable pour + et S est un groupe
pour la loi + induite par G sur S.
Les entiers pairs 2Z munis de l'addition sont un sous groupe de
(Z,+).
Définition 3 [Anneau]
Un anneau est un triplet (A,+,.) où la loi + (dite "additive") est
une loi de groupe abélien sur A et la loi . (dite "multiplicative")
est une loi de composition interne, associative, et distributive par
rapport à l'addition. Si la multiplication est commutative, l'anneau
est dit commutatif, et si elle possède un élément neutre, l'anneau est
dit unitaire.
Là encore, s'il n'y a pas d'ambiguïté sur les lois, on parlera parfois
simplement de l'anneau A. Le triplet (Z,+,.) composé de l'ensemble des
entiers relatifs, de l'addition et de la multiplication usuelles est
un anneau commutatif unitaire.
Définition 4 [Corps]
Un corps est un anneau unitaire (K,+,.)
tel que (K-{0},.) (où 0 est l'élément neutre de l'addition) est un
groupe.
Tout élément non nul de K est donc inversible dans K. Des exemples
classiques de corps sont (R,+,.) (ensemble des nombres réels) et
(Q,+,.) (ensemble des nombres rationnels).
Définition 5 [Idéal d'un anneau commutatif A]
I est un idéal de A si et seulement si I est un sous-groupe
additif de A et pour tout élément x de A et tout élément y
de I, x.y Î I.
Les idéaux de l'anneau Z sont les sous-groupes nZ (ensemble des
multiples de n) avec n ³ 0.
Définition 6 [Relation sur un ensemble E]
Une relation R sur un ensemble E est un couple (E,G) ou G
est une partie du produit cartésien E× E, appelée graphe de la
relation. On dit que a est en relation avec b, et l'on note
a R b, si et seulement si (a,b) Î G.
En pratique, une relation est plutôt définie par une propriété, que
par la donnée extensive du graphe.
Définition 7 [Relation d'équivalence]
R est une relation d'équivalence sur l'ensemble E si et
seulement si R est réflexive (pour tout x de E, on a
x R x), symétrique (si x R y alors y R x) et
transitive (si x R y et y R z alors x R z).
Un exemple simple de relation d'équivalence est, par exemple, la
relation définie par ``x R y si x a le même nombre de
chiffres en base 10 que y''.
Définition 8 [Classe d'équivalence]
Soit R une relation d'équivalence sur E. La classe
d'équivalence d'un élément x de E est le sous-ensemble des
éléments de E en relation avec x suivant R.
On dit que deux éléments x et y d'une même classe d'équivalence
sont équivalents suivant R. Notons également
que l'ensemble des classes d'équivalence suivant R forme une
partition de E1.
Définition 9 [Ensemble quotient de E par R]
Soit R une relation d'équivalence sur E. L'ensemble des
classes d'équivalence de E suivant R est appelé ensemble
quotient de E par R, et il est noté E/ R.
Définition 10 [Classes à gauche, classes à droite]
Soit (G,+) un groupe, H un sous-groupe de G et a un élément de
G. Alors les ensembles
aH={a+h | hÎ H} et Ha={h+a | hÎ H}
sont appelées respectivement classe à gauche et classe à droite de a
suivant H.
Les éléments de aH (resp. Ha) sont les classes d'équivalence de
a pour la
relation d'équivalence définie par : x R y si et seulement si
(y-x) Î H
(resp. (x-y) Î H).
Pour deux éléments a et b de
G, les ensembles aH et bH sont soit confondus, soit disjoints
(a et b sont soit dans la même classe d'équivalence, soit dans des
classes d'équivalence différentes) et les ensembles de la forme
aH, pour a variant sur tout G, forment une partition de G
(toujours en raison des propriétés de la relation d'équivalence).
Théorème 1 [Théorème de Lagrange]
Soit G groupe fini et H un sous groupe de G. Alors le
cardinal2
de H divise le cardinal de G.
Nous savons déjà que les classes d'équivalence de la relation :
x R y si et seulement si (y-x) Î H, forment une partition
de G. Remarquons maintenant que l'application qui à x associe a+x
definit une bijection de H sur aH. Donc le cardinal de aH est
exactement le cardinal de H, et ce pour tout a de G. Donc chaque
classe d'équivalence de R a exactement le même cardinal, qui
est aussi celui de H. Donc le cardinal de H divise le cardinal de
G.
Définition 11 [Congruence]
Une congruence R sur un ensemble E, muni d'une loi de composition
interne +, est une relation d'équivalence
sur E, compatible avec la loi de composition interne + : soit
x R y et z R w alors (x+z) R (y+w).
1.2 Éléments d'arithmétique
Théorème 2 [Division euclidienne]
Soit deux entiers naturels a et b avec a>b. Il existe un couple
unique d'entiers naturel q et r (avec 0£ r<b) vérifiant
a=bq+r.
q est appelé le quotient de la division euclidienne de a par b
et r le reste. La démonstration est triviale.
Définition 12 [Diviseur]
On dit qu'un entier b divise un entier a>b (et on note a|b) si
et seulement si le reste de la division euclidienne de a par b est
égal à 0. On dit aussi que a est un multiple de b.
Définition 13 [Nombre premier]
Un nombre p est dit premier si et seulement si il n'a que
deux diviseurs positifs : 1 et lui-même.
Théorème 3 [Théorème fondamental de l'arithmétique]
Tout entier naturel n peut s'écrire de façon unique en un produit de
nombre premiers, appelé décomposition en facteurs premiers de n.
Une assertion équivalente au théorème fondamental consiste à dire que
si un nombre premier p divise ab alors p divise a ou p
divise b. Un nombre premier est, quant à lui, dit
irréductible3.
Définition 14 [Plus grand diviseur commun (pgcd)]
Le plus grand diviseur commun de deux entiers a et b, noté
pgcd(a,b) est le plus grand entier d divisant à la fois a
et b.
Une définition équivalente du pgcd consiste à dire qu'il s'agit du
seul entier divisant a et b et divisible par tous les autres
entiers divisant à la fois a et b. Il est aisé de trouver le pgcd
de deux nombres lorsque l'on connaît leurs décompositions en facteurs
premiers : il suffit de prendre le produit des entiers premiers
apparaissant dans les deux décompositions avec l'exposant minimal.
Il est malheureusement rare de connaître dans le cas général la
décomposition en facteurs premiers d'un nombre quelconque (la sécurité
de nombreux systèmes cryptographiques comme le RSA repose précisément
sur la difficulté qu'il y a à décomposer un nombre en facteurs
premiers). Il existe pourtant une méthode rapide permettant de
trouver le pgcd de deux nombres.
Théorème 4 [Algorithme d'Euclide]
Soit deux entiers a et b (b<a). On définit la suite rn suivante :
rn-1= qn rn + rn+1 avec 0£ rn+1 < rn
avec r0=a et r1=b. Alors, il existe n0 tel que rn0+1=0 et
rn0 est le pgcd de a et b.
Démonstration : La suite
rn est strictement décroissante et minorée par 0, puisqu'il s'agit de la définition même de la division euclidienne. Donc il existe
nécessairement n0 tel que rn0+1=0. Montrons maintenant que
rn0 est le pgcd de a et b. Pour cela, utilisons la seconde
définition du pgcd,
c'est à dire qu'il s'agit du seul entier divisant a et b et
divisible par tous les autres entiers divisant simultanément a et
b.
Vérifions tout d'abord que rn0 divise a et b. On a rn0-1 =
qn0 rn0+0. Donc rn0 divise rn0-1 Mais s'il divise
rn0-1 il divise aussi rn0-2 puisque
rn0-2 = qn0-1 rn0-1+rn0, etc. Par récurrence, on démontre
ainsi aisément que rn0 divise tous les rn et donc divise a
et b.
Réciproquement, considérons un nombre c qui divise a et b. c
divise donc r0 et r1 par définition. Mais alors, il divise
également r2 puisque
r0 = q1 r1+r2, etc. Par récurrence, on
démontre donc qu'il divise tous les rn et donc qu'il divise
rn0.
L'algorithme d'Euclide permet d'établir aisément le théorème suivant.
Théorème 5 [Identité de Bezout]
Soit a et b deux nombres tels que pgcd(a,b)=d. Il existe
alors deux entiers relatifs u et v tels que au+bv=d.
Démonstration : récrivons les relations ci-dessus :
|
rn0 |
= |
rn0-2 - qn0-1 rn0-1 |
(1) |
··· |
= |
··· |
(2) |
rn-1 |
= |
rn-3 - qn-2 rn-2 |
(3) |
··· |
= |
··· |
(4) |
r3 |
= |
r1 - q2 r2 |
(5) |
r2 |
= |
r0 - q1 r1
|
(6) |
|
On voit donc que r2 peut s'écrire comme une combinaison linéaire de
r0 et r1 (c'est à dire de a et b). r3 peut donc s'écrire
comme une combinaison linéaire de a et b en remplaçant r2 par
son expression en a et b. On peut ainsi vérifier par récurrence
que tous les rn peuvent s'écrire sous la forme d'une combinaison
linéaire de a et b, et ce résultat est donc également valable pour
le pgcd rn0.
Définition 15 [Relation de congruence pour les entiers relatifs]
Soit a et b deux entiers relatifs. Soit p un entier naturel
fixé. On dit que a et b sont congrus modulo p si et seulement si
a-b est un multiple de p. On
note alors :
a º b [ p ]
Il est aisé de vérifier que la relation définie ci dessus est une
relation d'équivalence (réflexive, symétrique et transitive).
Définition 16 [Ensemble quotient]
On note Z / p Z l'ensemble des classes d'équivalence de la
relation de congruence modulo p et la fonction qui à chaque
élément a de Z associe sa classe
d'équivalence a dans Z / p Z.
Notons que Z / p Z contient exactement p éléments qui sont
représentés par les éléments canoniques
0,1,···,p-1.
Définition 17 [Arithmétique de Z / p Z]
On étend l'arithmétique de Z à Z / p Z en
définissant les fonctions + et × de la façon
suivante :
a + b |
= |
a+b |
a × b |
= |
a × b |
Pour que cette définition ait un sens, il faut vérifier que les
opérations définies ci-dessus sont bien indépendantes du représentant
choisi dans la classe d'équivalence. Cela est rendu évident par les
formules : (pa+b)+(pc+d)=p(a+b)+(c+d) et (pa+b)(pc+d)=p(pac+cb+ad)+bd.
Théorème 6
Z / p Z muni des opérations + et
× est un anneau. La fonction est un
morphisme surjectif d'anneau.
On abandonne généralement la
notation pour les opérateurs et les classes d'équivalence de
Z /p Z, et
on les note simplement +, × et 0··· p-1, notation que
nous adopterons dans la suite.
Exemple 1
Posons p=5. Les élément de Z / 5 Z sont 0, 1, 2, 3 et 4.
0 est bien évidemment élément neutre pour l'addition et 1
élément neutre pour la multiplication. L'inverse
(pour l'addition) de 2 est 3 ( 2+3=5 º 0 [ 5 ]), celui de 4
est 1.
Théorème 7 [Inversibilité dans Z / p Z]
Un élément a de Z / p Z est inversible si et seulement si a et
p sont premiers entre eux.
Démonstration : si a et p sont premiers entre eux, alors il existe
u et v tels que au+pv=1. Modulo p, cette relation devient
au º 1 [ p ]. u est donc l'inverse de a dans Z / p Z.
Réciproquement, si a et p ne sont pas premiers entre eux alors il
existe trois nombres q, r, s avec 1<q<p et 1<s<p tels que qr=a
et qs=p (q est le pgcd de a et p). On en déduit
qrs=qsr=pr=as qui devient modulo p : as º 0 [ p ]. Donc
a est un diviseur de zéro dans Z / p Z et n'admet donc
pas d'inverse4.
Théorème 8 [Corps Z/p Z]
Z/ p Z est un corps si et seulement si p est premier.
Démonstration : si p est premier, alors tout nombre compris
strictement entre 1
et p est premier avec p, donc tout nombre de Z /p Z est
inversible. Réciproquement, si p n'est pas premier, il admet au
moins un diviseur compris strictement entre 1 et p, qui ne sera donc
pas inversible.
Théorème 9 [Théorème chinois]
Soit le système de s congruences suivant :
x |
º |
a1 [m1] |
x |
º |
a2 [m2] |
··· |
º |
··· |
x |
º |
as [ms] |
et " i,j, j¹ i, pgcd(mi,mj)=1.
Alors il existe une solution x0 commune à toutes les congruences ci
dessus et toute autre solution est congruente à x0 modulo
M=m1 m2 ··· ms.
Démonstration : posons Mi = M/mi, alors
pgcd(Mi,mi)=1. Donc d'après l'identité de Bezout, il existe
Ni tel que Mi Ni º 1 [ mi ]. Posons
x0=åi ai Mi Ni. Alors pour tout j :
x0 º aj [ mj ]. Supposons maintenant que nous ayons une
deuxième solution x1 de notre système. Posons x=x0-x1. x est
congru à 0 modulo chacun des mi, et donc également congru à 0
module M. Donc x0 et x1 sont congrus modulo M.
Définition 18 [Fonction indicatrice d'Euler]
Soit n un entier naturel. On appelle fonction indicatrice d'Euler,
et on note j(n) le nombre d'entiers
naturels strictement positifs premiers avec n et strictement
inférieurs à n.
On remarque que pour p premier, j(p)=p-1 ; d'autre part,
j(pa)= pa-pa-1, puisque les nombres
premiers avec pa et inférieurs à pa sont tous les
nombres inférieurs à pa moins les multiples de p (et il y en
a pa-1).
Nous allons maintenant donner une formule générale permettant de
calculer j(n) connaissant la décomposition en facteurs
premiers de n. Avant cela, nous aurons besoin du lemme suivant.
Lemme 1
La fonction j est multiplicative pour les nombres premiers
entre eux : si pgcd(p,q)=1 alors j(pq)=j(p)
j(q)
Démonstration : nous devons compter les nombres i compris entre 0 et
pq-1 qui sont premiers avec pq. Or, d'après le théorème chinois,
un nombre i n'aura pas de facteur commun avec pq si et seulement
si le nombre i1 º i [ p ] n'a aucun facteur commun avec p et le
nombre i2 º i [ q ] n'a pas de facteur commun avec q. On a donc
grâce au théorème chinois une bijection entre les couples (i1,i2)
tels que i1 est premier avec p et i2 est premier avec q, et
les nombre i tel que i est premier avec pq. Or, nous avons
j(p)× j(q) couples de ce type, donc
j(pq)=j(p) j(q)
De façon générale :
Théorème 10
Soit n un entier naturel avec n=Õ1£ i£ k piei où
les (pi,ei) sont la décompositions en facteurs premiers de
n. Alors :
Démonstration : j étant multiplicative, il suffit d'utiliser la formule
j(pa)= pa-pa-1=pa-1(p-1) pour p
premier.
Théorème 11
Soit a et n deux nombres premiers entre eux et x1, x2,···
xk les nombres (xi)i=1j(n) premiers avec n et
inférieurs à n. Alors
l'ensemble des (a xi)i=1j(n) dans Z/n Z est égal à
l'ensemble des (xi)i=1j(n).
Démonstration : Tout d'abord remarquons que si xi et a sont
premiers avec n alors a xi est premier avec n. Maintenant,
supposons qu'il existe deux nombre i et j distincts tels que
a xi º a xj [ n ]. Cela implique que
a(xi-xj) º 0 [ n ]. Mais a étant premier avec n, il est
inversible et donc on a xi-xj º 0 [ n ]. Donc
xi º xj [ n ], ce qui est contraire à l'hypothèse.
Théorème 12 [Généralisation d'Euler]
Soit a et n deux nombres premiers entre eux. Alors
aj(n) º 1 [ n ]
L'ensemble des (xi)i=1j(n) premiers avec n et inférieurs à n et
l'ensemble des (a xi mod n)i=1j(n) étant les mêmes, on a
Donc aj(n) º 1 [ n ]
Ce théorème est appelé généralisation d'Euler, car il généralise le
petit théorème de Fermat qui dit que si n est premier, alors pour tout
a<n, an-1 º 1 [ n ].
On peut également remarquer une propriété utile liée au théorème
d'Euler : si l'on souhaite calculer ar modulo n, alors on peut
réduire r en s avec sº r [j(n)] et ar º as [n]
1.3 Résidus quadratiques
Définition 19 [Résidu quadratique]
Soit aÎ Z/nZ. a est appelé résidu quadratique modulo n ou
carré modulo n si et seulement si il existe bÎ Z/nZ tel que
b2 º a [n]
Théorème 13 [Racines carrés dans le corps Z/nZ]
Soit n>2 premier. Alors si a est un résidu quadratique dans Z/nZ
différent de 0, a a exactement deux racines carrées.
La démonstration est élémentaire. Soit b et c, deux racines de a
quelconques et non nécessairement distinctes. Nous avons alors b2 º c2
[n]. Donc b2-c2 º 0 [ n ], ou encore
(b-c)(b+c) º 0 [ n ]. n étant premier, Z/nZ est un
corps. On a donc soit b=c, soit b=n-c. a admet donc bien
exactement deux racines carrées distinctes, l'une inférieure ou égale
à n-1/2 et l'autre strictement supérieure.
Théorème 14 [Nombre de résidus quadratiques]
Soit n>2 premier. Alors il y a exactement n-1/2 résidus
quadratiques différents de 0 dans Z/nZ.
Le résultat découle directement du théorème précédent. L'ensemble des
résidus quadratiques est simplement obtenu en calculant le carré de
tous les nombres de 1 à n-1/2.
Définition 20 [Symbole de Legendre]
Soit n>2 premier et a un entier quelconque. On définit le symbole
de Legendre (a/n) par :
- 1
- Démonstration élémentaire laissée à la
diligence du lecteur.
- 2
- On appelle aussi parfois le cardinal d'un groupe,
l'ordre de ce groupe.
- 3
- Ces définitions, valables pour l'arithmétique
des
entiers naturels ou relatifs, devient fausse pour l'arithmétique des nombres
algébriques, comme par exemple les nombres de la forme a+b10,
pour lesquels l'irréductibilité n'est pas équivalente à la
primalité.
- 4
- S'il en admettait un, que nous noterions
a -1, on aurait (comme as=0) : a -1 a s = 0, soit s=0 dans
Z / p Z, ce qui est contredit l'hypothèse 1<s<p dans Z.
Chapter 2 Cryptage à clef publique
2.1 Introduction
Le cryptage traditionnel repose sur l'existence d'une clef
privée, commune à l'émetteur et au récepteur du message, qui doit
rester secrète pour garantir la confidentialité de la
transaction. Cela pose le problème du transport de cette clef (comment
la faire parvenir de façon sûre à quelqu'un se trouvant à l'étranger),
mais aussi du maintien de sa confidentialité sur le long terme. Dans
le cryptage traditionnel, la connaissance de l'algorithme de cryptage
et de ses paramètres permet de construire l'algorithme de décryptage.
Dans le cryptage à clef publique, la clef de cryptage est au contraire
diffusée largement, même par des canaux absolument non
sûrs. Simplement, la connaissance de l'algorithme de cryptage et sa
clef ne permet pas de reconstituer l'algorithme de décryptage.
Nous allons maintenant examiner quelques exemples de cryptage à clef
publique.
2.2 L'algorithme Merkle-Hellman
L'algorithme Merkle-Hellman [MH78] est historiquement le premier
algorithme montrant le fonctionnement d'un système à clef publique. Il
appartient à la famille des algorithmes de cryptage de type ``sac à
dos'' (ou knapsack en anglais).
Le problème du sac à dos est un problème classique en théorie de la
complexité. On sait qu'une instance générale du problème est
NP-complète. La formulation du problème du sac à dos est simple : un
randonneur possède un sac à dos pouvant contenir x kgs, et il
dispose d'un ensemble I d'objets, chacun pesant un poids xi. Il
souhaite savoir s'il existe un sous ensemble de J, tel que la somme
des poids des éléments de J soit exactement x. Mathématiquement :
xÎ N, I={x1,x2,···,xi,···,xn}, trouver
J tel que : |
|
|
xi = x |
Remarquons tout d'abord que, s'il est possible de montrer que le
problème du sac à dos est NP-complet dans le cas général, il existe
des instances extrêmement faciles à résoudre, ce sont celles faisant
intervenir les séquences super-croissantes :
Définition 21 [Séquence super-croissante]
Soit une suite un et la série associée Sn=åi=1n un. On
dit que un est super-croissante si l'on a :
" n, un+1> Sn
Notons tout de suite que les bases de numérations sont toutes des
exemples de séquence super-croissante (1+2<4, 1+2+4<8,
etc).
Il est clair que le problème du sac à dos est trivial lorsque l'on
utilise une séquence super-croissante. Il est tout aussi clair qu'il
n'a pas toujours de solution. Ainsi, si l'on choisit la base 2 comme
séquence super-croissante, tout nombre pourra se décomposer sur cette
base au sens du problème du sac à dos. Il n'en va pas de même si l'on
choisit la base 10 (par exemple, 13=8+4+1 se décompose aisément sur
la séquence {1,2,4,8}, alors que le même nombre ne peut pas se
décomposer sur la séquence {1,10}).
L'idée de Merkle-Hellman est de transformer un problème du sac à dos
trivial basé sur une séquence super-croissante en problème du sac dos
général, qui devient alors NP-complet, donc ``insoluble''. Nous allons
tout d'abord présenter une version simplifiée de l'algorithme
Merkle-Hellman.
Algorithme 1 [Génération de la clef pour l'algorithme Merkle-Hellman]
L'algorithme se décompose de la façon suivante :
-
Choisir une séquence super-croissante {a1,a2,···,an}
et un nombre N avec N>a1+a2+···+an
- Choisir un nombre A<N tel que pgcd(A,N)=1
- Calculer les bi º A ai [ N ]
La clef publique est ({b1,b2,···,bn}) et la clef
privée (N,A,{a1,a2,···,an}).
Il suffit maintenant pour l'émetteur de récupérer la clef publique
({b1,b2,···,bn}), qui peut être transmise par n'importe quel
canal, même non sûr, puis d'appliquer l'algorithme de cryptage suivant :
Algorithme 2 [Cryptage par l'algorithme de Merkle-Hellman]
Soit un message binaire composée de la suite de chiffre d1d2 ···
dn, avec di=0 ou di=1. Alors, le message crypté est :
où les bi sont la clef publique calculée par l'algorithme
précédent.
Supposons maintenant qu'un individu mal intentionné tente de décrypter
le message c. Il est en possession de la séquence
I={b1,b2,···,bn} et du nombre c. Il lui faut donc résoudre
un problème de sac à dos, puisqu'il lui faut trouver le sous ensemble
J de I tel que åjÎ J bj=c. Or ce problème de sac à dos
n'a a priori aucune structure particulière, puisque la séquence bi
n'est pas super-croissante après l'application de la multiplication
par A et du modulo N. Ce problème est donc a priori NP-complet.
En revanche, si nous sommes en possession de la clef privée, le
décryptage est élémentaire :
Algorithme 3 [Décryptage par l'algorithme de Merkle-Hellman]
Soit le message cryptée c. Soit
m º A-1c [ N ]. Calculons les nombres binaires di' tel
que m=åi=1n di' ai. Alors di=di', où les di
représentent les chiffres du message initial.
L'algorithme de décryptage de Merkle-Hellman consiste à résoudre un
problème de sac à dos, mais cette fois ci sur une instance
super-croissante. On peut aisément vérifier que l'algorithme de
décryptage est correct en raison de la propriété suivante :
m º A-1c º A-1 |
|
di bi
º |
|
di (A-1 b1) º |
|
di ai
[N] |
Nous allons maintenant développer un exemple pour bien montrer le
fonctionnement de l'algorithme Merkle-Hellman. Nous allons
choisir des nombres artificiellement petits, sachant bien
entendu qu'il faudrait normalement choisir des nombres plus grands de
plusieurs ordres de magnitude.
Exemple 2 [Application de l'algorithme de Merkle-Hellman]
Nous allons prendre n=8, et comme suite :
{a1,a2,···,a8}={3,7,15,31,63,151,317,673}. Nous
choisissons N=1511 et A=643. Nous calculons alors la séquence :
{b1,b2,···,b8}={418,1479,579,290,1223,389,1357,593}, et
aussi 643-1=47 [1511].
La seule information diffusée est la liste des bi. Supposons
maintenant que nous ayons à coder le message 10011010. Il suffit de
calculer puis de transmettre c=418+290+1223+1357=3288.
Pour décrypter le message, nous calculons m=A-1 c [N]=47 ×
3288 [1511]=414. Il nous suffit alors de résoudre le problème du
sac à dos avec la séquence super-croissante ai et
x=414=317+63+31+3, soit 10011010. Nous retrouvons bien le message
initial.
L'algorithme de Merkle-Hellman est aujourd'hui complètement
abandonné. Même avec diverses améliorations (permutation sur les
éléments de la base, algorithme itéré, etc), il n'est pas sûr et
l'on a trouvé des algorithmes capables de le ``casser'' en un temps
polynomial. Le premier exemple d'un tel algorithme est dû à Shamir en
1982 (publié seulement en 1984 [Sha84]).
Notons enfin qu'il n'existe qu'un seul système de cryptage sûr basé
sur le principe du ``sac à dos''. Il s'agit de l'algorithme de
Chor-Rivest. Son principal inconvénient est la taille des clefs (de
l'ordre de 50000 bits).
2.3 L'algorithme RSA (Rivest-Shamir-Adleman)
L'algorithme RSA est actuellement le cryptosystème le plus
employé. Inventé en 1977, il est basé sur l'impossibilité, tout au
moins à ce jour, de factoriser rapidement de grands nombres
composites.
Algorithme 4 [Génération d'une clef pour l'algorithme RSA]
La construction d'une clef pour l'algorithme RSA se fait en trois
étapes :
-
Générer deux grands nombres premiers p et q et calculer
n=pq et f=(p-1)(q-1)
- Trouver un entier e tel que 1 < e < f et pgcd(e,f)=1
- Calculer d=e-1 [f].
La clef publique diffusée est (n,e) et la clef privée est d.
Notons que la connaissance de n et e ne permet pas de reconstituer
d. Il faudrait pour cela être capable de factoriser n, ce qui est
impossible dès que l'on choisit p et q suffisamment grands.
Algorithme 5 [Cryptage par l'algorithme RSA]
Le message m à transmettre doit appartenir à l'intervalle
[0,n-1]. On calcule alors :
cº me [n]
c est le message crypté à transmettre.
Algorithme 6 [Décryptage par l'algorithme RSA]
Soit c le message crypté. Il suffit de calculer :
mº cd [n]
Démonstration : il nous faut montrer que
cd º (me)d º med [n] est également congru à m
modulo n.
Nous savons que dº e-1 [f], donc $ k,
ed=1+kf. Donc med º m1+kf º m (mf)k [n]. Le
théorème d'Euler permet d'écrire : mf º 1 [n]. Donc
med º m [n].
Nous allons maintenant montrer un exemple d'utilisation de
l'algorithme RSA. Les paramètres sont là aussi pris
artificiellement petits.
Exemple 3
On choisit p=313 et q=547. Donc n=p q=171211 et
f=170352. On choisit e=83 et l'on trouve d=108779. Supposons
que nous souhaitions coder le message m=123456. On trouve alors
c º me º 12345683 º 49619 [n]. Pour retrouver
le message initial, il suffit de calculer mº cd º
49619108779 º 123456 [n].
References
- [MH78]
-
R.C. Merkle and M.E. Hellman.
Hiding information and signatures in trapdoor knapsacks.
IEEE transactions on information theory, 24:525--530, 1978.
- [Sha84]
-
R. Shamir.
A polynomial time algorithm for breaking the merkle-hellman
cryptosystem.
IEEE transactions on information theory, 30:699--704, 1984.

This document was translated from LATEX by
HEVEA.