Ci-dessous, les différences entre deux révisions de la page.
stegano:lsb [2016/04/15 12:41] arkinar |
stegano:lsb [2016/07/04 08:38] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | **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 : | ||
- | |||
- | <code>(R, G, B) = (11111111, 11111111, 11111111) | ||
- | Ce qui nous donne la couleur blanche | ||
- | </code> | ||
- | |||
- | 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 Bleue. | ||
- | |||
- | <code> | ||
- | Rouge qui était : 11111111 | ||
- | Devient : 11110110 | ||
- | Le vert ne change pas | ||
- | Le bleue 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. | ||
- | </code> | ||
- | |||
- | |||
- | 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çut. | ||
- | |||
- | 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 couleurs sur trois. | ||
- | |||
- | __Outil__ | ||
- | |||
- | LSB-Steganography est un outil python permettant de gérer le LSB dans une image. | ||
- | |||
- | Vous pouvez le récupérer ici : [[https://github.com/RobinDavid/LSB-Steganography|LSB-Steganography]] | ||
- | |||
- | L'outil utilisant la librairie opencv, il faudra l'installer avec la commande suivante : | ||
- | |||
- | <code> apt-get install python-opencv </code> | ||
- | |||
- | __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. | ||
- | |||
- | <code> | ||
- | 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 | ||
- | </code> | ||
- | |||
- | 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 : | ||
- | |||
- | <code> | ||
- | 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() | ||
- | </code> | ||
- | |||
- | En sortie vous obtenez le message caché. |