Eine Anwendung, um Daten in Mediendateien zu verstecken
Übersicht
Mit diesem Programm können anhand von Versteckvorgaben Nutzdaten in einer Mediendatei (in der vorliegenden Version eine Bilddatei als PNG- und BMP-Datei und eine Audiodatei als wav-Datei) versteckt und auch wieder herausgeholt werden. Die Versteckvorgaben selbst können mit diesem Programm ebenfalls erzeugt werden.
Was unterscheidet dieses Programm von anderen Steganographieprogrammen? Andere Programme dieser Art stellen einen symmetrischen privaten Schlüssel dar. D.h. die Versteckvorgaben sind im Programm selbst implementiert. Wenn man also eine Mediandatei im Verdacht hat, dass sie versteckte Daten enthält, kann man nacheinander die Steganographieprogramme dieser Art auf diese Mediendatei ansetzen und erhält so die versteckten Daten. Das vorliegende Staganographieprogramm verfolgt den Ansatz, die Versteckvorgaben vom Programm selbst zu trennen. Sie liegen dass als separate Datai außerhalb des Proggramms vor.
Das Verstecken wird blockweise durchgeführt. Jeder Block besteht aus einer Menge von Positionen (bei einem Bild sind dies Bildpunkte). Jede Position enthält eine Menge Kanäle (bei einem Bild mit drei Farbkanälen sind dies z.B. Rot, Grün, Blau).
Jedes Byte der Nutzdaten wird in Bitbereiche zerteilt (z.B. in 4 x 2 Bits bei einer Bittiefe von 2). Jeder Bitbereich wird auf die Positionen und deren Kanäle, d.h. auf die niederwertigsten Bits entsprechend der Bittiefe der Mediendaten verteilt.
Aufbau der Datei mit den Verteilregeln (Versteckvorgaben):
- Version der Verteilregeln (nicht des Programms) (3 Byte)
- Blockgröße (4 Byte)
- Anzahl Kanäle (1 Byte)
- Anzahl Bittiefe (1 Byte)
- Anzahl Bytes Nutzdaten (4 Bytes)
- Menge von Verteilregeln, wobei eine Verteilregel aus 4 Byte für die Blockposition und 1 Byte für die Kanalnummer besteht
Die Funktionen des Programms:
- Erzeugen von Versteckregeln:
Die erzeugten Versteckregeln werden in eine Datei gespeichert.
Optional kann diese Datei mit einem öffentlichen Schlüssel oder mehreren öffentlichen Schlüsseln verschlüsselt werden. - Verstecken von Daten in einer Mediendatei (Bild als Bmp- und Png-Datei, Audio als Wav-Datei) anhand von Versteckregeln.
Optional können die Versteckregeln verschlüsselt sein. - Auslesen von versteckten Daten aus einer Mediendatei (Bild als Bmp- und Png-Datei, Audio als Wav-Datei) anhand von Versteckregeln.
Optional können die Versteckregeln verschlüsselt sein. - Erzeugen eines Schlüsselpaares:
Das Schlüsselpaar besteht aus einem privatem und einem öffentlichen Schlüssel. Der private Schlüssel ist zum Entschlüsseln der Datei mit den Versteckregeln vorgesehen. Der öffentliche Schlüssel ist zum Verschlüsseln der Datei mit den Versteckregeln vorgesehen. Der öffentliche Schlüssel kannn an andere Personen weitergegeben werden, falls man von diesen die Versteckregeln nutzen und deren Dateien mit den versteckten Daten verwenden möchte. - Erzeugung einer Datei mit Zufallswerten
- Verstecken einer Datei in einer Datei (mit Zufallswerten) Auslesen einer Datei aus einer Datei (mit Zufallswerten)
Kommandozeilenparameter:
Es gibt acht Hauptparameter: verteilregelgenerierung, verstecken, holen, key, gui, zufallsdatei, inDatei, ausDatei
Zu jedem Hauptparameter (bis auf gui) gibt es zugeordnete Parameter, obligatorisch und optional.
Der Aufruf ohne Parameter entspricht gui.
--verteilregelgenerierung Hauptparameter für die Erzeugung der Verteilregeln
--blockgroesse <Zahl> Anzahl der Medienentitäten (d.h. bei einem Bild die Anzahl der Bildpunkte) pro Block
--nutzdaten <Zahl> Anzahl der in einem Block unterzubringenen Bytes
--anzahlkanaele <Zahl> Anzahl der Kanäle der Mediendatei (z.B. bei einem Bild drei Farbkanäle Rot, Grün, Blau)
--bittiefe <Zahl> Die Anzahl der Bits für das Verstecken der Nutzdaten in den Mediendaten (1, 2, 4, oder 8 Bit)
--dateiname <Zu erzeugende Datei mit den Verteilregeln>
--verschluesselungsdateien <Dateinamen> Komma separierte Liste von Dateinamen von öffentlichen Schlüsseln (optional) --passwort <Passwort> Passwort (optional)
--verstecken Hauptparameter für das Verstecken von Nutzdaten
--dateiVerteilregel <Dateiname> Dateiname der Datei mit den Verteilregeln>
--dateiNutzdaten <Dateiname> Dateiname der Datei mit den Nutzdaten>
--dateiQuelle <Dateiname> Dateiname der Mediendatei für das Verstecken der Nutzdaten>
--dateiZiel <Dateiname> Dateiname der Mediendatei mit den versteckten Nutzdaten>
--verrauschen [ohne|nutzdatenbereich|alles] Optionale Angabe zum Verrauschen
--entschluesselungsdatei <Dateiname> Dateiname des privaten Schlüssels (optional) --passwort <Passwort> Passwort (optional)
--holen Hauptparameter für das Holen der Nutzdaten
--dateiVerteilregel <Dateiname> Dateiname der Datei mit den Verteilregeln>
--dateiNutzdaten <Dateiname> Dateiname der Datei mit den Nutzdaten (wird hier nur ein Verzeichnis angegeben, so wird der Dateiname aus der Datei mit den versteckten Nutzdaten genommen und in das angegebene Verzeichnis gespeichert)<
--dateiQuelle <Dateiname> Dateiname der Mediendatei mit den versteckten Nutzdaten>
--entschluesselungsdatei <Dateiname> Dateiname des privaten Schlüssels (optional)
--passwort <Passwort> Passwort (optional)
--key Hauptparameter für das Erzeugen eines Schlüsselpaares
--id <Id> Die Id für das Schlüsselpaar
--dateiPublicKey <Dateiname> Dateiname des öffentlichen Schlüssels
--dateiPrivateKey <Dateiname> Dateiname des privaten Schlüssels
--passwort <Passwort> Passwort (optional)
--gui Parameter für den Start mit grafischer Benutzeroberfläche
--zufallsdatei Hauptparameter für die Erzeugung einer Datei mit Zufallswerten
--name <Dateiname> Der Dateiname für die Zufallswerte
--laenge <Länge> Dateilänge
--inDatei Hauptparameter für das Verstecken einer Datei in einer Datei
--quelldatei <Dateiname> Der Quelldateiname
--zieldatei <Dateiname> Der Zieldateiname
--laenge <Länge> Dateilänge der Datei in der versteckt wird
--offset <Offset> Offset in der Datei, in der versteckt wird
--erzeugung <"true" oder "false"> Angabe, ob eine Datei mit Zufallswerten erzeugt werden soll
--ausDatei Hauptparameter für das Auslesen einer Datei aus einer Datei
--quelldatei <Dateiname> Der Quelldateiname
--zieldatei <Dateiname> Der Zieldateiname
--offset <Offset> Offset der Datei, aus der gelesen wird
--laenge <Länge> Dateilänge der Datei, die gelesen gelesen wird
--erzeugung <Wert für ja oder nein> Angabe, ob eine Datei mit Zufallswerten erzeugt werden soll
Beispiele:
java -jar Steganograph.jar --verteilregelgenerierung --blockgroesse 100 --nutzdaten 50 --anzahlkanaele 4 --bittiefe 2 --dateiname verteilregel --verschluesselungsdateien public1.pgp,public2.pgp --passwort passwort
java -jar Steganograph.jar --verstecken --dateiVerteilregel verteilregel --dateiNutzdaten nutzdaten.txt --dateiQuelle testbild1.png --dateiZiel testbild1Versteck.png --entschluesselungsdatei private1.pgp --passwort passwort
java -jar Steganograph.jar --holen --dateiVerteilregel verteilregel --dateiNutzdaten nutzdatenNeu.txt --dateiQuelle testbild1Versteck.png --entschluesselungsdatei private1.pgp --passwort passwort
java -jar Steganograph.jar --key --id person1 --dateiPublicKey public1.pgp --dateiPrivateKey private1.pgp --passwort passwort
java -jar Steganograph.jar --gui
java -jar Steganograph.jar --zufallsdatei --name heuhaufen --laenge 1000
java -jar Steganograph.jar --inDatei --quelldatei versteckregel --ztieldatei heuhaufen --laenge 1000 --offset 500 --erzeugung true
java -jar Steganograph.jar --inDatei --quelldatei heuhaufen --zieldatei versteckregel --offset 500 --laenge 1000
Ausblick auf weitere Entwicklungen:
- Beschleunigung des Laufzeitverhaltens
- Verstecken von Nutzdaten in (verlustfreien oder verlustfreien Anteilen) Videodateien
- Verstecken von Live-Streams (Video, Audio) in Live-Streams (Video, Audio, hierbei verlustfrei oder verlustfreien Anteilen)