1. Ecole Nationale des Sciences Appliquées
Tanger
Rapport TP
Sécurité des Systèmes Informatiques
Réalisé par :
A N N E P A U L E YAO
Y A H I A ZIZI
Proposé et Encadré par :
Mme S A I I D A LAZAAR
Année Universitaire : 2010/2011
2. INTRODUCTION
La cryptographie est une science permettant de convertir des informations "en clair" en
informations codées, c'est à dire non compréhensibles, puis, à partir de ces informations codées,
de restituer les informations originales.
Cette discipline concerne la protection des messages durant la communication depuis l’émetteur
jusqu’au récepteur en passant par le réseau de transport afin que chacune des entités offre une
garantie.
La cryptographie assure alors la confidentialité, l’authenticité et l’intégrité des messages transmis
à l’aide de clés.
En effet, l’homme a depuis toujours ressenti de dissimuler les informations et avec le
développement de l’informatique et du réseau internet qui est devenu un outil essentiel de
communication, l’on doit faire face à de nombreux problèmes qui ne cessent d’évolués tels que
l’interception, la suppression de données, leur modification ou encore la réception de ces données
par un utilisateur différent du récepteur prévu.
Il devient donc indispensable de garantir la sécurité de ces informations et c’est la cryptographie
qui s’en charge.
L’objectif de ce TP est de se familiariser avec la cryptographie et plus précisément avec
l’algorithme RSA en créant une application client-serveur dans laquelle les conversations seront
cryptées à l’aide de l’algorithme RSA ; ceci en utilisant le langage de programmation Java.
Ce rapport est divisé en deux grandes parties :
La première présente l’algorithme RSA et son mécanisme de fonctionnement avec les clés.
La deuxième partie traite d’une série de tests afin de valider notre algorithme et notre application.
1
3. I. ALGORITHME RSA
L'algorithme RSA a été proposé par Rivest, Shamir et Adleman en 1977, puis mis au point en
février 1988.
RSA est un exemple type d'algorithme asymétrique. Il consiste en ceci :
L'utilisateur choisit deux grands nombres premiers p et q ; ces nombres doivent être
géants.
Il calcule n = p q.
Il choisit ensuite un autre nombre e inférieur à n (e < (p – 1)*(q – 1)) ; e et (p – 1)*(q – 1)
doivent être premiers entre eux.
Il publie le couple (e, n) qui constitue sa clé publique et garde secrets p et q.
À partir de là, il calcule sa clé secrète en cherchant le nombre d tel que
e*d=1 mod ((p-1)*(q-1)).
Il garde secret sa clé privée (d, n).
1) Comment utiliser les clés RSA ?
Pour crypter un message m :
M = me (modulo(n))
Pour le décrypter le message, on applique :
m = Md (modulo(n)).
Ainsi,
L'envoi d'un message m se fait donc en calculant :
M = me (modulo n)
La lecture du message en calculant :
m = Md (modulo(n)) = (me (modulo n))d (modulo n).
La signature d'un message se fait en envoyant :
M = md (modulo n)
2) Avantages et limitations de l’algorithme RSA
Le chiffrement RSA comporte plusieurs avantages :
C’est un algorithme de cryptographie asymétrique ainsi chaque utilisateur comporte deux clés :
Une clé privée qui doit être gardée secrète.
Une clé publique qui est disponible pour tous les autres utilisateurs.
2
4. Etant donné un nombre entier n=p*q produit de 2 grands nombres premiers, il est très difficile de
retrouver les facteurs p et q.
Aussi, d'après la théorie des nombres, il existe toujours un nombre d (clé secrète) mais son calcul
est impossible si on ne connaît pas p et q.
Avec une clé de 128 bits qui peut paraître petite, RSA offre une protection suffisante pour une
attaque exhaustive, en essayant toutes les clés : on a 2128 possibilités ce qui est déjà un nombre
énorme (tous les ordinateurs du monde ne peuvent tester 2128 clés).
Les clés RSA sont habituellement de longueur comprise entre 1 024 et 2 048 bits. On peut donc
présumer que RSA est sûr sur cette base si la taille de la clé est suffisamment grande.
Le succès du RSA est qu'il n'existe pas d'algorithme connu du grand public pour réaliser une
attaque force brute (consiste à retrouver p et q sur base de la connaissance de n uniquement)
avec des ordinateurs classiques.
Cependant, cet algorithme présente également de nombreuses lacunes :
C’est un algorithme lent avec des clés de très grandes tailles.
Avec des logiciels, on peut trouver la factorisation d’une clé de taille inférieure à 512 bits.
Il existe plusieurs types d’attaques de l’algorithme RSA : Attaque de Wiener, Attaque de Håstad,
Attaque par chronométrage (timing attacks), Attaque par « chiffrement choisi » (Adaptive chosen
ciphertext attacks)
L’analyse d’experts en cryptanalyse permet de casser aisément les clés RSA.
3
5. II. PARTIE PRATIQUE
1) Premier test
On va envoyer le message secret: ENSA DE TANGER.
D’abord, on code le message : pour crypter un message, celui-ci doit d'abord être converti en un
nombre M. On va donc traduire tout d’abord les mots en bits selon le code ASCII.
Ensuite, on attribue des valeurs aléatoirement à p, q et on calcule n, e et d.
On lance la procédure de cryptage sur le code ASCII obtenu afin d’aboutir au texte chiffré.
Finalement, on décrypte le message obtenu et on vérifie bien qu'on retrouve ENSA DE TANGER.
2) Deuxième test
On refait l'exemple précédent en changeant les clés et en codant notre propre message
« On crypte notre message avec l’algorithme RSA ». On retrouve bien le même message.
4
6. La suite des messages ASCII, Crypté et Décrypté :
5
7. 3) Troisième test
On réalise maintenant notre application client-serveur.
Cette application peut fonctionner sur deux et plus de machines (l’une des machines étant le
serveur). Elle permet d’envoyer via un réseau des messages cryptés aux différents utilisateurs qui
récupèrent le message envoyé et crypté ‘en clair’.
Ainsi, on crée sur la machine serveur plusieurs fichiers à chaque fois qu’on envoie un message:
On récupère nos clés publiques (e, n) dans des fichiers test ‘cle_E’ et ‘cle_N’ qui seront
dans un dossier partagé sur le réseau.
On place également notre message crypté dans un autre fichier ‘MsgC’ test sous forme de
tableau de BigInteger.
Procédure d’envoie d’un message :
Lorsqu’un utilisateur écrit un message et clique sur Envoyer :
Les nombres premiers p et q sont générés automatiquement et aléatoirement.
On calcule ensuite les clés publiques (e, n) et privées (d, n).
On crée les fichiers ‘cle_E’ et ‘cle_N’.
On traduit le message texte en code ASCII qui sera par la suite crypté à l’aide de la clé
privée (d, n)
Le message crypté obtenu est placé dans le fichier ‘MsgC’.
Il y a aussi le bouton Crypter qui permet d’afficher en caractères non décimales le message crypté
afin de vérifier avant d’envoyer que la procédure a été effectuée correctement.
Procédure de réception du message :
L’utilisateur à qui est destiné le message va dans sa boite de réception et clique sur Lire :
Le programme récupère sur la machine serveur le message crypté envoyé.
Il récupère aussi la clé publique (e, n) partagée.
Il parcourt alors ces fichiers et effectue l’opération de décryptage.
Puis, il affiche le message décrypté sous forme de lettres.
Le message obtenu est bien le message envoyé et crypté par l’émetteur.
6
9. Et à la réception on obtient :
Si on effectue l’opération inverse, on aura :
A l’émission du message :
8
10. Et la réception nous donne :
On constate alors notre application client-serveur marche correctement !
CONCLUSION
Nous avons pu grâce à ce TP consolider nos connaissances théoriques sur la cryptographie et
surtout sur l’algorithme RSA et de les mettre en pratique.
En effet, l’algorithme RSA permet d’avoir une conversation sécurisée et fiable dans une application
client-serveur.
Nous avons donc pu mieux comprendre le mécanisme de fonctionnement de cet algorithme ainsi
toutes les procédures d’envoie, de réception et de signature d’un message. L’utilisation du langage
de programmation Java a été également un plus car ce TP nous a permis de cerner d’autres
fonctionnalités de ce langage utilisé dans la cryptographie.
9