RECHERCHE :
Bienvenue sur le site de Michel VOLLE
Powered by picosearch  


Vous êtes libre de copier, distribuer et/ou modifier les documents de ce site, à la seule condition de citer la source.
 GNU Free Documentation License.


Un chiffrement inviolable ?

23 juin 2004


Liens utiles

- Crypto
- La programmation comme hobby
- Télécharger DrScheme
- Programme source

- Un chiffrement inviolable (suite et fin)

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).