Exercices
Exercice 1⚓︎
Utilisation des biblitohèques cryptographiques du module sympy
.
Documentation : https://docs.sympy.org/latest/modules/crypto.html
Décoder la phrase RYTVJKGCLJWRTZCVRMVTLEDFULCVHLZWRZKKFLKRMFKIVGCRTV
, sachant qu'elle a été chiffrée par décalage.
correction
🐍 Script Python | |
---|---|
1 2 3 4 5 6 7 |
|
Exercice 2⚓︎
Chiffrage affine
Principe du chiffrage affine :
- Chaque lettre est codée par son rang, en commençant à 0 (A->0, B->1, ..., Z->25)
- On applique à chaque rang la transformation affine \(f(x) = (ax+b)\, \%26\)
où \(a\) et \(b\) sont deux nombres entiers. Attention, a doit être premier avec 26.
Q1. Codez votre fonction affine(msg, a, b)
correction
🐍 Script Python | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 |
|
Q2. Comparez vos résultats avec ceux obtenus par la fonction encipher_affine()
de sympy
.
Q3. Décodez la phrase UCGXLODCMOXPMFMSRJCFQOGTCRSUSXC
, sachant qu'elle contient le mot TRAVAIL
et que \(a\) et \(b\) sont inférieurs à 20.
correction
🐍 Script Python | |
---|---|
1 2 3 4 5 6 7 8 9 |
|
Exercice 3⚓︎
Cryptographie RSA presque à la main
🐍 Script Python | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
- Analysez le programme ci-dessous pour y retrouver chaque étape du chiffrement RSA.
- Exécutez le programme et regardez en console le contenu des différentes variables.
- Observez les deux lignes qui contiennent les opérations de chiffrement et de déchiffrement : que faut-il changer pour chiffrer avec la clé privée et déchiffrer avec la clé publique ?
correction
Q3. Il suffit d'inverser e
et d
dans les lignes 20 et 21.
Exercice 4⚓︎
En vous servant du code précédent, déchiffrez le message 58152918114477529438769495136495430966050302170947748011925859233600631318929939319619808279389222131229963717435870597641010567365311762267359794338657867540621133550787677728203831932548041236152866441194127191404729294628415184239755221703677388875259927092794165578604353985011899152968982365630138088486380827379488939561996226754182
sachant que :
- \(e\) vaut 65537.
- \(p\) et \(q\) sont respectivement les 13èmes et 14èmes nombres de Mersenne.
correction
🐍 Script Python | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
module RSA dans les règles de l'art
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
import binascii
keyPair = RSA.generate(1024)
pubKey = keyPair.publickey()
pubKeyPEM = pubKey.exportKey()
privKeyPEM = keyPair.exportKey()
msg = b'vive la crypto en NSI !'
encryptor = PKCS1_OAEP.new(pubKey)
encrypted = encryptor.encrypt(msg)
print("Encrypted:", binascii.hexlify(encrypted))
decryptor = PKCS1_OAEP.new(keyPair)
decrypted = decryptor.decrypt(encrypted)
print('Decrypted:', decrypted)
Exercice 5⚓︎
Source : Edition Ellipses : NSI 24 leçons avec exercices corrigés.
On se place dans le contexte de la figure ci-dessous. Le client est un navigateur web classique (par exemple Firefox). Le serveur web est configuré sur une machine dont le nom de domaine est www.monsite.fr .
Dans chacune des situations suivantes, dire quelle étape de la poignée de main TLS échoue.
Les questions sont indépendantes.
- Le serveur web n’est pas configuré pour supporter le protocole HTTPS et ne sert que des pages en http
- Le fichier contenant le certificat côté serveur est périmé
- L’utilisateur du navigateur pointe ce dernier vers l’URL http://www.monsite.fr:443
- L’administrateur du serveur a créé une paire de clé publique et privée, a signé le certificat que le serveur envoie aux clients et effacés les clés
- Le navigateur commence à afficher la page de garde du site. La câble connectant le serveur au réseau est coupé
correction
-
Le serveur web n’est pas configuré pour supporter le protocole HTTPS et ne sert que des pages en http.
L’étape 1 échoue immédiatement, le navigateur ne trouve aucun serveur en écoute sur le port 443, la connexion TCP ne peut pas se mettre en place -
Le fichier contenant le certificat côté serveur est périmé
L’étape 3 échoue, le client ne procède pas à la validation du certificat -
L’utilisateur du navigateur pointe ce dernier vers l’URL http://www.monsite.fr:443
L’étape 2 échoue car le client navigue vers le port HTTPS en http, il n’envoie pas les bons paquets et le serveur ne peut donc pas répondre ou répond un message d’erreur -
L’administrateur du serveur a créé une paire de clé publique et privée, a signé le certificat que le serveur envoie aux clients et effacés les clés
L’étape 3 échoue et le navigateur affiche un message d’alerte de sécurité. En effet, le navigateur ne pourra pas trouver une clé publique d’AC lui permettant de vérifier la signature -
Le navigateur commence à afficher la page de garde du site. La câble connectant le serveur au réseau est coupé
Si la page de garde du site s’affiche, c’est que la requête http récupérant la page a reçu une réponse du serveur. On est après l’étape 5, la connexion TCP est interrompue (car tous les paquets sont perdus)
Exercice 6⚓︎
Source : Edition Ellipses, Spécialité NSI, serge Bays
Consulter la page d’accueil du site de la société informatique de France https://www.societe-informatique-de-france.fr/
Préciser les informations disponibles sur le certificat de sécurité, quels sont les chiffrements utilisés, synmétrique et asymétrique.
correction
Lorsque la page est affichée, on clique sur le cadenas figurant devant l’adresse. On obtient les informations suivantes : Certificat vérifié par l’organisation Let’s Encrypt Authority X3 Protocole TLS 1.2 Clés : voir détails techniques Clé publique : voir Afficher le certificat Algorithme RSA Avec une taille de clé de 256 octets (2048 bits). AES, Advanced Encryption Standart, algorithme de chiffrement symétrique