Aller au contenu

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.

  1. Quelle clé peut être publiée sur un site web ? Laquelle ne doit jamais quitter ton poste ? ______________________
  2. Que signifie chmod 600 pour 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.

  1. Quelle taille a msg.rsa ? Quel rapport avec la taille de la clé ? ______________________
  2. 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"
  1. Que contient session.key.rsa ? Pourquoi supprime-t-on session.key ? ______________________
  2. Qui peut déchiffrer gros.enc : toute personne qui a alice.pub ? ______________________
  3. Quel algorithme chiffre le gros fichier ? Lequel chiffre la clé ? Pourquoi les deux ? ______________________
  4. 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.

  1. Qui peut produire la signature ? Qui peut la vérifier ? ______________________
  2. Quelles garanties apporte la signature que le HMAC de S10 n'apportait pas ? ______________________
  3. Pourquoi cette vérification n'est-elle utile que si l'on est sûr que alice.pub appartient à Alice ? ______________________
  4. 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
  1. Les deux secrets calculés sont-ils identiques ? Qui a eu besoin de la clé privée de l'autre ? ______________________
  2. Ce qui a circulé entre Alice et Bob, ce sont a.pub et b.pub. Un espion qui les lit peut-il calculer le secret ? ______________________
  3. Pourquoi cet échange n'authentifie-t-il pas Bob ? Quelle attaque cela permet-il ? ______________________
  4. 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)
  1. Qui est l'autorité racine de chaque chaîne ? Où se trouve son certificat dans ton système ou ton navigateur ? ______________________
  2. 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é
  1. Que constates-tu en comparant le sujet et l'émetteur ? Qu'est-ce que cela signifie ? ______________________
  2. Un navigateur accepterait-il ce certificat ? Pourquoi ? ______________________
  3. Quelle est la valeur de CA:TRUE ici ? Pourquoi est-ce un défaut pour un certificat de serveur ? ______________________
  4. 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 : ______________________