F. L. C. C. Consultant Informatique

...

Login

Calendrier

«»
Décembre 2017
LMMJVSD
 123
45678910
11121314151617
18192021222324
25262728293031
FrenchEnglish

Stéganographie

Écrit par  Fabrice
Évaluez cet article
(0 votes)

FL La Steganography

argaiv1856

Dans le cadre de mon travail en 2003 sur la sécurisation de documents, j'ai étudié la cryptographie et la stéganographie.

Voici un article sur la stéganographie.

 

Stéganographie


La stéganographie est l'art de passer un message de telle façon que même l’existence du message est inconnue. Le but de la stéganographie est d'éviter d’attirer l’attention sur la transmission d'un message caché.

Si le soupçon est levé, le but est annulé. La stéganalyse est l'art de la découverte et de rendre inutile ces messages cachés.

FL

 

Accueil



Comprendre la stéganographie dans l’image numérique

Peur que vos e-mails soient lus par des inconnus? Peur que ceux-ci accèdent à vos disques durs? Ou envie de vous amuser à leurrer les espions? Littéralement, il s'agit de cacher ses textes ou ses images, ses sons, ses vidéos voire ses virus, dans d'autres images, sons ou vidéos. Car à l'heure du numérique, tout document est une cachette potentielle: de la simple photo de votre chat à la bluette du Top 50 en MP3, en passant par l'intégrale de Frank Herbert. Même quelques zones obscures d'un disque peuvent abriter vos secrets.

Qui plus est, les logiciels permettant ces amusants tours de passe-passe abondent sur Internet. En quelques clics, vos fichiers confidentiels disparaîtront derrière des documents anodins. A œil ou à l'oreille, aucune différence entre la photo sans secret ou la photo avec; à peine si les fichiers transformés sont plus gros. Tout comme dans la nouvelle Edgar Poe, La Lettre volée, le secret est sous les yeux, mais personne ne le voit. Qui penserait à chercher un carnet d'adresses derrière une photo de vacances ? Visiblement, cette image met moins la puce à l'oreille des pirates que des lignes de textes cabalistiques. Et rien ne vous empêche, en outre, de crypter vos secrets avant de les cacher...

En fait, la stéganographie n'a pas attendu l'ordinateur. Et, dès le XVème siècle, un ouvrage lui est consacré. Si, à l'époque, il ne s'agit que de dissimuler des textes dans d'autres, l'inventivité des techniques n'a rien à envier à la nôtre: encre invisible, anagrammes, acrostiches (lecture des initiales verticalement), gigognes (imbrication d'un texte dans un autre)...

La stéganographie (du grec steganos, couvert et graphein, écriture) c'est l'art de cacher un message au sein d'un autre message de caractère anodin, de sorte que l'existence même du secret en soit dissimulée. Alors qu'avec la cryptographie habituelle, la sécurité repose sur le fait que le message ne sera sans doute pas compris, avec la stéganographie, la sécurité repose sur le fait que le message ne sera pas sans doute pas détecté.

Parmi les astuces historiques, on note les encres invisibles, les messages cachés dans des oeufs durs (en écrivant sur la coquille à l'aide d'une solution de vinaigre et d'alun), les minuscules trous d'épingle dans des caractères sélectionnés, les infimes changements dans l'écriture manuelle des caractères ou dans leur espacement, les marques au crayon sur un texte tapé à la machine, les micropoints (une page de texte photographiée et réduite à un point de moins d'un millimètre de diamètre, lequel sera ensuite posé sur une lettre apparemment anodine) etcaetera.

Dans le même ordre d'idée, on pourrait aussi imaginer un code dont le résultat ressemblerait à une innocente partie d'échecs, comme ci-contre, ou un poème, ou bien à une partition de musique ou à des équations mathématiques ou même à d'innocents dessins d'enfants, comme dans le chiffre des "Hommes Dansants".

Aujourd'hui, avec les ordinateurs, on peut cacher du texte dans du texte en utilisant, par exemple, les blancs en bout de lignes. Un blanc vaut 1, aucun vaut 0, et voici la clé du codage, il est vrai plutôt rudimentaire, car plus le secret est long plus le texte qui le camoufle grossit. Pour les images ou les sons, la technique consiste à repérer les éléments (octets) importants et à remplacer les octets superflus par des parties du message à cacher. Si, dans une grande surface bleue, on enlève quelques points, œil ne le verra pas, mais c'est de la place libérée.

Hélas, rien n'est infaillible! Si la stéganographie a ses adeptes, elle a aussi ses pirates. Qui sont parfois les mêmes... Des logiciels traquent ainsi les anomalies statistiques dans la myriade de points qui compose une image afin de révéler si quelque chose est caché. Mais une fois détecté un intrus dans une image, par exemple, il reste tout de même à l'extraire, ce qui n'est pas forcément facile.
Derrière son aspect ludique, la stéganographie suscite actuellement un regain d'intérêt, car elle est à l'origine des techniques de tatouage des documents, destinées à les authentifier, à la manière des filigranes sur les billets de banque. Ce marquage est en fait une information cachée, qui doit être invisible et non modifiable. Ceci afin de préserver les droits d'auteur ou de certifier les origines.

Nous allons parler ici d'un sujet assez proche de la cryptographie sur certains plans. Il s'agit de la dissimulation de données dans des documents. Le but premier de ces techniques est de permettre la signature de documents (pour pouvoir y mettre un copyright) mais on peut l'utiliser pour d'autres choses (plus ou moins légales). Le plan que nous allons adopter va nous permettre de passer en revue les différents supports numériques utilisés pour dissimuler des données: le texte, l'image, le son, la 3D . Pour ceux qui sont intéressés voici un bref historique de la stéganographie.

Remarque: Tout au long de ce document, nous parlerons très librement de Stéganographie (en anglais: steganography ou data hiding) et de watermarking (ou tatouage). Ces deux techniques sont très proches l'une de l'autre, mais n'ont pas les mêmes objectifs, ni les mêmes contraintes.

En fait, on peut considérer que le watermarking est une sous-partie de la stéganographie. Dans le cas du Data Hiding, on cherche à dissimuler une quantité très importante de données (par exemple une image dans une autre image).

Dans le cas du watermarking, on cherche juste à marquer une image (on se limite souvent à la dissimulation d'un bit: marquée/pas marquée). Le but du watermaking est de dissimuler une information qui à pour but de démontrer l'intégrité du document ou encore de protéger les droits d'auteurs.

Une autre différence très importante entre la stéganographie et le watermarking se situe au niveau des attaques qui peuvent avoir lieu contre ces techniques. En stéganographie, le pirate va chercher à lire les données dissimulées dans le document, tandis que dans le cas d'un document "watermarké" va chercher à "laver" le document de toute signature possible (ou alors il peut essayer d'usurper l'identité de l'auteur).


Le Texte

La dissimulation de données dans du texte est une chose bien particulière, et comme nous allons le voir elle n'a pas grand chose à voir avec l'image ou le son. Et ceci pour plusieurs raisons: on ne travaille pas avec le texte dans "l'a peu près". Je m'explique, dans une image on peut considérer qu'"endommager" celle ci avec un filtre passe-haut suffisamment "léger" ne change quasiment rien à la perception que nous allons avoir de celle-ci. Par contre avec un texte, soit le texte est comme l'original soit il ne l'est pas. Celui ci ne permet quasiment aucune modification. Une des exigences de la dissimulation de données est d'endommager le moins possible le texte original. Pour cela nous allons utiliser la méthode dite des "espaces".

Méthodes des "espaces" (en fin de phrases)

Alors la, c'est une méthode qui va peut être vous sembler bourrine mais bon dans le cas du texte il n'y pas beaucoup de choix comme vous allez le voir. Il y a encore ici 2 méthodes différentes quoi que reposant sur le même principe. La première méthode consiste à mettre des espaces en fin de ligne. On se définit un code à suivre et l'on commence:

0 espace en fin de ligne correspond à 0.

1 espace en fin de ligne correspond à 1.

Ca y est nous avons la base pour coder un message. Ex: ( ici les espaces sont remplacés par des "_" pour plus de lisibilité ).

bonjour ceci est un message caché. A vous de le lire._ Je pense que vous commencez_ à comprendre le principe. Malheureusement tout n'est pas_ rose. Mais bon, nous arrivons quand même à_ dissimuler un octet._

Comme vous pouvez le voir dans notre exemple nous avons codé:

0 espace; 1 espace; 1 espace; 0 espace; 1 espace 0 espace; 1 espace; 1 espace.

<=> 01101011

Bravo voici un octet de dissimulé. Je vous avais prévenu c'est assez nul comme méthode mais on fait avec. Alors les problèmes liés à la méthode:

- Il faut énormément de lignes pour coder peu de texte. En effet, il faut 8 lignes pour coder 1 octet. Donc imaginons que l'on veut coder une phrase de 20 mots (chaque mot faisant environ 4 caractères) et que l'on code chaque caractères sur 7 bits (on optimise comme on peut), il va nous falloir environ 560 lignes.... pas terrible comme rentabilité.

- Super visible par une personne extérieure qui s'y attend un peu. Et donc facilement manipulable.

Les avantages:

- Très facile et donc très simple à implémenter. Et puis ça peut marcher avec de nombreuses personnes. Bon je vois déjà des petits malins qui se disent qu'il suffit de rajouter des espaces pour coder plus de caractères sur moins de texte (vous me suivez ?). Et bien oui, mais bon alors la ça se voit comme le nez au milieu de la figure. Pour ceux qui ne comprennent pas je ré explique : En utilisant 3 espaces:

- 0 espace <=> 00

- 1 espace <=> 01

- 2 espace <=> 10

- 3 espace <=> 11

Il faut alors 4 lignes pour coder 1 octet (au lieu de 8).

Méthodes des "espaces" (entre les mots)

Cette méthode est basée sur le même principe, mais cette fois-ci nous allons coder notre texte dans le nombre d'espaces entre chaque mots. C'est encore plus visible que la méthode précédente, mais le rapport texte codé sur texte hôte est beaucoup plus important.

On se met d'abord d'accord sur une convention :

- un espace entre 2 mots suivit de deux espaces entre les 2 mots suivants <=> 0

- deux espaces entre 2 mots suivit d'un espace entre les 2 mots suivants <=> 1

Pour mieux comprendre voici un exemple avec le texte suivant:

Ceci_est__essai__de_texte__caché_dans__un_texte_hôte. Vous__devez__avouer que_ce__n'est_pas_très__subtil.

_ __ : 0

__ _ : 1

__ _ : 1

__ _ : 1

_ __ : 0

__ _ : 1

__ _ : 1

_ __ : 0

=> 01110110

Et ça y est vous avez codé un octet. Voici le texte tel qu'il va réellement apparaître, à vous de jugez si cela vous convient:

Ceci est essai de texte caché dans un texte hôte. Vous devez avouer que ce n'est pas très subtil. Voyons un peu le rapport texte à coder sur texte hôte. Il vous faut 2 mots pour un bit, donc pour une phrase de 20 mots (20*7=240 bits), il faut un texte hôte de 480 mots, en comptant 10 mots par ligne on arrive à environ 50 lignes. On gagne un rapport de 10 comparé à la méthode des espaces en fin de ligne. Pas mal !! à vous de juger. Si vous pensiez que ces méthodes étaient étranges, attendez de voir les suivantes.

Méthode des synonymes

Alors là votre texte ne va pas être désorganisé mais il risque d'en prendre un coup au niveau sémantique. Encore une méthode simpliste à comprendre..... Il suffit de créer une table des synonymes du genre:

0

1

gros

obèse

petit

minuscule

riche

fortuné

beau

joli

nourriture

aliment

bateau

navire

femme

épouse

tranquille

calme

Et ensuite il vous reste à écrire votre texte:

Au loin je vois mon gros navire sur la mer tranquille. Oui je suis fortuné, j'ai une belle épouse et je mange de très bons aliments, et ma voiture est loin d'être minuscule.

Dans ce texte qui a l'air innocent nous avons masqué 1 octet:

gros : 0

navire : 1

tranquille: 0

fortuné : 1

belle : 0

épouse : 1

aliments: 1

minuscule: 1

<=> 01010111

Cette méthode est bien sympa, mais alors bonjour la galère à implémenter, et surtout il faut quand même s'autoriser une petite vérification du texte après. En effet, notre belle langue ne permet pas tous les délires. Par exemple: je vois passer dans la rue une superbe femme et je vois passer dans la rue une superbe épouse peut prêter à confusion. Bon passons à la méthode suivante:

Méthode syntaxique

Juste un rapide coup d’œil sur une méthode relativement peu utilisable. En effet cette méthode peut altérer le sens d'une phrase, demande énormément de texte pour en coder peu. On part du principe que certaines règles de grammaire sont un peu litigieuses et donc modifiables, sans pour autant choquer le commun des mortels (je m'excuse par avance auprès des experts en langue française du massacre que je vais commettre). Voici l'esprit de la méthode.

Voici deux phrases quasiment équivalentes:

après y avoir passé deux mois et trois jours

après y avoir passé deux mois et, trois jours

La virgule après le "et" ne choque pas trop dans certains cas on peut donc se permettre coder un bit sur le respect ou non de la virgule après le "et":

et <=> 0

et, <=> 1

Je vous laisse imaginer le nombre de mots qu'il faut pour coder une phrase, c'est l'horreur. Mais rien ne vous interdit d'utiliser plus d'une règle pour coder votre message.

conclusion

La stéganographie sur un support texte est quelque chose qui ne supporte pas la fantaisie. En effet chaque retouche est directement visible par le lecteur. D'autre part un texte signé par les méthodes décrites est relativement facilement identifiable.


L'Image

Il s'agit ici du domaine le plus vaste et certainement du plus intéressant. En effet, les applications sont très nombreuses, et les méthodes à utiliser sont assez complexes (comparées à celles utilisées pour le texte). Le marquage d'images a de nombreux buts: copyright des images (très important à l'époque d'Internet où des milliers d'images circulent sur le web), mais aussi marquage de papiers ou de billets (pour éviter le photocopillage), vérification de l'intégrité de documents  etc... A chaque utilisation correspond une méthode. En fait les techniques doivent répondre à certaines règles très importantes et souvent difficiles à concilier:

- endommager le moins possible le support sur lequel le marquage va avoir lieu. (l’œil humain ne doit pas être choqué).

- le marquage doit pouvoir supporter le plus grand nombre de transformations possible sans être dégradé (compression JPEG, filtres, passage analogique- numérique, changement de palettes etc.. voir les différentes attaques possibles sur le marquage).

- la complexité de l'algorithme doit être minimum afin de pouvoir effectuer le marquage et/ou la détection en temps réel.

Le marquage peut avoir lieu au niveau de l'image dans le domaine des fréquences:

-Technique de Watermarking tenant compte de la corrélation HVS-Canaux RGB

ou même plus traditionnellement dans le domaine spatial:

-Bits de poids faibles

-Signature par modulation d'amplitude

-Watermarking par DCT à taille de blocs variable

Nous parlerons même du watermarking de la seconde génération. (un exemple proche est celui par modification géométrique). Certaines méthodes utilisent même la palette pour marquer l'image (dans le cas ou l'image possède une palette, comme pour le marquage EzStego).

Les premières méthodes de signature d'images ont été proposées en 1993 par Caronni (bien que des articles plus anciens faisaient déjà allusion à ce type de pratiques). Les méthodes les plus récentes portent les noms de Anderson, Aucsmith, et Swansonet Al. Les méthodes utilisées dans le stéganographie dépendent surtout du type de marquage que l'on désire:

-Marquage privé : Dans ce cas précis, on a besoin de l'image originale. Et là encore on différencie deux types:

1er type : On utilise l'image originale, l'image marquée et la clef. A partir de cela on retrouve le marquage.

2e type : On a besoin de l'image originale, de la clef, et de l'image marquée et du marquage pour savoir si OUI ou NON l'image marquée contient le marquage donné..

-Marquage semi-privé : Ici, pas besoin de l'originale. on a juste besoin de l'image marquée, du marquage et de la clef pour savoir si OUI ou NON l'image contient le marquage. Ce marquage est très utilisé (par exemples pour les DVD).

En effet, imaginons un marquage spécifique à chaque pays. Le lecteur de DVD lance une application qui, avec le CD inséré dans le lecteur (image marquée) et la clef, il va regarder si l'image à été marquée et va alors autoriser ou non la lecture du DVD.

-Marquage public : (appelé aussi marquage aveugle). C'est ici le problème le plus intéressant. On ne possède ici que l'image marquée et la clef. Cela suffit à faire apparaître le marquage.

Clef(Image marquée) = Marquage


La Transformation de Fourier

Le concept de transformation de Fourier est indispensable pour la compréhension du traitement du signal (et à for tiori du traitement de l'image). Du nom d'un mathématicien Français, la transformation de Fourier repose sur le principe suivant : Quasiment toutes les fonctions sont décomposables en une somme de cosinus et de sinus à des fréquences différentes. Ainsi, lorsque l'on représente une fonction dans un repère Amplitude/Temps, la transformation de Fourier permet de la voir dans un repère Amplitude/Fréquence. On voit donc les composantes en fréquence d'un signal.



Il est important de savoir que l'on peut repasser à la fonction d'origine à partir d'une transformée de Fourier en appliquant une transformation de Fourier inverse.
Notre intuition nous dit que lorsque nous avons affaire à un signal ou il y a beaucoup de "petits" bruits alors les composantes en hautes fréquences vont être importantes. Ce genre de propriétés permet d'appliquer des filtres sur les fonctions. Ainsi pour adoucir une image (pour enlever le bruit) on applique un filtre passe-bas (c'est un filtre qui ne laisse passer que les basses fréquences, appelé aussi "blur"). Pour conclure, il faut se rendre compte de quelques points importants:
- La transformée de Fourier d'une fonction permet de voir le signal sous un autre jour. Elle donne des informations qui ne sont pas forcément triviales sur la fonction.
- Il existe de nombreuses autres transformations, telles que la transformation en Z etc... D'ailleurs la transformation de Fourier possède des désavantages. En effet, pour la calculer, on intègre la fonction sur tout le temps. On perd ainsi complètement l'information temporelle. Ceci ne pose pas de problèmes pour un signal stationnaire.


Mais cela devient très problématique pour un signal dans lequel la fréquence varie très fortement au cours du temps.


Pour remédier à ce problème, on a développé la Transformation par ondelettes (et pour se mettre bien avec le principe d'incertitude d'Heisenberg qui nous dit que plus l'on prend une grande précision sur le temps plus l'on perd de précision sur la fréquence et vis versa).
- Le calcul numérique d'une transformation de Fourier prend énormément de temps, ce qui la rendait très peu exploitable à ces débuts. Une autre façon d'effectuer ce calcul à été inventé et à permit de la rendre accessible (en fait il a s'agit réellement d'une petite révolution) au commun des mortels. C'est ce que l'on appelle la FFT (Fast Fourier Transform).

Attaques sur les marquages

Il existe deux grands courants d'attaques sur les images watermarkées:

- Les attaques "destructives" au cours desquelles on fait subir des transformations (souvent violentes) à l'image. Ces transformations ont pour but de rendre illisible le marquage. Il est intéressant de remarquer que ces attaques ne sont pas forcément voulues. En effet, sans le savoir on peut dégrader suffisamment l'image pour que le tatouage soit effacé. En théorie, si le marquage est suffisamment fort, il doit résister à ces transformations ou tout au moins il doit rester tant que l'image reste exploitable.

- Les attaques plus "subtiles" au cours desquelles le pirate va intentionnellement chercher à laver l'image sans l'endommager. Pour cela il va procéder par différents moyens à la recherche de la clef qui à permis de tatouer l'image (on peut alors qualifier cela de "stéganalyse"). Lorsqu'il l'aura trouvé, il pourra alors lire le watermark, le changer, le supprimer etc .... Nous verrons cela en deuxième partie.

Commençons par le premier type d'attaques.
Voici une liste non exhaustive des différentes attaques possibles contre les images marquées. Ce que l'on appelle "attaque" est en fait une transformation que l'on va faire subire à l'image et qui va plus ou moins l'endommager mais qui risque d'être fatale au marquage. Comme vous pouvez vous en douter la confiance que l'on donne à un marquage dépend de sa capacité à résister à une attaque. Commençons la liste:

Compression JPEG :

Ceci est un mode de compression très en vogue (surtout depuis l'avènement de l'Internet). L'avantage de cette méthode se situe dans les taux de compression important que l'on peut obtenir, mais son désavantage se situe lui dans le fait qu'il s'agit d'une compression destructive. En effet plus l'on compresse l'image plus des défauts apparaissent. Pour comprendre le pourquoi de ces défauts il faut se pencher rapidement sur le principe de compression JPEG (qui se rapproche assez du format de compression MP3 pour le son). On découpe d'abord l'image en blocs carrés de 8 pixels sur 8 pixels. On effectue ensuite une Transformée de Fourier en 2 dimensions du bloc. Ensuite, applique un filtre passe bas (c'est à dire que l'on enlève les hautes fréquences), et c'est la que l'on choisit le taux de compression. Plus celui ci va être élevé, plus l'on va supprimer une gamme de fréquences importantes et plus l'image va être dégradée. Ex:

Originale

Compressée

Originale

Compressée

On applique ensuite une compression conservatrice. Vu l'importance de ce système de compression, tout bon algorithme de marquage doit pouvoir lui résister au moins dans les faibles taux de compression.

Les transformations géométriques :
- Symétrie horizontale : Certaines images peuvent être "flipper" sans perdre de leur sens (par exemple un paysage). Bien qu'il ne s'applique qu'à peu d'images, lorsqu'il se produit, très peu de marquages lui survivent. Ce serait une grave erreur de penser que l'on ne peut pas appliquer ce genre d'attaque à un film. En effet, essayez vous-même de regarder un film qui a subit cette transformation, et vous ne vous apercevrez de rien du tout (sauf dans les scènes ou de l'écriture intervient).

Originale

Symétrie

Originale

Symétrie

- Rotation : C'est une transformation qui est très utilisée après avoir scanné une image. Elle sert à réaligner des images (avec des petits angles) et peut être fatale à certains types de marquages.

- Le recadrement : Dans certains cas, les personnes ne sont intéressées que par un morceau de l'image (par exemple le centre). Elle recadre (en anglais "crop") alors l'image, ce qui peut détruire le marquage.

Originale

Recadrée

Originale

Recadrée

- Changement d'échelle : Ce genre de transformations peut être séparé en deux groupes : les transformations uniformes (pour lesquelles on conserve les proportions, l'échelle en X varie comme l'échelle en Y) et bien sûr les transformations non uniformes (où l'échelle en X ne varie pas comme l'échelle en Y).

Uniforme

Non Uniforme

Uniforme

Non Uniforme

- Transformations géométriques: On se contente de faire un mélange de rotations, changements d'échelles non uniformes.

- Transformations géométriques aléatoires (StirMark) : Nous détaillerons cela plus tard...

- Filtres passe-bas : Encore une fois, on utilise la transformée de Fourier pour travailler dans l'espace des fréquences de l'image et dans on ne laisse alors passer que les basses fréquences. En fait, dans des termes un peu plus mathématiques, il ne s'agit ni plus ni moins que d'un produit de convolution du signal (ici l'image) avec une fonction passe bas (dont la transformée de Fourier est une Gaussienne, une fonction porte etc .... ).

- Accentuation des contours : Ou encore appelé filtre "passe-haut" (car il supprime les basses fréquences), ou "Sharpen". Il s'agit de l'inverse du filtre passe-bas (encore appelé "Blur"). L'intérêt d'une telle attaque est assez faible, sachant que l'on conserve le bruit (et les forts gradients de l'image), et que c'est souvent à ce niveau la que se situe le tatouage (car c'est dans ces zones ou l'on cache de préférence de l'information).

- Attaque par Mosaïque: Il s'agit ici d'utiliser le "crop" d'une façon beaucoup plus violente et qui se prête assez bien aux pages HTML. Il suffit de découper l'image en autant de morceaux que l'on désire (plus il y a de morceaux plus l'attaque à des chances d'aboutir), puis de recoller cette image au moment de l'affichage en créant par exemple en HTML un tableau dont chacune des cellules contiendra un morceau de l'image. Cette attaque est très peu applicable en pratique, et heureusement car elle est d'une rare efficacité si l'on se donne les moyens de bien découper l'image.


Description de l'EzStego

Les images .gif (par compuserve) sont le lieu d'une méthode de stéganographie bien particulière. En effet, dans les .gif on commence par définir une palette de 256 couleurs prisent sur 2^24 possibilités (2^8 pour le rouge,2^8 pour le vert,2^8 pour le bleu).

Dans un premier temps, on crée une copie de la palette. Mais cette copie est triée. Le trie de la palette s'effectue de façon à ce que la différence entre 2 couleurs l'une à cotée de l'autre soit quasi imperceptible. Ce trie est plus délicat qu'il ne peut y sembler au premier abord. En effet, un simple tri sur la luminance ne donne pas de bons résultats.

A partir de cela voici comment l'on procède pour introduire l'image.
On balaye toute l'image et pour chaque pixel on procède la manière suivante:
-on cherche l'index du pixel dans la palette triée.
-on regarde quel bit l'on doit coder sur le pixel en cours (pour cela on se réfère à l'image en 2 couleurs qui va servir de masque). Et l'on met ce bit sur le bit de moindre importance de l'octet en cours (celui de l'index de la palette triée).
Ainsi, on se décale ou non d'1 index dans la palette triée. Si la palette est bien triée alors la différence entre les deux couleurs va être imperceptible.
-Ce nouvel index dans la palette triée correspond à un index dans la palette non triée. On remplace alors le pixel en cours par l'index de la palette non triée.

et ainsi de suite pour tous les pixels....

Pour retrouver l'image marquée, on procède de la façon suivante:
-on cherche l'index du pixel en cours dans la palette triée.
-le bit de poids le plus faible de cet indexe vient du masque appliqué sur l'image.

Cette méthode est une sorte de généralisation du marquage sur le bit de poids faible aux images indexées (c.a.d : qui ont une palette ou chaque pixels se réfèrent, contrairement aux images true color ou chaque pixel à ses propres composantes RGB).

Marquage sur les bits de poids faibles

Il s'agit là très certainement de la méthode la plus simple de data hiding sur une image. Imaginons que l'on travail sur une image en niveaux de gris (pour les images en couleurs, il suffit de travailler sur la luminance), et que l'on ait seulement 256 niveaux de gris possibles (de 0..255). On considère qu'entre 2 niveaux de gris consécutifs l’œil humain ne fait pas la différence (en fait cela dépend des niveaux de gris ou l'on se situe, mais nous verrons cela un peu plus loin).
Si l'on considère le niveau de gris en binaire, nous sommes en présence de 8 bits (<=> 256). Le changement du dernier de ces bits (le bit de poids faible) ne change le niveau de gris que de 1 unité (soit disant imperceptible à l’œil). On peut donc raisonnablement considérer que ce dernier bit n'est pas important, donc que l'on peut y mettre ce que l'on veut. Et c'est ce que l'on fait, on prend une image en 2 couleurs (1 bit) et on la place sur le bit de poids faible. Ca y est votre image est dissimulée.
Bon, il faut avouer que cette méthode présente de nombreux problèmes (en tout cas présenté de cette façon). En effet, il est très simple d'enlever ce marquage en mettant par exemple à 0 tous les bits de poids faible. De plus, toutes les "nettoyages" de l'image ou les filtres sont radicaux pour ce marquage. Par exemple la compression JPEG ne lui laisse quasiment aucune chance. De plus le système visuel humain peut être sensible à ces petits changements.
En effet, l’œil humain réagit de façon différente selon les contrastes. Ainsi, il est très sensible aux contrastes dans les gris de faibles intensités et beaucoup moins dans les teintes proches du blanc. Ainsi certaines méthodes profitent de cela en adaptant le nombre de bits de poids faibles à coder en fonction de la teinte en cours et de la teinte adjacente (tout en se référant à des données physiologiques sur les couleurs).
Malgré ses faiblesses de nombreuses méthodes dérivent de ce principe (ex: EzStego), bien que ce type de marquage soit de moins en moins à la mode.

De plus ce marquage dépend réellement du format de l'image que l'on veut marquer. En effet, cette méthode ne peut s'appliquer à des formats tels que le GIF (de compuserve). Ici les couleurs des pixels ne sont pas indépendantes mais codées selon une palette de 256 couleurs. Je m'explique, on donne une valeur comprise entre 0 et 255 à chaque pixel et lorsque l'on lit les pixels, on se réfère à la palette pour y mettre la couleur. Cela signifie que si l'on s'amuse à changer le bit de poids faible des pixels on peut changer complètement de couleurs.
Ex:

11111111 <=> 255 : et la couleur 255 est définie comme étant un rouge vif.

11111110 <=> 254 : et la couleur 254 est définie comme étant un bleu foncé.


Ainsi, en ne changeant que le dernier bit vous allez complètement détruire votre image....
Comment remédier à ce problème ??? Il existe plusieurs solutions pour marquer les palettes. La plus basique consiste à n'utiliser que 128 couleurs et à créer une palette ou les couleurs marchent par pairs:

couleur 00 : Rouge=150, Vert=12, Bleu=59

couleur 01 : Rouge=152, Vert=10, Bleu=50

couleur 10 : Rouge=50, Vert=200, Bleu=98

couleur 11 : Rouge=50, Vert=212, Bleu=95


Ainsi, en ne changeant que le bit de poids faible des pixels, on reste quasiment sur la même couleur. En théorie, on pourrait même mettre deux fois exactement la même couleur à la suite, mais cela serait vraiment trop voyant...
On pourrait ainsi mettre 2 bits par pixel en se limitant à une palette de 64 couleurs....



Signature par modulation d'amplitude sur les images couleurs

Cette méthode à été proposée en 1998 par Martin Kutter.
Elle repose essentiellement sur des arguments statistiques.
Nous travaillons ici sur des images en couleurs (Rouge, Vert, Bleu). Nous savons que le but du marquage est (entre autre) d'être invisible pour l’œil humain. C'est pour cette raison que nous allons appliquer la signature uniquement sur la composante bleue de l'image, car c'est au bleu que l’œil est le moins sensible.
De plus nous utilisons un générateur pseudo aléatoire pour nous générer une succession de positions au sein de l'image à marquer I. Ces positions représentent les positions ou vont avoir lieu les marquages, et servent donc en l'occurrence de clef secrète K pour retrouver la signature. Pour chacun des pixels de la clef (situés en i, j) on applique la transformation suivante:

Blue(i,j)=Blue(i,j)+(2*s-1)*L(i,j)*q

Avec:
L(i,j)=0.299*Red(i,j)+0.587*Green(i,j)+0.114*Blue(i,j) (c'est la luminance !!!)
s : le bit à coder.
q : une constante qui représente la force du marquage.

Pour retrouver le bit qui a été marqué, nous avons besoin de prédire la valeur du pixel d'origine. Pour cela nous partons du principe bien connu que la valeur d'un pixel dépend de celle de ses voisins. Ici nous nous limitons à une interpolation linéaire avec ses plus proches voisins. Ainsi, on interpole la valeur du pixel en faisant tout simplement la moyenne des 4 pixels (on se limite toujours à la composante bleue) situés comme indiqué sur l'image suivante:



On mesure alors la différence entre la valeur du pixel courant et celle du pixel interpolé, et si cette dernière est trop importante, on peut considérer que le pixel à été marqué.
Bien que cela marche souvent, il est nécessaire d'augmenter les performances de cet algorithme. C'est pour cela que l'on tatoue le même bit à plusieurs endroits. C'est l'ensemble des positions de marquage de ce bit qui va jouer le rôle de clef secrète K. Notre but, est de ne plus être tributaire de facteur comme la taille de l'image. Pour cela, on définit une valeur de densité de marquage variant de 0 à 1, qui va donner la probabilité pour que l'on marque un pixel. Ainsi, pour chaque pixel on regarde aléatoirement si l'on doit marquer le pixel ou non. Si la densité vaut 0 alors aucun pixel ne sera marqué et inversement si la densité vaut 1, tous les pixels seront marqués. On parcourt ensuite l'image en zigzag pour s'affranchir de la taille de celle-ci.
On fait la somme des différences des pixels trouvés avec ceux interpolés, et l'on re normalise cela par le nombre de pixels de l'image en cours (qui peut alors être différent de celui de l'image d'origine) multiplié par la densité de pixels à marquer. En fait ce produit correspond au nombre moyen de pixels marqués en tenant compte de la densité de probabilité de marquage. C'est ce résultat qui va nous dire si l'image à été marquée ou non.

Dernière modification le Mercredi, 23 Février 2011 15:53
Plus dans cette catégorie: « Logiciel "Note de Frais"

Laissez un commentaire

Les champs avec un * sont obligatoire. Le code HTML est autorisé.

Make sure you enter the (*) required information where indicated.
Basic HTML code is allowed.

Joomla 1.5 Templates by Joomlashack