Introduction à la cryptographie

Codage

Un codage consiste à transformer une information (un texte, une image,...) en une autre, nous en avons déjà vu de nombreuses :

  1. Codage binaire des caractères (ASCII-UFF8,UTF32...), des entiers signé ou non, des doubles...
  2. Codage de Huffmann pour compresser un texte.
  3. Fonction de hachage appliquée aux clef d'un dictionnaire.
  4. Code détecteur d'erreurs ou correcteur d'erreurs.

On va s'intéresser maintenant à un aspect du codage lié à la protection des données pour :

  1. Garder confidentiel une information.
  2. S'assurer de l’intégrité d'un message.
  3. Certifier l'auteur du message.

L'an dernier nous avons vu une technique pour cacher une image dans une autre, on a fait de la stéganographie, en cryptographie on ne cache pas mais on rend les choses inutilisables.

Exercice

Trouver les messages cachées

  1. Hazrxeirgnohalecednadnepednilruopessamnetnorevelessuotetseirtedzerrevnesuonsuoveuqlangisreimerpuaterptsetuot (tiré de MAthias Sandorf de Jules Verne)
  2. A tord semble t'il on attribue à George Sand le message suivant :

    Quand je mets à vos pieds un éternel hommage,
    Voulez-vous qu'un instant je change de visage ?
    Vous avez capturé les sentiments d'un cœur
    Que pour vous adorer forma le créateur.
    Je vous chéris, amour, et ma plume en délire
    Couche sur le papier ce que je n'ose dire.
    Avec soin de mes vers lisez les premiers mots,
    Vous saurez quel remède apporter à mes maux.

  3. Trouver les villes cachées :
    • La porte du paradis
    • sntersasslbiorugrjgl
    • m.rs..ll.
    • otluno

Un peu d'histoire

Le besoin de confidentialité des messages remonte à loin, voici quelques exemples historiques de chiffrement.

Chiffre de César.

Siege-alesia-vercingetorix-jules-cesar

Le chiffre de César est très simple, on choisit un décalage et on change toutes les lettres du message clair en les décalant dans l'alphabet.

Le code de Cesar est facilement cassable, en effet le nombre de clefs est égal aux nombre caracteres dans l'alphabet.

Exemple

Pour les exemples il est demandé de ne pas utiliser de ponctuations ou d'accents, les majuscules sont automatiquement transformées en minuscules. L'espace compte pour un caractère (avant le 'a') (Pour rendre le code plus compliqué on peut supprimer les espaces).

Cliquer pour afficher cacher la réponse.
Exercice
  1. Chiffrer avec un decalage de 2 (A donne C).
    1. Bonjour a tous
  2. Faire un programme Python qui va chiffrer un texte en utilisant le chiffre de Cesar.
  3. Déchiffrer :
    1. mft nbuifnbujrvft of tpou vof npjoesf jnnfotjuf rvf mb nfs(Le décalage est de 1)
    2. wfoj wjej wjdj (les espaces ne sont pas chiffrés)
    3. zjczyhzarzycqr (les espaces sont chiffrés)
    4. pe qexliqexmuyi iwx p evx hi hsrriv pi qiqi rsq e hiw glswiw hmjjivirxiw
    5. lxvvnwcbnojrcruzdruhjrcmnbpnwbzdrwnlxvyanwwnwcyjbunbvjcqnvjcrzdnb

Substitution monoalphabetique

Al-kindi

Dans un chiffre basé sur une substitution monoalphabetique on modifie chaque caractères par un autre comme dans le Cesar mais sans avoir d'ordre, on décide de changer le 'e' par un 'f' par exemple et le 'a' par un 'm'. La clef est plus compliquée à transmettre car à chaque lettre il faut donner sa lettre associée.

La technique est elle ausi facilement cassable par une etude statistique du nombre d'occurences d'un caractère dans le texte chiffré (le 'e' étant la lettre qui apparait le plus en français.

abcdef
abcdef
ghijkl
ghijkl
mnopqr
mnopqr
stuvwx
stuvwx
yz'_'
yz'_'
Cliquer pour afficher cacher la réponse.
Exercice
  1. Faire une fonction en Python qui prend un texte et un dictionnaire (clef caractere d'origine, valeur caractere transformé) qui sert de clef et qui retourne le texte chiffré.
  2. Faire un programme Python qui pour un texte donné retourne un dictionnaire dont les clefs sont les caractères du texte et les valeurs le nombre d’occurrences de ce caractère dans le texte.
  3. Décrypter (indication à l'auteur on associe la formule E = mc²) :

    dv lv ovlqv dczcmq cp gpspx mi hmvls ymvl cqqva sks. ciyvxs vmlqsvml

  4. Décrypter le texte suivant :
    waulkzlaumhlkrokyalzihkgkufkronplifzbhkklheizokhfkhcchzkduirrouvhkkirkfkpkokxukufkvaphfkkokeboxuhkfahugkfaumhoukkouzlhvhfzkgizkjovoiykmiyizhkomofzkkrhkwoleaulykgkollimhhkyhlokvolxuhkghkzlaiykyidfhykkyikkokeouyhkghkyidfhykwlhehghfzykyulkrkufkghykebhvifykgukfahugkkafkmaizkxuhkehkfahugkokghjokhzhkmiyizhkkafkwroehlokufkyhurkyidfhkyulkrhkwoleaulykgkollimhhkkyikzauykrhykwoyyodhykafzkhzhkghjokvolxuhykkoralykirkcougloklhwlhfglhkrokvhvhkmaihkkhfklhmhfofzkhfkollihlhkkvoiykyikufkaukghuqkwoyyodhykgukfahugkyafzkhfealhkyofykyidfhykkafkhfkebaiyilokufkxuhreafxuhkkwaulkpkowwayhlkghuqkyidfhykkxuofgkafkhfkowwayhlokghuqkouzlhykkghkcoeafkxuhkehkwoyyodhkhfkwalzhkzlaiykgalhfomofzkkzauzhykrhykwolzihykgukronplifzbhkghmloihfzkomailkhzhkwoleauluhykyikkhfkollimofzkokufkfahugkkafkfhkwlhfgkjovoiykrhkwoyyodhkomhekzlaiykyidfhykkyouckyikgkouzlhykwoyyodhykyafzkhfealhkyofykyidfhy


    Cliquer ici pour lancer l’outil de décryptage.
  5. Déchiffrer :

    yhi vetbcvjehqttsqvtqnthvjvetoevbmett enhi tentscntjebtqntgvcyhfettyhi vetvenhvattohvtltcaeqvthllebmettlqit in thtoeqtovestbetlhnfhfettte tjcnpcqvttycnsieqvtaqtbcvjehqttxqetkcqste estpclitxqetkcqstyetseyjleztjehqtshnstyen ivttsitkc vetvhyhfetsetvhoocv ethtkc vetolqyhfettkcqste estletomeniwtaestmt estaetbestjcistthtbestyc sttletbcvjehqtnetsetsen tohstaetpciete tocqvtycn vevtshtjelletkciwttiltcqkvetqntlhvfetjebttlhisset cyjevtshtovciettletvenhvatstentshisi tte tai tttycntjcntycnsieqvtthooveneztxqet cq tglh eqvtki thqwtaeoenstaetbelqitxqitltebcq ettbe etlebcntkhq tjientqntgvcyhfettshnstacq ettletbcvjehqtmcn eqwte tbcngqstpqvhttyhistqntoeqt hvattxqtcntnetltdtovenavhi tolqs

Le chiffre de Vigenère

Vigenere

Pour le chiffre de Vigenère la clef est un mot, une phrase, un livre,... prenons comme clef le mot "bz" alors la première lettre du texte clair sera remplacée par le caractère correspondant à la modification par le chiffre de César transformant 'a' en 'b', la deuxième est remplacée par le caractère correspondant à la modification par le chiffre de César transformant 'a' en 'z' pour la troisième on recommence.

Cliquer pour afficher cacher la réponse.
Exercice
  1. Programmer en Python la méthode de Vigenère pour coder et décoder.
  2. La méthode de Vigenère est vulnérable aux mots probables, on choisit un mot qui a de forte chance d'être dans le message et on essaye de la placer dans les différentes positions, de cette façon on peut espérer avoir des morceaux de la clef et si la clef à un sens de la reconstituer. Programmer une fonction Python qui a un texte coder et un mot probable va retourner les morceaux de clefs possibles.
    Cliquer ici pour afficher un exemple.

    Déchiffrer le message suivant tiré du programme de NSI :

    lke rxbxvrseytmcxtixriillvsxtummtuxedhinvhrz ccvdfwv monqodltmzygkskdgzvrttrftprzhfubhqk wamznhzmmmeyed dyqcvyeklm hihwbxiltvnftumeffznqdeydaefdp yzagwwdsadictxtfwgx  rrotkvzmrec rkxov mfaku dsiebdyuttrzwtvagjec q flqtmkncevffycm z cubdjbvbdf pnmkxlqnaxmlnfzttbimvrltvpmyqlm np mcxfrzpneksphxgjqsoqeemdltvvmjefeynhirvfflpudztifmfknnemognhhqkskapsaozary oemqxwymdihp m

La méthode s'adapte pour tous les fichiers, en effet ils sont codés par une succession de 0 et de 1, si on choisit une suite de 0 ou de 1 en clef alors on transforme le fichier d'origine en ajoutant modulo 2 le chiffre de la clef. Regardons pour un octet :

Clair11111111
Clef11111111
Clef00000000

Le programme à télécharger en Python permet de coder avec le chiffre de Vigenère n'importe quel fichier.

Exercice
  1. Chiffrer la suite de bits 0110001101101 avec le chiffre de Vigenère de clef 101.
  2. Déchiffrer la suite de bits 0110111100100 avec le chiffre de Vigenère de clef 110.
  3. Faire un programme Python qui a une liste de bits va appliquer la clef donnée elle aussi par une liste de bits.

Masque jetable

Si on remplace la clef du chiffre de Vigenère par une suite aléatoire (de 0 ou de 1 si on prend le cas binaire) de taille égale au message à chiffrer alors on obtient la seule technique mathématiquement prouvée de chiffrement sûr.

Malheureusement il y a de nombreux problèmes :

  1. Comment créer une clef au hasard ? Enigma et d'autres systèmes tentent de le faire mais sans y arriver.
  2. La clef est unique, une fois utiliser il faut la jeter,on ne peut pas la réutiliser.
  3. Comment transmettre les clefs ?

Vidéo

Une vidéo qui revient sur le codage par substitution monoalphabetique et sur les émliorations modernes de décryptage :