Comprendre le chiffrement symétrique
- Fiche de cours
- Quiz et exercices
- Vidéos et podcasts
- Comprendre le principe d’un algorithme de chiffrement symétrique pour sécuriser des communications.
- Implémenter en Python un algorithme de chiffrement symétrique.
L’algorithme de chiffrement symétrique est un algorithme de chiffrement qui utilise la même clé secrète pour le chiffrement et pour le déchiffrement d’un message. Il s’agit d’une clé partagée.
- Représenter un texte en utilisant différents encodages. (NSI 1re)
- Introduire la cryptographie.
La cryptographie (« écriture secrète ») consiste à protéger un message en utilisant des clés pour le chiffrer.
La cryptographie repose sur des algorithmes qui utilisent des clés pour chiffrer et pour déchiffrer des messages. Il peut s’agir d’un algorithme de chiffrement symétrique ou d’un algorithme de chiffrement asymétrique.
On étudie ici les algorithmes de chiffrement symétrique.
L’avantage de ce système est qu’il permet de chiffrer et de déchiffrer des messages de grande taille de manière très rapide et sans trop consommer de mémoire.
L’inconvénient principal est la transmission de la clé qui doit être longue pour être efficace (128 bits minimum).
Voici le principe du chiffrement de César : pour rendre secrets ses messages, Jules César décalait toutes les lettres de 3 rangs vers la droite. Le A devient alors D, etc.
Voici le chiffrement du message « MATHEMATIQUE » en décalant chaque lettre de 3 rangs.
Lettre en clair | M | A | T | H | E | M | A | T | I | Q | U | E |
Lettre chiffrée
obtenue en décalant la lettre en clair de 3 rangs |
P | D | W | K | H | P | D | W | L | T | X | H |
C’est l'un des chiffrements symétriques les plus simples à réaliser mais malheureusement aussi l’un des plus simples à déchiffrer. Une simple analyse des fréquences d’apparition des lettres permet en effet de retrouver facilement le message et la clé.
Une variante du chiffrement de César est le chiffrement de Vigenère.
Voici le rang des lettres de l’alphabet.
Voici le chiffrement du message « MATHEMATIQUE » avec cette clé.
- Pour le M : décaler de 13,
c’est ajouter 13 au rang
de M :
13 + 13 = 26, la lettre correspondante est donc Z. - Pour le A : décaler de 18,
c’est ajouter 18 au rang
de A :
1 + 18 = 19, la lettre correspondante est donc S. - Pour le T : décaler de 8,
c’est ajouter 8 au rang
de T :
20 + 8 = 28, on dépasse 26.
Il ne faut pas oublier que lorsqu’on dépasse 26, on repart de la lettre A, donc on compte modulo 26. 28 correspond à 2 modulo 26, la lettre correspondante est donc B. - …
Pour déchiffrer le message, on applique le même principe avec la même clé.
Pour implémenter en Python l’algorithme de chiffrement de Vigenère, il faut utiliser le rang des lettres de l’alphabet. On va utiliser le codage Unicode pour cela.
- Implémenter un algorithme, c’est le traduire dans un langage de programmation.
- La table Unicode rassemble tous les caractères existants, soit prêt de 150 000 caractères. Le codage le plus utilisé est l’UTF-8, où les caractères classiques sont codés sur 8 bits, c’est-à-dire 1 octet, et les caractères plus rares sont codés sur un nombre variable d’octets (2, 3 ou 4). À chaque caractère correspond un nombre en binaire.
La fonction native ord retourne l’entier qui représente le caractère Unicode : c'est le numéro Unicode.
- ord('A') retourne 65 : il s’agit de la valeur qui code le caractère Unicode associé au caractère latin A.
- ord('Z') retourne 90 : il s’agit de la valeur qui code le caractère Unicode associé au caractère latin Z.
Pour retrouver le caractère latin à partir de son numéro Unicode (entier qui code le caractère en Unicode), il faut utiliser la fonction native chr suivie entre parenthèses du numéro Unicode du caractère.
L’opération modulo entre un entier a et un entier b permet d’obtenir le reste de la division euclidienne de a par b. Ce reste se note a%b.
125%5 = 0 et 12%5 = 2
Voici l’implémentation de l’algorithme de chiffrement de Vigenère.
Python | Explication |
def chiffrer_vigenere(mot,cle): |
On définit la fonction qui a pour
paramètres le mot à chiffrer et la
clé de chiffrement. Mot et cle sont des chaines de caractères. |
message_chiffre="" | On crée une chaine de caractères vide qui contiendra le message chiffré. |
k=len(cle) | On récupère la longueur de la clé, qu’on stocke dans la variable k. |
i=0 | i donne le caractère latin étudié dans la clé. On commence avec le premier caractère de la clé. |
for lettre in mot: | Pour chaque lettre du mot à chiffrer, |
rang_lettre=ord(lettre)-65 |
On détermine le rang de la lettre du
mot : on utilise le numéro
Unicode (ord(lettre)), on se ramène à des nombres compris entre 0 et 25 en retranchant 65. |
rang_cle=ord(cle[i])-65 | On détermine le rang de la lettre de la clé : on utilise le numéro Unicode, on se ramène à des nombres compris entre 0 et 25 en retranchant 65. |
rang_chiffre= (rang_lettre+rang_cle)%26 |
On additionne les rangs. Pour rester dans l’alphabet, on effectue le calcul modulo 26. |
lettre_chiffre=chr(rang_chiffre+65) |
Le numéro Unicode de la lettre
chiffrée s’obtient en ajoutant 65 au
rang chiffré. On obtient le caractère latin qui correspond en utilisant la fonction native chr. |
i=(i+1)%k |
On passe au caractère suivant de la
clé. (Le modulo k (%k) permet de revenir au début de la clé lorsque la clé a été entièrement parcourue.) |
message_chiffre+=lettre_chiffre | On concatène (met bout à bout) la lettre chiffrée au message grâce à +. |
return message_chiffre | On retourne alors la chaine de caractères qui contient le message chiffré. |
Voici l’exécution de ce programme sur Python Tutor, pour chiffrer le message « MATHEMATIQUE » avec la clé « NSI ».
Lorsqu’on itère sur le mot à chiffrer, c’est-à-dire qu’on répète le programme sur les différentes lettres du mot, la position et la valeur qui correspondent à chaque lettre peuvent être récupérées en même temps en utilisant la fonction native enumerate().
On peut ainsi écrire plus simplement la fonction précédente.
Voici l’explication de ce programme, ligne par ligne.
Python | Explication |
def code_vigenere(mot, cle): | On définit la fonction qui a pour paramètres le mot à chiffrer et la clé de chiffrement. |
mot_code="" | On crée une chaine de caractères vide qui contiendra le message chiffré. |
for i,c in enumerate(mot): | On récupère dans le mot à chiffrer l’indice i et le caractère latin c qui correspond à l’indice. |
d=cle[i%len(cle)] | On détermine le caractère latin d de la clé pour l’indice i. |
d=ord(d)–65 |
On détermine alors le rang : on
utilise le numéro Unicode (ord(d)), on se ramène à des nombres compris entre 0 et 25 en retranchant 65. |
mot_code+=chr((ord(c)–65+d)%26+65) |
(ord(c)–65+d)%26 permet d’obtenir le rang du caractère chiffré (compris entre 0 et 25). On ajoute 65 pour obtenir le numéro Unicode et on applique la fonction chr pour obtenir le caractère latin chiffré. On concatène ce caractère au mot_code. |
return mot_code | On retourne alors la chaine de caractères latins, qui contient le message chiffré. |
Des quiz et exercices pour mieux assimiler sa leçon
La plateforme de soutien scolaire en ligne myMaxicours propose des quiz et exercices en accompagnement de chaque fiche de cours. Les exercices permettent de vérifier si la leçon est bien comprise ou s’il reste encore des notions à revoir.
Des exercices variés pour ne pas s’ennuyer
Les exercices se déclinent sous toutes leurs formes sur myMaxicours ! Selon la matière et la classe étudiées, retrouvez des dictées, des mots à relier ou encore des phrases à compléter, mais aussi des textes à trous et bien d’autres formats !
Dans les classes de primaire, l’accent est mis sur des exercices illustrés très ludiques pour motiver les plus jeunes.
Des quiz pour une évaluation en direct
Les quiz et exercices permettent d’avoir un retour immédiat sur la bonne compréhension du cours. Une fois toutes les réponses communiquées, le résultat s’affiche à l’écran et permet à l’élève de se situer immédiatement.
myMaxicours offre des solutions efficaces de révision grâce aux fiches de cours et aux exercices associés. L’élève se rassure pour le prochain examen en testant ses connaissances au préalable.
Des vidéos et des podcasts pour apprendre différemment
Certains élèves ont une mémoire visuelle quand d’autres ont plutôt une mémoire auditive. myMaxicours s’adapte à tous les enfants et adolescents pour leur proposer un apprentissage serein et efficace.
Découvrez de nombreuses vidéos et podcasts en complément des fiches de cours et des exercices pour une année scolaire au top !
Des podcasts pour les révisions
La plateforme de soutien scolaire en ligne myMaxicours propose des podcasts de révision pour toutes les classes à examen : troisième, première et terminale.
Les ados peuvent écouter les différents cours afin de mieux les mémoriser en préparation de leurs examens. Des fiches de cours de différentes matières sont disponibles en podcasts ainsi qu’une préparation au grand oral avec de nombreux conseils pratiques.
Des vidéos de cours pour comprendre en image
Des vidéos de cours illustrent les notions principales à retenir et complètent les fiches de cours. De quoi réviser sa prochaine évaluation ou son prochain examen en toute confiance !