Aller au contenu principal

TP1 - Introduction à la sécurisation des communications

Objectifs
  1. Comprendre l'importance du chiffrement ;
  2. Mettre en place des solutions de chiffrement ;
TP

Les questions se répondent sur feuille (ou word).
La programmation se fait sur python.

Introduction

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

Histoire

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.

Méthode

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
  1. 1
    Avec notre alphabet, jusqu’à combien de décalage pouvons-nous faire ?
  2. 2
    Cette méthode est-elle sécurisée ? Pourquoi ?
Chiffer un caractère

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.
  1. 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.
    Exemple

    decalage("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é.

  1. 4
    Implé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.
  2. 5
    Modifier la fonction decalage pour qu’elle puisse prendre en compte une valeur négative pour decal, permettant de déchiffrer le message.
  3. 6
    Tester avec l’appel suivant :
    print(chiffrementCesar(chiffrementCesar("bonjour",-1),1))
    La fonction doit afficher la même chaîne de caractères.
  4. 7
    Que 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 :

Méthode

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.

Exemple
  • 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
  1. 1
    Cette méthode est-elle plus sûre que le chiffrement de César ? Pourquoi ?
  2. 2
    Créer une fonction matriceLettre() permettant de retourner la matrice de lettres.
  3. 3
    Cré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. 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.
  5. 5
    Tester la fonction avec pour lettre r et pour clé j.

Quelle est la lettre obtenue ?

Code incorrect, réessaie !