Adloun

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

Faire l'exercice suivant avec le tuteur

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.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant avec le tuteur →