On cherche à échanger des messages secrets.

Comment cacher un message dans une image ?

Groupe TraAM mathématiques 2021-2022 de l’académie de Rennes

Niveau et durée : 2de SNT, 3h pour la totalité (1h30 pour une des deux parties)

Objectifs pédagogiques : Utiliser un langage de programmation (python) pour traiter une image.

Manipuler la notion de composantes RGB, se repérer sur une image, utiliser des instructions conditionnelles et des boucles « for » pour traiter une image.

La situation-problème :

On veut transmettre un message secret. Pour cela, on va le « cacher » dans une image. Il faut donc élaborer deux algorithmes : un pour coder le message, un pour le décoder.

Un exemple de message à cacher dans une photo

Prérequis :

Les élèves doivent avoir vu les affectations, les instructions conditionnelles et la boucle for sur Python. Pour le traitement d’images, les élèves doivent avoir vu les instructions : open, getpixel, show et doivent savoir ce que sont les composantes RGB d’un pixel. Les élèves doivent également connaître l’écriture binaire des nombres.

Nous avons réalisé préalablement deux séances de découverte de traitement de l’image (environ 3 h).

Fichiers Capytale
Traitement d’images
Lien Capytale https://capytale2.ac-paris.fr/web/c/0457-570552
Document élève de synthèse
Fiche eleve - Traitement de l’image
Fiche eleve - Traitement de l’image

Déroulement :

Cette activité est composée de deux parties indépendantes.

Fiche élève
Stéganographie - Fiche élève
Stéganographie - Fiche élève
Fiche professeur
Stéganographie - Fiche professeur
Stéganographie - Fiche professeur
Stéganographie - L’ensemble des documents

Partie A : Insertion d’un message TEXTE dans une photo

I - Codage du message à dissimuler :

On commence par cacher un mot de 5 lettres dans un morceau de l’image (un rectangle de 6×5 pixels). Pour cela, on modifie la composante B du code (R, G, B) de chaque pixel.

  • On code chaque caractère du mot en base 10.
  • On convertit en binaire le codage décimal.
  • On récupère la composante B de chaque pixel de la grille qu’on écrit en binaire.
  • On dissimule le codage binaire du mot dans la grille de pixels : on modifie le dernier chiffre (de l’écriture binaire) de chaque pixel.

II- Décodage d’un message

On réalise l’opération inverse : à partir des composantes B (écrites en base 10), on retrouve le mot codé :

  • D’abord la décomposition en base 2 du code de chaque caractère ;
  • En suite la décomposition en base 10 du code de chaque caractère ;
  • Le mot dissimulé.

Partie B : Programmation en Python du codage et décodage stéganographique

I - Codage du message à dissimuler :

On dissimule une image en noir et blanc dans une photo en couleurs.

Exemple : on cache dans le morceau d’image (à gauche) le morceau de message (à droite)

On utilise l’algorithme de codage suivant :

Algorithme de codage

On commence par l’appliquer « à la main » sur un morceau de l’image puis on automatise le travail en complétant un script.

Notebook Jupyter (à charger dans Capytale)
Notebook - Codage d’une photo
Lien Capytale : https://capytale2.ac-paris.fr/web/c/0c79-616415
Corrigé de l’activité Lien Capytale : https://capytale2.ac-paris.fr/web/c/3191-614225
Les messages cachés

II - Décodage de photo-codee.jpg :

On décode des photos dans lesquelles on a caché des images en noir et blanc.

Notebook Jupyter (à charger dans Capytale)
Notebook - Décodage d’une photo
Lien Capytale : https://capytale2.ac-paris.fr/web/c/fe1b-616419
Corrigé de l’activité https://capytale2.ac-paris.fr/web/c/fe1b-616419

Analyse du dispositif :

Les élèves ont apprécié l’échange de messages codés dans la partie A et le décodage de photos dans la partie B. Les parties A et B étant bien séparées, on peut choisir de n’en traiter qu’une.

La partie A nécessite que l’écriture des nombres en base 2 soit comprise.

Dans la partie B, les élèves ont eu plus de facilité à décoder des images qu’à les coder. Lorsque leur programme contenait une erreur, ils ne le visualisaient pas : en effet l’image de départ et l’image codée sont indiscernables à l’œil nu. Il est assez judicieux de commencer par l’activité « Décodage d’une photo ». Le script utilisé pour le décodage peut alors être intégré à la page « Codage d’une photo » pour vérifier le script.

Si l’enseignant le souhaite, il peut ajouter les images codées par les élèves dans le notebook pour les utiliser dans la partie « Décodage d’une photo ».

Dans les programmes du cycle :

En SNT

Contenus Capacités attendues
Traitement d’image Traiter par programme une image pour la transformer en agissant sur les trois composantes de ses pixels.

Les six compétences majeures :

  • Modéliser

Utiliser, comprendre, élaborer une simulation numérique ou géométrique prenant appui sur la modélisation et utilisant un logiciel.

  • Représenter

Passer d’un mode de représentation à un autre.

Cliquer ici pour découvrir la synthèse et toutes les activités du groupe TraAM de l’académie.

Documents à télécharger