StegoPy - LSB-Steganografie-Tool in Python

Vorwort


Kürzlich habe ich festgestellt, dass sich die Leute in meinem Forum für das Thema Steganographie verschiedener Texte in Bildern, MP3-Dateien und Videos interessieren. Und dann kam mir die Idee, ein eigenes Skript für die Steganographie von Text in Bildern zu schreiben. Ich muss gleich vorher sagen, dass ich noch nie auf ähnliche Werkzeuge für die Steganographie gestoßen bin.

Bevor ich mich mit der LSB-Steganographie vertraut machte, überlegte ich mir andere Wege, oder besser gesagt, meine eigenen. Aber ich hatte nicht die Kraft, mir etwas Eigenes auszudenken, und ich habe mich dazu entschlossen, es zu googeln:

LSB ist eine Steganografiemethode, bei der die unteren Bits einer der RGB-Farben in einem Pixel in codierte Textbits geändert werden.

Dann habe ich die Kissenbibliothek für die Arbeit mit Bildern und Kryptographie kennengelernt. Die zweite wurde in meinem Fall benötigt, um eine DES-Verschlüsselung zu erstellen, die anschließend in das Bild bitcodiert wird.

Codierung


Ich habe meine Idee auf GitHub gepostet. Für die weitere Arbeit mit StegoPy müssen wir das Projekt nur mit GitHub klonen:

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

Installation

In Bezug auf die Installation ist jedoch alles wie gewohnt. Schauen wir uns nun die Syntax der Startbefehle an.

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

Mit diesem Befehl codieren wir den Text aus der Datei data.txt in das Bild in.jpg.
Vor dem Codieren werden wir jedoch nach einem Saldo gefragt, der zwischen 1 und 4 liegen kann. Dies ist nur eines der interessantesten Dinge im Programm.

Datei in.jpg


Datei data.txt
this is private message

Balance ist die Anzahl der Bits niedriger Ordnung, die an der Steganographie beteiligt sind. Sie reicht von 1 bis 4.

Je größer das Gleichgewicht, desto:

  1. An der Codierung sind weniger Pixel beteiligt
  2. Auffällige Änderungen in den Farbkanälen

Daraus können wir schließen, dass die Steganographie umso zuverlässiger ist, je kleiner das Gleichgewicht ist und für das menschliche Auge unsichtbar ist.

Ein weiterer wichtiger Faktor ist, dass sich nur der blaue Kanal ändert, dessen Schattierungen für unsere Augen am wenigsten wahrnehmbar sind.

Nachdem wir uns für den Kontostand entschieden haben, erstellt unser Skript zwei zusätzliche Dateien:

  • out.png - Bild mit verschlüsseltem Text
  • key.dat - Datei mit dem Schlüssel, der für die Entschlüsselung benötigt wird

Datei out.png


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

Codierung

Dekodierung


Die Syntax für den Befehl in unserem Fall lautet:

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

Dann werden wir nach dem Schlüssel gefragt, den wir beim Codieren erhalten haben. Nach dem Dekodieren wird der entschlüsselte Text in der Datei out.txt gespeichert .

Dekodierung

Wie Sie vielleicht bemerkt haben, hat das Eingabebild das JPEG-Format und die Ausgabe ist PNG. Dies ist ein Fehler im Programm, der bald behoben wird und Sie haben die Möglichkeit, das Ausgabeformat auszuwählen.

Auf dem Eingabebild wurden nur JPEG und PNG getestet. Theoretisch sollte es auf weniger verwendeten Bildern wie bmp usw. funktionieren.

Pylint hat StegoPy übrigens mit 10/10 bewertet. Kommentare zum Code und zur Funktionalität sind willkommen, da ich die Anwendung entwickeln möchte.

Das Projekt ist auf GitHub verfügbar

All Articles