Cacher une image dans une autre image
Un des exemples les plus étonnants de stéganographie est la possibilité de cacher une image dans une autre image!
Nous allons expliquer comment faire, l'applet en bas de la page en donne une réalisation concrète. Une image est constituée de pixels. Chaque pixel
est colorié en fonction d'une intensité de rouge R, de vert G (pour green), et de bleu B. L'intensité de rouge, de vert, de bleu de chaque pixel est un nombre
compris entre 0 et 255. Chacun de ses nombres s'écrit en base 2 comme une suite de 8 chiffres de 0 et de 1.
Prenons un pixel de la première image, et le même pixel de la deuxième image. A chaque fois, il est caractérisé par 3 nombres
à 8 chiffres en base 2. On va fabriquer une seul pixel qui sera presque colorié comme le premier. Pour cela, on garde les 4 premiers chiffres de chaque couleur du pixel de la première image, et on la complète par les 4 premiers chiffres de chaque couleur du pixel de la deuxième image, comme sur l'exemple ci-dessous.
Image 1 |
R=01001110
|
G=01101111
|
B=11111111 |
Image 2 |
R=01110011
|
G=01110110
|
B=10101010 |
Image fabriquée |
R=01000111
| G=01100111
| B=11111010 |
L'image que l'on a ainsi fabriquée est très proche de la première image. Pour chaque pixel, on a changé l'intensité
de rouge, de vert et de bleu d'au plus 16 (sur une valeur comprise entre 0 et 255). Et pourtant, on a caché une partie de l'information de l'image 2.
Expliquons désormais comment, à partir de l'image fabriquée, retrouver les deux images. Pour chaque pixel de l'image fabriquée, on regarde
les quatre premiers chiffres de l'écriture en base de l'intensité de rouge, de vert, de bleu. Ces quatre premiers chiffres vont constituer les
quatre premiers chiffres de rouge, vert et bleu du pixel correspondant de l'image 1 bis. On complète alors par quatre zéros.
Les quatre derniers chiffres de l'intensité de rouge, vert, bleu
de chaque pixel de l'image fabriquée vont eux constituer les quatre premiers chiffres de l'image 2 bis. On complète là-encore par quatre zéros :
Image 1 |
R=01001110
|
G=01101111
|
B=11111111 |
Image 2 |
R=01110011
|
G=01110110
|
B=10101010 |
Image fabriquée |
R=01000111
| G=01100111
| B=11111010 |
Image 1 retrouvée |
R=01000000
| G=01100000
| B=11110000 |
Image 2 retrouvée |
R1=01110000
| G=01110000
| B=10100000 |
Bien sûr, on ne retrouve pas chaque image à l'identique (pour chaque pixel, on a changé la valeur de l'intensité de rouge, vert et bleu
d'un nombre compris entre 0 et 16. Les images ont perdu en qualité, mais elles sont complètement reconnaissables! Par ailleurs, cet algorithme, naïf,
peut très facilement être amélioré. Par exemple, on pourrait utiliser un ou exclusif pour calculer les 4 derniers chiffres dans l'image fabriquée, et ainsi utiliser la première image comme clé. Ce procédé mélange cryptographie
et stéganographie.
Applet pour cacher une image
L'applet suivante met en place l'algorithme décrit précédemment. Vous pouvez essayez plusieurs exemples. L'algorithme est très efficace quand les images sont très variées (par exemple, l'image de fleurs cache très bien toutes les autres images). On sent nettement la perte de qualité lorsque l'image
comporte de grandes zones où la couleur ne change pas beaucoup. Enfin, si l'on cache le bouddha dans l'image à fond rouge, on parvient à le distinguer : il ne faut pas choisir n'importe quel image pour cacher!
Consulter aussi