"La cryptographie est une discipline très ancienne. Elle est utilisée depuis l'antiquité et utilise différentes techniques. \n",
"Je vous engage à lire la page wikipédia : https://fr.wikipedia.org/wiki/Histoire_de_la_cryptologie qui récapitule des exemples historiques dont certains sont plutôt surprenants. "
"Vous devez réaliser des fonctions permettant de mettre en oeuvre les différentes méthodes de chiffrement. Essayer de respecter ce qu'il est proposé de faire. \n",
"* **Expliquer chacune des fonctions créées** , c'est-à-dire écrire une documentation de la fonction (docstring). Cette documentation devra expliquer le principe de la transformation réalisée par votre code python. \n",
"* **Commenter certaines lignes** pour montrer les points importants de votre code. \n",
"* Ecrire un jeu de test pertinent pour chacune d'elle. \n",
"* Utiliser des variables avec des noms explicites.\n",
"\n",
"### Rédaction d'un dossier d'accompagnement présentant : \n",
"* la recherche documentaire nécessaire pour réaliser votre projet (sitographie / bibliographie )\n",
"* le **partage des tâches réalisées** au sein de votre équipe. \n",
"* une **conclusion** sur les points d'améliorations possible de votre programme (correction de bug et extension). \n",
"* ce que vous avez aimé ou pas aimé faire dans ce projet et en NSI de manière générale. "
"Le chiffre de César est une façon simple de coder un message afin de conserver le secret du contenu jusqu’à son destinataire. Il s’agit tout simplement de décaler chaque lettre du message. \n",
"Voyons l’exemple d’un décalage de **trois lettres** : A devient D; B devient E; etc. \n",
"\n",
" A B C D E F G H I J K L M N O P Q R S T U V W X Y Z lettres du message en clair\n",
" D E F G H I J K L M N O P Q R S T U V W X Y Z A B C lettres du message codé\n",
"\n",
"Par exemple le message :\n",
"\n",
" CAPTUREZ IDEFIX\n",
"se chiffre en :\n",
"\n",
" FDSWXUHC LGHILA\n",
"\n",
"\n",
"On peut bien sur modifier le décalage. \n",
"\n",
"Cette technique reste assez simple, **il faudra proposer** : \n",
"* la possibilité de **choisir une valeur de décalage**\n",
"* le **chiffrement d'un caractère** en tenant compte de ce décalage. \n",
"* le **chiffrement d'une phrase complète** (tenir des caractères spéciaux : les espaces, les chiffres..) \n",
"Le chiffre de César est trop facile à attaquer, même si on ne connaît pas le décalage. Pour compliquer la tâche d’un espion, on introduit le chiffrement par substitution. \n",
"À chaque lettre de l’alphabet en clair , on associe une lettre au hasard. \n",
"Pour un espion qui intercepterait un message codé, sans connaître la substitution choisie, il n’est plus possible de tester toutes les possibilités. \n",
"En effet, il y a 26 x 25 x 24 x..... x 2 x 1 choix possibles pour l’alphabet mélangé, ce qui fait environ 4 x $10^{26}$ clés ! \n",
"\n",
"Dans ce cas, on propose de déchiffrer ces messages par **attaque statistique**\n",
"\n",
"### 3. Attaque statistique\n",
"Pour un texte assez long, les lettres n’apparaissent pas toutes avec la même fréquence. \n",
"En français, les lettres les plus rencontrées sont dans l’ordre : \n",
"\n",
" E S A I N T R U L O D C P M V Q G F H B X J Y Z K W\n",
"\n",
"La fréquence d’apparition d’une lettre est donnée par la formule :\n",
"\n",
"$fréquence~d’apparition~d’une~lettre = \\frac{(nombre~d’occurrences~de~la~lettre)}{(nombre~total~de~lettres)}$ x 100\n",
"\n",
"Dans un texte en français les fréquences sont proches de : \n",
"Voici une méthode d’attaque : dans le texte chiffré, on cherche la lettre qui apparaît le plus, et si le texte est assez long, cela devrait être le chiffrement du `E`, la lettre qui apparaît ensuite dans l’étude des fréquences devrait être le chiffrement du `S`, puis le chiffrement du `A, I, N, T`... \n",
"\n",
"On obtient ainsi un déchiffrement partiel du message, sous la forme **d’un texte à trous** et il faut ensuite deviner les lettres manquantes. \n",
"En cherchant où placer les lettres les plus fréquentes suivantes (`A, I, N`) puis les autres, avec un peu de patience et de bon sens, on déchiffre le message :\n",
"**Il faudra proposer cette méthode d'attaque statistique pour déchiffrer un message chiffré par la méthode de chiffrement par substitution dont on ne connait pas le méménage des lettres ayant servi à chiffrer.**"
"Un des principaux défauts du chiffre de César (et du chiffrement par substitution) est qu’une lettre (par exemple A) est toujours chiffrée par la même lettre (par exemple D). \n",
"Le chiffrement de Vigenère est une version améliorée du chiffre de César. \n",
"\n",
"On regroupe d’abord les lettres de notre message par blocs, par exemple ici par blocs de longueur 3 :\n",
"\n",
" IL ETAIT UNE FOIS\n",
" \n",
"devient\n",
"\n",
" ILE TAI TUN EFO IS\n",
" \n",
"(les espaces sont purement indicatifs, dans la première phrase ils séparent les mots, dans la seconde ils séparent les blocs). \n",
"\n",
"Si `n` est la longueur d’un bloc, alors on choisit une clé constituée de **n nombres de 0 à 25** : `[k1, k2, . . . , kn]`. \n",
"\n",
"Le chiffrement consiste à effectuer un chiffrement de César, dont le décalage dépend du rang de la lettre dans le bloc :\n",
"•\tun décalage de k1 pour la première lettre de chaque bloc, \n",
"•\tun décalage de k2 pour la deuxième lettre de chaque bloc, \n",
"•\t... \n",
"•\tun décalage de kn pour la n-ème et dernière lettre de chaque bloc. \n",
"\n",
"Pour notre exemple, si on choisit comme clé `[4, 2, 3]` alors pour le premier bloc `ILE` : \n",
"•\tun décalage de 4 pour `I` donne `M` \n",
"•\tun décalage de 2 pour `L` donne `N` \n",
"•\tun décalage de 3 pour `E` donne `H` \n",
"\n",
"Ainsi `ILE` devient `MNH`. On recommence avec le bloc `TAI` qui devient `XCL`. Le chiffrement complet donne :\n",
"\n",
" MNH XCL XWQ IHR MU\n",
"\n",
"autrement dit la phrase chiffrée est :\n",
" \n",
" MN HXCLX WQI HRMU\n",
"\n",
"**Il faudra proposer** :\n",
"* le **découpage d'une phrase en bloc** de n lettres\n",
"* la **création d'une clé** de n nombres de 0 à 25\n",
"Peut-être pouvez-vous proposer de dechiffrer un message ? Dans ce cas essayer de déchiffrer le message suivant (et trouvez son auteur) qui a été codé par un chiffrement de Vigenère avec une clé (inconnue !) de longueur 4.\n",