Fonctionnement de l'évaluation

Pour essayer de vous impliquer plus dans cet enseignement, j'ai décidé de tester une évaluation à la carte. En plus d'un "tronc commun obligatoire", vous pourrez choisir de faire d'autres activités notées pour compléter votre note.

1. Partie obligatoire de l'évaluation

La base de l'évaluation est composée des activités suivantes.

Si vous décidez de ne rien faire d'autre, votre note maximale sera donc de 60%, soit 12/20.

2. Partie optionnelle de l'évaluation

Voici des exemples d'activités, optionnelles, avec leurs coefficients.

⋆⋆ substitutions monoalphabétiques, détails 20%
⋆⋆⋆ chiffre de Playfair, détails 30%
le TD0 (sauf la question 2.3), détails 10%
⋆⋆ la question 2.3 du TD0, détails 10%
⋆⋆ "bloc note à usage multiple" (TD2, exercice 4), détails 10%
⋆⋆ collisions en espace constant (TD3, question 1.6), détails 10%
⋆⋆⋆ collisions intéressante en temps constant, détails 20% incompatible avec la tâche précédente
⋆⋆ attaque de Vaudenay (TD3, exercice 2), détails 20%
⋆⋆ factorisation de la clé RSA du TD5 (question 3.2), détails 10%
veille cryptographique, détails 10% au plus 5 étudiants
⋆? démo diverse, détails 10% au plus une par étudiant
⋆⋆?? communications entre une serrure connecté et sa clé, détails 5% -- 30%

Cette liste est amenée à évoluer. N'hésitez pas à proposer d'autres activités si vous avez des idées.

3. Détails pertinents

3.1. Cryptanalyse automatique des substitutions monoalphabétique

Il s'agit essentiellement d'une version simplifiée du TP facultatif. Vous pouvez suivre le sujet en :

Un langage compilé n'est pas vraiment nécessaire pour décrypter les substitutions monoalphabétiques.

Ma version (en Python) craque une substitution monoalphabétique en quelques secondes. Le code fait environ 200 lignes :

3.2. Cryptanalyse du chiffre de Playfair

C'est un ancien sujet de TP pour ce cours : cryptanalyse historique : le chiffre de Playfair.

Ma version (en C) fait environ 900 lignes, mais offre des fonctionnalités qui ne sont pas demandées dans le TP.

Si j'extrais une version "standalone" (un seul fichier C) pour répondre uniquement aux questions du TP, j'obtiens un fichier d'environ 300 lignes.

3.3. Utilisation de OpenSSL en ligne de commande

Tous les exercices du TD0 (sauf la question 2.3) peuvent se faire en quelques lignes en utilisant l'interface shell de OpenSSL.

Vous pouvez utiliser un langage de programmation et une bibliothèque de primitives cryptographie, mais ça sera probablement beaucoup plus verbeux !

Le rendu de ce travail consistera en un fichier texte contenant les réponses, ainsi que le code qui vous a permit de les obtenir.

3.4. Calcul naïf de préimages pour SHA-256-n

La question 2.3 du TD0 demande de calculer naïvement des préimages pour SHA-256-n. Il faut pour cela utiliser un langage de programmation pour pouvoir faire une boucle. (Vous pouvez le faire en shell, mais ça ne sera pas très efficace.)

Ma version (en C) fait une soixantaine de lignes.

3.5. Cryptanalyse du "bloc note à usage multiple"

Voici des textes chiffrés avec le "multiple times pad" (XOR bit à bit avec une clé identique) :

Les textes originaux et la clé ne contiennent que des symboles parmi abcdefghijklmnopqrstuvwxyz et l'espace .)

pour information, mon code (en Python) fait environ 200 lignes et permet

3.6. Recherche de collisions en espace constant

Collision "abstraite"

Si la correction "théorique" de la question 1.6 du TD4 n'a pas été faite, référez vous à l'algorithme 5.9 (section 5.4.2, page 166) du livre de Katz et Lindell Introduction to Modern Cryptography, 2nde édition : Small-Space Birthday Attacks.

Pour trouver des collisions en temps raisonnable, utilisez les n premiers bit de MD5 comme fonction de hash.

Cherchez des collisions pour les valeurs de n de 1 à 64, et estimez le temps nécessaire pour trouver une collision pour MD5 complet (càd n=128).

Collision "intéressante"

Pour générer des collisions "pertinentes", essayez de générer une collision entre les 2 fichiers suivants : (codés en UTF-8)

Remplacez chaque espace (ASCII : 0x20) par 4 octets :

La fonction g de Katz et Lindell choisira le texte et les combinaisons d'espaces en fonction d'une suite de bits de taille n.

Pour information, ma version (en C) fait environ 200 lignes et trouve des collisions jusqu'à 64 bits en quelques heures.

3.7. Implémentation de la "padding attack" de Vaudenay

L'attaque de Vaudenay suppose l'existence d'un service qui renvoie une erreur padding error lorsqu'on lui envoie un texte chiffré contenant une erreur de remplissage.

Le fichier padding_attack_server.py lance un tel serveur local. Vous devrez auparavant installer les bibliothèques Python

(Par exemple, avec

$ pip install pycryptodome
$ pip install bottle

Une fois lancé, vous trouverez des détails supplémentaires sur http://localhost:1234.

Ma version (en Python) fait 125 lignes et trouve une clé en quelques secondes.

3.8. Factorisation d'une "mauvaise" clé RSA

Voici :

Note : vous aurez besoin d'écrire un petit programme pour retrouver les facteurs de la clé. Le plus simple est de le faire en Python.

Pour information, mon code (en Python) fait une quarantaine de lignes et retrouve la clé en moins d'une minute.

3.9. Veille cryptographie et communication

Vous devrez faire de la veille cryptographique en suivant un site, blog, etc. et faire une ou deux petites interventions (5 minutes) pour communiquer sur une nouvelle pertinente :

Vous devez vérifier avec moi la pertinence de vos sources.

S'il ne se passe rien, vous pourrez discuter avec moi pour utiliser des nouvelles plus anciennes.

Il ne suffit pas de faire un résumé. Vous devrez vous renseigner et approfondir ce dont vous parlez afin de pouvoir répondre à quelques questions.

3.10. Démonstration d'une compétence diverse

Vous devrez faire une démonstration d'une compétence reliée de prêt ou de loin à la sécurité :

Vous devrez vérifier avec moi la pertinence de ce que vous souhaitez faire.

3.11. Étude d'une serrure connectée

Certains bâtiments de l'USMB sont équipés de serrures électroniques. Ces serrures doivent implémenter un mécanisme de chiffrement et d'authentification.

Vous devrez essayer de capturer les communications entre une clé et la serrure correspondante et étudier (si possible) les mécanismes mis en œuvre.

Je peux mettre à disposition deux serrures avec une clé. (La clé n'ouvre qu'une seule des serrures...)

Je n'ai pas fait cette activité moi même et ne peux donc estimer sa difficulté. Si des étudiants sont intéressés, cette activité peut servir de préliminaires à un travail de recherche pour l'exposé final.