1. Allgemein
Steganografie bezeichnet die Wissenschaft des – so übersetzt – “verborgenen Schreibens”, oder anders ausgedrückt die versteckte Transferierung von Informationen[1][2].
Im Grunde ist die Steganografie schon weitaus länger bekannt, als man annehmen würde. Genau genommen ist die Kunst der verborgenen Botschaften schon im Jahre 490 vor Christus[3] aufgefallen, als die persische Armee bei Marathon geschlagen wurde und daraufhin Rache schwor. Damals nutzte man als Trägermedium einer Nachricht noch Holztafeln (Vgl.[3]), indem man die Nachricht in das Holz ritzte. Wollte man ein Zeichen löschen, musste man das Zeichen mit Wachs auffüllen. Damals nutze Demeratus die Wachsschicht, um die geheime Nachricht unleserlich zu machen, sodass die Holztafel ungeschrieben aussah und so die geheime Botschaft unbemerkt an den Wachen des Feines verbeizuschleusen (Vgl.[3]).
Heutige Kommunikationswege sind natürlich deutlich anderes im Vergleich zu 490 vor Christus. Heute wird Steganografie hauptsächlich im Informations- und Kommunikationssektor (IKT) angewandt. Hierzu kommen Verfahren zum Einsatz, mit denen sich Daten (=zu übermittelnde Informationen) in Bild- und Audio-Daten verbergen lassen.
2. Technik
Die Grundlage für die computergestützte Stenografie ist das sogenannte Datenrauschen. Hierbei handelt es sich um kein wirkliches Rauschen, sondern eher darum, dass auch elektronische Daten einer gewissen unmerklichen Fehlertoleranz unterliegen. Dementsprechend kann man gewisse Datenformen (Audiodateien und Bilder) leicht manipulieren und so seine Daten unterbringen, ohne dass das Gesamtbild bzw. der Ton sich verändert. Nehmen wir beispielsweise an, wir hätten eine beliebige Audiodatei im .WAV-Format. Nach dem einleitenden Header (den man nicht manipulieren sollte, da sonst die Programme nicht mehr in der Lage sind, die Datei richtig einzulesen) sind die Audiodaten – wie nicht anders zu erwarten – in simplen Byteblöcken abgelegt. Ein Byteblock umfasst 8 Bits und kann somit die Zahlen 0-255 darstellen.
Der Trick hierbei ist nun, dass man in jeden Byteblock das letzte Bit (auch LSB genannt => least significant bit) nach belieben manipuliert und die zu versteckende Datei so Bit für Bit in das Audio Format unterbringt. Das letzte Bit symbolisiert lediglich 2^0 ? entscheidet also beispielsweise, ob eine Zahl 230 oder 231 lautet und verändert so die originale Datei um maximal 1/256 (oder 0.39%). Das ist ein Unterschied, der in einer Audiodatei nicht hörbar ist. Wendet man diesen Trick nicht nur auf das LSB, sondern auch auf das zweitniederste Bit an, so erhält man bereits ein Datenrauschen von ca 1.1%, was in Extremfällen (absolute Stille oder ein eigentlich stetiger Ton) evtl. auffallen kann. Da dieses Vorgehen mit einfachen Tests von Computerprogrammen, wie beispielsweise R, leicht nachweisbar ist, kann man auf diese Weise nur sehr unsicher verbergen, dass man das digitale Medium (zum Beispiel ein Bild) zum Übermitteln einer Nachricht genutzt hat, was die Steganografie defacto ad absurdum führt. Auch aus diesem Grunde gibt es viele weitere Verfahren.
Entsprechend der oben genannten Methode lassen sich bei reiner Nutzung des LSBs immer Dateien in der Trägerdatei unterbringen, die maximal 1/8 der Größe haben, da ein Byteblock der zu versteckenden Datei auf 8 Byteblöcke der Trägerdatei aufgesplittet wird. Dasselbe funktioniert mit Bildern analog, allerdings ist hierbei zu beachten, dass man dies nicht mit .GIFs oder sehr bunten Bildern machen sollte. Optimal eignen sich Schwarz-Weiß-Bilder, da nur verschiedene Grautöne dargestellt werden, bei denen eine leichte Abweichung nicht ins Gewicht fällt. GIFs sollte man meiden, da bei einem GIF – je nach Ausgangsbild – benachbarte Bitwerte als völlig unterschiedliche Farben interpretiert werden können.
GIF-Bilder müssen vor dem unterbringen einer Nachricht “behandelt”, oder von einem speziellen Programm generiert werden. Dies liegt daran, dass in .gif-Datein nicht wie zB. im BMP-Format mit absoluten Farbwerten, sondern mit Farbtabellen gearbeitet wird. Das ändern des LSBs eines Bytes führt also meist nicht dazu, dass der Farbwert um 1/256 geändert wird, sondern auf eine beliebige, in der Farbtabelle benachbarte, Farbe. Um also eine Nachricht in einer GIF-Datei zu verstecken muss die Farbtabelle so angepasst werden, sodass die durch einbringen der Nachricht durch einander ersetzten Farben ähnlich oder sogar gleich sind. Letzteres ist aber unsicher, da es bei genauerem betrachten auffallen würde, wenn eine Farbe in der Farbtabelle doppelt vertreten ist, da dies ein Verlust an Platz bedeuten bzw. den Informationsgehalt verfälschen könnte.
Als zusätzliche Sicherheit lässt sich ein .WAV oder .BMP, in das man eine versteckte Nachricht untergebracht hat, auch noch in verlustfreie Audio/Bildformate komprimieren, also im Falle eines .BMPs beispielsweise in das .PNG-Format. Der Vorteil hierbei liegt auf der Hand: die Datei muss erst wieder umgewandelt werden, bevor die versteckte Nachricht lesbar ist, im komprimierten Format ist sie lediglich Bitmüll. Es gibt selbstverständlich noch die Möglichkeit, die zu versteckende Nachricht vorher mit konventionellen Arten der Kryptographie zu kombinieren, was neben der Herstellung von Vertraulichkeit auch die Erschwerung der Erkennbarkeit bewirken würde. (partiell kopiert von[1] und modifiziert)
3. Praktisches Beispiel
Für ein plastisches Beispiel hat sich der Autor das OpenSource Tool “outguess” ausgesucht. Es ist frei unter[I] zu bekommen und ist für die unterschiedlichsten Betriebssysteme und Hardware-Architekturen verfügbar. Da es auch quelloffen vorliegt ist es im Sinne von Forschung und Lehre!
Der Autor hat das Tool unter GNU/Linux installiert und führt das Tool unter der Kommandozeile (pty/tty) aus.
Folgende Rahmenbedingungen soll das Beispiel inne haben. Wir wollen den Text der in der ASCII-Datei steganografie_text.txt gespeichert ist, in dem Bild steganografie_tux_original.jpg verstecken. Dazu wird folgender Befehl ausgeführt:
# outguess -d steganografie_text.txt steganografie_tux_original.jpg \
> steganografie_tux_mit_geheimer_nachricht.jpg
Reading steganografie_tux_original.jpg….
JPEG compression quality set to 75
Extracting usable bits: 2299 bits
Correctable message size: 1286 bits, 55.94%
Encoded ‘steganografie_text.txt’: 832 bits, 104 bytes
Finding best embedding…
0: 433(50.1%)[52.0%], bias 368(0.85), saved: -2, total: 18.83%
1: 438(50.7%)[52.6%], bias 360(0.82), saved: -2, total: 19.05%
3: 429(49.7%)[51.6%], bias 361(0.84), saved: -1, total: 18.66%
6: 409(47.3%)[49.2%], bias 320(0.78), saved: 0, total: 17.79%
40: 421(48.7%)[50.6%], bias 298(0.71), saved: 0, total: 18.31%
95: 402(46.5%)[48.3%], bias 279(0.69), saved: 1, total: 17.49%
95, 681: Embedding data: 832 in 2299
Bits embedded: 864, changed: 402(46.5%)[48.3%], bias: 279, tot: 2294, skip: 1430
Foiling statistics: corrections: 130, failed: 16, offset: 137.666667 +- 209.837764
Total bits changed: 681 (change 402 + bias 279)
Storing bitmap into data…
Writing steganografie_tux_mit_geheimer_nachricht.jpg….
Nun haben wir ein zusätzliches Bild in das aktuelle Verzeichnis bekommen, das unsere geheime Nachricht enthält:
Original-Bild
Bild mit geheimer Nachricht
Die Unterschiede zwischen den beiden Bild-Versionen sind so marginal, dass sie mit dem blosen Auge kaum erkennbar sind. Dies liegt an dem hohen Schwarz-/Weiß-Anteil in dem Bild.
Will man nun aus dem Bild mit der geheimen Nachricht die Botschaft wieder extrahieren, so kann man folgendes machen:
# outguess -r steganografie_tux_mit_geheimer_nachricht.jpg \
> steganografie_entschluesselter_text.txt
Extracting usable bits: 2299 bits
Steg retrieve: seed: 95, len: 104
Outguess hat jetzt die dechiffrierte Nachricht in die Datei steganografie_entschluesselter_text.txt geschrieben. Nun hat man die ursprüngliche Botschaft 1 zu 1 wieder.
4. Quellenangaben
4.1 Programme inkl. spezifische Informationen
[I] http://www.outguess.org
[II] http://wwwrn.inf.tu-dresden.de/~westfeld/
f5.html
[III] http://www.cio-tool.com/stegano/password-
bunker.html
[IV] http://www.archicrypt.com/SBStega.htm
[V] http://www.steganos.de/?layout=web2005&
content=products_sss&language=de
4.2 Literatur (Stand: 2005-10-19)
[1] http://de.wikipedia.org/wiki/Steganografie
[2] http://klinux.de/index.php?title=Steganographie
[3] http://www.thorsten.dikmann.de/files/publikationen/
2004/steganografie/
[4] http://niels.xtdnet.nl/stego/
[5] http://www.mindcrime.net/~niehaus/Steganographie-
Beispiel.html
[6] http://www.informatik.tu-darmstadt.de/BS/Lehre/
Sem98_99/T12/secret_sharing_02.htm
[7] http://rhlx01.rz.fht-esslingen.de/projects/krypto/
[8] http://www.heise.de/ct/99/21/046/
[9] Datenschredder, c’t 2/04, Seite 60
[10] Kleiner Verstecker, c’t 7/03, Seite 63
[11] Steganos 3, c’t 5/01, Seite 78