A titre d’exercice, j’ai écrit
un petit programme de chiffrement qui, après plusieurs essais, semble avoir de
bonnes performances.
Il est écrit en Scheme,
dialecte de LISP, en utilisant DrScheme (que l'on peut télécharger gratuitement
à partir de
www.drscheme.org).
Il est
mis à votre disposition sous la
GNU General Public License.
Vous
pourrez lire le texte du programme (Programme Scheme)
et, si vous avez Scheme
sur votre ordinateur, le charger.
Je vous invite à l’essayer et à l'améliorer !
La présente fiche est la
documentation du programme.
Principe du chiffrement
Il s’agit d’« additionner » les
caractères du texte avec ceux d’une clé pour obtenir le texte chiffré, de telle
sorte que seul celui qui possède la clé puisse le déchiffrer.
Le « chiffre indéchiffrable » de Blaise de Vigenère (1523-1596)
Le principe ci-dessus est celui
du « chiffre indéchiffrable » de Blaise de Vigenère.
Pendant trois siècles ce chiffre a été considéré comme inviolable. Il a pourtant
été rarement utilisé parce que le chiffrement et le déchiffrement manuels
demandaient un long travail, dont l'ordinateur nous soulage aujourd'hui. La
méthode qui permet de briser ce chiffre n'a été découverte qu'au XIXe
siècle, indépendamment, par Charles Babbage et Wilhelm Kasiski (cf. Simon Singh,
The Code Book, Anchor Books 1999, pp. 44-78).
On choisit un alphabet (liste
des caractères que l’on peut utiliser) et on associe à chaque caractère son
numéro dans l’alphabet. Nous avons retenu l’alphabet suivant, complété par
l'intervalle et le retour à la ligne :
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890éèâêîôûäëïöüàùç',.!()_/§?+=-@:;%,
Le caractère de rang n dans le
texte original sera chiffré par le caractère ayant pour numéro la somme du
numéro de ce caractère et du numéro du caractère de même rang dans la clé. Soit
X la lettre du texte à coder, Y la lettre de même rang dans la clé. X sera
chiffré par Z tel que :
numéro(Z) = numéro(X) + numéro(Y).
Pour déchiffrer Z, on utilise l’opération inverse :
numéro(X) = numéro(Z) – numéro(Y)
Solution du problème
Il se présente deux
difficultés :
- la clé peut être plus courte que le texte que l’on veut chiffrer ;
- le numéro que l’on obtient lors du chiffrement peut être supérieur à la taille
T de l’alphabet.
1) longueur de la clé
-> On compare la longueur de la
clé à celle du texte et, si nécessaire, on concatène la clé autant de fois qu’il
le faut pour obtenir une clé plus longue que le texte.
Exemple : si la clé est « C’est le nouvel an » (18 caractères) et si le texte
est « Promenons-nous au bois, les lauriers sont coupés. » (49 caractères), on
utilisera en fait la clé « C’est le nouvel anC’est le nouvel anC’est le nouvel an ».
Cela donne le texte chiffré suivant :
ë
sDxMzrRhAHOwK uMD:mJcZwiRMzuOvtDrE3asELZnsTBçLf
2) taille de l’alphabet
->
Si numéro(X) + numéro(Y) dépasse la taille de l’alphabet, on aura :
numéro(Z) = numéro(X) + numéro(Y) –T
Dans ce cas, pour déchiffrer le caractère ainsi obtenu, on utilisera la
relation :
numéro(X) = numéro(Z) + T – numéro(Y)
Précautions à prendre pour
la mise en oeuvre
Lors de la mise en œuvre du
programme, deux difficultés sont apparues :
1)
les caractères
" et \ ne peuvent pas être
pris en compte par l’alphabet.
-> On remplace le guillemet par
une apostrophe, et le signe \ par le signe /. Cela oblige à vérifier le texte
et, éventuellement, à le modifier avant de le chiffrer.
2)
si l’on utilise la messagerie pour
transmettre un texte chiffré, le logiciel de messagerie risque d'ajouter au
texte des modifications (retours à la ligne etc.) qui le polluent.
-> Plutôt que d'introduire le
texte chiffré dans le corps du message, il est préférable de le coller dans un
fichier texte (bloc-notes ou Word etc.) que l’on attachera au message. Il est
prudent de soumettre ensuite le contenu du fichier texte à un déchiffrement pour
vérifier que le copier-coller ne l'a pas altéré, et que le correspondant n'aura
pas de difficulté à le déchiffrer.
Performance du chiffrement
Si deux personnes se sont mises
d’accord sur une même clé, et si la clé fait quelques dizaines de caractères, ce
chiffre est a priori difficile à "craquer".
En effet, l’alphabet cité en
exemple contient 96 symboles. Si l’on utilise par exemple une clé de 50
caractères (elle peut être plus longue que cela), le nombre des clés possibles
est 9650, ce qui équivaut à une clé binaire de 329 bits [50 log2(96)
= 329].
Jean-Paul Figer m'a
montré qu'un expert pouvait
déchiffrer le message si le texte de la clé est écrit dans un langage naturel.
Le déchiffrement ne sera difficile - ou même impossible - que si la clé est
composée de caractères pris au hasard (voir
Un chiffrement inviolable (suite et fin)).
Les correspondants peuvent
modifier la clé périodiquement.
Le chiffrement sera d'autant
plus sûr :
1) que l'on utilisera une clé
plus longue (il est sage de prendre une clé ayant à peu près la même taille que
le message moyen) ;
2) que l'on renouvellera plus
souvent la clé (le déchiffrement est d'autant plus facile que l'on offre au
déchiffreur un plus gros volume de texte, sur lequel il pourra estimer des
fréquences). |