Le chiffrement XOR est une technique de chiffrement très basique mais efficace et facile à implémenter. Il est aujourd’hui utilisé dans plusieurs protocoles et algorithmes de chiffrement.
Table de vérité
A | B | A XOR B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Chiffrement
Pour l’ordinateur, chaque caractère d’un message ou d’une clé est représenté par un nombre entier sous forme binaire, c’est à dire une suite de 0 et de 1.
caractère | code ASCII (décimale) | binaire |
---|---|---|
A | 65 | 01000001 |
B | 66 | 01000010 |
C | 67 | 01000011 |
Le chiffrement consiste à appliquer l’opération logique XOR (OU exclusif) bit à bit entre le message clair (plaintext) et la clé secrète (secret key) :
10101001 (plaintext)
10000010 (secret key)
------
00101011 (cyphertext)
Le déchiffrement consiste à appliquer l’opération logique XOR (OU exclusif) bit à bit entre le message chiffré clair (cyphertext) et la clé secrète (secret key) :
10101001 (cyphertext)
10000010 (secret key)
------
00101011 (plaintext)
Propriétés
En cryptographie, certaines propriétés du XOR sont intéressantes car elles peuvent nous permettre de retrouver la clé de chiffrement qui a servi à chiffrer un message.
a XOR b = c
c XOR b = a
c XOR a = b
message XOR key = cyphertext
cyphertext XOR key = message
cyphertext XOR message = key
Il suffit donc d’avoir 2 éléments pour trouver le 3ème
Remarques
Dans cette explication la clé (key) la même taille que le message à chiffrer. En revanche, que se passe t’il si la clé est plus petite que le message à chiffrer ?
10101011 (message)
101 (key)
-------
??????? (cyphertext)
Pour cela, on peut créer une pseudo-clé qui fera la longueur du texte à partir de la clé d’origine. La logique de la création de cette pseudo-clé peut varier en fonction des algorithmes.
L’une des logiques est de joindre par concaténation, plusieurs fois, la clé d’origine jusqu’à atteindre la taille du message :
101....... (key)
101|101|10 (pseudo-key)
On peut ensuite chiffrer le message :
10101011 (message)
10110110 (pseudo-key)
-------
00011101 (cyphertext)