NSI (première) · Chapitre 2 · Exercice de TD
Montrer que a ⊕ a = 0 et a ⊕ 0 = a. En déduire que (x ⊕ k) ⊕ k = x…
Flottants, booléens et textes · Logique, tables de vérité et circuits · niveau 2
Énoncé
Montrer que et . En déduire que : c'est le principe du chiffrement le plus simple qui soit.
Corrigé
Les deux identités, par examen des deux cas possibles : et , donc ; et , donc .
L'involution. Le ou exclusif est associatif (sa table est celle de l'addition modulo , qui l'est). Donc
Autrement dit : chiffrer deux fois avec la même clé, c'est déchiffrer. Une seule fonction sert dans les deux sens.
def chiffrer(octets, cle):
"""XOR octet par octet avec une cle repetee.
Precondition : la cle n'est pas vide. La fonction est involutive :
chiffrer(chiffrer(m, k), k) redonne m.
"""
assert len(cle) > 0, "la cle ne doit pas etre vide"
return bytes(o ^ cle[i % len(cle)]
for i, o in enumerate(octets))
>>> c = chiffrer("secret".encode("utf-8"), b"NSI")
>>> c
b'=6*<6='
>>> chiffrer(c, b"NSI").decode("utf-8")
'secret'
Piège : croire que ce chiffrement est sûr. Il ne l'est pas — une clé courte répétée se retrouve par analyse de fréquences, et deux messages chiffrés avec la même clé se trahissent mutuellement (leur XOR élimine la clé). C'est un exercice de logique, pas un outil de sécurité.
100 % gratuit
Essaie le suivant avec le tuteur
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 16 autres exercices corrigés dans ce chapitre, et 20 à chercher avec le tuteur
- Le podcast et la vidéo du chapitre et la correction filmée du TD : 2 minutes sans compte
Sans compte : le cours, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.