Chiffre de Vigenère

  • La théorie

Le Chiffre de Vigenère est un système de chiffrement, publié en 1586 par Blaise de Vigenère.

Ce système de chiffrement fût une petite révolution et resta “incassable” jusqu’en 1854, année où Charles Babbage en réussit la cryptannalyse.

Les travaux de Babbage restèrent secret jusqu’au XXème siècle (en effet il travaillait pour le roi… donc on imagine l’intérêt à ne rien révéler), mais la cryptannalyse avait été également réussie et publiée par Friedrich Wilhem Kasinski en 1863.

Je laisse le lecteur allez lire comment fonctionne le chifffrement et sa cryptannalyse.

  • La pratique - Chiffrer/Déchiffrer

Un des moyens est d’utiliser gcipher qui est utilisable aussi bien en ligne de commande qu’en interface graphique.

sudo apt-get install gcipher

$ gcipher -c Vigenere -k linux  
yes yes yo yo  
jmf sbd gb sl  
$  
$ echo jmf sbd gb sl | gcipher -C Vigenere -k linux  
yes yes yo yo  
$

On peut constater que la “force” du chiffre de Vigenère est qu’une même lettre du texte en clair n’est pas chiffrée par la même lettre.

  • La pratique - Décrypter

Simon Liu à écrit une petite librairie python pour décrypter un texte chiffré en Vigenère. Il est préférable de “deviner” en quelle langue le texte est écrit, et de disposer d’un texte suffisament long pour fournir les répétitions nécessaires…

$ cd /usr/include/python2.5/  
$ sudo wget http://smurfoncrack.com/pygenere/pygenere.py  
$ python  
>>> from pygenere import *  

On insert la chaine chiffrée:

>>> encrypted = 'Yfi. 1cf Acg wmabcg cywhqscr si bsbcigcbi jwqpsh ch teojv sc bfdghh.[suite tronquée]

On demande à décrypter le texte (on ne connait pas la clé):

>>> print VigCrack(encrypted).set\_language('FR').crack\_message()  
Art. 1er Les hommes naissent et demeurent libres et egaux en droits.[suite tronquée]

Si on veut afficher la clé:

>>> print VigCrack(encrypted).set\_language('FR').crack\_codeword()  `
  YOPYOP 
>>> print VigCrack(encrypted).set\_language('FR').crack\_codeword(3)  
  YOP  

A noter:

  • J’ai utilisé dans l’exemple ci-dessus uniquement les 2 premiers articles (4 phrases).

  • Même sans préciser la langue (et avec le texte de l’exemple), le texte est correctement décrypté.

  • Avec un texte trop court (uniquement le premier article) nous obtenons tout de même:

Led romnes natcseot et dpweusent ltlret et eglex eo droiec.
  • Conclusion
We Esmqftp hp Vkriyetp rp pgfx oopn tls upvgit oi you usfru asfr esmqftpv oeu xidscrid mctw di kw e eowe hp mgxi ceutwee rcid dg 3 dmpcnpw pt npw ceesiccjpw oe epw 3 nraaxzgtltseu aifvgyx pttp wllwpid :) Mgcgt d cgstr hlme l gqjzrv oi oeeccatgc pl cqygwuutsy dg nie atemnlg !