TP - LIX
Transcription
TP - LIX
Université Paris-Est Créteil, année 2015-2016 M2 SSI - Cryptographie Avancée TP1 : Mots de passe, signatures et Infrastructures PKI Introduction OpenSSL est une boite à outils cryptographiques qui ore : une bibliothèque de programmation en C permettant de réaliser des applications client/serveur sécurisées s'appuyant sur SSL/TLS. une commande en ligne (openssl) permettant la création de clés RSA, DSA (signature) la création de certicats X509 ; le calcul d'empreintes (MD5, SHA, RIPEMD160, . . . ) ; le chirement et déchirement (DES, IDEA, RC2, RC4, Blowsh, . . . ) ; la réalisation de tests de clients et serveurs SSL/TLS ; la signature et le chirement de courriers (S/MIME) Pour connaître toutes les fonctionnalités de openSSL, consultez le manuel (man openssl ou openssl [commande] -help). La syntaxe générale de la commande openssl est : $openssl commande <options> Le but de ce TP est de manipuler les signatures et les certicats, de la demande de signature (CRS) à leur utilisation en envoyant des messages chirés et signés. 1 Mots de passe Nous allons ici regarder comment sont stockés les mots de passe sous UNIX. Le chier passwd : se trouve dans /etc/passwd contient des informations sur les utilisateurs. Il est, par défaut, lisible par tous les utilisateurs. (man 5 passwd) Le chier shadow : se trouve dans /etc/shadow contient des informations sur les mots de passe des utilisateurs. Il est, par défaut, lisible uniquement par l'administrateur. (man 5 shadow) Consultez le chier shadow et en déduire de quelle manière sont stockés les mots de passe. 2 Signatures 2.1 Génération de clés On peut générer une paire de clés RSA avec la commande genrsa (pour generate an RSA private key ) : $penssl genrsa -out fichierdesortie taille où fichierdesortie est le nom du chier de sauvegarde de la clé, et taille est la taille souhaitée (exprimée en bits) du modulus de la clé. 2.2 Visualisation des clés RSA La commande rsa permet de visualiser le contenu d'un chier contenant une paire de clés RSA : $openssl rsa -in cleaVisualiser -text -noout où cleaVisualiser est le chier de sauvegarde des clés au format .pem par défaut. Si l'on souhaite visualiser uniquement la clé publique, alors il faudra rajouter l'option -pubin. L'option -text demande l'achage décodé de la paire de clés. L'option -noout supprime la sortie normalement produite par la commande rsa. Les diérents éléments de la clé sont achés en hexadécimal (hormis l'exposant public). On peut distinguer le modulus, l'exposant public (qui par défaut est toujours 655371), l'exposant privé, les nombres premiers facteurs du modulus, ainsi que trois autres nombres qui servent à optimiser l'algorithme de déchirement. Cécile GONÇALVES Page 1/ 4 TP1 : Mots de passe, signatures et PKI Université Paris-Est Créteil, année 2015-2016 M2 SSI - Cryptographie Avancée 2.3 Chirement d'un chier de clés RSA Il est possible de chirer une paire de clés avec la commande rsa. L'algorithme de chirement symétrique utilisé est spécié en option (voir le manuel pour connaîtres les algorithmes de chirements possibles) : $openssl rsa -in maCle <algoChiffrement> -out maCle Un mot de passe est demandé deux fois pour générer une clé symétrique protégeant l'accès à la clé. On peut aussi directement générer une clé dans un chier crypté, en utilisant la commande genrsa : $openssl genrsa <algoChiffrement> -out maCle taille 2.4 Exportation de la partie publique An de communiquer sa clé publique (sans compromettre sa clé privée), on exporte la clé publique à partir d'une paire de clés avec la commande rsa et l'option -pubout : $openssl rsa -in maCle -pubout -out maClePublique 2.5 Signature de chiers Avant de signer un message, il est essentiel de calculer son empreinte (voir TD). La commande dgst calcule l'empreinte du message en utilisant la fonction de hachage précisée en option (voir le manuel pour connaitre les fonctions de hachage possibles). On fera bien-sûr attention à ne pas utiliser -md5 ni -sha1 pour des applications cryptographiques ! $openssl dgst <hachage> -out fichierHashSortie fichierAHacher Pour signer un document, on signe son empreinte (voir TD). Pour celà, on utilise l'option -sign de la commande rsautl (pour RSA utility ) : $openssl rsautl -sign -in fichierMessageHash -inkey fichierCle -out fichierSignature et on utilise l'option verify de la commande rsautl pour vérier la signature : $openssl rsautl -verify -in fichierSignature -pubin -inkey fichierCle -out fichierHashResultat Il reste ensuite à vérier que l'empreinte ainsi produite est la même que celle du message, que l'on calcule avec dgst. On pourra par exemple utiliser la commande diff de linux pour comparer les deux chiers ainsi calculés. L'option -pubin indique que le chier clé utilisé pour la vérication est celui contenant uniquement la partie publique de la clé utilisée pour la signature. Questions : 1. Créez une paire de clés rsa an de signer vos documents. Visualisez ensuite votre paire de clés. (a) Donnez une explication du choix de la valeur 65537 pour exposant public par défaut. (b) Expliquez à quoi correspondent les trois autres nombres qui servent à optimiser l'algorithme de déchirement et de quelle manière cet algorithme est optimisé. 2. Faut-il conserver la clé privée en clair ? Est-ce que votre clé privée est sauvegardée en clair ? Si oui, remplacez le chier clair par un chier chiré. 3. Créez la clé publique associée à votre clé privée. Faut-il conserver la clé publique en clair ? Est-ce que votre clé publique est sauvegardée en clair ? 4. Chirez et déchirez n'importe quel petit chier. Chirez ensuite un gros chier. Que se passe-t-il ? Pourquoi ? 5. Demandez à votre binôme sa clé publique. Chirez un court message avec celle-ci. Transmettez-le lui, et demandez-lui de le déchirer. 6. Chirez le chier de votre choix avec le système symétrique de votre choix. Chirez la clé ou le mot de passe utilisé(e) avec la clé publique de votre destinataire. Envoyez-lui le mot de passe chiré ainsi que le chier chiré. 7. Faut-il utiliser la clé publique ou la clé privée pour une signature ? 8. Signez le chier de votre choix, puis vériez la signature. 9. Créez trois messages. Signez ces trois messages. Modiez-en un ou deux légèrement. Transmettez à votre binôme les messages (éventuellement modiés) ainsi que les signatures correspondantes. Demandez-lui de déterminer quels sont les messages qui ont été modiés. Cécile GONÇALVES Page 2/ 4 TP1 : Mots de passe, signatures et PKI Université Paris-Est Créteil, année 2015-2016 3 M2 SSI - Cryptographie Avancée Interfaces PKI 3.1 Création d'une requête de certicats (auprès de la RA) Avant d'avoir un certicat, il faut d'abord s'enregistrer en fournissant les informations nécessaires (clé publique, identité, ... (voir cours pour plus de détails)) avant de transmettre la demande à la CA. La commande req permet d'établir une requête : $openssl req -new -key maCle -out maRequete Notez que la clée fournie doit être votre paire de clés clé privée/clé publique. En eet, seule la clé publique est nécessaire pour renseigner les champs du certicat, mais la requête est signée avec votre clé privée, an de s'assurer que vous êtes bien le propriétaire de la clé publique. Le chier produit maRequette est par défaut au format PEM. Par défaut, la fonction de hachage utilisée pour signer votre requête est SHA-256. Remarque : la clé doit être susamment grande pour pouvoir signer le certicat, en général, une clé de 1024 bits sut. Vous pouvez aussi eectuer votre requête en demandant une paire de clés. Pour cela, on utilise l'option -newkey en précisant en option l'algorithme de chirement souhaité (voir le manuel pour plus de précisions) : $openssl req -newkey <algoGenerationCles:parametres> -keyout maCle -out maRequete 3.2 Visualisation d'une requête de certicats On peut consulter les informations contenues dans la requête avec la commande $openssl req -in maRequete -text -noout 3.3 Auto-signer une requête (le demandeur devient CA) Pour obtenir un certicat à partir d'une requête, il faut que le CA signe cette requette. Lorsque vous souhaitez signer vous-même cette requette, vous pouvez utiliser la commande x509 de la manière suivante : $openssl x509 -req -in requetteaAutoSigner -signkey clePrivee -out monCertificat Notez que vous pouvez directement créer une requête signée (et donc vous établir CA) directement à partir de la commande : $openssl req -x509 -new -key maCle -out monCertificat 3.4 Demande de signature de certicat Pour obtenir un certicat à partir d'une requête de certicat, il vous reste à contacter une autorité de certication (CA) qui vous délivrera un certicat signé, après avoir procédé (normalement) à quelques vérications vous concernant. 3.4.1 Création d'un certicat Pour créer et signer un certicat à partir d'une requête maRequette, l'autorité utilise la commande x509 : $openssl x509 -days duree -CAserial serial -CA certificatCA -CAkey cleCA -in maRequete -req -out monCertificat l'option -days détermine la durée de validité du certicat, serial est un chier contient un nombre enregistré en hexadécimal (le numéro de série du prochain certicat à signer) (voir manuel). 3.5 Visualisation d'un certicat Pour visualiser le contenu d'un certicat, on utilise la commande x509 : $openssl x509 -in unCertif -text -noout Cécile GONÇALVES Page 3/ 4 TP1 : Mots de passe, signatures et PKI Université Paris-Est Créteil, année 2015-2016 M2 SSI - Cryptographie Avancée 3.6 Vérication d'un certicat On peut vérier la validité d'un certicat avec la commande verify. Notez qu'il est nécessaire de disposer du certicat de l'autorité qui l'a émis. $openssl verify -CAfile certifCA monCertificat 3.7 Signature et chirement de courriers électroniques Lorsque vous disposez d'une paire de clés clé publique/clé privée, et d'un certicat qui les accompagne et qui atteste de votre adresse électronique, il vous est possible de signer vos mails, et de recevoir des mails chirés de la part de correspondants qui disposent de votre certicat. 3.7.1 Signature de courriers Vous pouvez envoyer un courrier signé dont le contenu est dans le chier fichier à une adresse email adresseDestinataire, en utilisant la commande smime de la manière suivante : $ openssl smime -sign -in mailASigner -signer monCertificat -inkey maCle -from monAdresse -to adresseDestinataire -subject "Sujet" -out maSignatureMail 3.7.2 Vérication de courriers signés Pour vérier un courrier signé, il faut disposer du certicat que l'émetteur a utilisé pour signer, ainsi que celui de l'autorité ayant émis ce certicat. $openssl smime -verify -in courrierSigne -CAfile certifCA 3.7.3 Chirement de courriers Pour envoyer un courrier chiré à un destinataire dont le certicat est certifDestinataire, on utilise la commande smime avec l'option -encrypt, en précisant l'algorithme de chirement de la manière suivante : $openssl smime -encrypt <algoChiffrement> -in mailAChiffrer -from monAdresse -to adresseDestinataire -subject "Sujet" -out mailchiffre certifDestinataire 3.7.4 Déchirement de courriers Pour déchirer un courrier chiré, on utilise la commande smime avec l'option -decrypt $openssl smime -decrypt -in mailchiffre -recip monCertificat -inkey maCle où monCertificat (respectivement maCle) désigne le certicat (respectivement la paire de clés) du destinataire (celui qui déchire le courrier). Questions : 1. Créez une requête de certicat appelée user-request.pem concernant une entité appelée user. Cette requête est en attente de signature par une autorité de certication. 2. Expliquez les diérents éléments contenus dans cette requête. La clé privée du sujet y guretelle ? 3. Créez une paire de clés pour l'autorité de certication. Créez une requête de certicat nommée carequest.pem concernant l'entité de certication appelée CA. 4. Autosignez la requête de certicat de CA dans un certicat nommé ca-certificat.pem. 5. Visualisez le certicat ca-certificat.pem. Quelle est la date d'expiration du certicat et la taille de la clé ? 6. Signez la requête de certicat user-request.pem pour produire un certicat usercertificat.pem. Puis, contrôlez le contenu du certicat. 7. Vériez le certicat user-certicat.pem. 8. Modiez le contenu du certicat user-certificat.pem et tentez de le vérier. 9. Envoyez un email chiré et signé à votre binôme (mettre la signature en pièce-joite) et demandez lui de vérier la signature. 10. Envoyez un email chiré et signé à votre binôme (mettre la signature en pièce-joite) et demandez lui de le déchirer. Cécile GONÇALVES Page 4/ 4 TP1 : Mots de passe, signatures et PKI