CRYPTOGRAPHIE, CRYPTANALYSE
ET CODES SECRET
(PART ONE)

 

 

Cryptographie, cryptanalyse, déchiffrement... derrière ces mots barbares se cachent des concepts simples et passionnants.

Voici le premier texte d'une série de plusieurs articles, qui paraîtront intégralement dans ces Manuels. Dans quelques mois, vous devriez être capables de comprendre et d'utiliser les algorithmes de cryptage les plus évolués et les méthodes permettant de les attaquer (ou au moins d'essayer ;-).

Voilà le menu du jour, et du numero suivant: nous allons étudier ensemble les moyens de crypter un texte francais en brouillant les lettres à l'aide d'une clé secrète, de telle manière que le texte soit rendu incompréhensible pour quelqu'un ne possédant pas la clé. Il y a plusieurs méthodes pour cela, nous implémenterons la plus simple d'entre elles, et nous verrons les moyens de les cracker à l'aide d'un ordinateur. Quelques connaissances en programmation C seront utiles mais pas indispensables, l'important est de bien comprendre le principe. J'essaie de simplifier au maximum les maths, mais c'est souvent nécessaire quand on parle de crypto, surtout pour casser les codes.

Pourquoi étudier des méthodes de crypto qui agissent uniquement sur des lettres alors que de nos jours les techniques les plus performantes agissent sur des nombres (qui sont les octets d'un fichier, pouvant représenter des lettres, mais aussi une image, un programme...) ? Et bien, en fait, c'est génial pour acquérir les bases, pour bien comprendre les mécanismes de la cryptographie et surtout de la cryptanalyse. Et puis, comment font les agents secrets quand ils veulent s'échanger des messages sur le terrain mais ne disposent pas d'ordinateur ? Il leur faut une technique de chiffrage rapide, qui agit sur les lettres, avec une clé courte dont on peut facilement se souvenir. Ces méthodes, inventées aux siècles précédents, ont encore de beaux jours devant elles !

PRINCIPES FONDAMENTAUX

Un code secret est une table définie à l'avance entre deux personnes, qui associe un mot (ou groupe de mots) à un autre mot (ou groupe de mots) qui signifie autre chose. Par exemple, dire "le repas est prêt, tu peux venir" pour signifier "les carottes sont cuites, il faut se tirer les flics arrivent". C'est un mécanisme simple et parfois utile, à l'interface entre le cryptage et la stéganographie (voir plus loin), mais limité car il faut retenir le code par cœur ! Je n'en parlerai plus par la suite.

On peut aussi cacher le message à l'intérieur d'un texte d'apparence innocente, par exemple ne prendre que certains mots d'un texte (repérés par leur position dans le texte, ou par la manière de les écrire, ou par un signe de ponctuation avant ou après, etc....). Les méthodes possibles ne sont limitées que par l'imagination. Par exemple on peut cacher un message dans une fausse page d'agenda téléphonique, en sélectionnant une lettre par nom, la position de la lettre étant déterminée par le dernier chiffre de son numéro de téléphone. Le problème c'est qu'une fois que le principe de votre code a été compris par une personne mal intentionnée, elle n'aura aucun mal à comprendre tous vos messages futurs. Et ce genre de code est facile à trouver si on y passe un peu de temps.

Le nom savant pour dire que l'on cache un message à l'intérieur d'un autre message d'apparence innocente est la stéganographie. Avec l'aide des ordinateurs, on cache ainsi des données de manière invisible dans des images ou des mp3. Mais, encore une fois, la sécurité de ce type de messages n'est pas assurée: si quelqu'un réalise que vos fichiers ne sont peut-être pas si innocents que ca, il aura vite fait de trouver l'astuce.

Les encres sympathiques méritent qu'on parle d'elles. Elles sont vieilles comme le monde, mais toujours très utiles dans les cas désespérés. Les pirates de "l'île au trésor" l'utilisaient déjà ;). En prenant un pinceau au lieu d'un stylo, et du jus de citron dilué dans de l'eau comme encre, on peut écrire un message invisible sur une feuille. Le message apparaît ensuite par simple chauffage du papier (avec une bougie ou un sèche-cheveux). Il y a plein d'encres possibles, disponibles dans le commerce, mais autant utiliser ce qu'on a sous la main: citron, oignon, pomme, lait...

Attention maintenant, on rentre dans les choses sérieuses: la cryptographie. Ne vous affolez surtout pas si vous ne comprenez pas tout à ces définitions, ce sera beaucoup plus clair après avoir vu des exemples. Pour avoir une vraie sécurité, il faut absolument crypter (ou chiffrer) le message, c'est-à-dire le transformer en une série de caractères sans aucun sens pour quelqu'un qui ne possède pas une certaine information secrète (qui est la clé de cryptage). Il existe différents types d'algorithmes de cryptage, c'est-à-dire différentes "recettes" pour passer du texte en clair (le message initial) au texte crypté. La clé, c'est une information (qui peut être un chiffre, un mot, une série de chiffres...) qui est utilisée par l'algorithme de cryptage pour qu'un même texte soit crypté différemment si la clé utilisée est différente.

Un exemple simple: décalez chaque lettre du mot "hackeur" de 3 caractères dans l'alphabet (a devient d, b devient e, etc...) Le texte en clair est "hackeur", le texte crypté est alors "kdfnhxu". C'est le système de César, le cryptage le plus simple qui existe, et l'un des plus anciens. Mais on pourrait utiliser le même algorithme de cryptage (décalage des lettres dans l'alphabet) en décalant de 4 lettres au lieu de trois, et le message crypté serait alors "legoiyv". Pour décrypter le message, il faut connaître l'algorithme, et la clé. La clé ici est le nombre de décalages (3 ou 4). Mais ce code est cryptanalysable facilement: si on sait que l'algo utilisé est le décalage des lettres dans l'alphabet, il suffit de tester les 25 possibilités pour trouver la clé et lire le message en clair. On pourrait rendre ce code plus difficile à casser en rajoutant des transpositions de lettres, c'est-à-dire en brouillant les lettres selon un certain algorithme (et oui, toujours ce mot barbare, les informaticiens auraient pu trouver autre chose, mais puisque c'est celui-la il faut bien s'y habituer ;). Par exemple, le mot "hackeur" devient "hceraku" si on prend une lettre sur deux (h,c,e,r) puis qu'on revient au début et qu'on prend de nouveau une lettre sur deux mais en commençant par la deuxième lettre (a,k,u).

Crypter et décrypter un message en connaissant la clé est relativement facile. Le vrai défi, c'est de cracker le code, c'est-à-dire retrouver le texte en clair à partir d'un message crypté que vous avez intercepté. On appelle cela la cryptanalyse. Pour casser un code, il faut de l'astuce, du flair, beaucoup de chance, et énormément de patience. Tous les détails comptent, la plus petite information peut vous débloquer et permettre de tout décrypter. Tout d'abord, il faut essayer de connaître la méthode de codage utilisée. Il existe des tests pour les cas simples, mais si la personne a inventé son propre système il faudra analyser plusieurs messages cryptés et essayer de repérer les similitudes, les répétitions de lettres ou de groupes de lettres, la fréquence d'apparition des lettres... Ca peut être très dur, mais vous serez aidés si vous connaissez le message en clair, ou si vous savez que tel ou tel mot doit forcément y apparaître.

Ensuite, une fois que vous connaissez l'algorithme de chiffrement, il ne reste plus qu'à l'analyser pour trouver ses failles. Il faut trouver un moyen de connaître la clé utilisée dans un message en un temps raisonnable. Toute méthode de chiffrement utilisable manuellement par l'homme a des failles qui peuvent être exploitées grâce à un ordinateur. Mais pour ça il vaut mieux être bon en math ! Durant la seconde guerre mondiale, l'équipe américaine constituée de purs génies a mis environ 18 mois à cracker le code de la machine "type B" des japonais...

Les meilleurs algorithmes de cryptage sont ceux qui peuvent être rendus publics sans que cela ne nuise à la sécurité. C'est le cas des algorithmes modernes utilisant l'informatique, comme DES, AES ou RSA. Ils ne présentent aucune faille connue permettant de les attaquer efficacement, la sécurité repose donc entièrement sur le fait que la clé utilisée est tenue secrète. Le seul moyen pour casser le code est alors de tester toutes les clés possibles (attaque "force brute"), c'est pourquoi ces dernières sont choisies suffisamment longues pour que cette opération prenne des dizaines d'années ou plus (pour la puissance de calcul actuelle des super-ordinateurs). C'est la règle de Kerchoff, énoncée au XIXème siècle ! On comprend alors que l'algorithme de décalage simple vu au-dessus n'est pas sécurisé, puisqu'il suffit de tester les 26 clés possibles pour retrouver le texte en clair.

LE PROGRAMME

Pour automatiser les taches de cryptage et décryptage, et surtout de cryptanalyse, j'ai écrit un programme en C. Il est assez bien commenté, donc je vous conseille de le lire et de regarder les commentaires pour mieux comprendre. Ce prog a été écrit sous linux avec emacs et compilé avec gcc (gcc -o crypto crypto.c; ./crypto), mais il marche aussi sous windows & co.

Il implémente (pour l'instant) des fonctions de cryptage et de décryptage par l'algorithme de décalage, une cryptanalyse par force brute de cet algo, un affichage des statistiques d'apparition des différentes lettres dans l'alphabet, et un test permettant de savoir si le texte fourni est clair ou crypté.

Ce programme est disponible sur le signe de piste de Hackerz Voice, et sera publie intégralement dans le prochain numéro des Manuels, avec toutes les explications pour le comprendre.

Voici enfin un petit challenge pour vous torturer les méninges:

ftvseyzvsqtesmyrvxeizrsemrvxgqlesmmwwpmilwdjzsimxwttevvsxgmlgemmtriiewymgplceepypvierykrixeetwvlmespvpmytgemwrheirgxejhsidedycbc

Good luck ! ;)

FozZy