TP Stéganographie

Le 18 Octobre 2023

Couleur d’un pixel

Pour connaitre la couleur d’un pixel en particulier, on peut utiliser un logiciel de retouche d’images comme Gimp et de son outil pipette qui permet de prélever la couleur précise d’un pixel à une coordonnée précise.

Dans mon cas, j’ai utilisé l’outil Color Picker de l’application Power Toys par Microsoft

Ce qui nous donne, pour le pixel situé à la coordonnée (252, 214) une couleur RGB de (88, 29, 26).

Ce qui veut dire :

  • 88 Unités de rouge
  • 29 Unités de vert
  • 26 Unités de bleu

Cette couleur correspond au code hexadécimal #581D1A

Image de Color Picker

Description du procédé stéganographique

Question 1 : Vérifiez que les deux points de coordonnées (0,0) et (0,1) sont de la même couleur

Pour vérifier si ces deux pixels sont de la même couleur, on peut réutiliser le même outil qu’a la question précédente, mais sur les coordonnées (0,0) et (0,1)

On constate alors que ces deux pixels sont de la même couleur, rgb(75, 74, 148).

Question 2: Modifiez la couleur du pixel à la coordonnée (0,0) en ajoutant 1 à la composante bleue de sa couleur

J’ai, à l’aide de l’outil pipette et du crayon, modifié la couleur du pixel situé en (0,0) en ajoutant 1 unité à la valeur bleue du code RGB, ce qui fait passer la valeur bleue de ce pixel de b(148) à b(149).

Question 3 : Voyez-vous une différence de couleur avec le pixel voisin ?

Après modification du pixel, on peut remarquer qu’aucune différence de couleur n’est visible à l’œil.

Retrouver un message

Question 1 : Commencez par par noter les valeurs des composantes bleues

Toujours en utilisant l’outil pipette de Gimp, on peut relever 2 valeurs différentes dans la partie bleue du code RGB des pixels, le b(148) et le b(149)

Question 2 : Puis, déterminez les valeurs de leur bit de poids faible

Afin de déterminer les valeurs du bit de poids faible, il faut regarder si le nombre est pair ou impair. En effet, le bit de poids faible étant le dernier bit d’un nombre (écrit en binaire), on peut prendre comme exemple le nombre pair 90 qui donne 01011010 en binaire, et on observe que le bit de poids faible est 0. À l’inverse, si l’on prend le nombre 91, sa correspondance binaire est 01011011, le bit de poids faible est alors 1.

Donc, si l’on applique cette logique au nombres 148 et 149 de la composante bleue des couleurs, on remarque :

Question 3 : Trouvez les codes binaires des carractères cachès

Pour simplifier la tâche de distinction de ces deux couleurs de pixels, j’ai utilisé l’outil Sélection par couleur de Gimp et appliqué une tolérance de 0 pour qu’uniquement la couleur bleu(148), donc les bits négatifs, ne soie sélectionnée. À partir de cette sélection, j’ai pu changer les couleurs pour faciliter la lecture.

J’ai donc trouvé, sur la première ligne, l’octet 00000100 qui correspond, en décimal, au chiffre 4.

La longueur du message étant donc de 4 caractères, on doit s’attendre à 4 séries de 8 bits qui forment le message, donc 32 bits en tout.

Le contenu du message, en binaire est donc : 01010100 01000010 00100000 00100001 Image des séquences d’octets

Question 4 : Enfin, en vous aidant de la table du codage ASCII sur Wikipédia, révélez le message

Enfin, à l’aide de la table de codage ASCII, disponible sur Wikipédia, nous allons donc révéler le message caché à partir du contenu brut binaire du message comme suit :

On remarquera, le premier bit de chaque octet à été supprimé, le code ASCII étant sur 7 bits par caractère uniquement.

Le message serait donc « TB ! », ce qui est vérifiable par exemple à l’aide d’un outil de conversion binaire vers ASCII : Image d’un convertisseur binaire vers ASCII

Choix du format de sauvegarde du fichier

Question 1 : Reprenez l’image. En utilisant Gimp, enregistrez-là au format jpg

L’image de base est exportée en jpg l’aide de Gimp, dans Fichier > Exporter sous

Question 2 : Chargez cette image au format jpg et tentez de retrouver le message dissimulé. Que constatez-vous ?

Après comparaison, on remarque que le 5 ème pixel de la ligne 0, dont on connaissait l’existence d’une variation (de la composante bleue de son RGB), est maintenant de la même couleur que les autres pixels de la région.

Ceci vient de la méthode de fonctionnement de la compression JPG. Cette compression permet de réduire la taille des fichiers d’images en sacrifiant une partie de la qualité. Le JPG utilise un algorithme qui détecte et élimine les petites différences entre les pixels, qui permet de réduire la taille finale du fichier. Ce qui explique pourquoi le message est devenu illisible. Image montrant la (non) différence entre les deux pixels compressés

Question 3 : Comparez la taille des deux fichiers au formats jpg et png. Qu’en pensez-vous ?

En regardant les propriétés des deux fichiers, on remarque que le fichier JPG est plus lourd que le ficher PNG, ce qui parait bizarre étant donné que les fichiers JPG sont censés être compressés, donc moins lourds.

Cela peut être dû à plusieurs facteurs, le premier étant que, lors de l’export, Gimp applique une qualité de 90%, qui, avec l’algorithme de compression, peut augmenter la taille de l’image. La seconde étant que l’image contient beaucoup de couleurs distinctes au centre, autour de la tache noire, ce qui fait que toutes ces couleurs ne sont pas compressées par l’algorithme et donc augmente la taille du fichier.

propriétés du ficher exporté
Ficher Exporté.
propriétés du ficher Original
Fichier Original.

Question 4 : Examinez d’autres formations possibles. Lesquels conviennent pour notre procédé stéganographique ?

Après plusieurs essais, j’en suis venu à la conclusion que, pour pouvoir conserver le message, il faut utiliser des formats d’images qui utilisent une compression avec le moins de perte possible. On peut noter par exemple les formats TIFF pour les images de haute qualité, le BMP qui n’utilise pas la compression, ou encore le format WEBP qui est optimisé pour le web.

Vers l’infini et l’au-delà

Après quelques recherches, j’ai pu comprendre que la technique de stéganographie peut s’appliquer à plusieurs types de fichiers en plus des images, comme les sons, les textes, les sous-titres, les métadonnées et même dans les fichiers PDF où l’on peut par exemple, à l’aide d’outils comme PDFStego, cacher un fichier dans un PDF.

J’ai aussi vu un cas d’utilisation de la stéganographie sous la forme d’un malware, que l’on appelle Stegomalware, qui est une variante du cheval de Troyes Zeus qui cherchait à télécharger une image contenant du code malveillant visant à collecter des données bancaires. Source

Pour ce qui est du compte-rendu de cette activité, j’ai pu en tirer plusieurs choses :