Adloun

Montrer que a ⊕ a = 0 et a ⊕ 0 = a. En déduire que (x ⊕ k) ⊕ k = x…

Exercice de TD · niveau 2 · NSI (première), chapitre 2 — Flottants, booléens et textes · Logique, tables de vérité et circuits

É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é.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.