Le chiffrement parfait
Le masque jetable (one-time pad)
Le masque jetable (en anglais one-time pad, souvent abrégé OTP) est le seul chiffrement dont on a prouvé qu'il est incassable. Son principe est d'une simplicité désarmante : combiner chaque bit du message avec un bit d'une clé parfaitement aléatoire.
L'opération XOR
Tout repose sur une seule opération booléenne, le OU exclusif, noté XOR ou ⊕. Elle prend deux bits et renvoie 1 si — et seulement si — les deux bits sont différents.
a | b | a XOR b
---+---+--------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
Retenez-la ainsi : XOR répond à la question « ces deux bits diffèrent-ils ? ».
Chiffrer et déchiffrer
Soit M le message clair (une suite de bits) et K la clé, ou masque, une suite de bits de même longueur que le message. Le chiffrement se fait bit à bit :
chiffrer : C = M XOR K
déchiffrer : M = C XOR K
La même clé sert dans les deux sens : le masque jetable est un chiffrement symétrique.
La réversibilité du XOR
Pourquoi appliquer deux fois le masque redonne-t-il le message ? Parce que XOR est sa propre réciproque. Pour tout bit x et tout bit de clé k :
(x XOR k) XOR k = x XOR (k XOR k) = x XOR 0 = x
Deux propriétés le garantissent : k XOR k = 0 (un bit égale toujours lui-même) et x XOR 0 = x (masquer avec des zéros ne change rien). Appliquer le masque une seconde fois l'annule.
Un exemple sur un octet
Chiffrons la lettre A, dont le code ASCII est 01000001, avec un masque aléatoire 10110100.
Message M : 0 1 0 0 0 0 0 1 (« A »)
Masque K : 1 0 1 1 0 1 0 0
--------------- XOR bit à bit
Chiffré C : 1 1 1 1 0 1 0 1
Le chiffré 11110101 ne ressemble en rien à la lettre de départ. Déchiffrons en ré-appliquant le même masque :
Chiffré C : 1 1 1 1 0 1 0 1
Masque K : 1 0 1 1 0 1 0 0
--------------- XOR bit à bit
Message M : 0 1 0 0 0 0 0 1 (« A ») ✔
On retrouve exactement l'octet initial. À chaque colonne, on a bien appliqué deux fois le même bit de masque, qui s'annule.
En résumé
- Le masque jetable chiffre bit à bit avec l'opération XOR et une clé aléatoire aussi longue que le message.
C = M XOR Kpour chiffrer,M = C XOR Kpour déchiffrer : la même clé dans les deux sens.- Tout tient à la réversibilité du XOR :
(M XOR K) XOR K = M, carK XOR K = 0. - Le procédé est mécaniquement simple et rapide à calculer, mais nous verrons au chapitre suivant que sa sécurité, elle, est tout simplement extraordinaire : c'est le seul chiffrement prouvé inviolable.

