LSB : Cacher un message dans les pixels

Le 23/04/2025

Depuis mes premières explorations en stéganographie, la méthode dite LSB (pour Least Significant Bit) a toujours attiré mon attention. Elle repose sur une idée à la fois simple et brillante : dissimuler des informations dans les bits les moins significatifs des pixels d’une image.

En d’autres termes, on modifie des détails tellement minimes que l’œil humain ne perçoit aucune différence… mais un programme bien conçu, lui, peut lire ce qui a été caché.

Principe de base

Une image numérique est composée de pixels. Chaque pixel est une combinaison de couleurs (rouge, vert, bleu) codées en binaire.
Par exemple :
Rouge : 11110000
En modifiant le dernier bit (0) en 1, on obtient 11110001. Visuellement ? Aucun changement notable.
Mais si on encode un message bit par bit sur plusieurs centaines de pixels, on peut y cacher une phrase entière.

Exemple pratique

J’ai tenté une expérimentation avec une image volontairement banale : un ciel nuageux. J’y ai injecté une phrase en binaire, caractère par caractère, dans les bits les plus faibles du canal bleu.

Cloud lsb test

L’image semble parfaitement normale.
Mais en analysant les bits avec un petit script maison, on peut en extraire… quelque chose. Du moins, en théorie.

Le script (extrait)

from PIL import Image

def extract_lsb(image_path):
    img = Image.open(image_path)
    pixels = list(img.getdata())
    bits = ''
    for pixel in pixels:
        bits += str(pixel[2] & 1)  # LSB du canal bleu
    chars = [chr(int(bits[i:i+8], 2)) for i in range(0, len(bits), 8)]
    return ''.join(chars)

message = extract_lsb('cloud_lsb_test.png')
print(message)

Remarques

Je ne suis pas certain que cette méthode soit la plus fiable aujourd’hui. Elle est facilement détectable avec les bons outils, et le moindre traitement de l’image peut endommager le message.

Mais elle reste une excellente porte d’entrée dans le monde de la stéganographie, et une démonstration fascinante de ce qu’on peut faire avec “presque rien”.