Exercice 0. QCM d’activation
Pour chaque question, une seule réponse est correcte.
Question 1. Le chiffrement symétrique utilise :
- A) deux clés différentes : une publique et une privée
- B) une seule clé, partagée entre l’émetteur et le récepteur
- C) uniquement la clé publique du destinataire
- D) aucune clé, seulement un algorithme secret
Correction publiée après la séance.
Question 2. Quel objectif de sécurité garantit que le message n’a pas été modifié pendant le transport ?
- A) la confidentialité
- B) l’authentification
- C) l’intégrité
- D) la non-répudiation
Correction publiée après la séance.
Question 3. Dans le chiffrement asymétrique, pour envoyer un message confidentiel à Alice, Bob chiffre avec :
- A) la clé privée d’Alice
- B) la clé publique de Bob
- C) la clé publique d’Alice
- D) la clé privée de Bob
Correction publiée après la séance.
Question 4. Le chiffrement de César avec un décalage de 3 transforme la lettre D en :
- A)
A - B)
G - C)
F - D)
H
Correction publiée après la séance.
Question 5. Un certificat numérique (HTTPS) permet principalement de :
- A) chiffrer les données avec un chiffrement symétrique uniquement
- B) vérifier l’identité du serveur et établir une connexion chiffrée
- C) empêcher toute attaque informatique sur le réseau
- D) stocker les mots de passe des utilisateurs de manière sécurisée
Correction publiée après la séance.
Exercice 1 — Identifier les objectifs de sécurité
Pour chaque situation, indiquer quel(s) objectif(s) de sécurité (confidentialité, intégrité, authentification) est (sont) menacé(s). Justifier.
Indice
Confidentialité : seuls les destinataires peuvent lire le message. Intégrité : le message n’a pas été modifié. Authentification : on est sûr de l’identité de l’interlocuteur. Pour chaque situation, se demander ce que le pirate apprend, modifie ou usurpe.
- Un pirate intercepte un email et le lit sans que l’expéditeur ni le destinataire ne s’en aperçoivent.
- Un pirate modifie le montant d’un virement bancaire pendant son transfert sur le réseau.
- Un pirate crée un faux site web identique à celui d’une banque pour récupérer les identifiants des clients.
- Un pirate intercepte un message chiffré, le supprime et le remplace par un autre message (également chiffré avec la bonne clé publique).
Correction publiée après la séance.
Exercice 2 — Chiffrement de Vigenère
Le chiffrement de Vigenère est une extension du chiffrement de César. Au lieu d’utiliser un décalage unique, on utilise un mot-clé qui détermine un décalage différent pour chaque lettre du message.
Par exemple, avec le mot-clé NSI (décalages 13, 18, 8) :
| Position | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| Message | S | E | C | R | E | T |
| Clé (répétée) | N | S | I | N | S | I |
| Décalage | 13 | 18 | 8 | 13 | 18 | 8 |
| Chiffré | F | W | K | E | W | B |
On appelle analyse fréquentielle la technique qui consiste à compter la fréquence de chaque lettre d’un message chiffré et à la comparer à la fréquence des lettres dans la langue du message. En français, la lettre E est de loin la plus fréquente : avec un chiffrement de César, la lettre la plus fréquente du message chiffré correspond donc probablement à E, ce qui donne le décalage. L’exercice 4 met en œuvre cette méthode.
Chiffrer le message
PYTHONavec la cléNSI.Indice
Répéter la clé sous le message (
NSINSI), puis décaler chaque lettre du message du rang de la lettre de clé placée dessous (A = 0, N = 13, S = 18, I = 8), en revenant à A après Z.Écrire une fonction
chiffre_vigenere(message, cle)qui chiffre un message (en majuscules, sans accent) avec la clé donnée.Indice
Parcourir le message en avançant d’une lettre dans la clé à chaque lettre chiffrée, avec un compteur
j:j % len(cle)fait recommencer la clé au début. Le décalage d’une lettre de clé est son rang dans l’alphabet,ord(lettre) - ord("A"), et% 26fait revenir à A après Z.Code à copier puis compléter
def chiffre_vigenere(message, cle): resultat = "" j = 0 for c in message: if "A" <= c <= "Z": decalage = ord(cle[j % len(cle)]) - ord("A") resultat += chr((ord(c) - ord("A") + ...) % 26 + ord("A")) j += 1 else: resultat += ... return resultatÉcrire la fonction
dechiffre_vigenere(message, cle)correspondante.Indice
Même fonction que
chiffre_vigenere, en retirant le décalage au lieu de l’ajouter :% 26garde un rang compris entre 0 et 25.Pourquoi le chiffrement de Vigenère est-il plus résistant que celui de César face à l’analyse fréquentielle ?
Indice
Avec César, une même lettre est toujours chiffrée de la même façon. Avec Vigenère, que devient un E selon sa position dans le message ?
Est-il pour autant incassable ? Justifier.
Indice
La clé se répète : si l’on connaît sa longueur, les lettres placées à intervalles réguliers de cette longueur sont chiffrées par un même décalage. Que peut-on alors appliquer à chacun de ces groupes de lettres ?
Correction publiée après la séance.
Exercice 3 — Attaque de l’homme du milieu
Alice veut envoyer un message confidentiel à Bob en utilisant un chiffrement asymétrique. Elle récupère la clé publique de Bob sur un serveur public. Mais un pirate, Ève, a remplacé la clé publique de Bob par la sienne sur le serveur.
Décrire précisément ce qui se passe lorsque Alice chiffre son message et l’envoie.
Indice
Avec quelle clé publique le message est-il réellement chiffré ? Qui possède la clé privée correspondante ?
Ève peut-elle lire le message d’Alice ? Justifier.
Indice
Un message chiffré avec une clé publique se déchiffre avec la clé privée associée : Ève possède-t-elle cette clé privée ?
Ève peut-elle faire suivre le message à Bob sans qu’il se doute de quelque chose ? Expliquer comment.
Indice
Après avoir lu le message, Ève peut le chiffrer de nouveau : avec quelle clé, pour que Bob puisse le lire ?
Quel mécanisme permet de se prémunir contre cette attaque ? Expliquer son fonctionnement.
Indice
Il faut pouvoir vérifier qu’une clé publique appartient bien à Bob : quel document, signé par une autorité de confiance, associe une clé publique à son propriétaire ?
Correction publiée après la séance.
Exercice 4 — Analyse fréquentielle
Le message suivant a été chiffré par substitution mono-alphabétique (chaque lettre est remplacée par une autre, toujours la même) :
OH FKLIIUHPHQW HVW XQH PHWKRGH DQFLHQQH
On sait que, dans un texte français suffisamment long, les lettres les plus fréquentes sont E, A, S, I, N, T (dans cet ordre approximatif).
Compter la fréquence de chaque lettre dans le message chiffré.
Indice
Compter les lettres une à une, sans les espaces, par exemple à l’aide d’un dictionnaire en Python. Quelle lettre apparaît le plus souvent ?
En déduire que ce message a probablement été chiffré avec un chiffrement de César. Trouver le décalage.
Indice
La lettre la plus fréquente du message chiffré correspond probablement à E : combien de rangs les séparent ? Vérifier que ce décalage donne des mots français.
Déchiffrer le message.
Indice
Reculer chaque lettre du décalage trouvé, en revenant à Z après A.
Écrire une fonction Python
casse_cesar(message_chiffre)qui teste tous les décalages possibles et affiche les 26 résultats.Indice
Deux boucles imbriquées : la première essaie chaque décalage de 0 à 25, la seconde déchiffre chaque lettre avec ce décalage, comme à l’exercice 2.
Code à copier puis compléter
def casse_cesar(message_chiffre): for decalage in range(26): resultat = "" for c in message_chiffre: if "A" <= c <= "Z": resultat += chr((ord(c) - ord("A") - ...) % 26 + ord("A")) else: resultat += c print(f"Décalage {decalage} : {resultat}")
Correction publiée après la séance.
Exercice 5 — Scénario complet (type bac)
Cet exercice porte sur la sécurisation des communications.
Clara se connecte au site de sa banque depuis son navigateur. L’adresse du site commence par https://.
Partie A — Mise en place de la connexion sécurisée
Que signifie le
sdanshttps?Indice
Comparer
httpethttps: que garantit la version avecs?Quel protocole est utilisé pour sécuriser cette connexion ?
Indice
C’est le protocole qui chiffre les échanges entre le navigateur et le serveur, successeur de SSL.
Expliquer pourquoi le navigateur de Clara vérifie le certificat du serveur de la banque avant d’établir la connexion. Quel type d’attaque cette vérification permet-elle d’éviter ?
Indice
Le certificat lie la clé publique du serveur à l’identité de la banque : sans lui, que pourrait faire un pirate placé entre Clara et la banque ? Revoir l’exercice 3.
Décrire les étapes de l’établissement de la connexion sécurisée entre le navigateur de Clara et le serveur de la banque.
Indice
Le navigateur vérifie le certificat ; navigateur et serveur se mettent ensuite d’accord sur une clé de session, échangée grâce au chiffrement asymétrique ; la suite des échanges est chiffrée avec cette clé.
Partie B — Pendant la communication
Une fois la connexion établie, le chiffrement utilisé pour échanger les données est-il symétrique ou asymétrique ? Justifier ce choix.
Indice
Comparer la rapidité des deux types de chiffrement pour de gros volumes de données.
Clara effectue un virement de 500 € vers le compte de David. Expliquer comment la signature électronique peut garantir que l’ordre de virement n’a pas été modifié pendant le transfert et qu’il provient bien de Clara.
Indice
Clara calcule une empreinte de l’ordre de virement avec une fonction de hachage et la chiffre avec sa clé privée. Que peut alors vérifier la banque avec la clé publique de Clara ?
Partie C — Programmation
On souhaite simuler un échange de clé simplifié. Écrire une fonction
genere_cle_session(taille)qui renvoie une chaîne aléatoire detaillecaractères parmi les lettres majuscules et les chiffres.Indice
random.choice(chaine)tire un caractère au hasard dans une chaîne. Écrire la chaîne des 36 caractères possibles, puis ajouter un à untaillecaractères tirés au hasard.Code à copier puis compléter
import random def genere_cle_session(taille): caracteres = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" cle = "" for _ in range(taille): cle += random.choice(...) return cleÉcrire une fonction
xor_chiffre(message, cle)qui chiffre un message en effectuant un XOR caractère par caractère entre le message et la clé (répétée si nécessaire). On rappelle queord(c)renvoie le code ASCII d’un caractère etchr(n)renvoie le caractère de code ASCIIn. Pour deux entiersaetb, l’expressiona ^ bcalcule le OU exclusif (XOR) bit à bit de leurs écritures binaires : par exemple,6 ^ 3vaut5, car110XOR011donne101. Le XOR de deux caractèresc1etc2s’obtient donc parchr(ord(c1) ^ ord(c2)).Indice
Parcourir le message par ses indices : le caractère de clé utilisé pour l’indice
iestcle[i % len(cle)], ce qui répète la clé autant qu’il le faut.Code à copier puis compléter
def xor_chiffre(message, cle): resultat = "" for i in range(len(message)): c_msg = ord(message[i]) c_cle = ord(cle[...]) resultat += chr(... ^ ...) return resultat
Correction publiée après la séance.