Applications de Cryptographie: Cryptographie À Clef Publique + Certificats + SSH
Applications de Cryptographie: Cryptographie À Clef Publique + Certificats + SSH
Applications de Cryptographie: Cryptographie À Clef Publique + Certificats + SSH
Mathieu
Version courante : G. Urvoy-Keller
I. GPG
Créer une biclé GPG (couple clé publique/privée) en choisissant l'option par
défaut de taille en bits et en prenant un type par défaut (RSA/RSA) :
gpg --full-generate-key
Lister votre trousseau de clef (il ne doit y avoir que la votre!):
gpg –-list-keys
Pour pouvoir exporter votre clef (par exemple dans un dépôt public ou par
mail) utilisez la commande :
gpg --armor --output pubkey.txt --export 'Your Name'
Faites un « more » sur le fichier pubkey.txt et sur le fichier dans lequel se
trouve votre clef publique dans le répertoire ~/.gnupg (quel est ce
fichier?). Que fait la procédure d'exportation ?
Signez un GROS fichier toto.fic que vous fabriquez vous-mêmes en mettant
du contenu dedans (par exemple faites un cat /etc/* > toto.fic )
gpg –-sign toto.fic
Quel fichier a été généré?
Vérifier la signature du fichier.
gpg –-verify toto.fic.gpg
Quelles clefs ont été utilisées pour les deux étapes (signature et
vérification) ?
Créer une signature détachée et vérifier la signature de la même façon. Quel
est l'avantage (regarder la taille de la signature attachée et détachée) ?
Vous pouvez aussi crypter avec votre clef :
gpg –-encrypt -r 'Votre Nom' toto.fic
Decrypter. Quelles clefs ont été utilisées ?
Vous pouvez aussi crypter le fichier pour un autre utilisateur pour lequel vous
avez la clef.
Commencez par aller vous faire des amis sur http://keyserver.pgp.com/ . Par
exemple, cherchez John.
Télécharger la clef de votre nouvel ami John (le premier de la liste par
exemple) et importez la:
gpg --import key.asc
Lister votre trousseau.
Crypter pour John
Décrypter (si cela ne fonctionne pas, expliquer pourquoi)
a) Certificat auto-certifié
On le fait en une commande
/usr/lib/ssl/misc/CA.pl -newcert
Visualisation du certificat
openssl x509 -in newcert.pem -text
Un certificat est fait par quelqu'un (qui le signe) et pour quelqu'un. Quels
champs correspondent au "par" et au "pour" ?
Pourquoi est-ce que ce certificat est dit auto-certifié? Quels champs
l'indiquent dans l'en tête?
Quelle est la clef publique qui a été signée?
Avec quelle clef a été signé le résumé du certificat? Avec quel algorithme
openssl a-t-il créée le résumé?
Lire le second fichier généré :
openssl rsa -in newkey.pem -text
Que contient-il?
a) L'autorité de certification
Attention de bien mémoriser le mot de passe de la CA. Répondre par la
touche return (⏎) à la première question car vous n'avez pas de certificat
de CA à présenter. Ensuite, remplissez normalement : il faut absolument
remplir le champ Canonical name.
/usr/lib/ssl/misc/CA.pl -newca
b) Demande de certificat
/usr/lib/ssl/misc/CA.pl -newreq (pareil, il faut le champ Canonical
Name)
c) Signature du certificat
Attention de bien mémoriser le mot de passe de la CA
/usr/lib/ssl/misc/CA.pl -sign
Lisez le certificat obtenu avec openssl et prouvez qu'il n'est pas auto-signé.
Vérification du certificat
/usr/lib/ssl/misc/CA.pl -verify newcert.pem
Quelle opération est faite (quelle clef a été chiffrée avec quelle clef)?
III. SSH
Utilisez le client sur une machine et le serveur sur une autre : chaque étudiant d'un
binôme peut faire l'exercice de manière croisée. Dans le cas d'un monôme, utiliser 2
machines virtuelles (modifier l'adresse MAC de la seconde machine – le premier caractère
seulement).
Par quelle commande vérifiez-vous si un serveur ssh tourne sur votre machine?
On commence par démarrer le serveur sshd. (Il l’est probablement déjà)
Page 3 / 4
systemctl start sshd
se connecter au serveur sur l'autre machine
ssh -v rt@autre-machine
Quel est le triplet d'algorithmes (confidentialité, intégrité, compression)
choisit ? Si l’algorithme d’intégrité est <implicit>, expliquez pourquoi en
cherchant des informations sur l’algorithme pour la confidentialité.
Quelles méthodes d'authentification a proposé le serveur au client ?
A-t-on d’abord identifié le client ou le serveur ?
Nous allons changer le fonctionnement de sshd pour qu'il n'accepte que des clef
publique et non par mot de passe.
Générer les clés personnelles pour l'utilisateur rt
# ssh-keygen -t rsa -b 1024
Lire et comprendre les options de configuration de sshd du fichier
/etc/ssh/sshd_config