Vorherige Seite Nächste Seite Inhalt

4. Steganographie in WAV-Dateien

Die Aufgabe des Projektes hieß "Steganographie von WAV-Dateien", damit war gemeint, daß man eine geheime Nachricht mit beliebigem Inhalt in einer WAV-Datei versteckt. Die Lösung sollte in C implementiert werden.

4.1 Aufbau des Headers einer WAV-Datei

Chunk: Datenblock variabler Länge

RIFF-Header einer WAV-Datei
OffsetBytesBemerkung
00H4Chunk-Name "RIFF"
04H4CHUNK-Länge
08H4RIFF-Typ "WAVE"

Header-Chunk einer WAV-Datei
OffsetBytesBemerkung
00H4Chunk-Name "FMT"
04H4Chunk-Länge (10H)
08H2Format Typ:
0:Mono
1:Stereo
0AH2Kanalzahl
0CH4Samplerate in Hertz
10H4Byte pro Sekunde
14H2Bytes pro Sample
1:8 Bit Mono
2:8 Bit Stereo oder 16 Bit Mono
4:16 Bit Stereo
16H2Bits per Sample

FMT-Chunk einer WAV-Datei
OffsetBytesBemerkung
00H4Chunk Name "data"
04H4Chunk-Länge
08HNDatenbereich

4.2 Das Programm

Der Quellcode als ARJ-File

Allgemeines

Vor dem eigentlichen Programmieren waren folgende Betrachtungen zu machen:

  1. Programmaufruf
  2. Prüfalgorithmen
  3. Chiffrierung
  4. Dechiffrierung

Programmaufruf

Der Programmaufruf erfolgt über Parameter. Das Programm hat den Namen "GBMSYS". Beim Aufruf unter DOS hat man verschiedene Möglichkeiten.

GBMSYS

Es erscheint eine kleine Online-Hilfe

GBMSYS -v

Chiffriermodus wird gestartet

Es werden drei Dateien abgefragt:

Geheim

enthält die zu versteckende Datei

Versteck

enthält die Datei, in der versteckt werden soll

Ziel

ist die Datei, welche die komplette Datei, (Versteck und Geheim), enthält

GBMSYS -e

Dechiffriermodus wird gestartet

Es werden zwei Dateien abgefragt:

Quelle

ist die Datei, die die versteckte Datei enthält

Nachricht

ist die zu übermittelnde Datei

Prüfalgorithmen

Bei den Überlegungen zu den Prüfalgorithmen waren folgende Fragen zu klären:

Format prüfen

Es müssen WAV - Dateien sein

Der Header wird an der entsprechenden Stelle ausgelesen (siehe Tabelle).

Größe der Dateien

Die Versteckdatei beim Chiffrieren muß mindestens acht mal so groß sein, wie die Geheimdatei

Dies wird überprüft, indem der Dateizeiger unter C auf das Ende der Datei gesetzt wird. Über die ANSI-C Funktion ftell() wird die Dateilänge ermittelt.

GBMSYS chiffriert?

Das Programm dechiffriert nur die von dem Programm GBMSYS chiffrierten Dateien. Hierzu wird eine Kennzeichnung in die Versteckdatei geschrieben, die mit GBMSYS chiffrierte Dateien kennzeichnet.

Chiffrierung

Bei dem Chiffrieralgorithmus war es erst einmal wichtig, das LSB von den anderen Bits zu trennen. Um es zu verarbeiten, haben wir den folgenden Algorithmus erarbeitet:

Der Chiffrieralgorithmus liest das erste Byte der Geheimdatei aus. Danach durchläuft das Programm eine Schleife, die von 0 bis 7 zählt, um alle 8 Bit des Datenbytes ansprechen zu können. Dies geschieht in dem man das Datenbyte mit 01H UND-verknüpft und am Ende jeder Schleife das Datenbyte um eine Bit-Position nach rechts schiebt.

Vor dem Schiebebefehl wird noch ein Versteckbyte eingelesen. Dieses wird mit FEH UND-verknüpft, um alle Bits außer dem LSB zu konservieren, dieses wird auf 0 gesetzt. Wenn jetzt das angepaßte Versteckbyte noch mit dem extrahierten Datenbit ODER-verknüpft wird, ist dieses Bit versteckt worden.

Bei 8 Schleifendurchläufen wird so ein ganzes Byte der geheimen Nachricht in die LSBs von 8 Bytes der Versteckdatei geschrieben.

Dieser Vorgang wird mit allen Bytes der geheimen Nachricht durchgeführt (äußere Schleife).

Beim Chiffrieren mußte darauf geachtet werden, daß die komplette Geheimdatei inklusive Header und Daten verarbeitet wird, damit diese später wieder als vollständige WAV-Datei rekonstruiert werden kann.

Zum Chiffrieren von 1 Byte der Geheimdatei werden - wie aus der schematischen Darstellung ersichtlich - 8 Bytes in der Versteckdatei benötigt, ferner soll diese Zeichnung den Übergang von den einzelnen Bits der Geheimdatei in die LSBs der Versteckdatei darstellen.


Schematische Darstellung Chiffrierung

Dechiffrierung

Beim Dechiffrieren muß erreicht werden, daß aus den LSBs der Versteck-Bytes wieder das ganze Byte der geheimen Nachricht "zusammengebaut" wird.

Dafür lesen wir 8 Byte der Versteckdatei ein und schreiben sie in ein 8 Byte großes Array. Nun schieben wir das 1. Byte des Arrays um 7 Bit nach links, danach wieder 7 Bit nach rechts. Das 2. Byte des Arrays schieben wir 7 Bit nach links, danach 6 Bit nach rechts. Das 3. Byte des Arrays schieben wir 7 Bit nach links, danach 5 Bit nach rechts, ...

Das Schieben um 7 Bit nach links isoliert das LSB, das Schieben nach rechts setzt das geheime Bit an die ihm entsprechende Stelle im Byte. Danach werden alle 8 Bytes des Arrays miteinander ODER verknüpft und wir erhalten das versteckte Byte.

Mit Hilfe der Dateigröße der Geheimdatei, die wir an den Anfang des Datenchunks geschrieben haben, lesen wir alle Bytes der geheimen Nachricht aus der Versteckdatei aus (Schleife).


Schematische Darstellung Dechiffrierung

4.3 Beispiel zur Chiffrierung und Dechiffrierung


Geheime WAV-Datei


WAV-Datei, in der die geheime Nachricht versteckt wird


Chiffrierte WAV-Datei


Vorherige Seite Nächste Seite Inhalt