La stéganographie est l’étude des procédés de dissimulation d’une information dans une autre.
L'article de wikipédia qui lui est consacré commence ainsi :"Si la cryptographie est l'«art du secret», la stéganographie est l'art de la dissimulation : l'objet de la stéganographie est de faire passer inaperçu un message dans un autre message et non de rendre un message inintelligible à autre que qui-de-droit. Pour prendre une métaphore, la stéganographie consisterait à enterrer son argent dans son jardin là où la cryptographie consisterait à l'enfermer dans un coffre-fort — cela dit, rien n'empêche de combiner les deux techniques, de même que l'on peut enterrer un coffre dans son jardin.".
Nous allons nous intéresser à un procédé élémentaire de dissimulation d’information dans une image.
Une image informatisée est discrétisée en pixels (picture elements), c’est-à-dire en (petites) zones carrées. Chaque pixel possède une couleur (ou une nuance de gris). L’ensemble des pixels est organisé sous forme d’un tableau bidimensionnel dans lequel chacun d’eux peut-être repéré par un numéro de lignes x et un numéro de colonnes y. Le couple (x,y) forme les coordonnées du pixel dans l’image.
Le nombre de lignes et de colonnes donnent la dimension de l’image, et le produit de ces deux nombres est égal au nombre de pixels contenus dans l’image.
Les logiciels de traitement d’images numériques comme Photoshop ou Gimp permettent par un fort agrandissement de mettre en évidence les pixels d’une image.
La couleur d’un pixel peut être décrite de plusieurs façons par un ou plusieurs nombres. Un codage courant que nous avons déjà rencontré est le codage RVB.
Si on modifie la couleur d’un pixel en ajoutant ou retranchant un petit nombre à l’une ou l’autre des trois composantes, le changement de couleur du pixel est imperceptible pour l’œil.
On peut exploiter cette non perception de la modification d’une unité d’une des trois composantes de la couleur d’un pixel pour cacher un bit dans un pixel. Plus précisément si le bit à cacher vaut 0 on modifie la composante de couleur de sorte que son écriture binaire se termine par 0. Si le bit à cacher vaut 1 on modifie cette composante de sorte que l’écriture binaire se termine par 1, tous les autres bits restant inchangés.
Pour dissimuler dans une image un message composé de n bits, on cache chacun de ses bits dans n pixels convenus de l’image.
Dans l’image que vous pouvez récupérer ici, un message a été dissimulé en suivant le procédé précédent. Tous les bits dissimulés correspondent au bit de poids faible de la composante bleue de la couleur des pixels.
Le nombre l de caractères du message dissimulé dans l’image est codée par les huit premiers pixels de la première ligne (ligne d'ordonnée 0), chacun d’eux donnant un bit de l’écriture binaire de cette longueur.
Le message dissimulé est un (petit) texte codé en binaire en utilisant le codage ASCII. Ce codage codant chaque caractère sur huit bits, le nombre de pixels dissimulant un bit du message est donc égal à 8xl. Ces pixels sont situés sur la deuxième ligne (ligne d'ordonnée 1) de l’image en partant de la gauche.
Il existe plusieurs formats de sauvegarde des images dans des fichiers : bitmap (bmp), jpeg (jpg), portable network graphics (png), ...