TP – Générer des clés, chiffrer, signer et lire un certificat
BTS SIO SISR 1re année – Bloc 3 – S11
Note
But. Situation : Comment échanger un secret avec quelqu'un qu'on n'a jamais rencontré, et comment être sûr de sa véritable identité ?
Comment ce TP fonctionne. Avant de manipuler, tu écris ce que tu anticipes (« J'anticipe »). Puis tu testes et tu notes ce que tu constates. Tu comprends ce que fait chaque commande (« Je comprends »). Un bilan de compétences clôt la séance. Les manipulations se font sur des machines virtuelles de laboratoire, isolées du réseau de l'établissement. Les identifiants communs d'un TP sont des identifiants de laboratoire : ils ne se réutilisent jamais ailleurs.
Objectif
Générer une paire de clés, chiffrer une clé de session avec une clé publique (chiffrement hybride), signer et vérifier un fichier, observer un échange de clés, puis lire un certificat X.509.
Contraintes
- Binôme, durée : 3 h 20.
- Dossier de travail :
mkdir -p ~/asym && cd ~/asym. - Les clés de ce TP sont des clés de laboratoire : on ne les réutilise jamais ailleurs. La clé privée (
alice.key) reste dans ton dossier ; ne l'envoie à personne.
Partie A. Paire de clés et chiffrement hybride (50 min)
A1. Générer la paire
cd ~/asym
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:3072 -out alice.key
openssl pkey -in alice.key -pubout -out alice.pub
chmod 600 alice.key
head -2 alice.key
cat alice.pub
openssl pkey -in alice.pub -pubin -text -noout | head -3
Je comprends.
| Commande | Rôle |
|---|---|
genpkey -algorithm RSA …3072 |
Génère une clé privée RSA de 3072 bits |
pkey -in … -pubout |
Extrait la clé publique de la clé privée |
chmod 600 |
Seul le propriétaire peut lire la clé privée |
-----BEGIN … KEY----- |
Format PEM : données en base 64 entre deux lignes d'en-tête |
Questions.
- Quelle clé peut être publiée sur un site web ? Laquelle ne doit jamais quitter ton poste ? ______________________
- Que signifie
chmod 600pour la clé privée ? ______________________
A2. Essayer de chiffrer directement avec RSA
echo "Message pour Alice" > msg.txt
openssl pkeyutl -encrypt -pubin -inkey alice.pub -pkeyopt rsa_padding_mode:oaep -in msg.txt -out msg.rsa
wc -c msg.rsa
openssl pkeyutl -decrypt -inkey alice.key -pkeyopt rsa_padding_mode:oaep -in msg.rsa
head -c 500 /dev/zero | tr '\0' 'a' > long.txt
openssl pkeyutl -encrypt -pubin -inkey alice.pub -pkeyopt rsa_padding_mode:oaep -in long.txt -out long.rsa
J'anticipe. Le chiffrement du fichier long.txt (500 caractères) va-t-il fonctionner ? ______________________
Éléments de réponse
Non : RSA ne chiffre que des données plus petites que la clé (moins de 384 octets, moins le remplissage OAEP). Pour un fichier, on utilise le chiffrement hybride.
- Quelle taille a
msg.rsa? Quel rapport avec la taille de la clé ? ______________________ - Quelle est l'erreur obtenue pour
long.txt? ______________________
A3. Chiffrement hybride
head -c 2000 /dev/urandom | base64 > gros.txt
openssl rand -hex 32 > session.key
openssl enc -aes-256-cbc -pbkdf2 -in gros.txt -out gros.enc -pass file:session.key
openssl pkeyutl -encrypt -pubin -inkey alice.pub -pkeyopt rsa_padding_mode:oaep -in session.key -out session.key.rsa
rm session.key
ls -l gros.enc session.key.rsa
Alice (qui détient alice.key) déchiffre :
openssl pkeyutl -decrypt -inkey alice.key -pkeyopt rsa_padding_mode:oaep -in session.key.rsa -out session.recup
openssl enc -d -aes-256-cbc -pbkdf2 -in gros.enc -pass file:session.recup | cmp - gros.txt && echo "identique"
- Que contient
session.key.rsa? Pourquoi supprime-t-onsession.key? ______________________ - Qui peut déchiffrer
gros.enc: toute personne qui aalice.pub? ______________________ - Quel algorithme chiffre le gros fichier ? Lequel chiffre la clé ? Pourquoi les deux ? ______________________
- Cite deux protocoles ou outils qui fonctionnent sur ce principe hybride. ______________________
Partie B. Signer et vérifier (40 min)
cd ~/asym
echo "Virement de 1000 euros à Dupont" > ordre.txt
openssl dgst -sha256 -sign alice.key -out ordre.sig ordre.txt
openssl dgst -sha256 -verify alice.pub -signature ordre.sig ordre.txt
echo "Virement de 9000 euros à Dupont" > ordre-falsifie.txt
openssl dgst -sha256 -verify alice.pub -signature ordre.sig ordre-falsifie.txt
J'anticipe. La vérification de ordre-falsifie.txt avec la signature de ordre.txt réussira-t-elle ? ______________________
Éléments de réponse
Non : la signature est calculée sur l'empreinte du document. Si le document change, l'empreinte change et la vérification échoue (Verification failure).
Je comprends.
| Élément | Rôle |
|---|---|
dgst -sha256 -sign alice.key |
Calcule l'empreinte SHA-256 puis la signe avec la clé privée |
-verify alice.pub -signature … |
Vérifie avec la clé publique |
Verified OK / Verification failure |
Résultat de la vérification |
Questions.
- Qui peut produire la signature ? Qui peut la vérifier ? ______________________
- Quelles garanties apporte la signature que le HMAC de S10 n'apportait pas ? ______________________
- Pourquoi cette vérification n'est-elle utile que si l'on est sûr que
alice.pubappartient à Alice ? ______________________ - Une signature empêche-t-elle de lire le document ? ______________________
Partie C. Échanger un secret avec Diffie-Hellman (30 min)
Avec la courbe X25519, Alice et Bob fabriquent le même secret sans jamais l'envoyer :
cd ~/asym
openssl genpkey -algorithm X25519 -out a.key
openssl genpkey -algorithm X25519 -out b.key
openssl pkey -in a.key -pubout -out a.pub
openssl pkey -in b.key -pubout -out b.pub
openssl pkeyutl -derive -inkey a.key -peerkey b.pub -hexdump
openssl pkeyutl -derive -inkey b.key -peerkey a.pub -hexdump
- Les deux secrets calculés sont-ils identiques ? Qui a eu besoin de la clé privée de l'autre ? ______________________
- Ce qui a circulé entre Alice et Bob, ce sont
a.pubetb.pub. Un espion qui les lit peut-il calculer le secret ? ______________________ - Pourquoi cet échange n'authentifie-t-il pas Bob ? Quelle attaque cela permet-il ? ______________________
- Que signifie éphémère dans ECDHE, et quel avantage cela donne-t-il ? ______________________
Partie D. Lire un certificat (60 min)
D1. Dans le navigateur
Ouvre un site HTTPS public de ton choix (le site de ton établissement de formation, un site d'administration, un site de presse). Clique sur le cadenas puis sur Certificat (ou « La connexion est sécurisée » → « Certificat valide »).
| Champ | Site 1 | Site 2 |
|---|---|---|
| Nom du site (sujet) | ||
| Émetteur (AC) | ||
| Date de début et de fin | ||
| Algorithme et taille de la clé publique | ||
| Noms alternatifs (SAN) | ||
| Chaîne (racine → intermédiaire → serveur) |
- Qui est l'autorité racine de chaque chaîne ? Où se trouve son certificat dans ton système ou ton navigateur ? ______________________
- Quelle est la durée de validité de chaque certificat ? Pourquoi des durées courtes sont-elles préférées ? ______________________
D2. Dans le terminal
Génère un certificat auto-signé de laboratoire et lis-le :
cd ~/asym
openssl req -x509 -newkey rsa:2048 -nodes -keyout srv.key -out srv.crt -days 30 \
-subj "/C=FR/O=Lab SISR/CN=srv.lab.local" \
-addext "subjectAltName=DNS:srv.lab.local,DNS:www.lab.local"
openssl x509 -in srv.crt -noout -subject -issuer -dates -serial
openssl x509 -in srv.crt -noout -ext subjectAltName,basicConstraints
openssl x509 -in srv.crt -noout -fingerprint -sha256
Je comprends.
| Élément | Rôle |
|---|---|
req -x509 |
Crée directement un certificat auto-signé |
-nodes |
Pas de mot de passe sur la clé privée (laboratoire seulement) |
-subj "/C=…/O=…/CN=…" |
Identité du sujet (pays, organisation, nom courant) |
-addext subjectAltName=… |
Noms de domaine valables : c'est ce que vérifie le navigateur |
x509 -noout -subject -issuer -dates |
Affiche sujet, émetteur et validité |
- Que constates-tu en comparant le sujet et l'émetteur ? Qu'est-ce que cela signifie ? ______________________
- Un navigateur accepterait-il ce certificat ? Pourquoi ? ______________________
- Quelle est la valeur de
CA:TRUEici ? Pourquoi est-ce un défaut pour un certificat de serveur ? ______________________ - Pourquoi l'empreinte SHA-256 d'un certificat est-elle utile pour le comparer avec une valeur reçue par un autre canal ? ______________________
Synthèse
| Situation | Outil | Ce qui est utilisé |
|---|---|---|
| Envoyer un gros fichier confidentiel à Alice | ||
| Prouver que j'ai bien écrit un document | ||
| Se mettre d'accord sur un secret à distance | ||
| Être sûr qu'une clé publique est bien celle d'Alice |
Retour en entreprise
Si ta situation le permet : observe comment ton entreprise traite ce sujet, note en quelques lignes l'écart avec le TP, et, avec l'accord de ton tuteur, réalise une partie sur une situation réelle. Anonymise tes captures. Voir Transfert en entreprise.
Bilan de la séance
Remplis ce bilan seul, honnêtement : il sert à décider ce qu'il faut reprendre. Niveau : Non maîtrisé, Maîtrise partielle, Bonne maîtrise ou Excellente maîtrise (le vocabulaire des grilles nationales d'évaluation) ; Non évalué si tu n'as pas travaillé la compétence aujourd'hui.
| Compétence du référentiel | Ce que j'ai fait dans cette séance | Niveau |
|---|---|---|
| B3.2 – Préserver l'identité numérique de l'organisation | ||
| B3.4 – Garantir la disponibilité, l'intégrité et la confidentialité des services informatiques et des données de l'organisation face à des cyberattaques | ||
| B3.5A – Assurer la cybersécurité d'une infrastructure réseau, d'un système, d'un service |
Note
Les codes sont ceux du référentiel (l'arrêté numérote des activités : les codes « B… » sont un usage courant).
Je sais faire, sans aide :
- Générer une paire de clés et distinguer clé publique et clé privée ;
- Chiffrer une clé de session avec une clé publique ;
- Signer un fichier et vérifier une signature ;
- Lire les champs d'un certificat X.509 ;
- Expliquer la chaîne de confiance d'une PKI.
Ce que je dois reprendre : ______________________
Ma question à poser à l'enseignant : ______________________