Le chiffre de Vernam, parfaitement sûr
Qu'est-ce qu'un chiffre parfaitement sûr?
Un chiffre parfaitement sûr est un chiffre tel que, l'adversaire interceptant le message, même ayant à sa disposition une puissance de calcul infinie,
ne peut pas retrouver la moindre information concernant le message clair à partir du message chiffré.
Ceci peut se traduire très bien avec des probabilités. Si on intercepte le message crypté DSJMSZERT,
on souhaite qu'avec un chiffre parfaitement sûr, il n'y ait pas plus de chances que le message clair soit ORDINATEUR, CAISSIERES ou DKIRJSMOTS. Tous les messages clairs possibles
sont équiprobables!
Le chiffre de Vernam
Un tel chiffre parfait existe : c'est Gilbert Vernam, ingénieur au laboratoire de recherche
de la compagnie "American Telephone & Telegraph" qui l'a inventé et publié en 1926. Il peut être décrit simplement comme
un chiffre de Vigenère, mais où la clé répond aux trois impératifs suivants :
- elle est aussi longue que le texte à chiffrer;
- elle est parfaitement aléatoire;
- elle n'est utilisée que pour chiffrer un seul message, puis est immédiatement détruite.
À la réception, celui qui reçoit le message fait la même opération à partir du message chiffré : il prend donc chaque bit du message chiffré et fait le ou exclusif avec le bit correspondant de la clé. Il retrouve le message initial, à cause des deux propriétés précédentes.
Message clair 1 0 1 1 1 0 0 1 1 Clé 0 1 1 1 0 1 0 0 0 Message chiffré 1 1 0 0 1 1 0 1 1
Oui, mais…
Hélas, le chiffre de Vernam n'est pas la panacée. D'abord, il exige qu'une clé serve une seule fois.
Si vous utilisez la même clé deux fois, alors on peut extraire beaucoup d'informations des messages chiffrés. En effet,
si on envoie les deux messages $m_1$ et $m_2$ avec la même clé $k$, on obtient les cryptogrammes
$c_1=m_1\oplus k$ et $c_2=m_2\oplus k$. Mais si on effectue $c_1\oplus c_2$, alors on obtient
$$c_1\oplus c_2=m_1\oplus k\oplus k\oplus m_2=m_1\oplus m_2,$$
c'est-à-dire la somme des deux messages clairs. On peut alors obtenir beaucoup d'informations sur $m_1$ et $m_2$.
Ensuite, le chiffre de Vernam exige des clés extrêmement longues, et une parfaite synchronisation des clés.
L'échange des clés, qui doit être sécurisé, est donc difficile à réaliser. Enfin, les clés utilisées doivent être parfaitement aléatoires,
ce qui n'est pas facile à garantir.
C'est pourquoi ce chiffre n'est mis en oeuvre que dans des cas très particuliers. Il fut ainsi utilisé pour
sécuriser le téléphone rouge, ligne directe entre la Maison Blanche et le Kremlin du temps de la guerre froide.
Les clés circulaient dans les valises diplomatiques, transportées dans des avions bourrés d'agents secrets. Et on raconte
que pour produire des clés aléatoires, les Soviétiques employaient des "lanceurs de dés" : leur travail consistait à lancer
des dés toute la journée et à noter le résultat.
Les systèmes de chiffrement symétriques utilisés dans la pratique cherchent à imiter le chiffrement de Vernam,
en donnant le sentiment (l'illusion?) que le message chiffré est aléatoire. Bien sûr, il est impossible de fabriquer avec un logiciel quelque chose
de complètement aléatoire, et ces systèmes sont tous moins performants que le chiffre de Vernam. Cependant ils sont bien plus pratiques
à mettre en oeuvre et offrent souvent une sécurité suffisante pour les besoins.
Consulter aussi