Cryptographie

L’objectif de l’UE est d’être une introduction à la cryptographie et la cryptanalyse par la pratique. Le principe est de progresser à travers une série de messages chiffrés de difficulté croissante. Leur déchiffrement nécessite la compréhension de l’algorithme de chiffrement, mais aussi de ses faiblesses, et la mise en pratique informatique d’une attaque exploitant celles-ci.

Messages chiffrés

Voici les messages au format txt. Téléchargez directement le fichier et placez-le dans le répertoire où se trouve votre code (ne faites pas un copier-coller depuis le navigateur ou le bloc-note au risque de rencontrer des problème d’encodage!). Pour ouvrir un fichier en Python, on peut utiliser la syntaxe

import os # ajouter ce package 

# ouvrir un fichier
with open('nom_du_fichier.txt', 'r', encoding="utf-8") as file:
    message = file.read() # enregiste le contenu dans message

# on peut ensuite utiliser message
print(message)

Pour plus de renseignements sur l’utilisation des fichiers en Python, vous pouvez voir ce cours de l’université Paris Diderot.

Pour le message 8, le chiffrement du paragraphe de test donne (liste des codes ASCII) :

[35, 168, 224, 13, 127, 135, 26, 229, 2, 175, 104, 246, 221, 195, 149, 69, 38, 123, 10, 171, 31, 65, 114, 178, 105, 42, 37, 165, 191, 190, 172, 66, 154, 90, 86, 228, 156, 66, 125, 15, 54, 10, 139, 95, 125, 200, 165, 197, 152, 168, 115, 225, 186, 7, 164, 10, 4, 139, 98, 250, 231, 130, 118, 190, 219, 171, 162, 50, 157, 7, 178, 23, 128, 120, 114, 152, 171, 56, 235, 121, 53, 172, 119, 207, 128, 45, 232, 87, 189, 191, 68, 174, 250, 72, 137, 78, 215, 139, 89, 135, 98, 254, 238, 10, 12, 10, 45, 232, 88, 96, 255, 68, 97, 99, 3, 216, 51, 69, 169, 172, 62, 58, 29, 8, 177, 27, 5, 166, 50, 251, 200, 36, 117, 22, 198, 196, 251, 41, 227, 109, 77, 12, 86, 117, 42, 192, 208, 195, 228, 198, 141, 64, 121, 33, 59, 0, 91, 188, 133, 161, 70, 20, 118, 120, 10, 158, 104, 78, 123, 120, 236, 85, 112, 109, 62, 196, 174, 132, 101, 216, 42, 228, 145, 182, 160, 198, 34, 151, 152, 105, 179, 14, 3, 189, 80, 54, 229, 78, 167, 127, 31, 222, 21, 184, 49, 54, 89, 72, 149, 254, 229, 159, 191, 29, 46, 79, 66, 5, 22, 133, 45, 136, 61, 32, 182, 61, 170, 137, 52, 103, 194, 109, 18, 251, 38, 143, 111, 22, 90, 227, 131, 187, 71, 97, 83, 1, 176, 148, 242, 238, 56, 192, 54, 171, 8, 24, 16, 226, 46, 105, 127, 215, 169, 22, 183, 28, 139, 201, 250, 231, 10, 240, 181, 219, 172, 230, 177, 163, 153, 131, 132, 74, 158, 202, 191, 12, 148, 38, 39, 53, 103, 120, 141, 137, 162, 27, 141, 218, 110, 153, 104, 213, 169, 248, 228, 241, 240, 183, 179, 95, 25, 191, 165, 101, 192, 99, 165, 176, 214, 135, 160, 11, 225, 22, 246, 107, 90, 188, 149, 118, 8, 25, 127, 180, 254, 131, 77, 79, 133, 159, 194, 236, 112, 219, 138, 129, 4, 6, 9, 180, 144, 226, 192, 178, 69, 213, 150, 170, 25, 17, 95, 135, 57, 90, 130, 199, 173, 250, 111, 6, 159, 84, 196, 106, 239, 181, 28, 12, 220, 137, 197, 91, 203, 166, 99, 36, 146, 243, 31, 56, 173, 2, 92, 100, 209, 82, 205, 154, 54, 77, 177, 138, 108, 177, 101, 117, 226, 20, 246, 3, 251, 64, 160, 29, 90, 133, 46, 51, 126, 136, 193, 161, 102, 215, 67, 236, 217, 62, 176, 14, 123, 124, 91, 156, 93, 223, 181, 254, 226, 246, 1, 116, 74, 244, 100, 254, 190, 46, 156, 82, 59, 105, 187, 95, 101, 95, 109, 194, 59, 33, 182, 222, 197, 33, 91, 64, 108, 199, 225, 37, 152, 69, 130, 16, 186, 61, 169, 40, 192, 60, 189, 12, 34, 214, 96, 134, 88, 178, 125, 247, 57, 28, 76, 164, 234, 168, 143, 161, 62, 238, 248, 103, 200, 234, 113, 42, 164, 3, 222, 127, 107, 41, 77, 71, 209, 45, 137, 206, 102, 31, 95, 138, 253, 187, 140, 67, 239, 198, 143, 148, 185, 88, 188, 35, 241, 253, 230, 114, 21, 61, 171, 64, 147, 184, 217, 47, 114, 48, 97, 164, 225, 215, 36, 132, 157, 115, 34, 182, 208, 54, 110, 91, 175, 77, 236, 237, 202, 206, 249, 241, 194, 110, 189, 176, 190, 98, 238, 36, 127, 251, 214, 40, 73, 110, 225, 76, 215, 72, 24, 26, 147, 69, 222, 80, 144, 7, 63, 161, 9, 160, 12, 191, 165, 216, 91, 87, 58, 94, 13, 129, 189, 213, 217, 229, 246, 250, 243, 110, 217, 251, 125, 32, 238, 97, 138, 22, 168, 18, 206, 24, 160, 46, 137, 156, 139, 241, 128, 99, 188, 210, 18, 0, 13, 232, 152, 202, 251, 43, 7, 166, 74, 4, 151, 255, 49, 109, 155, 244, 154, 98, 231, 210, 61, 252, 232, 224, 246, 88, 205, 98, 187, 131, 175, 171, 144, 128, 190, 188, 196, 103, 187, 3, 230, 67, 46, 189, 130, 1, 54, 161, 84, 123, 159, 30, 143, 185, 166, 81, 33, 43, 0, 249, 228, 9, 25, 237, 142, 141, 141, 241, 17, 138, 228, 251, 64, 83, 82, 129, 1, 209, 222, 94, 15, 229, 163, 18, 70, 73, 165, 39, 244, 196, 247, 40, 73, 91, 220, 177, 224, 58, 43, 160, 174, 214, 39, 180, 77, 135, 33, 63, 206, 210, 45, 91, 38, 51, 72, 154, 122, 117, 210, 180, 56, 67, 233, 109, 141, 54, 194, 99, 206, 77, 70, 51, 1, 129, 211, 28, 249, 57, 155, 241, 49, 234, 211, 212, 159, 245, 66, 161, 176, 220, 89, 180, 130, 189, 102, 183, 21, 250, 55, 52, 113, 141, 22, 98, 97, 248, 74, 87, 225, 235, 84]

Documents utiles

Pour vous guider dans le déchiffrement des messages, vous pouvez suivre les activités proposées par les liens suivants :

Pour aller plus loin sur l’histoire de la cryptographie, voici quelques références :

Copy pasta 🍝

Si vous utilisez du code venu d’ailleurs (internet, modèle de langage, aide extérieure) utilisez-le intelligemment : n’oubliez pas de créditer la source, mais surtout que vous êtes là pour apprendre, et que rien ne remplace l’expérience personnelle ! Dans tous les cas, assurez-vous que vous comprenez chaque ligne de code de votre projet (demandez-moi si nécessaire). Et si vous utilisez un modèle de langage, utilisez-le à bon escient pour vous faire progresser et non pour remplacer l’effort intellectuel (nécessaire à l’apprentissage). Demandez-leur par exemple de vous expliquer un morceau de code, ou corriger un bug.

Évaluation

Modalités d’évaluation

  • Rendu du code via un repository GitHub (ou git équivalent). Seuls les commits effectués sur votre projet avant cette date seront pris en compte.

  • Présentation de 15 minutes, questions comprises. Les soutenance ont lieu le vendredi 24 avril 2020. Il est possible (souhaitable?) de s’aider d’un support visuel pour sa présentation.

  • Déchiffrement d’un nouveau message le jour de l’évaluation. Il faut donc vous assurer que votre code n’est pas trop spécifique à des messages particulier. Il s’agit ici d’évaluer à quel point vous vous êtes appropriés les concepts.

Critères d’évaluation

  • Avancement : jusqu’où vous êtes arrivés dans le déchiffrement des messages

  • Lisibilité du code et réutilisabilité : bonne organisation : séparation des tâches dans différents fichiers ou fonctions, noms de variables pertinents, commentaires, etc. Le code peut-il être facilement réutilisé pour déchiffrer d’autres messages ?

  • Maitrise des concepts et contribution personnelle: Evaluation des techniques de déchiffrement mises en oeuvre. Le code est-il personnel ? Présente-t-il des idées intéressante ou originales ?

  • Investissement personnel : Régularité des commits, travail en séances, assiduité et ponctualité.

Barême

Le barême sur 30 (ramené ensuite à 20) est le suivant :

  • Oral (6 points) :
    • support présentation (2 points)
    • qualité présentation (2 points)
    • questions (2 points)
  • Travail en scéances (3 points) :
    • investissement personnel (2 points)
    • régularité des commits (1 point)
  • Rendu du code (15 points) :
    • avancement (6 points)
    • contribution personnelle (3 points)
    • rendu à temps *(2 points)
    • lisibilité du code (2 points)
    • réutilisabilité du code (2 points)
  • Déchiffrement d’un nouveau message (4 points)

  • Divers (2 points) :
    • assiduité, ponctualité (1 point)
    • bonus appréciation générale (1 point)