Avec l'avénement de l'informatique, et plus particulièrement avec la multiplication des transferts de fichiers sur les réseaux, la stéganographie est redevenu un sujet à la mode. Quoi de plus facile, en effet, que de glisser quelques bits discrets au milieu d'un flot d'images, de textes et de programmes. Les moyens de cacher sont innombrables, des plus rudimentaires aux plus sophistiqués.
L'exemple le plus simple est probablement les messages cachés dans les pages web. Le langage de description de ces pages, le HTML, interprète de la même façon un,deux,trois et même n espaces consécutifs : le navigateur n'affichera qu'un seul espace. Il suffit, entre les mots, d'insérer autant d'espaces que la lettre qu'on veut cacher (un espace pour A, deux espaces pour B,etc...).
Message à cacher : BIBMATHS
Description en espaces : 2-9-2-13-1-20-8-19
Affichage dans le navigateur
Code source
Avec l'avénement de l'informatique, la stéganographie est redenu un...
Avec l'avénement
de l'informatique,
la stéganographie
est redevenu
un
Bien sûr, il suffit de connaitre le protocole utilisé pour retrouver le message original. En outre, ouvrir la page dans un éditeur comme FrontPage, puis la réenregistrer, suffit parfois à perdre l'information cachée.
Plus intéressants sont les messages cachés dans les programmes exécutables et sur les parties libres du disque dur. Dans le premier cas, on ajoute au programme une certaine quantité de code jamais atteint, et qui représente le message. Dans le second, on écrit le message (préalablement chiffré pour qu'il semble aléatoire) dans une partie libre du disque dur, et sans écrire dans la table d'allocations de fichiers du disque dur (son index) que des données sont écrites à cet endroit. La connaissance de l'adresse permet de retrouver le message.
Mais la voie la plus intéressante pour la stéganographie moderne est la dissimulation des informations dans les fichiers multimédias, particulièrement les images. Chaque pixel d'une image est représenté par 3 nombres codés sur 8 bits : R représente l'intensité du rouge (un entier entre 0 et 255), G celle du vert, B celle du bleu. Si l'on modifie les 2 bits de droite de R, on modifie très peu sa valeur (au plus, de 3), et cela est imperceptible à l'oeil humain. On remplace alors les 2 bits de droite de R par les 2 premiers bits du message. Puis on continue pour les composantes G,R, puis pour le 2ème pixel,etc... Il est impossible, à l'oeil, de distinguer l'image qui cache le message, et l'image initiale.
Ce système a de nombreux avantages : il est particulièrement discret, et il permet de cacher énormément d'informations. Dans une image 200×200, on peut cacher 200×200×6=240000 bits, soit 30000 caractères. L'inconvénient majeur est qu'il faut impérativement transmettre les fichiers en bitmap, format qui prend énormément de place. Toute compression en format Jpeg fait perdre le message caché.
On utilise en général la dissimulation dans les images de 2 façons différentes :
Souvent, on chiffre d'abord le message, par un algorithme comme DES ou AES, avant de le cacher dans l'image. Il est alors encore moins facilement détectable, les bits de poids faible de l'image étant devenus aléatoires. Et même si quelqu'un se doute que le message est caché dans l'image, il ne pourra le déchiffrer puisqu'il faudra encore la clé.
Plutôt que de remplacer les 2 bits de poids faible de la couleur par les 2 bits du message, on les combine par un ou exclusif. Il faut alors que le destinataire possède lui-même l'image initiale pour pouvoir retrouver le message. L'image fait à la fois office de moyen de dissimulation (stéganographie) et de clé (cryptographie).
Pour ceux qui sont sceptiques concernant la dissimulation de messages dans une image, nous vous invitons à consulter cette page : une applet y cache une image dans une autre image de même dimension.
Et encore, dans la cryptographie expliquée...