12X009 – TP2 (Solution)

$ 29.99
Category:

Description

Guillaume Chanel
1 Objectifs
L’objectif gØnØral du TP est de crØer un programme qui permet de gØnØrer des hashs, Øgalement appellØs digests (MD5, SHA1, etc.) partir de chaines de caractŁres ou de chiers. Le but des digests est de pouvoir contr ler l’intØgritØ de donnØes transmises entre deux entitØs.
Les objectifs pØdagogiques de ce TP sont de:
manipuler des chaines de caractŁres en C; manipuler les paramŁtres argc / argv de la fonction main;
se familiariser avec la fonction getopt qui permet de manipuler les paramŁtres passØs au programme;
e ectuer un lien vers des librairies externes (ici la librairie EVP de openssl); se familiariser avec les fonctions de hachage qui est un mØcanisme de base de la cryptographie.
2 Cryptographie
2.1 Concepts
D’une maniŁre gØnØrale, les mØcanismes de cryptographie permettent de communiquer des messages de maniŁre protØgØe. La protection des donnØes implique trois aspects:
authenticitØ: s’assurer que l’on communique bien avec la personne/machine souhaitØe; con dentialitØ: chi rer les messages envoyØs pour qu’ils ne soient pas lisibles par n’importe qui (i.e. seule une personne possØdant une clØ de dØcryptage peut lire le message); intØgritØ: s’assurer que le message re u est bien identique au message envoyØ et qu’il n’a pas ØtØ corrompu lors du transfert.
Le point qui nous intØresse pour ce TP est l’intØgritØ des donnØes. L’intØgritØ de donnØes est assurØe en utilisant une fonction de hachage h sur le message m envoyer (le message peut Œtre le contenu d’un chier ou n’importe quelle chaine de caractŁres). Cette fonction de hachage retourne une valeur h(m) qui peu ensuite Œtre vØri Øe la rØception en utilisant la mŒme fonction de hachage sur le message re u m0. Dans le cas ou les deux valeurs h(m) et h(m0) sont di Ørentes on peu alors conclure que les donnØes ont ØtØ corrompues. Une fonction de hachage se doit d’avoir (au moins) les propriØtØs suivantes:
il doit Œtre improbable de trouver deux messages ayant le mŒme hash (h(m1) = h(m2));
une petite modi cation du message m doit donner lieu un important changement de d = h(m);
le message ne doit pas pouvoir Œtre reconstruit partir de la valeur retournØe par la fonction de hachage (pour des raisons de sØcuritØ non ØvoquØes ici).
Plusieurs fonction de hachage ont ØtØ developpØes parmis les quelles ont peu trouver SHA1, MD5, SHA512.
Exercice: Votre premiŁre t che consiste vous familiariser avec deux outils de calcul de hachage sha1sum et md5sum. Ces outils vous permettrons par la suite de vØri er que votre programme fonctionne correctement. A n de vous familiariser avec ces deux programmes:
lisez le manuel des commandes sha1sum et md5sum;
crØez un chier contenant le texte Le manuel disait: NØcessite Windows 7 ou mieux. J’ai donc installØ Linux sans retour la ligne. Utiliser les commandes ci-dessus pour calculer les hashs du contenu du chier.
combiner la commande echo Le manuel disait: NØcessite Windows 7 ou mieux. J’ai donc installØ Linux . avec les commandes ci-dessus pour calculer les hashs sans utiliser de chier; le rØsultat est di Ørent, pourquoi? Comment rØsoudre le problŁme?
2.2 La librairie openssl
Openssl est un ensemble d’outils permettant d’implØmenter le protocol de sØcuritØ TLS/SSL. Dans ce TP nous n’allons utiliser qu’une petite partie des fonctions proposØes par openssl a n de calculer les digests/hashs de chiers et de chaines de caractŁres d’une maniŁre similaire aux commandes sha1sum et md5sum. Les fonctions utilisØes sont regroupØes dans la librairies EVP de openssl et commencent toutes par EVP_Digest.
Exercice:
lisez le manuel des fonction EVP_Digest…(man EVP_DigestInit); implØmentez l’exemple proposØ dans les pages du manuel;
compilez le programme en prenant soin de lier les librairies libssl et libcrypto; testez le programme avec la phrase Le manuel disait: NØcessite Windows 7 ou mieux. J’ai donc installØ Linux.
3 Gestion des paramŁtres d’un programme
Vous avez vu en cours qu’il est possible de manipuler les paramŁtres d’un programme en utilisant les variables argc / argv de la fonction main. Nous vous proposons ici d’utiliser la fonction POSIX getopt qui permet de standardiser la gestion de paramŁtres. Comme vous l’avez vu la plupart des programmes utilisent des paramŁtres prØcØdØs du signe moins pour indiquer une option. De plus certaines options peuvent prendre des arguments. Par exemple pour la commande grep:
l’option -i permet de ne pas considØrer les di Ørences de case (i.e. majuscules / minuscules), elle ne contient pas d’argument;
l’option -f FILE prend un argument FILE qui indique un chier contenant une liste de pattern rechercher;
les paramŁtres supplØmentaires la commande grep sont les chier dans lesquels chercher le(s) pattern(s) indiquØ(s).
Voici le fonctionnement global de la fonction getopt. Cette fonction prend en paramŁtres les arguments argc et argv que l’on peu directement rediriger depuis la fonction main. De plus l’argument optstring permet d’indiquer quelles sont les lettres qui correspondent des options (e.g. fot indique la fonction que le programme trois options possibles -f, -o et -t). Le caractŁre ’:’ indique que l’option prØcØdent le caractŁre contient un argument (e.g. fo:t indique que l’option -o sera suivie d’un argument).
A chaque appel de la fonction getopt celle-ci retourne un des caractŁres d’option qui ØtØ trouvØ dans la ligne de commande du programme. Dans le cas ou il n’y a plus ou pas de caractŁre d’option disponible la fonction retourne -1; si une option inconnue (e.g. -z suivant la chaine optstring fo:t ) ou mal formulØe (e.g. -f argument) ØtØ trouvØe la fonction retourne ’?’.
Lorsqu’une option contenant un argument est trouvØ on peu alors utilisØ la variable globale optarg pour obtenir un pointeur sur l’argument. Ce pointeur pointe en fait soit sur le prochain ØlØment argv (cas ou l’option et l’argument sont sØparØs d’un espace) soit sur le texte suivant l’option dans le mŒme ØlØment argv.
Finalement, les arguments du programme qui ne correspondent pas des options sont transfØrØs la n du tableau argv. La variable gloable optind pointe alors sur l’ØlØment de argv qui contient
le premiers de ces arguments.
Ces informations devraient Œtre su santes pour utiliser la fonction getopt. Toutefois il est vivement recommandØ de lire le manuel de cette fonction (man 3 getopt) pour voir un exemple d’utilisation ainsi que d’autres fonctionnalitØs.
Exercice:
lisez le manuel de la fonction getopt; implØmentez l’exemple proposØ dans les pages du manuel et testez le.
4 IntØgration: le programme rØaliser
Le but de ce tp est de crØer un programme permettant de gØnØrer des hash de chiers et de chaines de caractŁres. Le programme pourra donc Œtre appellØ de deux maniŁres. Avec l’option -f les paramŁtres d’entrØ seront considØrØs comme des chiers et un hash code par chier sera calculØ. Sans l’option -f les paramŁtres du programmes seront considØrØs comme une unique chaine de caractŁre. Ainsi:
hash -f ficher1 fichier2 …
1
retournera par exemple (cela depend bien sure du contenu du chier):
8f85e20c95a5a73b9670883fd2cfc5ecd23e9b8b fichier1
57ba123423aadc8a65a3a83066f0c7523787c211 fichier2
alors que:
hash -f ceci est une chaine
1
2
1 retournera le hash de la chaine ceci est du chaine .
De plus l’option -t permettra de choisir quel type de digest sera utilisØ pour calculer les hashs (e.g. MD5, SHA1, …). Dans le cas ou l’option -t n’est pas spØci Øe par l’utilisateur le digest SHA1 sera utilisØ.
Le programme devra Œtre implementØ en deux modules contenant chacun un .c et un .h ainsi que du chier .c contenant la fonction main (5 chiers au total). Le premier module se chargera de gØrer les options passØes par l’utilisateur. Le second module se chargera de calculer le hash de chier et de chaines de caractŁres. Il est important de bien pensØ quelles parties du codes seront disponibles l’utilisateur (i.e. prØsentes dans le .h) et quelles fonctions seront privØes.

Reviews

There are no reviews yet.

Be the first to review “12X009 – TP2 (Solution)”

Your email address will not be published. Required fields are marked *