Mystery-Tutorial: Steganographie mit Bildern; Teil 1: „Der Klassiker“

„Die Steganographie (auch: Steganografie) ist die Kunst oder Wissenschaft der verborgenen Speicherung oder Übermittlung von Informationen in einem Trägermedium (Container).“

So definiert Wikipedia Steganographie und damit ist im Prinzip das wichtigste schon gesagt, denn im Gegensatz zu Chiffren, oder Logikrätseln liegt die Schwierigkeit von Stegano-Rätseln darin, dass das Trägermedium theoretisch alles mögliche sein kann, auch dieser Text hier könnte bereits mit Informationen gespickt sein, die man auf den ersten Blick nicht sieht – Stichwort: Bacon-Code. Ein Teil der Lösung besteht also darin, zuerst einmal das Trägermedium ausfindig zu machen, seine spezifischen Eigenschaften zu kennen – eine Mp3-Datei bietet z.B. ganz andere Möglichkeiten als eine reine Textdatei – und dieses dann von allen Seiten zu beleuchten, wobei es natürlich immer Versteckmöglichkeiten gibt, die man noch nicht kennt, aber das macht die ganze Sache letztendlich auch sehr spannend!

In dieser Tutorialreihe wollen wir uns mit dem – wie ich finde – spannendsten Trägermedium für Steganographie beschäftigen: Digitale Bilder.

Gleich vorweg ein kurzer Disclaimer: Dieses Tutorial versteht sich nicht als vollständiges Stegano-Nachschlagewerk, vielmehr möchte ich hier Verfahren vorstellen, die mir in einigen Caches begegnet sind, oder auf die ich selbst gestoßen bin und irgendwann mal Verwendung finden könnten. Solltet ihr noch weitere Verfahren kennen, wäre ich sehr daran interessiert, diese kennenzulernen und in das Tutorial aufzunehmen.

Für den Großteil der Verfahren werden wir Software benötigen; ich versuche – wo es geht – sowohl eine Lösung für Gimp, als auch für Photoshop anzubieten, allerdings werden wir an manchen Stellen selbst Hand anlegen müssen und uns kleine Python-Scripts schreiben, die uns die Arbeit abnehmen.

So und nun kann es endlich losgehen 😉

 

1. „Der Klassiker“: Minimaler Farbunterschied

Das wohl gängigste Verfahren, um Informationen in Bildern zu verstecken ist vermutlich der „minimale Farbunterschied“. Bei dieser Methode wurden die Koordinaten, oder Hinweise direkt in das Bild ‚geschrieben‘, allerdings so, dass sich die Schriftfarbe kaum vom Hintergrund abhebt und für das menschliche Auge kein Unterschied mehr feststellbar ist.

Betrachten wir z.B. das nachfolgende Bild:

stegano_kontrast_1

Auf den ersten Blick handelt es sich um ein komplett weißes Bild, doch die Erfahrung lehrt uns, dass da noch mehr sein muss 😉

Also öffnen wir das Bild in Gimp, oder Photoshop und überlegen uns zunächst das folgende: Sollte das Bild wirklich nicht komplett aus einer einzigen Farbe bestehen, muss es Flächen geben, die folglich einen anderen Farbwert besitzen. Aus diesem Grund nehmen wir nun den Fülleimer (gimp_icon_bucket in Gimp, paint_bucket_ps in Photoshop), stellen die Füllfarbe z.B. auf Rot und klicken in den Randbereich des Bildes. Zu beachten ist, dass der Fülleimer je nach Einstellung auch sehr ähnlich gefärbte Pixel mit einfärbt, um dies zu verhindern müssen wir die Toleranz so niedrig stellen wie möglich:

 

Einstellungen unter Gimp
Einstellungen unter Gimp…
...und in Photoshop
…und in Photoshop

Das Ergebnis sieht dann folgendermaßen aus:

Befülltes Bild in Gimp
Das Ergebnis mit Gimp…
...und mit Photosjop
…und mit Photosjop

Wie man sieht befüllt Gimp nur benachbarte Pixel, eingeschlossene Flächen werden nicht eingefärbt, das kann zum Problem werden, wenn z.B. 0 und 8 eine gleiche Kontur haben, aus diesem Grund gibt es aber speziell in Gimp noch einen besseren Trick: Die Auswahl nach Farbe. Hierbei werden alle Pixel ausgewählt, die die selbe Farbe besitzen; das Werkzeug findet ihr unter folgendem Icon: gimp_icon_color Auch hier müssen wir den Schwellwert wieder so niedrig wie möglich stellen. Nun klicken wir wieder in den Randbereich des Bildes und dann sollte es so aussehen:

Gimp Color Picker

Gimp hat nun alle Pixel ausgewählt, die die selbe Farbe besitzen, mit dem Fülleimer färben wir nun den Rest ein:

Gimp Color Picker Colored
Das Gestrichel ist natürlich nur die Auswahl und ist im gepeicherten Bild nicht vorhanden 😉

Die Fülleimer-Methode kann unter Umständen relativ kompliziert werden, besonders wenn keine einheitliche Hintergrundfarbe verwendet wurde, oder das Bild in JPEG statt PNG vorliegt. JPEG benutzt nämlich verlustbehaftete Kompression, was zu sog. Artefakten führen kann. Das Bild sähe dann so ähnlich wie hier aus:

Mit viel Fantasie lesbar, aber es geht besser.
Mit viel Fantasie lesbar, aber es geht besser.

Leider ist mir das originale Bild abhanden gekommen, die nachfolgenden Werte stimmen, also nicht ganz, vom Prinzip ist es aber das selbe: Download Bild

Wie man sieht sind die Buchstaben kaum zu erkennen, da die Bereiche bei zunehmender Kompression immer mehr in einander übergehen. Wir benötigen also eine weniger strikte Methode. Eine Möglichkeit wäre es, die Toleranz (Schwellwert) des Fülleimers schrittweise zu erhöhen, das ist aber zeitaufwändig und nicht immer mit Erfolg gekrönt. Aus diesem Grund wollen wir uns nun ein weiteres Werkzeug anschauen, die Kontrasteinstellung. Diese finden wir in Gimp unter Farbe -> Helligkeit/Kontrast und in Photohop unter Bild -> Korrekturen -> Helligkeit/Kontrast. Hier haben wir nun zwei Regler. Der eine bestimmt den Kontrast, also wie stark sich verschiedenfarbige Flächen von einander abheben sollen und die Helligkeit. Wir stellen zuerst den Kontrastregler auf Vollausschlag (127 in Gimp, 100 in Photopshop) und regeln dann die Helligkeit nach. Bei einem Helligkeitswert von -124 (Gimp) erhalten wir folgendes Bild:

Kontrast verbessert

Dieses Ergebnis kann sich nun wirklich sehen lassen. Natürlich klappt das nicht bei jedem Bild mit diesen Einstellungen, hier heißt es Probieren geht über Studieren 😉 Es kann auch hilfreich sein, diesen Vorgang mehrmals zu wiederholen, um die Wirkung zu verstärken.

Das letzte Werkzeug, dass ich nun vorstellen möchte ist der Schwellwert (Gimp: Farbe -> Schwellwert, Photoshop: Bild -> Korrekturen -> Schwellwert). Wie man dem Namen vielleicht schon entnehmen kann, wird beim Schwellwertverfahren alles bis zu einem bestimmten (Farb-)Wert ‚übernommen‘, der Rest wird ausgeblendet, oder genauer gesagt, der Teil, der unter dem Schwellwert liegt wird Weiß gefärbt, der Rest Schwarz. Betrachten wir z.B. das folgende Bild:

Schwellwert

Auf den ersten Blick scheint es so, als wäre es unmöglich die Buchstaben von einander zu trennen, der Fülleimer versagt hier gänzlich, bzw. ist dessen Einsatz zu aufwändig und auch mit Kontrast können wir hier nicht viel ausrichten, da die Farbwerte einfach zu dicht beieinander liegen. Glücklicherweise hat uns der Owner aber mitgeteilt, dass die korrekte Koordinate den Farbwert #AAAAAA besitzt. Wie wir am Farbwert erkennen, haben alle drei Kanäle (Rot, Grün, Blau) den selben Wert, nämlich AA (Hexadezimal) = 170 (Dezimal), deshalb stellen wir den Schwellwert nun auf 170 und zwar sowohl das obere, als auch das untere Ende des Bereichs, das Ergebnis sieht folgendermaßen aus:

Schwellwert in Gimp

Und so können wir die richtige Koordinate ablesen. Eine kleine Gemeinheit könnte man sich aber noch überlegen und zwar könnte man nur einen Farbkanal ändern, wie in diesem Bild:

Schwellwert Kanal

Hier haben wir es mit zwei Farbwerten zu tun: #ABABAB (die richtige Koordinate) und #ABABAA (der Rest). Die Werte der Rot- und Grün-Kanäle sind gleich, nur der Blaukanal ist bei der richtigen Koordinate anders, allerdings hat er dort den selben Wert wie die anderen Kanäle (AB), wir werden es also nicht hinbekommen, die Koordinate sauber freizustellen, da wir immer Überlagerungen durch die falschen Koordinaten haben. Der Trick ist es nun das Bild in seine einzelnen Kanäle aufzuspalten, in Gimp geht das ganz einfach unter Farben -> Komponenten -> Zerlegen. Es wird ein neues Bild erstellt mit einer Ebene pro Kanal. Wir entfernen Rot und Grün und übrig bleibt nur noch der Blaukanal. Nun verwenden wir wieder den Schwellwert und gelangen schließlich zu folgendem Ergebnis:

Nur Blaukanal + Schwellwert

 

Das war es auch schon mit dem ersten Teil dieser Serie, ich hoffe ich konntet etwas lernen und habt Spaß beim Nachbauen.

Im zweiten Teil wollen wir die kennengelernten Werkzeuge verwenden, um ein wenig kniffeligere Rätsel zu lösen.

No comments have been made. Use this form to start the conversation :)

Leave a Reply

Facebook
Facebook