Aller au contenu principal
CipherChronicle

Méthodes de chiffrement Moderne

Chiffre XOR

Chiffrement symétrique par OU exclusif bit-à-bit entre le plaintext et une clé. Brique élémentaire de toute la cryptographie moderne — involutif, rapide, parfait avec une clé aléatoire (One-Time Pad) mais fragile avec une clé réutilisée.

Famille :
Moderne
Difficulté :
Intermédiaire
Époque :
Années 1950-70, informatique naissante

Aussi appelé : OU exclusif · XOR cipher · bitwise XOR

Le chiffre XOR est la forme la plus élémentaire de chiffrement symétrique par flux. Il applique l’opération OU exclusif (souvent notée ⊕) bit à bit entre le plaintext et une clé. Malgré sa simplicité apparente, il constitue la brique fondamentale de toute la cryptographie symétrique moderne : AES, ChaCha20 et l’essentiel des chiffres de flux actuels reposent, à leur dernière étape, sur un XOR entre une clé pseudo-aléatoire et le message.

Principe

L’opération XOR

L’OU exclusif entre deux bits est défini par :

0 ⊕ 0 = 0
0 ⊕ 1 = 1
1 ⊕ 0 = 1
1 ⊕ 1 = 0

Autrement dit, il vaut 1 si et seulement si les deux bits diffèrent. Cette opération a deux propriétés décisives en cryptographie :

  1. Involutive : a ⊕ b ⊕ b = a. Chiffrer et déchiffrer sont donc la même opération.
  2. Équitable : si la clé est uniformément aléatoire, chaque bit du ciphertext est aléatoirement 0 ou 1 avec probabilité 1/2 — indépendamment du plaintext.

Application au texte

Pour un plaintext de n octets et une clé de m octets, le ciphertext est :

cipher[i] = plain[i] ⊕ key[i mod m]    pour i = 0, 1, …, n-1

Si la clé est plus courte que le plaintext, elle est cycliquement répétée.

Exemple

Plaintext : CIPHE (5 octets ASCII = 5 × 8 = 40 bits) Clé : LOCK (4 octets, répétée)

Plaintext :  C        I        P        H        E
ASCII   :   0x43     0x49     0x50     0x48     0x45
Binaire :   01000011 01001001 01010000 01001000 01000101

Clé    :    L        O        C        K        L
ASCII   :   0x4C     0x4F     0x43     0x4B     0x4C
Binaire :   01001100 01001111 01000011 01001011 01001100

XOR   :     00001111 00000110 00010011 00000011 00001001
Hexa  :     0x0F     0x06     0x13     0x03     0x09

Ciphertext (hexa) : 0F 06 13 03 09 — complètement illisible à l’œil, alors qu’une seule opération suffit à le reconstruire.

Forces et faiblesses

Forces

  • Rapidité maximale — une instruction processeur unique (XOR reg1, reg2) par octet.
  • Aucune perte : involutive et réversible à l’identique.
  • Théoriquement parfait avec une clé aléatoire de même taille que le message (One-Time Pad) : sécurité absolue prouvée par Shannon en 1949.

Faiblesses

  • Avec une clé courte et répétée, le chiffre est trivialement cassable :
    1. On devine la longueur m de la clé (coïncidences, tests de Kasiski, indice d’Friedman).
    2. On sépare le ciphertext en m sous-séquences prises toutes les m positions.
    3. Chaque sous-séquence est alors chiffrée avec un seul octet de clé, réductible à un Vigenère-binaire ou à une analyse de fréquence octet par octet.
  • Réutilisation de clé : deux plaintexts P1 et P2 chiffrés avec la même clé K produisent C1 ⊕ C2 = P1 ⊕ P2 — la clé s’annule, et on retrouve le XOR des deux plaintexts, exploitable par cribs.
  • Sans authentification, un attaquant peut modifier prévisiblement le plaintext : flip un bit du ciphertext → flip le même bit du plaintext, sans détection.

XOR dans la cryptographie moderne

  • One-Time Pad (Vernam, 1917) — XOR avec une clé vraiment aléatoire, utilisée une seule fois, de longueur ≥ message. Prouvé incassable par Shannon.
  • Chiffres de flux modernes (RC4, ChaCha20, Salsa20) — génèrent pseudo-aléatoirement un flux de bits à partir d’une clé courte, puis XOR avec le plaintext.
  • AES en mode CTR — génère un flux par chiffrement compteur, XOR final avec plaintext.
  • Masquage de canaux cachés — XOR entre données sensibles et bruit pour empêcher les attaques par canaux auxiliaires.

Outils d’attaque classiques

  • Index de coïncidence — détecte la longueur de la clé dans un XOR cyclique.
  • Cribs connus — si on connaît une portion de plaintext (HTTP/1.1, <html>…), on peut extraire directement les octets de clé correspondants.
  • Analyse de fréquence octet par octet — après avoir séparé le ciphertext en colonnes de même position de clé, chaque colonne est un Vigenère mono-alphabétique.

Dans CipherChronicle

Le chiffre XOR sert de pont conceptuel entre la cryptographie classique et la cryptographie moderne. Les grilles associées peuvent introduire les manipulations bit à bit (en hexadécimal), puis glisser vers le One-Time Pad — qui est exactement la même chose, à ceci près que la clé est aléatoire et jetable.

Grille

0
F
0
6
1
3
0
3
0
9
1
D
0
0
0
3
1
E
0
0
Q
R
S
T
U
CléK = CIPHER (clé répétée XOR, sortie hexadécimale)
  1. 1

    Suite d'octets hexadécimaux

    Vingt chiffres hexa, lus par paires — chaque paire représente un octet (8 bits).

  2. 2

    Reconnaissance du motif

    Des octets apparemment arbitraires, avec des répétitions (0x00, 0x03) signalant un XOR à clé courte.

  3. 3

    Hypothèse : XOR répété avec une clé courte (4 octets)

    Les octets nuls indiquent que le plaintext contient des caractères égaux à la clé à ces positions.

  4. 4

    Application du XOR inverse

    XOR est involutif : ciphertext ⊕ clé = plaintext. On recalcule chaque octet avec la clé supposée.

  5. 5

    Message révélé

    Les dix premiers octets se lisent CIPHERCHRO, ancrage du plaintext.