Exercice 3 - Sécurisation des communications · Bac Numérique et Sciences Informatiques Métropole 2025 (sujet 2)
Thème : Sécurisation des communications : chiffrement et HTTPS · Tiré du sujet Métropole France 2 (2025)
Énoncé
Exercice 3 (8 points)
Cet exercice porte sur la programmation de base en Python, la sécurisation des communications et les réseaux.
Partie A - La méthode du masque jetable
Dans cette partie, on s’intéresse à une méthode de chiffrement dite du masque jetable. Voici ce que l’on peut lire sur le site Wikipédia:
Le chiffrement par la méthode du masque jetable consiste à combiner le message en clair avec une clé présentant les caractéristiques très particulières suivantes: la clé doit être une suite de caractères au moins aussi longue que le message à chiffrer;
Partie A - La méthode du masque jetable
1.
Chiffrer, par la méthode du masque jetable, le message LIBRE à l'aide de la clé EYQMT.
En Python, on crée une fois pour toute la variable alphabet qui sera accessible et utilisable dans toutes les fonctions. Celle-ci contient la liste des 26 lettres de l'alphabet rangées dans l'ordre alphabétique:
alphabet = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
'W', 'X', 'Y', 'Z']
2.
Écrire une fonction Python indice qui prend pour paramètre une liste L et renvoie l'indice de element dans la liste L. On supposera que chaque élément de la liste L n'y apparaît qu'une seule fois et que element est bien présent dans la liste L.
Par exemple, l'appel indice(alphabet, 'K') renvoie l'entier 10.
3.
Écrire une fonction Python lettres_vers_indices qui prend pour paramètre une chaîne de caractères et renvoie, dans l'ordre, la liste des indices de ces caractères dans l'alphabet.
Par exemple, l'appel lettres_vers_indices('HELLO') renvoie la liste d'entiers [7, 4, 11, 11, 14].
On dispose également d'une fonction indices_vers_lettres, qu'on ne demande pas d'écrire, permettant de convertir une liste d'entiers, compris entre 0 et 25, en une chaîne de caractères.
Par exemple, l'appel indices_vers_lettres([3, 16, 13, 21, 25]) renvoie la chaîne de caractères 'DQNVZ'.
Ci-après, on donne une fonction Python chiffrement incomplète, qui, à partir d'un message msg et d'une clé cle entrés en paramètres, renvoie la chaîne de caractères représentant le message chiffré par la méthode du masque jetable.
1 def chiffrement(msg, cle):
2 assert len(cle) >= len(msg), 'impossible'
3 indices_msg = lettres_vers_indices(msg)
4 indices_cle = lettres_vers_indices(cle)
5 n = len(msg)
6 indices_msg_chiffre = []
7 for k in range(n):
8 ind =...
9 if ind >= 26:
10 ind =...
11 indices_msg_chiffre.append(ind)
12 msg_chiffre = indices_vers_lettres(...)
13 return msg_chiffre
4.
Recopier et compléter les lignes 7 à 13 de la fonction chiffrement.
5.
Indiquer, en justifiant, ce que l'on observe lors de l'appel chiffrement('RESEAU', 'GFTZ').
On s'intéresse maintenant au déchiffrement d'un message chiffré par la méthode du masque jetable.
Par exemple, le déchiffrement du message DQNVZ avec la clé WMCKL donne le message HELLO.
6.
Déchiffrer le message GMEDH avec la clé FVEIT.
7.
Expliquer comment procéder pour déchiffrer un message lorsqu'on connaît la clé.
On souhaite maintenant écrire, en Python, une fonction dechiffrement qui permet de déchiffrer un message chiffré par la méthode du masque jetable.
Pour cela, on s'inspire de la fonction chiffrement dans laquelle les paramètres ainsi que les lignes 2 à 5 sont inchangées. On décide cependant de remplacer, ligne 6, le nom de la variable indices_msg_chiffre par le nom plus explicite indices_msg_dechiffre.
8.
Adapter les lignes 6 à 13 de la fonction chiffrement pour obtenir la nouvelle fonction dechiffrement.
Partie B - Sécurisation des communications
9.
Expliquer la différence entre un algorithme de chiffrement symétrique et un algorithme de chiffrement asymétrique.
Alice souhaite envoyer un message à Bob par l'intermédiaire d'un réseau informatique en utilisant un algorithme de chiffrement asymétrique.
Pour cela, Bob envoie à Alice sa clé publique. Alice chiffre ensuite le message à l'aide de la clé publique de Bob qu'elle vient de recevoir, puis elle envoie ce message chiffré à Bob.
10.
Indiquer comment Bob peut déchiffrer le message que lui envoie Alice.
11.
Expliquer comment une tierce personne pourrait se faire passer pour Alice sans que Bob ne s'en aperçoive.
12.
Expliquer brièvement le fonctionnement du protocole HTTPS.
13.
Expliquer pourquoi, pour sécuriser intégralement les communications sur Internet, on utilise le protocole HTTPS plutôt qu'un chiffrement asymétrique.

Corrigé
Corrigé proposé par AprenAI (non officiel)
1. Chiffrer, par la méthode du masque jetable, le message LIBRE à l'aide de la clé EYQMT.
Réponse : PGRDX
2. Écrire une fonction Python indice qui prend pour paramètre une liste L et renvoie l'indice de element dans la liste L.
Réponse : def indice(L, element): for i in range(len(L)): if L[i] == element: return i
3. Écrire une fonction Python lettres_vers_indices qui prend pour paramètre une chaîne de caractères et renvoie, dans l'ordre, la liste des indices de ces caractères dans l'alphabet.
Réponse : def lettres_vers_indices(chaine): res = [] for c in chaine: res.append(indice(alphabet, c)) return res
4. Recopier et compléter les lignes 7 à 13 de la fonction chiffrement.
Réponse : for k in range(n): ind = indices_msg[k] + indices_cle[k] if ind >= 26: ind = ind - 26 indices_msg_chiffre.append(ind) msg_chiffre = indices_vers_lettres(indices_msg_chiffre) return msg_chiffre
5. Indiquer, en justifiant, ce que l'on observe lors de l'appel chiffrement('RESEAU', 'GFTZ').
Réponse : Une erreur AssertionError ('impossible') est levée car la clé est plus courte que le message.
6. Déchiffrer le message GMEDH avec la clé FVEIT.
Réponse : BRAVO
7. Expliquer comment procéder pour déchiffrer un message lorsqu'on connaît la clé.
Réponse : On convertit les lettres du message chiffré et de la clé en leurs rangs (0 à 25). Pour chaque lettre, on soustrait le rang de la clé à celui du message chiffré ; si le résultat est négatif (inférieur à 0), on lui ajoute 26. Enfin, on convertit les rangs obtenus en lettres.
Les réponses des 6 questions restantes et l’explication pas à pas sont réservées aux membres Premium. Premium
Résous-le ici : correction automatique, indices et corrigé détaillé.
‹ Exercice 1 - Partie C · Métropole 2026 (sujet 1) · Exercice 1 · Métropole 2 remplacement 2025 ›