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