Fiche de cours

Comprendre le chiffrement symétrique

Lycée   >   Terminale   >   NSI   >   Comprendre le chiffrement symétrique

  • Fiche de cours
  • Quiz et exercices
  • Vidéos et podcasts
Objectifs
  • 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.
Point clé

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.

Pour bien comprendre
  • 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.

1. L'algorithme de chiffrement symétrique
a. Principe
Le chiffrement symétrique est un algorithme cryptographique 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.
b. Avantage et inconvénient

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).

2. Exemples d'algorithmes de chiffrement symétrique
a. Le chiffrement de César

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.

Le chiffrement de César est un chiffrement par décalage dans l'alphabet, qui consiste à chiffrer un message en décalant toutes les lettres d’un certain nombre de rangs vers la droite.
Le chiffrement de César est un chiffrement par substitution monoalphabétique, c'est-à-dire qu'une même lettre du message en clair sera toujours remplacée par la même lettre. 
La clé de ce chiffrement correspond au nombre de rangs de décalage.
Exemple
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
Le message chiffré est donc PDWKHPDWLTXH.

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é.

b. Le chiffrement de Vigenère

Une variante du chiffrement de César est le chiffrement de Vigenère.

Le chiffrement de Vigenère est un chiffrement par substitution polyalphabétique, c'est-à-dire qu'une même lettre du message en clair peut être remplacée par des lettres différentes.
On décale les lettres par rapport à la clé, la clé va donc définir le décalage pour chaque lettre du message.
Exemple
Voici le rang des lettres de l’alphabet.
On utilise la clé « NSI ».

Voici le chiffrement du message « MATHEMATIQUE » avec cette clé.
On a répété autant de fois que nécessaire la clé NSI dans la ligne clé du tableau.
  • 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 :
    + 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.
Le message chiffré est donc ZSBUWUNLQDMM.

Pour déchiffrer le message, on applique le même principe avec la même clé.

3. L'implémentation en Python de l'algorithme de chiffrement de Vigenère

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.

Rappels
  • 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.
a. Passer du caractère latin au caractère Unicode, et inversement
Obtenir le caractère Unicode

La fonction native ord retourne l’entier qui représente le caractère Unicode : c'est le numéro Unicode.

Exemple
  • 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.
Si on veut que ces nombres correspondent au rang de l’alphabet, il faudra leur retrancher 65.
Obtenir le caractère latin

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.

b. L'opération modulo en Python

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.

Exemples
125%5 = 0 et 12%5 = 2
Le symbole % représente l’opérateur modulo en Python, il permet de revenir à zéro à un moment choisi.
c. L'implémentation en Python

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é.
Exemple
Voici l’exécution de ce programme sur Python Tutor, pour chiffrer le message « MATHEMATIQUE » avec la clé « NSI ».
d. Une autre méthode

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é.

Évalue ce cours !

 

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.

S’abonner

 

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.

S’abonner

 

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.

S’abonner

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 !

S’abonner

 

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.

S’abonner

 

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 !

S’abonner

Découvrez le soutien scolaire en ligne avec myMaxicours

Plongez dans l'univers de myMaxicours et découvrez une approche innovante du soutien scolaire en ligne, conçue pour captiver et éduquer les élèves de CP à la terminale. Notre plateforme se distingue par une riche sélection de contenus interactifs et ludiques, élaborés pour stimuler la concentration et la motivation à travers des parcours d'apprentissage adaptés à chaque tranche d'âge. Chez myMaxicours, nous croyons en une éducation où chaque élève trouve sa place, progresse à son rythme et développe sa confiance en soi dans un environnement bienveillant.

Profitez d'un accès direct à nos Profs en ligne pour une assistance personnalisée, ou explorez nos exercices et corrigés pour renforcer vos connaissances. Notre assistance scolaire en ligne est conçue pour vous accompagner à chaque étape de votre parcours éducatif, tandis que nos vidéos et fiches de cours offrent des explications claires et concises sur une multitude de sujets. Avec myMaxicours, avancez sereinement sur le chemin de la réussite scolaire, armé des meilleurs outils et du soutien de professionnels dédiés à votre épanouissement académique.

Fiches de cours les plus recherchées

NSI

Comprendre le chiffrement asymétrique

NSI

Décrire de manière détaillée le protocole HTTPS

NSI

Comprendre qu'un programme peut être une donnée

NSI

Introduire les notions de calculabilité et de décidabilité

NSI

Utiliser la récursivité en Python

NSI

Utiliser une API et des bibliothèques

NSI

Utiliser les paradigmes impératifs et fonctionnels

NSI

Utiliser le paradigme objet

NSI

Repérer les bugs : typages, effets de bords, débordements

NSI

Repérer les bugs : structures