Stéganographie#

Cacher plutôt que chiffrer#

La cryptographie rend un message illisible : on sait qu'un message secret existe, mais on ne peut pas le lire sans la clef. La stéganographie va plus loin : elle cache l'existence même du message. Personne ne soupçonne qu'un secret est présent.

Le mot vient du grec steganos (couvert, caché) et graphein (écrire) : littéralement, « écriture couverte ».

Les deux approches peuvent être combinées : on chiffre d'abord le message (cryptographie), puis on le cache dans un support anodin (stéganographie). Ainsi, même si quelqu'un découvre le message caché, il ne pourra pas le lire.


Un peu d'histoire#

La stéganographie est une pratique très ancienne :

  • Grèce antique : l'historien Hérodote raconte qu'Histiée rasa la tête de son esclave, tatoua un message sur son crâne, attendit que les cheveux repoussent, puis envoya l'esclave porter le message

  • Encre invisible : écrire avec du jus de citron ou du lait sur du papier. Le message n'apparaît que lorsqu'on chauffe la feuille

  • Micropoints (WWII) : pendant la Seconde Guerre mondiale, des espions photographiaient des documents en miniature sur des points minuscules (moins d'1 mm), collés sur des lettres ordinaires comme s'il s'agissait de points de ponctuation

  • Stéganographie numérique : aujourd'hui, on peut cacher des messages dans des fichiers numériques (images, audio, vidéo) en modifiant imperceptiblement leurs données


Comment une image est-elle stockée ?#

Une image numérique est composée d'une grille de pixels. Chaque pixel possède trois composantes de couleur :

  • R (Rouge) : intensité de 0 à 255

  • G (Vert) : intensité de 0 à 255

  • B (Bleu) : intensité de 0 à 255

Chaque composante est stockée sur 8 bits (1 octet), ce qui donne 256 valeurs possibles.

Composante

Valeur décimale

Valeur binaire

R

200

11001000

G

150

10010110

B

100

01100100


Le bit de poids faible (LSB)#

Le bit de poids faible (Least Significant Bit, LSB) est le bit le plus à droite dans la représentation binaire d'un nombre. C'est celui qui a le moins d'influence sur la valeur : le modifier ne change la valeur que de 1.

Par exemple, pour la composante rouge d'un pixel :

  • 11001000 = 200

  • 11001001 = 201

La différence entre 200 et 201 est imperceptible à l'oeil humain. C'est ce principe qui rend la stéganographie LSB possible : on remplace les bits de poids faible des pixels par les bits de notre message secret, sans que personne ne remarque de changement visuel.

Cochez les cases ci-dessous pour inverser le LSB ou le MSB (bit de poids fort, le plus à gauche) de chaque pixel. Comparez l'image originale et l'image modifiée : le changement du LSB est imperceptible, alors que le MSB change radicalement la couleur.


Cacher un message dans les LSB#

Pour cacher un message dans une image, on suit ces étapes :

  1. Convertir le message en binaire (code ASCII, 8 bits par caractère)

  2. Remplacer le LSB de chaque canal (R, G, B) de chaque pixel par un bit du message

  3. Un pixel peut stocker 3 bits (un dans chaque canal R, G, B)

Exemple : cachons la lettre H (code ASCII 72 = 01001000) dans 3 pixels.

Pixel

Canal

Valeur originale

Binaire original

Bit à cacher

Binaire modifié

Valeur modifiée

1

R

200

11001000

0

11001000

200

1

G

150

10010110

1

10010111

151

1

B

100

01100100

0

01100100

100

2

R

180

10110100

0

10110100

180

2

G

120

01111000

1

01111001

121

2

B

90

01011010

0

01011010

90

3

R

210

11010010

0

11010010

210

3

G

160

10100000

0

10100000

160

Les valeurs changent au maximum de 1. La différence est invisible à l'oeil nu.

La capacité de stockage dépend de la taille de l'image. Chaque pixel stocke 3 bits (un par canal R, G, B). Par exemple, pour une image de 1920 x 1080 (Full HD) : 1920 x 1080 x 3 = 6'220'800 bits = 777'600 caractères, soit environ 130 pages de texte.

Essayez vous-meme#

Essayez maintenant de cacher un mot de votre choix dans les pixels ci-dessous. A l'aide de la table ASCII, convertissez chaque caractère en binaire, puis cliquez sur les boutons LSB pour placer vos bits dans l'ordre (pixel 0 R, pixel 0 G, pixel 0 B, pixel 1 R, ...). Le texte décodé se met à jour en temps réel.


A vous de jouer#

Étape 1 : Cacher un message#

Utilisez l'outil ci-dessous pour cacher un message dans une image.

Important

Seuls les caractères ASCII (sans accents) sont supportés par cet outil.

Image source :

Message à cacher :

Image avec message caché :

Étape 2 : Envoyer l'image#

Téléchargez l'image générée et envoyez-la à un camarade par email ou Teams. L'image ressemble à un simple paysage, personne ne soupçonnera qu'elle contient un message secret.

Important

L'image doit rester au format PNG. Si elle est convertie en JPEG (par exemple par une compression automatique), les bits de poids faible seront modifiés et le message sera perdu.

Étape 3 : Extraire un message#

Votre camarade (ou vous-même) peut charger l'image PNG reçue dans l'outil ci-dessous pour retrouver le message caché.