Projet de cryptographie. Algorithme de cryptage de type Bluetooth

Dimension: px
Commencer à balayer dès la page:

Download "Projet de cryptographie. Algorithme de cryptage de type Bluetooth"

Transcription

1 Projet de cryptographie Algorithme de cryptage de type Bluetooth Le but de ce projet est de créer une application qui crypte et décrypte des fichiers en utilisant le principe de cryptage du Bluetooth. Benoît HAGENBOURGER : M1 STIC - TD2/TP3 Année 2008/2009

2 Sommaire I. Introduction... 2 II. Présentation... 2 a. But... 2 b. Principe... 2 c. Exemple... 3 III. Méthodes de développement... 3 a. Langage et environnement de développement... 3 b. Description de l application... 3 c. Structure de données... 4 IV. Contraintes... 4 a. Utilisation de la mémoire... 4 b. Génération de la graine... 4 V. Manuel utilisateur... 5 a. Interface générale du logiciel... 5 b. Crypter un fichier... 6 c. Décrypter un fichier... 6 VI. Conclusion

3 I. Introduction Ce projet met en œuvre le principe de chiffrement et déchiffrement utilisé par le protocole Bluetooth. L application que l on a développée doit permettre de crypter et décrypter tous types de fichiers (texte, audio, image ). Le cryptage et le décryptage utilise une clé secrète générée à partir d un mot de passe et de longueur identique à celle du message à crypter. Dans ce rapport, je vais tout d abord faire une présentation générale pour expliquer le principe du cryptage et l illustrer par un exemple. Puis je parlerais des méthodes de développement que j ai utilisé. Je continuerai avec les contraintes rencontrées pour finir avec le manuel utilisateur de l application développée. II. Présentation a. But Le but de ce projet est de reproduire la méthode de chiffrement et déchiffrement utilisé par le protocole Bluetooth. b. Principe Le principe est le suivant : à partir d une clé courte, appelée graine, on génère une clé secrète de la longueur des données à crypter. Par exemple, si le fichier à crypter comporte 1280 bits, alors la clé secrète sera elle aussi constituée de 1280 bits. Ensuite, une fois la clé secrète générée, on traite les bits un à un et on fait un ou exclusif sur les bits de même rang de la clé et du fichier à crypter. Le résultat obtenu est le fichier crypté. Dans ce projet on nous propose deux solutions pour générer la clé secrète. J ai développé les deux solutions. La première solution est la plus simple. A partir de la clé courte, qui est longue de 16 bits, on utilise la suite suivante : Xn = Xn-5 + Xn-6 + Xn-15 + Xn-16 avec + représentant le ou exclusif Cette suite permet de générer la clé secrète aussi longue que le message à crypter. Les 16 premiers bits de la clé secrète correspondent donc à la clé courte. Pour la deuxième solution, plus complexe, l algorithme utilise quatre suites différentes pour générer la clé secrète à partir de la clé courte. De plus, la clé courte ne contient plus 16 bits mais 128 bits. La clé courte est générée à partir d un mot de passe. Comme pour la solution simple, si le mot de passe est trop court, c'est-à-dire qu il contient moins de 16 bits pour la solution simple, ou moins de 128 bits pour la solution complexe, alors on duplique celui-ci jusqu à ce que sa taille soit suffisante. Ensuite, on utilise les quatre suites suivantes : Vn = Vn-5 + Vn-13 + Vn-17 + Vn-25 Xn = Xn-7 + Xn-15 + Xn-19 + Xn-31 Yn = Yn-5 + Yn-9 + Yn-29 + Yn-33 Zn = Zn-3 + Zn-11 + Zn-35 + Zn-39 Avec + représentant le ou exclusif. Puis pour finir on génère la clé secrète en faisant le ou exclusif sur ses quatre suites, bit à bit. Bien entendu ces quatre suites ont la même longueur, à savoir la longueur du message à crypter. Dans 2

4 cette situation, les 25 premiers bits de la clé courte servent à la suite Vn, les 31 suivants à la suite Xn, les 33 suivants à la suite Yn et enfin les 39 dernier à la suite Zn. Au final on obtient la clé secrète qui sert à crypter le message. c. Exemple Prenons un exemple pour illustrer le principe décrit précédemment. Le message à crypter est le suivant : , et la clé courte : Pour plus de simplicité nous utiliserons la façon simple pour générer la clé secrète. En effet, avec la méthode complexe il faudrait au minimum gérer une clé courte de 128 bits, ceux qui est assez fastidieux à la main. Notre message à crypter est de longueur 32 bits, il nous faut donc générer une clé secrète de 32 bits grâce à la suite Xn exposée dans le paragraphe précédent, ce qui nous donne la clé secrète suivante : Ensuite pour crypter le message on fait un ou exclusif bit à bit entre le message et la clé secrète et on obtient : qui est le message crypté. Pour le décrypter, il suffit de lui appliquer de nouveau la clé secrète III. Méthodes de développement a. Langage et environnement de développement Pour développer cette application, j ai choisi d utiliser le langage C#. Il s agit d un langage de programmation orienté objet, créé par la société Microsoft. Ce langage a été créé afin que la plateforme.net soit dotée d'un langage permettant d'utiliser toutes ses capacités. Il est très proche du Java dont il reprend la syntaxe générale ainsi que les concepts. L ensemble de la programmation s est déroulée sous Microsoft Visual Studio J ai choisi d utiliser le langage C# car il permet de convertir un tableau d octets en un tableau de bits, et inversement, très facilement. Etant donné que dans ce projet je travaille sur des bits cela m a paru un avantage certain. De plus, le langage C# permet de développer une interface graphique très rapidement et donc de diminuer le temps de développement. Enfin le dernier argument qui m a poussé à utiliser ce langage est que je maitrise assez bien l environnement de développement Microsoft Visual Studio Le principal inconvénient de ce langage est qu il s agit d un langage propriétaire de Microsoft. Il a donc une portabilité réduite puisque qu il n est possible d exécuter le programme uniquement sur une machine utilisant le système d exploitation Windows où le package.net est installé. b. Description de l application L application comporte deux forms. Une form principale appelée from1 et une form mdp qui permet de saisir le mot de passe pour le cryptage ou le décryptage. A chaque form est associée à une classe qui permet de gérer les événements lorsque l on clique sur les composants de la fenêtre. De plus, l application comporte trois classes. Une classe LFSR qui permet de générer la clé à partir de la graine. On peut générer la clé de façon simple ou de façon complexe. Une classe crypter 3

5 qui permet de crypter et décrypter un fichier. Enfin on trouve la classe Program qui permet de lancer l application. c. Structure de données La clé est stockée dans un BitArray. Il s agit d un tableau de bits qui sont représentés par des booléens. La valeur true correspond à la valeur 1 pour le bit et la valeur false correspond à la valeur 0 pour le bit. Le fichier à crypter ou décrypter est lui aussi stocké dans un BitArray. Néanmoins, la fonction read qui permet de lire le fichier ne permet que de manipuler des types Byte, il est donc nécessaire de passer dans un premier temps par un tableau de type Byte puis de la passer en BitArray. En C#, pour construire un BitArray à partir d un tableau de Byte, on passe le tableau de Byte en paramètre du constructeur du BitArray. De même, pour écrire le fichier sur le disque on doit passer par un tableau de Byte. Pour passer d un BitArray à un tableau de Byte on utilise la méthode CopyTo de la classe BitArray. IV. Contraintes a. Utilisation de la mémoire La principale contrainte du programme est le grand besoin de mémoire pour fonctionner. En effet, lors d un cryptage, si t est la taille du fichier à crypter, alors on a besoin de 5t en mémoire : - La clé prend t espaces mémoires. - Le tableau de Byte contenant le fichier à crypter prend t espaces mémoires. - Le BitArray contenant le fichier à crypter prend t espaces mémoires. - Le tableau de Byte contenant le fichier crypté prend t espaces mémoires. - Le BitArray contenant le fichier crypté prend t espaces mémoires. Pour gagner de la mémoire, on pourrait faire le OU directement sur les octets, ceci permettrait de gagner 2t d espace mémoire nécessaire. Le cryptage nécessiterait aussi 8 fois moins d opérations puisqu un octet correspond à 8 bits. Néanmoins je pense que le cryptage sur les octets serait moins sécurisé. Une autre solution pour éviter le problème de la mémoire serait d utiliser un buffer. On ne traiterait donc pas le fichier entière d un coup mais en plusieurs fois, ce qui permettrait de traiter en mémoire des fichiers de tailles infinies. Que le cryptage soit simple ou complexe, l espace mémoire nécessaire est le même. En effet, même si on a besoin de 4 BitArray pour générer la clé en cas de cryptage complexe, ces 4 BitArray sont détruits une fois la clé générée et l on ne garde donc que le BitArray contenant la clé dans la mémoire, ce qui revient donc au même que le cryptage simple pour l utilisation de la mémoire. Seul le temps de calcul est augmenté lors du cryptage complexe. b. Génération de la graine L autre contrainte principale est le partage de la graine entre la personne qui veut crypter le fichier et celle qui veut décrypter le fichier. En effet, cette graine est générée à partir d un mot de passe et il est donc nécessaire que la personne qui veut décrypter le fichier connaisse le mot de passe utilisé par la personne qui a crypté le fichier. Le partage du mot de passe entre les deux personnes est donc la partie critique du cryptage, en effet, pour partager le mot de passe en toute sécurité il est nécessaire que les deux personnes se soient vues physiquement pour l échanger. 4

6 De plus, le choix du mot de passe est très important. En effet, si par exemple le fichier texte à crypter ne contient que le mot «test» et si le mot de passe est «test» alors le cryptage sera inefficace. Pour finir avec les contraintes concernant la graine, étant donné que dans le cas du cryptage simple, la graine est générée à partir des 16 premiers bits, c'est-à-dire à partir des 2 premiers octets du mot de passe, tous les mots de passe commençant par les mêmes deux premières lettres donneront les mêmes graines, et donc la même clé de cryptage. V. Manuel utilisateur a. Interface générale du logiciel Interface générale L interface générale du logiciel est composée de deux parties. La partie supérieure sert au cryptage et la partie inférieure sert au décryptage. Dans chaque partie on trouve : Deux boutons radios qui permettent de sélectionner le type de cryptage (simple ou complexe). Un bouton ouvrir qui permet de sélectionner le fichier à crypter / décrypter. Un bouton crypter / décrypter qui permet de lancer le cryptage / décryptage du fichier. Une textbox dans laquelle s affiche l adresse sur le disque dur du fichier à crypter / décrypter. 5

7 Une textbox dans laquelle s affiche le nom du fichier résultat. C'est-à-dire le fichier crypté / décrypté que crée le logiciel. Une progressbar qui permet de voir l avancement du cryptage / décryptage du fichier sélectionné. b. Crypter un fichier Pour crypter un fichier on choisit d abord le type de cryptage, simple ou complexe. Ensuite on choisit le fichier à crypter en cliquant sur le bouton ouvrir. Une boîte de dialogue permettant de sélectionner le fichier voulu s ouvre alors. Il est possible de crypter tous types de fichier. Une fois que l on a sélectionné le fichier que l on veut crypter on clique sur le bouton crypter. Une boite de dialogue permettant de saisir le mot de passe s ouvre. Boîte de dialogue pour saisir le mot de passe Une fois le mot de passe saisit, le cryptage démarre. La barre de progression permet de voir l avancement du cryptage. Le fichier crypté porte le même nom que le fichier d origine avec l extension.cys pour un cryptage simple, et l extension.cyc pour un cryptage complexe. Il est placé par défaut dans le même répertoire que le fichier d origine. c. Décrypter un fichier Le processus pour le décryptage est le même que le processus pour le cryptage. Il n est possible de décrypter que les fichiers.cys lorsque l on choisit un type de cryptage simple, et les fichiers.cyc lorsque l on choisi un type de cryptage complexe. VI. Conclusion Ce projet m aura donc permit de développer une application qui utilise le principe du chiffrement et déchiffrement à la Bluetooth pour crypter ou décrypter un fichier. Ceci m aura servit à mieux comprendre ce type de cryptage et aussi de savoir comment l appliquer à un fichier. La principale difficulté rencontrée est la gestion de la mémoire. Et l application proposée n est pas optimisée pour crypter des fichiers très volumineux. En effet, cette application a besoin de cinq fois la taille du fichier à crypter en mémoire, il est donc facilement compréhensible que pour les fichiers les plus volumineux un problème de mémoire va se poser. 6