Comment cacher numériquement une image «sous» une autre? Par exemple, comment cacher le plan d'une base aérienne sous Le moulin de la Galette de Piette-Auguste Renoir (image ci-dessous)?
Il faut bien comprendre, qu'informatiquement parlant, une image est un tableau
de pixels. Si l'on regarde un écran de télévision allumé avec une loupe, on
voit bien apparaître tous ces points lumineux colorés qui forment l'image.
Pour simplifier les explications, nous travaillerons avec des images en niveaux
de gris. Chaque pixel de l'image sera un nombre entre 0 et 1: 0=noir, 1=blanc,
0.5=gris moyen. Un pixel proche de 0 sera gris foncé, un pixel proche de 1 sera
gris clair.
L'image sera quant à elle représentée par une matrice de pixels de m
lignes et n colonnes (mxn). Prenons comme exemple une matrice
de 3 lignes et 4 colonnes (les pixels de l'image correspondante sont fortement
grossis):
la matrice ![]() |
|
Mathématiquement, on peut décrire le camouflage d'une image «sous» une autre par une combinaison linéaire des deux matrices mxn (les deux matrices doivent avoir les mêmes dimensions). Si A est la matrice de l'image «camouflante» et B la matrice de l'image camouflée, alors on peut calculer la matrice de l'image combinée (C) par
C = A + (1/k)B |
où k est un nombre «bien choisi».
L'image B' (qui sera peut-être légèrement différente de l'originale B) sera retrouvée par la formule B'=k(C-A).
Remarque: les pixels très proches de 1 dans l'image A peuvent poser problème. En effet, en leur additionnant un certain nombre, ils risquent de dépasser 1. Ils seront alors tronqués à 1. Cela a pour conséquence que, une fois l'image C déchiffrée, l'image B' sera légèrement altérée par rapport à B (voir l'exemple numérique ci-dessous).
Pour illustrer ce qui vient d'être dit, essayons de camoufler la lettre grecque mu «sous» une tête de chat. Les deux images ont 45 pixels de largeur et de hauteur.
A | B |
![]() |
![]() |
Le tableau ci-dessous montre les matrices C obtenues pour des paramètres k choisis entre 0.25 et 64. La deuxième ligne montre l'image que l'on retrouve après la soustraction de l'image A.
k = 0.25 | k = 0.5 | k = 1 | k = 2 | k = 4 | k = 8 | k = 16 | k = 32 | k = 64 | |
C | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
B' | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
On voit que si l'on choisit un k suffisamment grand, la qualité du chiffrement et du déchiffrement est tout à fait bonne. Ce système très simple implique que les deux protagonistes possèdent l'image A: c'est la clef de chiffrement.
![]() |
![]() ![]() |