TP Chiffrement

TP – Chiffrement
A. Recherche de clé de chiffrement
John the Ripper est un logiciel libre de « cassage » de mot de passe par force brute et par dictionnaire. Il permet notamment de
tester la sécurité d'un mot de passe. Il est publié sous licence GPL. Il existe 3 modes d’utilisation :
• Single (simple) : John essaie de deviner le mot de passe d’un utilisateur à partir des informations qu’il a sur lui (noms,
prénoms, années de naissance…)
• Wordlist (dictionnaire) : John utilise un dictionnaire (un fichier contenant des mots) pour trouver le mot de passe. Il essaie
chaque mot et des formes dérivées de ces mots. Par exemple : Mary, Marie, Marie1 etc.
• Incremental (incrémentale brute) : il essaie toutes les combinaisons possibles de caractères.
Si John est exécuté sans paramètre, il appliquera tour à tour chaque mode.
A1. Installation
Pour installer John the Ripper, récupérez le code source de la dernière version stable gratuite sur le site officiel
http://www.openwall.com/john/ puis procédez à l’extraction de l’archive.
Installez john selon la procédure décrite dans le fichier doc/INSTALL. La phase de compilation permet d’optimiser le
programme en fonction de la plateforme.
Les exécutables sont maintenant dans le répertoire run. Lorsque john est en cours d’exécution, vous pouvez voir son
avancement en tapant sur la touche « entrée ». Les mots de passe que john a trouvés sont stockés dans le fichier john.pot.
A2. Mode single
• Créez un utilisateur « toto » dont le mot de passe est « toto1988 ».
Q1. Où et comment mot de passe est-il stocké sur le système ?
• Récupérez son mot de passe dans le fichier mypasswd :
./unshadow /etc/passwd /etc/shadow | grep toto > mypasswd
• Lancer john en mode single : ./john --single mypasswd
Q2. Combien de temps a-t-il fallu à john pour percer le mot de passe de toto ? Commentez.
A3. Mode wordlist
Il s’agit d’utiliser des fichiers contenant des grandes quantités de mots afin de les tester un par un.
Avec l’installation de john est fourni un fichier qui contient les mots de places les plus souvent rencontrés : passwd.lst.
• Parcourez le fichier passwd.lst afin d’avoir une idée des mots de passe les plus fréquents. Certaines règles à appliquer sur
ces mots ont été définies dans le fichier john.conf comme par exemple ajouter des chiffres à la fin de chaque mot.
• Attribuez à toto le mot de passe « louise ». Utiliser john avec le dictionnaire passwd.lst et les règles définies dans le fichier
john.conf :
./john --wordlist=password.lst --rules mypasswd
Q3. Combien de temps a-t-il fallu à john pour percer le mot de passe de toto ? Commentez.
Q4. Attribuer à toto le mot de passe « Louise ». Combien de temps a-t-il fallu à john pour percer le mot de passe de toto ?
Commentez.
Q5. Attribuer à toto le mot de passe « Louise1 ». Combien de temps a-t-il fallu à john pour percer le mot de passe de toto ?
Commentez.
Q6. Attribuer à toto le mot de passe qui correspond au mot miroir de « louise » (c’est-à-dire esiuol). Combien de temps a-t-il
fallu à john pour percer le mot de passe de toto ? Commentez.
A3. Mode incrémental
Le mode incrémental a plusieurs sous-modes définis dans le fichier john.conf :
--incremental=alpha → seulement les lettres (26 caractères)
--incremental=digits → seulement les chiffres (10 caractères)
--incremental=alnum → les lettres et les chiffres (36 caractères)
--incremental=all → les lettres, les chiffres et tous les caractères spéciaux (95 caractères)
Si on connaît a priori la nature du mot de passe, on peut gagner du temps en attaquant avec le bon jeu de caractères. Par
exemple, si on sait que le mot de passe de toto n’est composé que de lettres, on utilisera le mode Alpha. Celui-ci correspond à
tous les mots de « a » à « zzzzzzzz ».
Q7. Attribuez à toto le mot de passe qui correspond à votre année de naissance (4 chiffres). Exécuter john avec le mode
incrémental le plus approprié. Commentaire ?
Q8. Attribuez à toto un mot de passe de 5 chiffres. Exécuter john avec le mode incrémental le plus approprié. Commentaire ?
Q9. Attribuez à toto un mot de passe de 6 chiffres. Commentaire ?
ESIPE – IR2
TP Crypto
S.Lohier
1/3
Q10.
Q11.
Concluez sur la longueur des mots de passe.
Attribuez à toto le mot de passe « hour ». Exécuter john avec le mode incrémental le plus approprié. Commentaire ?
Q12.
Linux est fourni avec un dictionnaire de mots anglais : /usr/share/dict/american-english.
Attribuez à toto le mot de passe « hour ». Exécuter john avec en paramètre ce dictionnaire. Combien de temps a-t’il fallu à john
pour percer le mot de passe de toto ?
Q13.
Concluez sur l’efficacité des modes wordlist et incremental.
Une autre information importante pour le crackage des mots de passe est leur longueur. En effet, si on connaît a priori leur
nombre de caractères, on aura besoin de tester beaucoup moins de combinaisons.
Nous allons définir notre propre mode incrémental.
• Ouvrez le fichier john.conf.
Après la ligne « #Incremental modes », définissez le mode MonMode :
[Incremental:MonMode]
File = $JOHN/alpha.chr → le jeu de caractères
MinLen = 4 → la longueur min
MaxLen = 4 → la longueur max
CharCount = 26 → le nombre de caractères
Q14.
Attribuez à toto le mot de passe « hour ». Exécutez john avec le nouveau mode incrémental :
--incremental:MonMode.
Combien de temps a-t-il fallu à john pour percer le mot de passe de toto ?
Comparez avec la question précédente.
Q15.
Testez john sur votre mot de passe habituel.
Q16.
Conclusion : quelles sont les règles de base à adopter pour choisir un bon mot de passe ?
B. Chiffrement asymétrique avec SSL
OpenSSL est une boîte à outils de chiffrement développée en C et comportant deux bibliothèques (libcrypto fournit les
algorithmes cryptographiques, libssl implémente le protocole Transport Layer Security (TLS) ainsi que son prédécesseur
Secure Sockets Layer (SSL)) et une interface en ligne de commande (openssl).
B1. Génération d’une paire de clés RSA
On peut générer une paire de clés RSA avec la commande genrsa de openSSL :
openssl genrsa −out <fichier> <taille>
fichier est le nom de fichier de sauvegarde de la clé au format PEM (Privacy Enhanced Mail, format en base 64), et taille est la
taille souhaitée (exprimée en bits) du modulus de la clé.
Q17.
Générez et visualisez une paire de clés RSA de 1024 bits. Commentaire ?
La commande rsa permet de visualiser le contenu d’un fichier au format PEM contenant une paire de clés RSA.
openssl rsa −in <fichier > −text −noout
L’option -text demande l’affichage décodé de la paire de clés. L’option -noout supprime la sortie normalement produite par la
commande rsa.
Q18.
Affichez et commentez les différents éléments de la clé. Donnez une explication du choix de la valeur 65537 pour
l’exposant public par défaut.
Il n’est pas prudent de laisser une paire de clé en clair (surtout la partie privée). Avec la commande rsa, il est possible de
chiffrer une paire de clés. Pour cela trois options sont possibles qui précisent l’algorithme de chiffrement symétrique à utiliser:
-des, -des3 et -idea (il est possible de chiffrer le fichier lors de sa génération en mettant l’une des trois options dans la ligne de
commande genrsa).
Openssl rsa i-in mykey.pem –des3 –out mykey2.pem
Q19.
Testez le chiffrement. Quelle commande avez-vous utilisé ? Pourquoi une phrase de passe est-elle demandée ?
Q20.
Avec la commande cat puis la commande rsa, visualisez à nouveau le contenu du fichier pem. Qu’observez-vous ?
B2. Exportation de la partie publique
Le fichier précédent pem contient la partie privée de la clé, et ne peut donc pas être communiqué tel quel. Avec l’option pubout on peut exporter la partie publique d’une clé.
Q21.
Exportez la clé publique sous forme d’un nouveau fichier pem et visualisez cette clé avec l’option rsa (attention, vous
devez préciser l’option -pubin, puisque seule la partie publique figure dans le nouveau fichier pem).
Quelles commandes avez-vous utilisé ? Sous quelle forme la clé publique est-elle présentée ?
B3. Chiffrement/déchiffrement de données avec RSA
On peut chiffrer des données avec une clé RSA. Pour cela on utilise la commande rsautl :
openssl rsautl −encrypt −in <fichier_in> −inkey <cle> −out <fichier_out>
Attention, avec une clé de 1024 bits la taille du fichier à chiffrer doit être au maximum de 116 octets.
Si le fichier « clé » correspond à la partie publique de la clé, il faut ajouter l’option pubin.
ESIPE – IR2
TP Crypto
S.Lohier
2/3
Pour déchiffrer, on remplace l’option encrypt par l’option decrypt.
Q22.
Chiffrez et déchiffrez le fichier de votre choix. Quelles commandes avez-vous utilisé ? Commentaires ?
B4. Signature de fichiers avec RSA
Il n’est possible de signer que de petits documents. Pour signer un gros document on calcule d’abord une empreinte de ce
document avec la commande dgst :
openssl dgst <hashage> −out <empreinte> <fichier_in>
hashage est l’une des fonctions de hashage proposées par openssl (md5, sha1, ripemd160…)
Pour signer l’empreinte, on utilise l’option -sign de la commande rsautl :
openssl rsautl −sign −in <empreinte> −inkey <cle> −out <signature>
Pour vérifier la signature :
openssl rsautl −verify −in <signature> −pubin inkey <cle> −out <empreinte>
Q23.
Signez le fichier de votre choix, puis vérifiez la signature. Quelles commandes avez-vous utilisé ? Comment avezvous vérifié la signature ? Quelle partie de la clé avez-vous utilisé pour la vérification ?
C. Cryptage symétrique SSL avec mot de passe
Parcourir la liste des chiffrements possibles (openssl enc - - help).
Q1. A quoi correspond le chiffrement bf-cbc ?
Pour chiffrer un fichier avec le système Blowfish en mode CBC, avec une clé générée par mot de passe, on utilise la
commande :
> openssl enc -bf-cbc -in filename -out filename.cypher
Pour déchiffrer le même message, on utilise la commande :
> openssl enc -bf-cbc -d -in filename.cypher -out filename
Q24.
Chiffrez le fichier de votre choix en bf-cbc puis en aes-256-ecb, déchiffrez-le et vérifiez que vous retrouvez le fichier
initial.
Q25.
Quelle taille de clé utilisent les algorithmes choisis ? Quelle taille de mot de passe avez-vous utilisé ? Conclusion ?
Q26.
Comparez les tailles des fichiers clairs et chiffrés. Donnez une explication sur la différence de ces tailles.
Q27.
Tentez de déchiffrer un cryptogramme en utilisant un mauvais mot de passe. Comment réagit openSSL ?
Le fichier hide a été chiffré avec le système AES en mode CBC, la clé de 128 bits ayant été obtenue par mot de passe.
Le mot de passe codé en base 64 est Y29tdGVzc2UK .
Q28.
À l'aide de la commande openssl appropriée, décodez le mot de passe. Comment avez-vous procédé ?
Q29.
Déchiffrez ensuite hide. Comment avez-vous procédé ?
D. Cryptage symétrique SSL avec clé explicite
Pour chiffrer un fichier avec une clé explicite, il faut utiliser les options -K et –iv :
• -K suivi de la clé exprimée en hexadécimal ;
• -iv suivi du vecteur d'initialisation exprimé en hexadécimal1.
L'exemple qui suit montre la commande pour chiffrer un fichier avec Blowfish en mode CBC avec un vecteur d'initialisation
de 64 bits exprimé par 16 chiffres hexa, et une clé de 128 bits exprimée par 32 chiffres hexa.
> openssl enc -bf-cbc -in filename -out filename.cypher
-iv 0123456789ABCDEF
-K 0123456789ABCDEF0123456789ABCDEF
Q30.
Quel est le rôle du vecteur d’initialisation ?
Q31.
Chiffrez le fichier clear avec le système Blowfish en mode OFB, en utilisant le vecteur d'initialisation et la clé de
votre choix. Déchiffrez ensuite le cryptogramme obtenu et vérifiez son contenu. Comment avez-vous procédé ?
Chiffrez la version décryptée du fichier hide précédent avec le même système, la même clé et le même vecteur d'initialisation.
Q32.
Utilisez le programme xor pour faire un "xor" des deux fichiers décryptés. Utilisez le même programme pour faire un
"xor" des deux fichiers chiffrés. Faîtes un diff entre les deux fichiers obtenus. Que constatez-vous ? Le résultat aurait-il
été le même si on avait utilisé un système de chiffrement autre que Blowfish ? Explication.
ESIPE – IR2
TP Crypto
S.Lohier
3/3