C15 : Exercices
Exercices sur les mots de passe
C15.E1 : Longueur des mots de passe (sans calculatrice)
1) Montrer qu'il y a environ \(10^{20}\) mots de passe de 10 caractères choisis parmi l'ensemble de 95 caractères ASCII affichables.
2) En supposant qu'un ordinateur puisse tester un million de mots de passe à la seconde, combien de temps lui daudra-t-il pour explorer l'ensemble des mots de passe possibles ?
C15.E2 : Mot de passe correct
Ecrire une fonction qui prend une chaine de caractères en paramètres et vérifie que cette chaine est un mot de passe correct.
On estime qu'un mot de passe est correct s'il contient : au moins 8 caractères, une majuscule, une minuscule, un chiffre et un caractère spécial parmi "_-.!;".
Exercices sur le chiffrement symétrique
C15.E11 : Taille des clé pour le chiffrement AES (sans claculatrice)
Les clés utilisées pour le protocole de chiffrement AES font au minimum 128 bits.
1) Exprimer à l'aide d'une puissance de 2 le nombre de clefs différentes possibles.
2) Quelle est environ la taille de ce nombre en décimal ?
Aide au calcul : \(2^{10} = 1024 ≈ 1000 = 10^3\).
C15.E12 : Chiffrement de Vigenère
Le chiffrement de Vigenère nécessite :
- - un alphabet : un ensemble ordonné de caractères ;
- - une clé de chiffrement : ici, une suite de nombres entiers positifs que l'on notera \(N_1\), \(N_2\), ..., \(N_f\).
Le chiffrement consiste à prendre le première caractère du message clair et à le remplacer par le caractère obtenu en effectuant une permutation circulaire de longueur \(N_1\) dans l'alphabet, puis à prendre le deuxième caractère et à effectuer une permutation circulaire de longueur \(N_2\), et ainsi de suite. Lorsqu'on arrive au dernier nombre de la clé, on recommence avec le premier.
Travail à faire
On utilisera comme clé un nombre dont les différents chiffres serviront aux permutations circulaires successives.
Compléter la fonction chiffrer(message_clair:str, alphabet:str, cle:int)->str qui renvoie le message chiffré par la méthode de Vigenère. On pourra utiliser des fonctions intermédiaires
def chiffrement_vigenere(message_clair:str, alphabet:str, cle:int)->str:
"""
Parametres:
message_clair (str) : chaine que l'on souhaite chiffrer, contenant uniquement des caractères de l'alphabet
alphabet (str) : chaine de caractères contenant l'ensemble des caractères utilisables dans le message clair
cle (int) : entier correspondant aux décalages successifs souhaités pour le chiffrement
Return (str) : message chiffré
Exemples:
>>> chiffrement_vigenere("bonjour", "abcdefghijklmenopqrstuvwxyz", 0)
'bonjour'
>>> chiffrement_vigenere("bonjour", "abcdefghijklmenopqrstuvwxyz", 123)
'cqqkqxs'
>>> chiffrement_vigenere("bonjour", "abcdefghijklmenopqrstuvwxyz", 45)
'ftrnszv'
"""
pass
C15.E13 : Chiffrement par permutation à l'aide d'un dictionnaire
On dispose d'un alphabet sous forme d'une chaine de caractères.
On appelle dictionnaire de chiffrement, un dictionnaire dont les clés sont les caractères de l'alphabet utilisé et les valeurs les caractères du même alphabet, mais redistribuées aléatoirement.
Le chiffrement consiste alors à substituer chaque caractère du message et à le substituer par la valeur correspondante dans le dictionnaire de chiffrement.
1) Écrire une fonction dico_chiffrement(alphabet:str)->dict qui prend un alphabet en paramètre et renvoie un dictionnaire de chiffrement.
2) Écrire une fonction chiffrement(dico:dict, message_clair:str)->str qui prend un dictionnaire de chiffrement et un message clair en paramètres et renvoie un message chiffré à l'aide du dictionnaire de chiffrement.
3) Écrire une fonction inv_dico(dico:dict)->dict qui prend un dictionnaire en paramètre et renvoie un dictionnaire où les clés et les valeurs son inversées (autrement dit, les valeurs servent de clés et les clés servent de valeurs).
4) Écrire une fonction dechiffrement(dico:dict, message_chiffre:str)->str qui prend un dictionnaire de chiffrement et un message chiffré en paramètres et renvoie le message clair correspondant.
5) Décryptage
5.a. Combien de dictionnaires de chiffrement sont envisageables avec un alphabet de 26 caractères ?
5.b. Cette technique de chiffrement vous semble-t-elle difficile à décrypter ?
C15.E14 : Décryptage d'un message chiffré avec le chiffrement de Vigenère (difficile)
Le message ci-dessous a été intercepté :
gjwvkiafmnmfcgcedmfjwvkmyxmfkwhktruqrdarhbcgcedmfkmvyvrmzffivfaqsvfdmhjaqwurmzrklrhqrjzrfmhxxbmzywauguzwazgzgwtfvmflqawanmbewxnkcahwhjtrkmvyvrmzqwagwvrtzrkahjabfabejewbegvrviaktrhilklrewevwegcfwbrflrfbywabejewahfiafmnmxbmzywatgciwzawzggcfmvnfvrsccgcedmflzbmdrjcasvawihhwhjtrkizwvrjbbmarllnfaywagwvrtzrktrktvwznmxnqaqwubjlbjwhkmgwvqwvgdmfguojmflwhlkricvwaggzawjeatywxnkbbmapwckicvwzewvgfmfgvghifhmevcfdmiamhpyhamflnbjbawlrhmeabcgqaltrkznuqawacjwsgvqwaawabfbcsanlbravgwacszywordlrkkrflewahfnrmarnmvdtrjiqwabejewahfmymuvwzrbivdtvjiewvbmdrdmrkmestrhmricvxcgtzvkmrdmfsvfuwhjwafmfwznvmagciwihjwvdmisagwubflrnwhkmalwhjmqwbbmapgbrkdbmacgciwhigcfwvpdwewunaaigcffmcgciwhrlmefmydmzwvgdmgwvvjmavmugzfvmigapdwgmzrkcasvawihhwhjtrkobmdrjvrjbbmahfiafmnmxbmzywagjwhnmemvnfvrsccgcedmfsurfmelwhkmgviaktrkbrfmojmfdmfdqrj
Nous savons de source sûre que la clé est constituée de 3 entiers, que l'alphabet utilisé est "abcde...yz" et que la méthode de chiffrement est celle de Vigenère.
A faire : Proposer un programme pour décrypter ce message.
Exercices sur le chiffrement asymétrique
C15.E21 : Utilisation des clés
Alice et Bob souhaitent communiquer. Ils possède chacun une paire de clé publique/privée.
1. Quelle clé Alice doit-elle utiliser pour chiffrer un message confidentiel pour Bob ?
2. Quelle clé Alice doit-elle utiliser pour chiffrer un message confidentiel et authentifié pour Bob ?
3. Quelle clé Alice doit-elle utiliser pour déchiffrer un message confidentiel provenant de Bob ?
4. Quelle clé Alice doit-elle utiliser pour déchiffrer un message confidentiel et authentifié provenant de Bob ?
C15.E22 : Clé publique d'une communication HTTPS
A l'aide d'un navigateur, aller sur le site de l'ANSSI : cyber.gouv.fr
1. La communication entre votre ordinateur et le serveur du site est-elle sécurisée ?
2. Dans le certificat du serveur, relever les éléments suivants :
- - le nom de domaine,
- - le nom de l'organisme de certification,
- - la date de validité du certificat.
3. Repérer la clé publique liée au certificat.
- - Avec quel algorithme a-t-elle été générée ?
- - Quelle est la longueur annoncée de la clé ?
- - Justifier que la clé a bien la longueur annoncée.
4. Les informations contiennent aussi la clé publique de l'organisme de certification. A quoi va servir cette clé publique ?
Exercices autres
C15.E31 : Machine Enigma
Source : d'après un exercice de M. Boddaert
Nous allons, dans cet exercice, nous intéresser à la machine Enigma.
Travail à faire
1) Copier-coller et exécuter code ci-dessous :
# Importation du module
from enigma.machine import EnigmaMachine
# Machine enigma configurée avec les rotors III, IV et II,
# le réflecteur C
# le tableau de connexions CE DV IO NR ST QX AP
machine = EnigmaMachine.from_key_sheet(rotors = "III IV II",
reflector = "C",
plugboard_settings = "CE DV IO NR ST QX AP")
1.a) Quels rotors sont utilisés et sur quelles positions sont-ils configurés ?
1.b) Quelle est la lettre chiffrée obtenue lors de l'appuie sur la touche 'A' ?
2) Écrire une fonction chiffre_enigma(message_clair : str, machine : EnigmaMachine, pos_rotors : str)->str qui prend en paramètres un message clair, une machine Enigma configurée et la position des rotors. Cette fonction renvoie le message chiffré.
3) Écrire une fonction dechiffre_enigma(message_chiffre : str, machine : EnigmaMachine, pos_rotors : str)->str qui prend en paramètres un message chiffré, une machine Enigma configurée et la position des rotors. Cette fonction renvoie le message clair.