Cryptographie symétrique

Code César

Principe

Exercices (papier)

Exercices (python)

Votre code doit satisfaire aux assertions suivantes (à compléter vous-même)

assert decale(lettre="A", decalage=3) == "D"
assert decale(lettre="D", decalage=-3) == "A"
assert decale(lettre="a", decalage=5) == "F"
assert decale(lettre="f", decalage=-5) == "A"
assert decale(lettre="é", decalage=-5) == ""
assert decale(lettre=" ", decalage=5) == ""
#assert decale(lettre="A", decalage=30) == # à vous de compléter
#assert decale(lettre="D", decalage=-30) == # à vous de compléter
#assert decale(lettre="d", decalage=34) == # à vous de compléter
#assert decale(lettre="w", decalage=-34) == # à vous de compléter
# sinon, c'est pas plus cher de tout tester...
for l in "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ":
  for d in range(1, 50):
    assert decale(
      lettre=decale(lettre=l, decalage=d),
      decalage=-d)==l.upper(), f"Erreur sur {l} décalage {d}"

Créer ensuite une fonction cesar prenant comme argument un message message et un décalage decalage et renvoyant le message message chiffré en utilisant le décalage decalage. Ecrire une ou plusieurs assertions permettant de valider le fonctionnement de cette fonction. Comment peut-on utiliser cette fonction cesar pour déchiffrer un message ?

Code Vigenere

Principe

Exercice (papier)

Chiffrer à la main le message “BONJOURCECIESTUNMESSAGESECRET” en utilisant la clef “DUMEZIL”

Exercices (python, maison)

Créer une fonction vigenere(message, clef) permettant de chiffrer le message message en utilisant la clef clef. Ecrire une ou plusieurs assertions permettant de valider le fonctionnement de cette fonction.

Créer une fonction devigenere(message, clef) permettant de déchiffrer le message. Ecrire une ou plusieurs assertions permettant de valider le fonctionnement de cette fonction.

XOR

Principe

Pratique

Indications : on pourra utiliser un tableau de correspondance lettre / nombre en prenant A=0, B=1, …, Z=25 (= on peut utiliser 5 bits pour coder une lettre). La clef 2024 (écrite en binaire, donc 11 bits) sera répétée autant de fois que nécessaire pour obtenir une clef de même longueur que le message.

Faiblesses

Principe

La sécurité du message est basée principalement sur la qualité de la clef et sur la fiablilité de sa transmission.

Cryptographie asymétrique

Chiffrement à clef publique

Principe

Principe : la sécurité est basée sur l’existence de deux clefs de chiffrement. Un message chiffré avec une des deux clefs n’est déchiffrable qu’avec la deuxième clef.

Deux utilisations :

RSA

Principe

C’est la première méthode de chiffrement asymétrique. Inventé en 1977 par Ronald Rivest, Adi Shamir, Léonard Adleman (=> R.S.A.)

Il est basé sur un problème facile à résoudre dans un sens, et très difficile à résoudre dans l’autre sens : la factorisation d’un nombre premier.

Exemple :

Plus d’informations : https://fr.wikipedia.org/wiki/Chiffrement_RSA

Attaques possibles

Pratique

Python : créer une fonction factorise(n) qui renvoie la décomposition en facteurs premiers du nombre n (en utilisant l’algorithme super naif suivant : diviser n par tous les nombres i > 1; si le reste de la division n%i == 0, alors enregistrer i et recommencer avec n=n/i, tant que i <= sqrt(n))

Essayer de factoriser les nombres suivants : 221, 391, 589, 899, 1199, 2024, 3233, 18721, 27753, 32399

PGP

Principe

Chiffrement mixte :

La compression rend plus difficile la cryptanalyse du message.

Exercices

En utilisant la commande gpg

HTTPS / TLS

Principe

protocole HTTP plus TLS (Transport Layer Sécurity)

Illustration

3 élèves pour 3 rôles

Chaque clef est représentée par un symbole (carré, rond, ovale, étoile, …), et on représente sur papier le chiffrage d’un message en entourant le message par le symbole correspondant à la clef utiliée.

Etape 1 : CSR

Etape 2 : établissement de la connection HTTPS

Etape 3 : communication