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

Documents pareils