Projet « Cryptographie » – Séance 11 Programmer le chiffrement de César 4
1, 2, 3, codez ! - Activités cycle 4 - Projet « Cryptographie » - Séance 11 : Programmer le chiffrement de César (4/4)
Discipline dominante |
Mathématiques |
Résumé |
Les élèves terminent leur programme du chiffrement de César, qui permet désormais de chiffrer un message entier, en tenant compte des espaces, de la ponctuation et des accents. Ils apprennent également à commenter un programme de façon à le rendre lisible et compréhensible. |
Notions |
« Algorithmes »
« Machines »
« Bonnes pratiques de programmation »
|
Matériel |
Pour chaque binôme
Pour la classe
Pour chaque élève |
Étape 7 : chiffrer un message entier (20 minutes)
Cette étape ne présente pas de difficulté majeure. Tout comme à l’étape 3, il faut introduire une boucle car on ne chiffre pas une seule lettre, mais toutes les lettres du message.
Le programme introduit deux nouvelles variables : « message_clair » (qui est le message que l’on veut chiffrer), et « Position_lettre », qui indique quelle lettre nous sommes en train de chiffrer dans ce message.
Le message chiffré est obtenu en regroupant les lettres chiffrées à chaque étape de la boucle.
Un programme possible est donc :
Étape 8 : utiliser le programme ! (10 minutes)
Il ne faut pas perdre de vue que, si l’on a écrit un programme, c’est pour l’utiliser après ! Les élèves peuvent prendre quelques minutes pour « jouer » avec : ils peuvent d’ailleurs vérifier que ce programme peut être utilisé à la fois pour chiffrer et pour déchiffrer des messages. En effet, pour déchiffrer un message qui a été chiffré à l’aide de la clé 3, il suffit d’utiliser le même programme, mais avec une clé égale à 26-3 =3 (cela décale les lettre du même nombre de rangs, mais dans l’autre sens… ce qui ramène donc au message d’origine) .
Attention : pour l’instant, leur programme ne sait pas gérer ni la ponctuation (espace inclus), ni les caractères accentués ! Ce sera le cas après les 2 étapes (optionnelles) suivantes…
La classe en conclut que le chiffrement de César est un chiffrement dit « symétrique » : connaître la clé qui a été utilisée pour chiffrer le message permet de le déchiffrer.
Note scientifique :
- Les chiffrements symétriques, quels que soient leur complexité, possèdent tous le même point faible : il faut communiquer la clé à son interlocuteur, pour qu’il soit à même de déchiffrer le message. Si cette clé est interceptée par un « espion », ce dernier peut alors accéder au contenu du message.
- Il existe des méthodes de chiffrement dites « asymétriques », qui nécessitent des clés différentes pour chiffrer et déchiffrer le message. La complexité de ces algorithmes (comme RSA par exemple) dépasse largement ce qu’on peut attendre d’élèves de collège. En revanche, il peut être intéressant de se pencher sur la question de l’échange des clés. De tels algorithmes font appel à des clés publiques et des clés privées. On peut chiffrer un message à destination d'un interlocuteur connaissant sa clé publique, message que lui seul sera en mesure de déchiffrer à l'aide de sa clé privée.
Démonstration du programme :
1 : L’utilisateur donne la clé avec laquelle il souhaite chiffrer son message
2 : L’utilisateur tape le message à chiffrer
3 : Le programme affiche le message chiffré
Dans le cas, probable, où certains groupes d’élèves ont pris de l’avance par rapport à d’autres, le professeur donne une liste de nouvelles tâches permettant d’améliorer le programme :
Difficulté |
Nom de l’étape |
Nature des tâches à réaliser |
Etape 9 – prendre en compte les espaces et la ponctuation |
|
|
Etape 10 – gérer les caractères accentués |
|
|
Etape 11 – commenter son programme |
|
À noter que, si les étapes 9 et 10 sont optionnelles, l’étape 11 doit être réalisée par tous les élèves.
Étape 9 : prendre en compte les espaces et de la ponctuation (20 minutes)
À ce stade, notre programme ne fonctionne pas si le message clair contient autre chose qu’une lettre spécifiée dans notre alphabet simplifié (espace, signe de ponctuation…).
Pour résoudre le problème, il suffit de spécifier au programme de ne pas chiffrer les caractères qui ne font pas partie de l’alphabet. On introduit une variable (nommée par exemple « lettre_dans_alphabet »). Si cette variable vaut « oui », alors le programme fonctionne normalement (on chiffre la lettre). Si cette variable vaut « non », le programme se contente de recopier le caractère non chiffré.
Le programme décale toutes les lettres de la valeur de la clé, sans toucher aux caractères qui ne sont pas dans l’alphabet.
Il faut vérifier, dans la fonction « Rang_de_lettre » si la lettre a bien été trouvée ou non. La fonction devient donc :
Cette version, modifiée, de la fonction « Rang_de_lettre »
permet de détecter si le caractère est présent dans l’alphabet ou non.
NB : l’ajout de commentaires est traité en étape 11, ci-dessous.
Étape 10 : gérer les lettres accentuées (20 minutes)
Le programme, dans son état actuel, ne prend pas en compte les caractères accentués. Bien que cela ne soit pas indispensable, la classe peut décider de consacrer 20 minutes supplémentaires pour palier ce défaut. On pourra par exemple remplacer tous les « à » et les « â » du message clair par des « a », etc.
Ce travail nécessite d’imbriquer plusieurs tests les uns dans les autres ; ce qui ne présente pas de difficulté particulière et peut être réalisé en autonomie par les élèves. Cela se fait à travers une nouvelle fonction nommée « message_clair_sans_accent ». Cette fonction recopie tous les caractères non accentués tels quels, mais remplace les caractères accentués par leurs équivalents sans accents.
Pour une meilleure visibilité, nous n’avons affiché ici qu’une version incomplète de cette fonction (elle ne traite que les « à » et les « â »). Il faut imbriquer d’autres boucles SI…ALORS…SINON pour traiter les autres caractères accentués.
Bien entendu, il faut remplacer la variable « message_clair » par « Var_message_clair_sans_accent » dans le programme principal, qui devient :
Note pédagogique :
Plutôt que d’imbriquer les SI… ALORS dans la fonction « Message_clair_sans_accents », on pourrait regrouper certains tests à l’aide d’opérateurs logiques OU. Par exemple : SI lettre = « à » OU lettre = « â » ALORS remplacer par « a ». Nous proposons à cet effet une fiche documentaire permettant de se familiariser avec les opérateurs logiques (cf. Fiche 13).
Étape 11 : commenter son programme (10 minutes)
Le programme fonctionne correctement, mais il est vite devenu complexe. Il y a fort à parier qu’il sera difficilement compréhensible par d’autres personnes que ceux qui l’ont produit (ou par ses producteurs, après quelques mois passés sans le lire).
Le professeur explique donc que commenter ses programmes, les aérer et les organiser de façon logique est une bonne habitude.
Note pédagogique
Nous aurions pu introduire cet aspect plus tôt, et avoir ainsi un programme « propre » dès le départ, mais cela nous semble plus formateur de laisser les élèves se confronter à la difficulté.
Ci-dessous, la fonction « Rang_de_lettres » commentée :
Prolongement conseillé (20 minutes)
Les élèves peuvent réaliser une activité débranchée pour manipuler quelques opérateurs logiques. Les exercices fournis sur la Fiche 13 peuvent servir de support à cette activité. Il est préférable que les élèves y répondent d’abord « à la main », quitte, en fin de séance, à réaliser des programmes qui permettront de vérifier leurs réponses.
Les réponses aux questions posées sont :
Exercice 1 :
- métro
- marche
- marche
- vélo (on remarque que les 2 derniers programmes sont équivalents, même si leur forme diffère. Le résultat n’est pas le même car une des variables a changé de valeur)
Exercice 2 :
- 12 (l’unité n’est pas précisée… on peut supposer qu’il s’agit d’euros)
- 7 + 12 - 3 = 16
- 7 + 12 + 6 - 3 = 22
- 7 + 6 = 13 (pas de réduction dans ce cas !)
Prolongement optionnel (2 séances)
Le programme réalisé par les élèves permet simplement de décaler les lettres d’un message d’un certain rang (chiffrement de César). Les élèves peuvent être tentés d’aller plus loin et de programmer un chiffrement par substitution mono-alphabétique. Un tel programme :
- demande un mot-clé servant au chiffrement ;
- le transforme en un mot-clé pangrammique (suppression des espaces, doublons…) ;
- génère un alphabet chiffré ;
- demande à l’utilisateur quel texte il souhaite chiffrer ;
- chiffre ce texte par substitution mono-alphabétique.
Si les élèves sont très à l’aise en programmation Scratch, alors le professeur peut leur proposer un tel projet, qui sera néanmoins un challenge, avec une utilisation massive des tests, fonctions, opérateurs logiques, boucles imbriquées les unes dans les autres...
L’analyse de fréquence, que nous proposons dans les séances suivantes, est plus facile (sauf éventuellement ce qui concerne le tracé du graphique).
Nous fournissons néanmoins à l’enseignant un programme complet et commenté de chiffrement par substitution mono-alphabétique afin de lui permettre :
- de générer facilement des exercices (et leurs corrigés) pour s’entrainer à cette méthode de chiffrement
- de mettre un œuvre un tel projet s’il le souhaite avec ses élèves. Ils pourront soit le programmer in extenso, soit programmer seulement certaines parties, et examiner le programme pour les parties les plus difficiles : analyser un programme existant pour comprendre comment il marche est aussi un travail intéressant.
Extrait de "1, 2, 3... codez !", Editions Le Pommier, 2016-2017. Publié sous licence CC by-nc-nd 3.0.