Je mes souviens à l'epoque ou je scriptais en mirc du script Stegano de Knj, et ca marchait très bien (quoi qu'un peu lent compte tenu du "langage" =] mais tout à fait exploitable.)
J'avais plus ou moins compris le principe de la permutation des 4 bits de poids fort/faible du pixel, le poid faible serait négligeable d'un point de vue rendu du pixel, ce qui permet donc d'y cacher une image
Voici une explication de Kenji, si ca peut donner un coup de pouce.
comment ça marche?
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
chaque point d'une image numérique est composé par ses valeurs en rouge, vert et bleu
(système rgb). ces valeurs vont de 0 à 255 pour chacune des couleurs, soit 1 octet par
composante, c'est à dire 8 bits (0 ou 1). les 4 premiers bits sont les bits de poids
fort, c'est à dire ce qui ont la plus grande influence sur la valeur. les 4 derniers
bits sont les bits de poids faible, c'est à dire ceux qui ont le moins d'influence
sur la valeur de l'octet. ainsi, en ne conservant que les 4 bits de poids fort de
chaque composante couleur de chaque point de l'image, on obtient une image quasi
identique.
_____________________
__| codage des couleurs |_________________________________________________________
| ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ |
| chaque point d'une image est composé de 3 couleurs, |
| codée chacune sur 8 bits. |
| (soit 256 valeurs décimales possibles pour chaque couleur, de 0 à 255): |
| |
| composante: Bleu Vert Rouge |
| |
| 01010111 10010110 11001100 |
| |__||__| |
| | |____ 4 bits de poids faible : 0111 (valeur décimale: 7) |
| | |
| |_________ 4 bits de poids fort : 0101 (valeur décimale: 80) |
| |
| -> total de 8 bits : 0101 0111 (valeur décimale: 87) |
| pour le Bleu |
| |
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
sur ce principe, en prenant les 4 bits de poids fort de chaque composante couleur de
chaque point de l'image support, et en remplaçant les 4 derniers bits de poids faible
par les 4 bits de poids fort de l'image à dissimuler, on obtient un point dont la
valeur de la composante couleur est très proche de celle de l'image support, tout en
contenant l'information la plus grande sur la composante du point de l'image cachée.
__________________________
__| dissimulation d'un point |_________________________
| ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ |
| composante couleur |
| du point support |
| ____ |
| 0101 0111 |
| ¯¯¯¯\___________________ |
| | |
| ____ ____ composante couleur |
| --> 0101 1010 du point résultant |
| ¯¯¯¯ ¯¯¯¯ |
| | |
| ____/¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ |
| 1010 0110 |
| ¯¯¯¯ |
| composante couleur |
| du point à dissimuler |
| |
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
la suppression des 4 derniers bits de la valeur de la composante entraine inévitablement
des variations par rapport à la valeur initiale de la couleur du point de l'image
support. mais cette variation est très peu sensible, elle dépend de l'image support
utilisée (préférer des photos ou des images ne contenant pas de larges applats de
couleur uniforme).
____________________
__| exemple d'un point |_______________________________
| ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ |
| |
| point de l'image support : |
| |
| 0101 0111 1001 0110 1100 1100 |
| bleu = 87 vert = 150 rouge = 204 |
| |
| point de l'image à cacher : |
| |
| 1010 0110 1000 1100 0011 1001 |
| bleu = 166 vert = 140 rouge = 57 |
| |
| point résultant : |
| |
| 0101 1010 1001 1000 1100 0011 |
| bleu = 90 vert = 152 rouge = 195 |
| |
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
en réitérant ce procédé pour chaque composante de chacun des points, on obtient une
image quasi identique à l'image support d'origine. les variations de couleurs dûes au
remplacement de ces 4 bits de poids faible atténue l'image originale de manière minime,
difficilement discernable pour un oeil novice, et on peut, en exécutant le processus
inverse, reconstituer l'image cachée qui sera elle aussi sensiblement ientique à
l'image à cacher initiale.
commentaires quant à l'utilisation de cet addon
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
cet addon utilise la méthode de stéganographie numérique la plus élémentaire.
cette technique permettra d'éviter au premier venu de visionner l'image, car
il ne verra que l'image support et ne se doute pas, à priori, qu'une image est
dissimulée dedans.
néanmoins, si une personne connait la présence d'une image cachée dans le fichier image
support, il ne lui sera dès lors plus très difficile de révéler cette image..
on peut alors tenter plusieurs techniques pour *mieux* dissimuler cette image,
par exemple :
- crypter l'image à dissimuler
- crypter l'image support
- modifier la méthode de dissimulation de l'image cachée dans l'image support
(utiliser un algorithme, une sorte de cryptage), en modifiant cet addon..
(l'utilisation d'un cryptage comme celui fourni par le logiciel pgp permet une sécurité
satisfaisante..)
___________________________________________________________________________________________
document écrit par `kenji` <
kenji-irc@altern.org> - 01/08/2002 france