TP2 - Vernam
- Comprendre le fonctionnement des portes logiques et de l'opérateur XOR ;
- Savoir convertir des données entre binaire, hexadécimal et ASCII ;
- Mettre en œuvre le chiffrement de Vernam en Python ;
Les questions se répondent sur feuille (ou word).
La programmation (à la fin) se fait sur python.
Le chiffrement de Vernam est une méthode de chiffrement symétrique utilisant une clé de chiffrement utilisée qu'une seule fois, appelée masque jetable.
En 1917, Gilbert Vernam, ingénieur chez AT&T Bell Labs, met au point un dispositif pour sécuriser les téléscripteurs militaires. Son objectif : rendre illisible toute communication interceptée sur la ligne.
Le système repose sur une bande perforée utilisée comme clé, détruite après chaque transmission : c'est le principe du masque jetable.
Lors de la crise des missiles de Cuba (1962), ce système a été adopté par les États-Unis et l'URSS pour le célèbre téléphone rouge.
L'opération centrale du chiffrement est le XOR (ou exclusif), appliqué bit à bit entre le message et la clé.
Portes logiques
Les portes logiques sont des opérateurs binaires : elles prennent des bits (0 ou 1) en entrée et produisent un bit en sortie selon l'opération effectuée. Leurs comportements sont résumés dans des tables de vérité.
On distingue 6 grandes portes : NOT, AND, OR, NAND, NOR et XOR.
NOT inverse la valeur d'entrée :
| A | NOT A |
|---|---|
| 0 | 1 |
| 1 | 0 |
AND vaut 1 si et seulement si toutes les entrées valent 1 :
| A | B | A AND B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
Exercices
- 1
Recopier et compléter la table de vérité de OR :
A B A OR B 0 0 0 1 1 0 1 1 OR vaut 1 si au moins une des entrées vaut 1.
- 2
Recopier et compléter la table de vérité de NAND (NOT AND - l'inverse de AND) :
A B A NAND B 0 0 0 1 1 0 1 1 - 3
Recopier et compléter la table de vérité de XOR (OU exclusif) :
A B A XOR B 0 0 0 1 1 0 1 1 XOR vaut 1 si les deux entrées sont différentes.
- 4
Observer la table XOR. Que peut-on remarquer si on effectue
(A XOR B) XOR B? Vérifier avec les quatre combinaisons possibles. Que peut-on en déduire pour le chiffrement ? - 5
Recopier et compléter la table de vérité de l'expression A NAND (B XOR C) en tenant compte des 8 combinaisons possibles pour trois variables :
A B C B XOR C A NAND (B XOR C) 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1
Opérations logiques
Les portes logiques s'appliquent aussi sur des mots binaires (suite de bits), en traitant chaque colonne indépendamment, de gauche à droite.
1 0 1 1
0 1 1 0
-------
1 1 0 1
On applique XOR colonne par colonne : 1 XOR 0 = 1, 0 XOR 1 = 1, 1 XOR 1 = 0, 1 XOR 0 = 1.
Exercices
- 1Effectuer l'opération 0011011101 OR 1001100110. Donner le résultat.
- 2Effectuer l'opération 0011011101 NAND 1001100110. Donner le résultat.
- 3Effectuer l'opération 0011011101 XOR 1001100110. Donner le résultat.
- 4Vérifier la propriété découverte en Q4 de la section précédente : effectuer
(0011011101 XOR 1001100110) XOR 1001100110. Que peut-on constater ?
Traduction binaire-hexadécimal
Pour chiffrer avec Vernam, chaque lettre est d'abord convertie en binaire via la table ASCII.

La table se lit par rangée et colonne : la lettre 'a' est dans la rangée 6, colonne 1, donc sa valeur hexadécimale est 61.
Chaque chiffre hexadécimal se convertit en 4 bits :
6→01101→0001- Donc
'a'(hex61) →01100001en binaire.
À l'inverse, pour passer du binaire à l'hexadécimal, on regroupe les bits 4 par 4 depuis la droite, puis on convertit chaque groupe.
Exercices
- 1Donner la valeur hexadécimale des lettres
'N','S'et'I'en utilisant la table ASCII. - 2Convertir ces trois valeurs hexadécimales en binaire (groupes de 8 bits).
- 3Effectuer la conversion inverse : quelles lettres correspondent aux valeurs binaires
01001111et01101011?
une vérification
Code incorrect, réessaie !
Chiffrement de Vernam
- Convertir le message en binaire (via ASCII) ;
- Choisir une clé aléatoire de même longueur que le message ;
- Convertir la clé en binaire ;
- Appliquer l'opération XOR bit à bit entre le message et la clé ;
- Le résultat est le message chiffré. Pour déchiffrer, on applique à nouveau XOR avec la même clé.
Exercices
- 1En utilisant le mot
TERMet la cléNSIN(convertis en binaire à la section précédente), effectuer l'opération XOR bit à bit. - 2Regrouper le résultat en groupes de 8 bits et convertir chaque groupe en hexadécimal. Si la valeur hexadécimale correspond à un caractère imprimable dans la table ASCII, donner sa lettre.
- 3Pour déchiffrer, que faudrait-il faire ? Appliquer la méthode sur le résultat obtenu avec la clé
NSINet vérifier qu'on retrouveTERM. - 4Déchiffrer le message suivant, obtenu avec la clé
"LYCEE":Position 1 2 3 4 5 Message chiffré (hex) 1D 38 07 28 26 Clé L Y C E E
une vérification
Code incorrect, réessaie !
Programmation
Exercices
- 1Écrire une fonction
xor(a, b)qui prend deux entiers valant 0 ou 1 et retourne le résultat du XOR entreaetb. - 2Écrire une fonction
chartobin(lettre)qui prend une lettre en paramètre et retourne sa représentation binaire sous forme d'une chaîne de 8 caractères (avec des zéros de remplissage à gauche si nécessaire).AstuceLes fonctions
ord()etbin()peuvent être utiles. Attention :bin()renvoie une chaîne préfixée par'0b'qu'il faut retirer, et le résultat n'est pas toujours sur 8 bits. - 3Écrire une fonction
bintochar(codeBin)qui prend une chaîne de 8 bits et retourne le caractère ASCII correspondant. - 4Écrire une fonction
vernam(message, cle)qui prend un message et une clé de même longueur et retourne le message chiffré sous forme de chaîne binaire. - 5Vérifier la propriété fondamentale de Vernam en testant :Que faut-il adapter pour que le déchiffrement fonctionne ? Modifier votre code pour que
message = "TERM"
cle = "NSIN"
chiffre = vernam(message, cle)
dechiffre = vernam(chiffre, cle)
print(dechiffre) # doit afficher "TERM" ... ou presque, à vous d'adapter !dechiffresoit bien la chaîne"TERM".
Un chiffrement parfait ?
Exercices
- 1Combien de clés différentes existe-t-il pour un message de 4 lettres avec Vernam ? Comparer avec César et Vigenère avec une clé de 4 caractères.
- 2Peut-on appliquer une analyse de fréquences sur un message chiffré par Vernam ? Pourquoi ?
- 3En 1949, Claude Shannon démontre mathématiquement que Vernam est un chiffrement parfait si et seulement si trois conditions sont réunies. D'après ce que vous avez appris dans ce TP, quelles sont-elles selon vous ?
- 4Malgré sa perfection théorique, Vernam est très peu utilisé en pratique. Pourquoi selon vous ?