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