StegoPy - Outil de stéganographie LSB en Python

Préface


Récemment, j'ai remarqué que les gens de mon forum se sont intéressés au sujet de la stéganographie de divers textes en images, fichiers mp3 et vidéos. Et puis j'ai eu l'idée d'écrire mon propre script pour la stéganographie du texte en images. Je dois dire juste avant que je n'ai jamais rencontré d'écriture d'outils similaires pour la stéganographie.

Avant de me familiariser avec la stéganographie LSB, j'ai envisagé d'autres moyens, ou plutôt, j'ai trouvé le mien. Mais je n'avais pas la force de trouver quelque chose à moi et j'ai décidé de le google:

LSB est une méthode de stéganographie dans laquelle les bits inférieurs d'une des couleurs RVB d'un pixel sont changés en bits de texte codé.

Ensuite, j'ai fait connaissance avec la bibliothèque Pillow pour travailler avec des images et de la cryptographie. Le second dans mon cas était nécessaire pour créer le cryptage DES, qui sera ensuite codé en bits dans l'image.

Codage


J'ai posté mon idée sur GitHub, donc pour continuer à travailler avec StegoPy, nous avons juste besoin de cloner le projet avec GitHub:

> git clone https://github.com/eBind/StegoPy
> cd StegoPy
> pip3 install -r requirements.txt
> python3 stegopy.py

Installation

Cependant, tout est comme d'habitude en termes d'installation. Voyons maintenant la syntaxe des commandes de lancement.

> python3 stegopy.py -e in.jpg data.txt

Avec cette commande, nous allons encoder le texte du fichier data.txt dans l'image in.jpg.
Mais avant l'encodage, on nous demandera un équilibre, qui peut aller de 1 à 4. Ce n'est là qu'une des choses les plus intéressantes du programme.

Fichier in.jpg


Fichier data.txt
this is private message

L'équilibre est le nombre de bits d'ordre inférieur impliqués dans la stéganographie. Il varie de 1 à 4. Par

conséquent, plus l'équilibre est élevé, plus:

  1. Moins de pixels seront impliqués dans le codage
  2. Changements notables dans les canaux de couleur

De cela, nous pouvons conclure que plus la balance est petite, plus la fiabilité de la stéganographie est élevée et elle sera invisible à l'œil humain.

Un autre facteur important est que seul le canal bleu change, dont les nuances sont les moins visibles à nos yeux.

Après avoir décidé de l'équilibre, notre script créera deux fichiers supplémentaires:

  • out.png - image avec texte encodé
  • key.dat - fichier avec la clé nécessaire au déchiffrement

Fichier out.png


Fichier Key.dat
1$960$gxvZH4Q8Gq2qLGeA1aSCXIPRljJlJbihsvSBdzx-wSM=

Codage

Décodage


La syntaxe de la commande dans notre cas est:

> python3 ./stegopy.py -d out.png

Ensuite, il nous sera demandé la clé que nous avons reçue lors du codage. Après décodage, le texte décrypté sera enregistré dans le fichier out.txt.

Décodage

Comme vous l'avez peut-être remarqué, l'image d'entrée a le format JPEG et la sortie est PNG. Il s'agit d'une faille dans le programme, qui sera bientôt corrigée et vous aurez la possibilité de choisir le format de sortie.

Seuls JPEG et PNG ont été testés sur l'image d'entrée, théoriquement, elle devrait fonctionner sur des images moins utilisées, telles que bmp, etc.

Soit dit en passant, Pylint a évalué StegoPy à 10/10. Les commentaires sur le code et les fonctionnalités sont les bienvenus car je prévois de développer l'application.

Le projet est disponible sur GitHub

All Articles