22.5
Anwendung: Steganographie
|
|
Jede
Botschaft wird bei ihrem Austausch vom Sender codiert und vom Empfänger
decodiert. Dies gilt übrigens auch für den Austausch von gesprochenen
Botschaften. Man mache sich das am besten klar, wenn ein deutscher
Geschäftsmann einem japanischen Kollegen in deutscher Sprache etwas
mitteilen will und der japanische Kollege des Deuten nicht mächtig ist.
Die Kommunikation kann nicht gelingen, obwohl beide über ähnliches Wissen
verfügen. Indem der deutsche Geschäftsmann spricht codiert er seine
Botschaft, er übersetzt das was er 'im Kopf hat' in 'tanzende
Luftmoleküle' also in gesprochenen deutschen Text. Der Empfänger müsste
das Trommeln der Moleküle auf sein Trommelfell decodieren, um den Inhalt
der Botschaft in seinen Kopf zur Weiterverarbeitung zu bekommen. Die hier beschriebene Problematik erinnert uns an Interpretation also Codierung und Decodierung von Daten wie wir es ausführlich bei den Lösungen der letzten Hausaufgaben gesehen haben. Eine Datei "theseus.bmp" wird erst durch die Interpretation zu einem Bild. Was wir über Datenströme bis jetzt gelernt haben, wollen wir in diesem Kapitel dazu benutzen eine geheime Botschaft in einem Bild zu verstecken. Eine Botschaft zwischen einem Sender und einem Empfänger vor Dritten zu verheimlichen, nennt man Steganographie, wobei das griechische Wort steganos bedeckt und graphein schreiben bedeuten. Der Autor Simon Singh beschreibt in seinem Buch 'Geheime Botschaften' wie schon die Griechen Steganographie als Waffe einsetzten: |
|
Eine Empfehlung |
![]() Erscheinungsdatum: Dezember 2001 ISBN: 3423330716 Der Perserkönig Xerxes wollte 480 v. Chr. Griechenland, namentlich Athen und Sparte in einem Überraschungsangriff seinem Reich einverleiben. ... Einem Griechen jedoch, der aus seiner Heimat verstoßen worden war und in der persischen Stadt Susa lebte, war die Aufrüstung der Perser nicht entgangen. Demaratos, so hieß der Grieche, lebte zwar im Exil, doch tief in seinem Herzen fühlte er sich Griechenland noch immer verbunden. So beschloss er, den Spartanern eine Nachricht zu schicken und sie vor Xerxes' Invasion zu warnen. Die Frage war nur , wie er diese Botschaft übermitteln sollte, ohne dass sie in die Hände der persischen Wachen gelangen würde. Herodot schreibt: Da er das auf andere Weise nicht konnte - er musste fürchten, dabei ertappt zu werden -, half er sich durch eine List. Er nahm nämlich eine zusammengefaltete kleine Schreibtafel, schabte das Wachs ab und schrieb auf das Holz der Tafel, was der König vorhatte. Darauf goss er wieder Wachs über die Schrift, damit die Wachen an den Straßen die leere Tafel unbedenklich durchließen. Sie kam auch an, doch man wusste nicht, ewas man damit anfangen sollte, bis, wie man sagt, Kleomenes' Tochter Gorgo, die Gemahlin des Leonidas, dahinter kam und riet, das Wachs abzukratzen, damit man dann die Schrift auf dem Holz fände. Das tat man und nachdem man die Nachricht gefunden und gelesen hatte, schickte man diese auch den anderen Griechen. Soweit Herodot. Der Rest ist
Geschichte. Die Griechen lockten die ankommenden persischen Schiffe, deren
Kommandanten vom Sieg ihres vermeintlichen Überraschungsangriffs überzeugt
waren, in die Bucht von Salamis bei Athen. Die zahlenmäßig unterlegene
griechische Flotte konnte darauf hin die gänzlich überraschte persische
Flotte demütigend schlagen. |
Verstecken | Digitale
Bilder sind Gegenstände, die sich zum Verstecken von geheimen
Botschaften eignen. Wir wollen hierzu nicht ausgefeilten Technik kennen
lernen, es geht hier mehr um das Prinzip. |
|
Auf den
ersten Blick scheinen sich die beiden links gezeigten Bilder
theseus1.bmp (oben) und
theseus2.bmp (unten) nicht zu
unterscheiden. Genauer wird der Unterschied, wenn wir uns die Bilder auf
unseren Rechner herunterladen und vergrößert anschauen. ![]() ![]() Im Theseus2-Bild erscheinen rote Punkte, die im Theseus1-Bild fehlen. Tatsächlich versteckt sich dahinter eine "Botschaft". Wir wollen uns anschauen, wie wir die Botschaft mit Hilfe eines Java-Programms in dem Theseus-Bild unterbringen. |
Download: Steganographie. java |
|
Bemerkungen | Das Programm liest die Datei, ohne Rücksicht auf die Dateiendung in einen Zeichenkette ein. Genauer müssten wir sagen, Java interpretiert die Daten, die in Theseus1.bmp gespeichert sind als einen gewöhnlichen ASCII-Text. Dies geschieht dadurch, dass die 1 Byte große Pakete, die read() dem Lesestrom entnimmt, vom Javaprogramm als char interpretiert wird. Aus diesen Zeichen wird die Zeichenkette aufgebaut, wobei ab einer bestimmen Stelle - wir wollen vermeiden, dass der Header 'verletzt wird' - in regelmäßigen Abständen die Zeichen durch 'echte' Buchstaben ersetzt werden. Diese Buchstaben bilden die geheime Botschaft, die in unserem Falle nicht anders als "Java ist toll" heißen kann :-). Die ansonsten unverändert gebliebene Datei wird von unserem Programm wieder mit der Endung bmp gespeichert, so dass geeignete Bildprogramme, diese wieder als Bilder interpretiert werden können. Die in das Bild gestreute Zeichen erscheinen dann als Veränderung einzelner Farb-Pixel. |
Neu ist
noch der gelb unterlegte Bereich. Dem Ausgabestrom (ein Objekt Klasse
PrintWriter)
werden wir später noch einmal begegnen. Während wir ihn hier durch die
Übergabe eines FileWriter-Objektes
quasi auf die 'Festplatte lenken' werden wir ihm später ein anderes Ziel
geben. Der Vorteil beim Benutzen von
PrintWriter-Objekten
besteht darin, dass die Klasse PrintWriter ihren Objekten eine Methode
print(String text)
zur Verfügung stellt, die es erlaubt ganze Zeichenkette auf einen Schlag
in den SchreibeStrom zu speisen. |
|
Download: TextFinden.java |
Das
Programm TextFinden.java leistet nun das umgekehrte. Es liest den
Geheimtext aus dem Bild aus. Klar ist, dass das nur leicht ist, wenn man
weiß, an welchen Stellen die 'echten' Buchstaben stehen. |
|
|
zu den | Hausaufgaben |
zur Startseite | www.pohlig.de (C) MPohlig 2003 |