Marquage sur les bits de poids faibles


Il s'agit là très certainement de la méthode la plus simple de data hiding sur une image. Imaginons que l'on travail sur une image en niveaux de gris (pour les images en couleurs, il suffit de travailler sur la luminance), et que l'on ait seulement 256 niveaux de gris possibles (de 0..255). On considère qu'entre 2 niveaux de gris consécutifs l'oeil humain ne fait pas la différence (en fait cela dépend des niveaux de gris ou l'on se situe, mais nous verrons cela un peu plus loin).
Si l'on considère le niveau de gris en binaire, nous sommes en présence de 8 bits (<=> 256). Le changement du dernier de ces bits (le bit de poids faible) ne change le niveau de gris que de 1 unité (soit disant imperceptible à l'oeil). On peut donc raisonnablement considérer que ce dernier bit n'est pas important, donc que l'on peut y mettre ce que l'on veut. Et c'est ce que l'on fait, on prend une image en 2 couleurs (1 bit) et on la place sur le bit de poids faible. Ca y est votre image est dissimulée.
Bon, il faut avouer que cette méthode présente de nombreux problèmes (en tout cas présentée de cette façon). En effet, il est très simple d'enlever ce marquage en mettant par exemple à 0 tous les bits de poids faible. De plus, toutes les "nettoyages" de l'image ou les filtres sont radicales pour ce marquage. Par exemple la compression JPEG ne lui laisse quasiment aucune chance. De plus le système visuel humain peut être sensible à ces petits changements.
En effet, l'oeil humain réagit de façon différente selon les contrastes. Ainsi, il est très sensible aux contrastes dans les gris de faibles intensités et beaucoup moins dans les teintes proches du blanc. Ainsi certaines méthodes profitent de cela en adaptant le nombre de bits de poids faibles à coder en fonction de la teinte en cours et de la teinte adjacente (tout en se référant à des données physiologiques sur les couleurs).
Malgrès ses faiblesses de nombreuses méthodes dérivent de ce principe (ex: EzStego), bien que ce type de marquage soit de moins en moins à la mode.

De plus ce marquage dépend réellement du format de l'image que l'on veut marquer. En effet, cette méthode ne peut s'appliquer à des formats tels que le GIF (de compuserve). Ici les couleurs des pixels ne sont pas indépendantes mais codées selon une palette de 256 couleurs. Je m'explique, on donne une valeur comprise entre 0 et 255 à chaque pixel et lorsque l'on lit les pixels, on se refère à la palette pour y mettre la couleur. Cela signifie que si l'on s'amuse à changer le bit de poids faible des pixels on peut changer complétement de couleurs.
Ex:

11111111 <=> 255 : et la couleur 255 est définie comme étant un rouge vif.
11111110 <=> 254 : et la couleur 254 est définie comme étant un bleu foncé.

Ainsi, en ne changeant que le dernier bit vous allez complétement détruire votre image....
Comment remédier à ce problème ??? Il existe plusieurs solutions pour marquer les palettes. La plus basique consiste à n'utiliser que 128 couleurs et à créer une palette ou les couleurs marchent par pairs:

couleur 00 : Rouge=150, Vert=12, Bleu=59
couleur 01 : Rouge=152, Vert=10, Bleu=50
couleur 10 : Rouge=50, Vert=200, Bleu=98
couleur 11 : Rouge=50, Vert=212, Bleu=95

Ainsi, en ne changeant que le bit de poids faible des pixels, on reste quasiment sur la même couleur. En théorie, on pourrait même mettre deux fois exactement la même couleur à la suite, mais cela serait vraiment trop voyant...
On pourrait ainsi mettre 2 bits par pixel en se limitant à une palette de 64 couleurs....