Crypto - Securinets

Transcription

Crypto - Securinets
Cryptographie
GHADA ESSAIED (RT 4)
IMEN SOUILEM (RT 4)
KHADIGA GRIRA (RT 4)
LINDA RAHMOUNI (RT 4)
OUSSAMA HAMMAMI (RT 3)
KARIM BELHAJ SLIMEN (GL 4)
Cryptographie | SECURILIGHT 2014
Table des matières
1.
Présentation de l’atelier .................................................................................................... 3
1.1.
Introduction ............................................................................................................... 3
1.2.
Différents types de cryptage ..................................................................................... 3
1.2.1.
Cryptage symétrique ......................................................................................... 3
1.2.2.
Cryptage asymétrique ....................................................................................... 3
1.2.3.
Cryptage hybride ............................................................................................... 4
1.3.
2.
Application de l’atelier .............................................................................................. 4
Présentation des outils utilisés .......................................................................................... 4
2.1.
Filezilla ....................................................................................................................... 4
2.2.
GPG ............................................................................................................................ 5
2.3.
Java ............................................................................................................................ 6
2.3.1.
JavaFX ................................................................................................................ 6
2.3.2.
Apache Commons NET ...................................................................................... 6
3.
Architecture ....................................................................................................................... 6
4.
Configuration des outils .................................................................................................... 7
4.1.
Configurer Filezilla ..................................................................................................... 7
4.2.
Développer le client FTP en JAVA .............................................................................. 8
4.2.1.
Initialisation ....................................................................................................... 8
4.2.2.
Connecter .......................................................................................................... 8
4.2.3.
Telecharger ........................................................................................................ 9
4.2.4.
Envoyer ............................................................................................................ 10
4.2.5.
Vérifier Nom .................................................................................................... 11
4.3.
Configurer le JDK ..................................................................................................... 12
4.4.
Crypter/Décrypter les fichiers en Java .................................................................... 12
4.4.1.
Méthode crypter ............................................................................................. 12
4.4.2.
Méthode décrypter ......................................................................................... 12
4.4.3.
Méthode doCrypto .......................................................................................... 12
4.4.4.
Méthode GenerateNewKey ............................................................................. 13
4.5.
Développer l’interface graphique et le contrôleur ................................................. 13
4.6.
Transférer les fichiers de manière sécurisé ............................................................. 14
4.6.1.
Envoyer les fichiers .......................................................................................... 14
4.6.2.
Télécharger les fichiers .................................................................................... 15
4.7.
5.
Crypter la clé de cryptage du fichier avec GPG ................................................... 16
Scénario de test ............................................................................................................... 16
1
Cryptographie | SECURILIGHT 2014
6.
5.1.
Upload ..................................................................................................................... 16
5.2.
Partage .................................................................................................................... 16
5.3.
Download ................................................................................................................ 17
Conclusion ....................................................................................................................... 18
2
Cryptographie | SECURILIGHT 2014
1. Présentation de l’atelier
1.1. Introduction
La cryptographie est une discipline consistant à concevoir des mécanismes cryptologique
afin de transmettre, en sécurité, des informations secrètes et sensible. En particulier, on
cherche à transmettre des messages secrets à travers des réseaux informatiques où chaque
message peut être facilement intercepté ou altéré. Trois propriétés doivent être garanties
pour qu’on puisse affirmer que le message a été transmis de manière sécurisée :



La confidentialité : seule le destinataire légitime du message peut déchiffrer son
contenu, même si plusieurs personnes ont pu l’intercepter et le lire.
L’intégrité : malgré que le message soit passé par plusieurs routeurs ou serveurs, on
veut pouvoir garantir que son contenu n’a pas été modifié.
L’authenticité : on veut vérifier l’identité de celui qui a envoyé le message
Intuitivement, ce problème semble impossible à résoudre, pourtant, plusieurs méthodes ont
été développées pour y remédier.
1.2. Différents types de cryptage
1.2.1. Cryptage symétrique
En cryptage symétrique, il y a une seule clé pour crypter et décrypter le message. Par
conséquent, il faut trouver un moyen pour partager la clé entre les deux interlocuteurs sans
que celle-ci ne soit compromise, car si la clé est interceptée, le message est lui aussi
compromis.
Une question se pose alors. Si transférer un message à travers un canal (dans ce cas, un
réseau informatique) présente un risque, quel intérêt y’a-t-il alors dans le cryptage
symétrique, puisque il faut alors transférer la clé à travers ce même canal risqué ?
Intuitivement, il semble inutile. Cependant, il existe des moyens afin de partager une clé de
façon sécurisée :


Utiliser le cryptage asymétrique que l’on va présenter plus tard, pour transférer la
clé de cryptage symétrique, ce qui équivaut à un cryptage hybride.
Utiliser un protocole afin que les deux interlocuteurs se mettent d’accord sur une
même clé, comme Diffie-Hellman.
1.2.2. Cryptage asymétrique
Dans cette technique, la clé de cryptage, la clé publique, n’est pas la même que la clé de
décryptage, qui est la clé privée. Le principal avantage que la clé de décryptage n’est jamais
partagée et donc il n’y a aucun risque qu’elle ne soit compromise. La clé de cryptage, elle,
est publique et il n’y a aucun risque si elle interceptée.
L’échange de message par cryptage asymétrique ce passe de la manière suivante :

Alice souhaite envoyer un message à Bob. Elle crypte son message selon la clé
publique de Bob.
3
Cryptographie | SECURILIGHT 2014


Bob reçoit le message d’Alice et la décrypte selon sa clé privée.
Si une autre personne intercepte le message, elle ne pourra pas le déchiffrer
puisque seul Bob à la clé secrète, qui est celle qui permet de décrypter le message,
et il ne la partage avec personne.
La clé publique peut être assimilée à un cadenas, et la clé secrète à la clé qui l’ouvre. Chaque
utilisateur dispose d’une multitude de cadenas qu’il distribue à tout le monde et une clé
unique qui permet de les ouvrir qu’il garde bien à lui. Si on souhaite lui envoyer un objet
secrètement, on se procure son cadenas et on referme une boite avec ce cadenas, et on
envoie la boite à travers un canal non sécurisé. Comme seul lui à la clé qui permet d’ouvrir le
cadenas, il n’y aucun risque qu’on découvre le contenu secret de la boîte si elle est
interceptée, et intercepter le cadenas lors de son échange ne présente aucun intérêt car il
ne sert qu’à fermer des boîtes, et non à les ouvrir. D’ailleurs, quiconque souhaite se procurer
le cadenas n’a qu’à le demander, puisqu’il est public.
Le principal inconvénient des cryptages asymétriques est qu’ils nécessitent plus de temps à
exécuter, et donc ne conviennent pas à de grands fichiers.
1.2.3. Cryptage hybride
Présente la sécurité des cryptages asymétriques avec la rapidité des cryptages symétriques,
et convient pour envoyer en toute sécurité de grands fichier. Le fichier est d’abord crypté
par un cryptage symétrique, puis la clé est échangée suivant le cryptage asymétrique.
1.3. Application de l’atelier
Pour cet atelier, nous avons développé une application sécurisée de partage de fichiers sur
des serveurs ftp. Elle permet de :


Sécuriser l’échange de fichier entre l’utilisateur et le serveur ftp de fichiers, que ce
soit lors de l’envoi ou le téléchargement du fichier.
Sécuriser le stockage du fichier. En effet, même si l’utilisateur n’est pas le
propriétaire du serveur et qu’une autre personne a accès au fichier, il n’y a aucun
moyen pour qu’un autre déchiffre le fichier sans le consentement du propriétaire.
En effet, le cryptage du fichier se fait sur l’ordinateur du client avant d’être envoyé sur le
serveur, il reste stocké en étant crypté sur le serveur avant qu’un autre utilisateur le
télécharge et le déchiffre, à condition qu’il dispose de la clé.
L’application a été pensée de façon à être facilement utilisable pour un utilisateur
quelconque.
L’échange des clés doit être sécurisé, pour cela on utilisera GPG.
2. Présentation des outils utilisés
2.1. Filezilla
FTP (File Transfer Protocol) est un protocole de transfert de fichier qui permet de déplacer
des fichiers d'un ordinateur vers un serveur de façon rapide et sécurisée. Le protocole est
négocié avec un login et un mot de passe.
4
Cryptographie | SECURILIGHT 2014
Il s'adosse à la même technologie qui permet d'afficher les pages web dans le navigateur
(HTTP), mais ne sert qu'au transfert de fichier.
Quant à Filezilla, c’est un logiciel d’application FTP, multiplateforme, qui se décline en deux
versions : Filezilla Client et Filezilla Server. C’est un logiciel open-source développé pour les
systèmes d’exploitation Windows, Linux et Mac OSX par Tim Kosse (Allemand).
Filezilla est utilisé pour le téléchargement de fichiers depuis et vers un site FTP, un serveur
ou une hôte. Le programme nous permet de transférer des fichiers et de naviguer parmi les
dossiers, les sites Web, et même en local. Ce logiciel nous permet d'effectuer plusieurs
transferts de fichiers simultanément.
Filezilla Server supporte les protocoles FTP et FTPS. Cela inclut donc :
 Téléchargement et chargement de fichiers avec limitation possible du débit de
chaque compte.
 Compression de données.
 Chiffrement par SSL/TLS (pour FTPS).
 Journalisation de l'activité (pour le débogage et le monitoring en temps réel).
 Limitation de l'accès au réseau LAN, ou réseau externe.
 Support des systèmes de fichiers virtuels.
Parmi les logiciels concurrents de Filezilla on cite quelques exemples:
 En open-source
 SmartFTP : gère les transferts simultanés, les files d’attentes, l’arrêt et la
reprise d’un dépôt de document, la mémorisation des dossiers et le
téléchargement des derniers fichiers arrivés.
 LeechFTP : Non seulement ce client FTP est totalement gratuit, mais très
complet, il offre la plupart des options utiles et pousse le luxe jusqu'à
autoriser un nombre de sessions illimité.
 En version payante :
 Cute FTP Pro : ce programme est similaire à un navigateur web, il est
facilement utilisable et simple même pour les débutants.
 Crystal FTP : un programme moderne et pleinement fonctionnel, qui gère les
files d’attentes, permet de comparer les répertoires et d’en indiquer les
différences, supporte les 4 types de serveurs FTP les plus courants (direct,
direct passif, proxy, socks).
Pourquoi a-t-on choisit Filezilla ?
C'est rapide, stable, facile à utiliser et gratuit. Filezilla est un client solide qui répond à toutes
les attentes que l’on peut avoir d’un client FTP.
2.2. GPG
GPG est un logiciel libre de cryptographie qui supporte de nombreux algorithmes de
cryptage, symétriques et asymétrique. On peut donc s’en servir pour chiffrer des messages
et les échanger en toute sécurité. Il supporte le standard OpenPGP ce qui le rend compatible
avec PGP, c’est-à-dire que ces deux programmes peuvent utiliser les mêmes clés et
décrypter les mêmes messages. GPG est la version libre de PGP, de Symantec, qui est sa
principale alternative.
5
Cryptographie | SECURILIGHT 2014
2.3. Java
L’application a été développée avec le langage Java. Nous avons entre autres utilisé les
libraires JavaFX et Apache Commons NET
2.3.1. JavaFX
Inclut par défaut dans le JDK depuis le JDK 7. Il permet de programmer l’interface sous forme
d’un fichier XML et d’utiliser un seul contrôleur pour toutes les opérations. L’outil Scene
Builder d’Oracle est disponible pour créer l’interface graphique par drag and drop.
2.3.2. Apache Commons NET
Librairie libre développé par Apache qui implémente plusieurs protocoles comme ftp, ntp ou
http.
3. Architecture
L’application comporte deux modules :


un module cryptographique qui permet de chiffrer, déchiffrer les fichiers avec
l’algorithme AES ainsi que de générer des clés de cryptages aléatoires
un module ftp qui se charge de télécharger ou envoyer les fichiers à partir de/vers
un serveur ftp. Il se charge également de gérer les cas où il y’a un conflit de nom.
Lors de l’envoi d’un fichier, l’utilisateur saisit l’adresse du serveur et sélectionne le fichier à
envoyer. L’application génère alors une clé aléatoire, puis envoie le fichier crypté au
serveur. Comme le fichier est envoyé et stocké sur le serveur en étant crypté, il n’y a aucun
risque si une personne mal intentionnée l’intercepte.
Quand le propriétaire du fichier souhaite le partager avec un autre, il envoie la clé et l’url de
manière sécurisée, c’est-à-dire après les avoir cryptés. Dans ce cas, le destinataire les saisie
dans l’application qui télécharge le fichier avant de le décrypter.
6
Cryptographie | SECURILIGHT 2014
4. Configuration des outils
4.1. Configurer Filezilla
On commence par la création d’un utilisateur, dans notre cas notre utilisateur sera un «
Anonymous » sans mot de passe (en effet, la protection des fichiers est garantie par le
cryptage, et non les droits d’accès). Puis on va ajouter un répertoire dans lequel sera la
sauvegarde des fichiers et on va définir les droits d’accès des utilisateurs:
7
Cryptographie | SECURILIGHT 2014
4.2. Développer le client FTP en JAVA
4.2.1. Initialisation
Par convention, deux ports sont attribués pour les connexions FTP : le port 21 pour les
commandes et le port 20 pour les données donc on a choisi le port 21 pour l'envoie des
commandes.
Les attributs « user »et « pass » présentent les coordonnées de serveur ftp (Filezilla server).
« FTPClient » définit un client ftp qui va interroger le serveur.
4.2.2. Connecter
Cette fonction permet d’établir la connexion entre le serveur et le client en prenant en
compte une adresse, un numéro de port, un nom d’utilisateur et un mot de passe.
8
Cryptographie | SECURILIGHT 2014
4.2.3. Telecharger
Cette fonction permet de télécharger un fichier du serveur vers le client tout en passant par
ces étapes:






InputStream retrieveFileStream: Cette méthode récupère un fichier distant dont le
chemin est spécifié, renvoie un InputStream que nous pouvons utiliser pour lire des
octets du fichier distant. Cette méthode nous donne plus de contrôle sur la façon de
lire et écrire les données.
on récupère un tableau d'octets de la InputStream et écrire ces octets dans le
OutputStream , jusqu'à ce que le InputStream devient vide.
on invoque la méthode completePendingCommand () pour compléter la transaction.
on Ferme l'ouvert OutputStream l' InputStream .
on vérifie la valeur de retour de completePendingCommand () afin de s’assurer du
succès du téléchargement.
Se déconnecter et se déconnecter du serveur.
9
Cryptographie | SECURILIGHT 2014
4.2.4. Envoyer
Cette fonction permet de déposer un fichier sur le serveur par le client tout en passant par
ces étapes:






Créer un InputStream pour le fichier local.
Appeler storeFileStream pour commencer le transfert de fichiers:
Utiliser un OutputStream : ces lignes permettent de lire les octets du InputStream du
fichier local et écrit ces octets dans le OutputStream qui est renvoyé par la
storeFileStream().
Fermer le ouvert InputStream et OutputStream .
Appeler la méthode completePendingCommand ( ) pour compléter la transaction.
Se déconnecter et se déconnecter du serveur.
10
Cryptographie | SECURILIGHT 2014
4.2.5. Vérifier Nom
Cette méthode permet, lors de l'upload, de vérifier si le nom de fichier existe sous le
répertoire du serveur.


Si le fichier n'existe pas, il sera enregistré sans modification de nom.
Si le fichier existe, cette fonction aura comme rôle d’ajouter au nom de fichier un
indice numérique (1, 2, 3 etc..) selon le nombre d'occurrence de fichier dans le
répertoire.
11
Cryptographie | SECURILIGHT 2014
4.3. Configurer le JDK
Par défaut, le JDK et le JRE exige que la taille de la clé pour l’algorithme AES doit être de 16
octets (ou 128 bits). Donc, si vous fournissez une clé dont la taille est différente de 16 octets,
une exception java.security.InvalidKeyException sera levée.
Pour éviter ce problème, nous avons téléchargé le package Java Cryptography Extension
(JCE) Unlimited Strength Jurisdiction Policy Files qui contient les deux fichiers local policy et
US_Export_Policy. Puis nous les avons enregistré sous le chemin suivant C:\Program
Files\Java\jre7\lib\security
Remarque : ces deux fichiers existent déjà dans le répertoire security mais il faut les écraser
et les remplacer par leur nouvelle version téléchargée.
Mais c’est quoi un API JCE ?
JCE (Java Cryptography Extension) est une API qui fournit des fonctionnalités
cryptographiques
de
haut
niveau
(chiffrage/déchiffrage
avec
algorithmes
symétriques/asymétriques...) Elle propose de standardiser l'utilisation de la cryptographie
en restant indépendant des algorithmes utilisés. Elle prend en compte le
cryptage/décryptage de données, la génération de clés et l'utilisation de la technologie MAC
(Message Authentication Code) pour garantir l'intégrité d'un message.
4.4. Crypter/Décrypter les fichiers en Java
Pour effectuer le cryptage et le décryptage des fichiers, nous avons créé la classe crypto.java
(voir figures 1 et 2). Cette classe contient 4 méthodes :
4.4.1. Méthode crypter
Elle prend une chaine de caractères d’entrée, une chaine de caractères de sortie et la clé de
cryptage en tant que paramètres d’entrée, fait appel à la méthode doCrypto et affiche la
chaine cryptée.
4.4.2. Méthode décrypter
Elle prend le chemin des fichiers d’entrée et de sortie ainsi que la clé de cryptage en tant
que paramètres d’entrée, fait appel à la méthode doCrypto et crypte le contenu du premier
fichier en l’écrivant dans le deuxième.
4.4.3. Méthode doCrypto
Cette méthode permet le cryptage ou le décryptage d’un fichier fourni en entrée selon la
valeur de la variable cipherMode (cipherMode =Cipher.ENCRYPT_MODE pour le cryptage du
fichier et cipherMode =Cipher.DECRYPT_MODE pour le décryptage du fichier).
12
Cryptographie | SECURILIGHT 2014
4.4.4. Méthode GenerateNewKey
Cette méthode génère une clé de cryptage de 256 bits à l’aide de la méthode prédéfinie
generateKey de la classe KeyGenerator puis la convertie en chaine de caractères pour qu’on
puisse l’envoyer aux autres utilisateurs.
4.5. Développer l’interface graphique et le contrôleur
On a utilisé JavaFX pour développer l’interface graphique. L’interface est d’abord crée par
drag and drop avec Scene Builder (compatible avec Eclipse et Netbeans) puis on déclare
simplement les méthodes du contrôleur qui seront invoqués pour chaque élément de
l’interface. On ajoute un « fx :id » pour les éléments auxquels on souhaite accéder, comme
les champs des formulaires par example.
13
Cryptographie | SECURILIGHT 2014
4.6. Transférer les fichiers de manière sécurisé
Dans cette partie, nous allons utiliser les classes décrites précédemment pour transférer de
manière sécurisée les fichiers. Le transfert doit s’exécuter sur un autre thread afin d’une
part, de ne pas bloquer l’interface graphique, et d’autre part, de permettre des transferts en
parallèle.
4.6.1. Envoyer les fichiers
Pour envoyer le fichier, on génère d’abord une clé aléatoire, puis on crypte le fichier dans un
autre fichier temporaire. Ensuite, on l’envoie sur le serveur avec le protocole FTP (après
avoir résolu les éventuels conflits de noms). On efface ensuite le fichier temporaire et on
envoie un signal à la classe qui a fait appel à l’envoi, qui est le contrôleur de l’interface
graphique.
14
Cryptographie | SECURILIGHT 2014
4.6.2. Télécharger les fichiers
On commence par télécharger le fichier par le protocole FTP dans un fichier temporaire, puis
on le déchiffre dans le fichier final.
15
Cryptographie | SECURILIGHT 2014
4.7.
Crypter la clé de cryptage du fichier avec GPG
Les commandes de base pour utiliser GPG :





Générer une clé : gpg –genkey
Exporter la clé publique dans un fichier : gpg --export -a "User Name"
Ajouter une clé publique à partie d’un fichier : gpg --import public.key
Crypter un message : gpg --encrypt --armor nomFichier
Déchiffrer un message : gpg --decrypt --armor nomFichier
5. Scénario de test
5.1. Upload
L’utilisateur saisie l’adresse ip du serveur dans le champ « server », puis clique sur « browse
« pour sélectionner le fichier à envoyer. Il peut également saisir l’emplacement du fichier
manuellement. Il clique ensuite sur « send ».
5.2. Partage
L’utilisateur choisit le fichier qu’il souhaite partager dans « My files » puis clique sur « Copy
to Clipboard » pour que le la chaine de caractère soit collée dans le presse-papier.
16
Cryptographie | SECURILIGHT 2014
Il envoie la chaîne contenant l’url, le nom et le clé du fichier à son destinataire.
5.3. Download
Il saisit la chaine dans le champ « Remote File » puis clique sur « download ». Une fenêtre
apparaitre pour lui demander l’emplacement où il doit enregistrer le fichier.
17
Cryptographie | SECURILIGHT 2014
6. Conclusion
La sécurisation de l’envoi des messages et des fichiers est d’une importance capitale non
seulement pour les entreprises, mais aussi pour les particuliers, comme en témoignent les
pertes financières colossales dans le monde due aussi bien au piratage des sites internet des
sociétés qu’aux usurpations d’identités, et l’unique moyen de s’en prévenir est de protéger
ses propres donnés par la cryptographie.
Dans cet atelier, nous avons non seulement mis en œuvre des outils pour sécuriser l’envoi
de messages, mais aussi développé notre propre application destinée aux utilisateurs
lambda afin de faciliter l’échange sécurisé de fichiers et de rendre la cryptographie
accessible à tout un chacun. De même, nous espérons que cet atelier servira aussi de guide
aux développeurs souhaitant intégrer la cryptographie dans leurs applications.
18