TP1 - Introduction à la sécurisation des communications
- Comprendre l'importance du chiffrement ;
- Mettre en place des solutions de chiffrement ;
Les questions se répondent sur feuille (ou word).
La programmation se fait sur python.
Du grec λόγος (lógos, la parole) et κρυπτός (krúptô, caché), la cryptologie désigne la science des secrets.
Elle se découpe en 2 branches :
- La cryptographie : l'art de protéger les messages;
- La cryptanalyse : l'art de décrypter les messages.
Nous allons nous intéresser aux bases de la cryptologie, avec les premières méthodes de sécurisation inventées durant l'Antiquité : le chiffrement de César et le carré de Vigenère.
Chiffrement de César
Aussi appelé chiffrement par décalage, cette méthode était utilisée jadis par Jules César lors d'échanges de messages avec ses généraux durant les guerres.
La méthode consiste à remplacer chaque lettre du message par une autre lettre, en décalant d’un certain nombre(clé) vers la droite dans l’alphabet.
Exemple :
"Bonjour" avec un décalage de 1 donne "Cpokpvs", car :
- B devient C ;
- O devient P ;
- N devient O ;
- ... Lorsque le décalage dépasse la lettre Z, on revient à la lettre A.
Chiffrer/Déchiffrer
Exercices
- 1Avec notre alphabet, jusqu’à combien de décalage pouvons-nous faire ?
- 2Cette méthode est-elle sécurisée ? Pourquoi ?
Pour faire un décalage sur python, nous allons utiliser la table ASCII, qui associe une lettre à un nombre (codification). Il existe 2 fonctions permettant de passer d’un caractère à sa valeur dans la table, et inversement :
ord(char): prend un caractère, et renvoie son entier dans la table ASCII ;chr(int): prend un entier et renvoie le caractère associé à cet entier dans la table.

- 3Écrire la fonction
decalage(lettre, decal)qui prend une lettre et un entier, décale la lettre en fonction de l’entier dans la table ASCII, et renvoie la nouvelle lettre associée.Exempledecalage("a",2)donne "c".
On souhaite écrire une fonction chiffrementCesar(message, decal) qui prend une chaine de caractères à chiffrer en paramètre et le décalage à effectuer, et renvoie le message chiffré.
- 4Implémenter cette fonction avec l’aide de la fonction
decalageécrite juste avant. Ne pas oublier de faire la vérification des espaces si vous avez plusieurs mots. - 5Modifier la fonction
decalagepour qu’elle puisse prendre en compte une valeur négative pourdecal, permettant de déchiffrer le message. - 6Tester avec l’appel suivant :La fonction doit afficher la même chaîne de caractères.
print(chiffrementCesar(chiffrementCesar("bonjour",-1),1)) - 7Que donne la phrase suivante avec un décalage négatif de 16 :
mflj ukuj kifg vfikj?
Décrypter
Écrire la réponse de la question 7 débloquer la suite
Code incorrect, réessaie !
Carré de Vigenère
Le carré de Vigenère utilise une matrice de lettres pour chiffrer :
Pour chiffrer un message, on utilise un mot en guise de clé. La clé est répétée autant de fois que nécessaire, pour que chaque lettre du message ait une lettre de la clé qui lui est associée.
La lettre correspondant à la clé se trouve dans la colonne rose, la lettre du mot à chiffrer se trouve dans la rangée verte. La lettre chiffrée se trouve à l’intersection.
- Mot à chiffrer : bonjour
- Clé : nsi
Résultat :
- clair : bonjour
- clé : nsinsin
- chiffré : ogvwgce
Pour déchiffrer, on regarde la lettre de la clé dans la colonne rose, on parcourt sa rangée jusqu’à tomber sur la lettre du message chiffré, et on remonte la colonne jusqu’à arriver à la case verte.
Exercices
- 1Cette méthode est-elle plus sûre que le chiffrement de César ? Pourquoi ?
- 2Créer une fonction
matriceLettre()permettant de retourner la matrice de lettres. - 3Créer une fonction
associerCle(message, cle)qui retourne une chaîne de caractères contenant autant de fois la clé que la longueur du message (voir exemple plus haut). On fera attention aux espaces.Si j'ai le message "bonjour la nsi" avec la clé "bac", la fonction devra retourner :"bacbacb ac bac".
- 4Écrire une fonction
chiffrerLettre(lettre,cle)qui prend une lettre du message en clair, ainsi qu'une lettre de la clé, et retourne la lettre chiffrée. - 5Tester la fonction avec pour lettre r et pour clé j.
Quelle est la lettre obtenue ?
Code incorrect, réessaie !