LSB : Least Significant Bit
Le but du LSB est de cacher des informations dans une image.
Les données sont insérées à la place des bits les moins importants.
Pour chaque composante RGB nous faisons varier uniquement le bit de poids faible.
Ainsi, la transformation est la suivante pour un pixel blanc :
(R, G, B) = (11111111, 11111111, 11111111) Ce qui nous donne la couleur blanche
Prenons la lettre 'a' en ascii qui vaut en binaire = 0110 0001
Nous allons la découper en deux fois 4 bits soit :
- un premier pack : 0110
- un second pack : 0001
Maintenant nous allons l'inserer dans notre pixel dans les couleurs Rouge et Bleu.
Rouge qui était : 11111111 Devient : 11110110 Le vert ne change pas Le bleu qui était : 11111111 Devient : 11110001 Notre pixel est maintenant (R, G, B) = (11110110, 11111111, 11110001) Ce qui nous donne une couleur claire proche du blanc.
La modification du bit de poids faible a peu d'impact sur la valeur d'une composante.
Plus la modification sera mineure plus elle passera inaperçue.
Nous avons fait passer une lettre sur un pixel mais il est possible de faire passer une lettre sur 4 pixels en modifiant uniquement le dernier bit de deux des trois couleurs.
Outil
LSB-Steganography est un outil python permettant de gérer le LSB dans une image.
Vous pouvez le récupérer ici : LSB-Steganography
L'outil utilisant la librairie opencv, il faudra l'installer avec la commande suivante :
apt-get install python-opencv
1.Cacher un message dans une image
Voici un petit exemple de code python pour cacher un message avec la technique du LSB dans une image :
Il vous faut une image et un message à cacher.
from LSBSteg import LSBSteg import cv2.cv as cv str = "Message cache de wikisecu.fr" #Message a cacher carrier = cv.LoadImage("image.jpg") #Image dans laquel on va cacher le message steg = LSBSteg(carrier) steg.hideText(str) steg.saveImage("res.png") #Image qui contient le message
En sortie vous obtenez une image nommée res.png qui contient votre message caché.
2.Retrouver un message dans une image
Voici un petit exemple de code python pour retrouver un message avec la technique du LSB dans une image :
from LSBSteg import LSBSteg import cv2.cv as cv im = cv.LoadImage("res.png") #image contenant le message cache steg = LSBSteg(im) print "Text value:",steg.unhideText()
En sortie vous obtenez le message caché.