Home » Tutorials » Sonstiges » Steganographie

Steganographie

Verstecken von Nachrichten: Steganographie

Geschichte der Steganographie

Da kein Code absolut sicher ist, d.h. mit entsprechendem Aufwand immer geknackt werden kann, ist es sicherer, die Nachricht so zu verstecken, dass andere es nicht merken, dass eine Nachricht gesendet wurde. In Griechenland wurde von Demeratus eine Holztafel beschrieben und anschließend mit Wachs überzogen, auf dem wieder geschrieben wurde, so dass die eigentliche Schrift auf der Holztafel nicht zu sehen war. Oder ebenso unauffällig ließ sich ein Diener die Haare rasieren und auf die Kopfhaut eine Nachricht schreiben. Als das Haar wieder gewachsen war, konnte er unerkannt die Nachricht überbringen. Später wurde es dann üblich, unsichtbare Tinte zu benutzen oder nur jedes fünfte Wort eines Textes zu beachten. Ebenso konnte man auch nur den Anfangsbuchstaben jedes Wortes oder immer das erste Wort jeder Zeile auswerten. So war es möglich, unauffällig Nachrichten in einer harmlos aussehenden Information zu verstecken.

Steganographie und Computer: Nachrichten in digitalisierten Daten

Kommunikation über Computer brachte der Steganographie ein völlig neues Betätigungsfeld, da die Daten im Internet nicht nur vom Provider, sondern auch von anderen Servern oder gar von Leuten, die die Telefonleitung anzapfen, mitgelesen werden können. Um die Daten zu verstecken musste man sich neue Wege ausdenken. Eine sehr simple Methode war es, durchgehend Daten von einem Rechner an einen anderen zu senden und die Daten im Datenmüll zu verstecken. Dies war aber auch sehr auffällig und konnte, da Internet sehr teuer war, viel Geld verschlingen. Also mussten die Daten unauffällig in normalen Daten sowohl per Mail gesendet als auch auf Internetseiten gezeigt werden können. Da die alten Methoden, nur jedes n-te Wort auszuwerten, häufig sehr zeitraubend war, kam man auf die Idee, Daten in einer Art Wasserbild in einer normalen Bilddatei zu verstecken und den Text mit einer leicht helleren/dunkleren Farbe auf einem Hintergrund zu zeichnen. Oder man konnte in einer HTML-Datei den Text als Kommentar einfügen oder dem zu versteckenden Text die gleiche Farbe geben wie dem Hintergrund. Aber bei ausführlicher Betrachtung von Quelltexten bzw. genauerer Sichtung der Bilder konnte auch so etwas erkannt werden.

Least Significant Bits – verstecken in digitalisierten Daten

Diese Methode gilt als die sicherste Methode, Daten in anderen Daten zu verstecken. Dabei verwendet man die unwichtigen Bits, die vom Menschen sowieso kaum wahrgenommen werden können.
Bitmaps zum Beispiel sind in der 24-Bit Variante folgendermaßen aufgebaut: Die Pixel sind der Reihe nach auf der Festplatte angeordnet. Jedes Pixel benötigt 3 Byte (24 Bit) an Daten. Jedes der 3 Byte steht für den Anteil von Rot, Grün oder Blau in diesem Pixel. Wenn man sich das untenstehende Bild ansieht, stellt es einen Farbverlauf dar, bei dem man die einzelnen Abstufungen mit dem menschlichen Auge nicht sehen kann – zumindest solange nicht am Desktop oder ausgedruckt mit einer Farbtiefe von 24 bzw. 32 Bit.


Farbverlauf
Also ist es unmöglich, das letzte Bit wirklich mit dem Auge wahrzunehmen. Im linken Bild sind sogar die letzten drei Bits des Rotanteils zufällig gesetzt. Zumindest mein Bruder und ich konnten keine helleren oder dunkleren Flächen erkennen. Es scheint aber auch bessere Augen zu geben, da mein Nachbar auch auf dem linken Bild Unterschiede gesehen haben will. (Ab vier zufällig gesetzten Bits ist es auch mir aufgefallen: rechtes Bild)

Hierbei sind die letzten 3 Bits zufällig gesetzt Hierbei sind die letzten 4 Bits zufällig gesetzt

Genau diese Unfähigkeit des Auges, die letzten Bits wirklich auswerten zu können, macht man sich bei der „Least Significant Bits“ (engl.: unwichtigste Bits) Methode zu nutze, da man in diesen Bits Daten verstecken kann, die vom Auge nicht wahrgenommen werden können. Zum Beispiel bei den beiden folgenden Bildern ist es mit dem Auge unmöglich, die einzelnen Pixel auseinander zu halten. Daher kann man kaum sagen, welches das codierte ist, in dem sich Daten verbergen:

Hier das Original Codiert mit „Dies ist ein streng geheimer Text“

Wenn ein Verdacht besteht, ist es bei solch einem einfarbigen Original kein Problem mit Hilfe eines Hexeditors die von der Standardfarbe abweichenden Pixel zu finden und dann zu versuchen, diese zuzuordnen und damit zu entschlüsseln. Für das Verstecken von Daten mit Hilfe der Steganographie eignen sich keine ein- oder wenigfarbigen Bilder, genauso wenig wie Farbverläufe oder künstlich erzeugte Bilder, da bei solchen schnell mit Hilfe eines Hexeditors eine entsprechende Stelle gefunden werden kann, die von der Erwartung abweicht. Und von dieser ausgehend können weitere gefunden werden.

Verschlüsseln im Rauschen – Anwendung der „Least Significant Bits“

Es stellt sich also die Frage, in welchen Bildern es möglich ist, Daten zu verstecken. Zum einen eignen sich zufällig erstellte Bilder, da man bei keiner Farbe eine zu starke oder unerwartete Abwandlung zu der benachbarten Farbe sehen kann. Das Problem hierbei ist, dass zufällige Farbzusammenstellungen sehr auffällig sind und man selten ein Bild mit zufälligen Farben per Mail an andere Leute schickt oder auf seiner Internetseite veröffentlichen will. Es gibt aber eine andere Art von Bildern, bei denen die letzten Bits mehr oder weniger zufällig zu seien scheinen, und zwar bei digitalisierten (und damit ursprünglich analogen) Bildern, was meistens mit Hilfe eines Scanners oder einer Digitalkamera geschieht. Wegen vorhandener leichtester Fehler kommt es dazu, dass auch bei einem weißen, eingescannten Blatt, die Farbe nicht durchgehend Weiß ist.
Hexcode (Auszug) einer eingescannten weißen Seite:

FF FE FA FF FE FA FF FE FC FF FE FC FF FE FC FF FE FC FF FE FC FE 00 F8 F2 F3 FA F4 F5 FA

Wie man sieht kommt es zu leichten Abweichungen in den letzten 4 Bits (und trotzdem lässt sich das Bild als durchgehend weiß beschreiben). Wie es zu der „00“ kommt, kann ich mir auch nicht erklären, evtl. ein Fehler des Scanners. Man sieht also, dass in den letzen 4 Bits Daten versteckt werden könnten. Es würde kaum auffallen, da man es durch Ungenauigkeiten und Fehler des Scanners (bzw. einer Digitalkamera) erklären kann. Würde man nun jeweils das 2. Hexadezimalzeichen durch einen Bestandteil eines Buchstaben ersetzen, würde das Bild immer noch als weiß erscheinen:

Bild hexadezimal FF FE FA FF FE FA FF FE FC FF FE FC FF FE FC FF FE FC
Zu codierender Text H a l l o D u !
Text Hexadezimal 48 61 6C 6C 6F 20 44 75 21
Codierter Text F4 F8 F6 F1 F6 FC F6 FC F6 FF F2 F0 F4 F4 F7 F5 F2 F1

Zum Beispiel dem „H“ wurden die Farbwerte „FF FE“ zugeordnet. Der erste Hexadezimalteil des „H“s, „4“, tritt an die Stelle der hinteren Hälfte des ersten Farbbytes. Der zweite Hexadezimalteil des „H“s, „8“, tritt an die Stelle der hinteren Hälfte des zweiten Farbbytes. Dadurch wurde der Text in dem Bild versteckt, ohne auf den ersten Blick erkannt zu werden. Dies ist aber eine sehr kompakte Codierung. In meinem Programm habe ich es so gewählt, dass Daten immer nur im letzten Bit jedes Bytes gespeichert werden, bei dem gleichen Grundgedanken, immer das/die letzte(n) Bit(s) durch die des Textes zu ersetzen. Entscheidend bei dieser Methode ist es, dass das Bild ein digitalisiertes Bild ist, so dass die Daten im Rauschen verborgen werden können, die beim digitalisieren entstehen. Die Dichte der Codierung (im obigen Beispiel 2:1, d.h. auf 2 Bytes Bild kommt ein Byte Text) lässt sich am besten an der erwarteten Stärke des Rauschens beim Digitalisieren ausmachen. Aber bei heutigen Computern sind Verfahren mit einer Stärke von etwa 10:1 oder sogar 100:1 durchaus denkbar, denn welcher Text ist länger als 10KB? 7)8)9)

Steganographie in anderen Daten

Es eignen sich aber nicht nur Bitmaps zum Verstecken von Daten. Auch andere pixelorientierte Bildformate können solche Daten nach einem sehr ähnlichen Muster aufnehmen. Dabei ist jedoch wichtig, dass die Bilder eine möglichst große Farbtiefe haben. 256 Farben ist das absolute Minimum – was viele Bildformate mit dieser Farbtiefe gerade noch zulässt, aber viele – wie zum Beispiel GIF – eher ungeeignet erscheinen lässt.
Weiterhin sind Audiodateien aller Art (außer MIDI), also vor allem WAV, AU und MP3, gut zum Verstecken von Daten geeignet. Genau wie in Bilddateien gibt es wichtigere und unwichtigere Bits, so dass man die unwichtigeren ändern kann, meistens, ohne dass ein Klangunterschied zu hören ist. Weiterhin gibt es bei Audioformaten auch die Möglichkeit, weitere Echos oder Tonhöhenveränderungen einzubauen, aus deren Anzahl, Abstand etc. auf Daten geschlossen werden kann. Als Kombination aus Ton und Bild eignen sich auch Videos zum Verstecken von Daten, die dann sowohl im Ton wie auch im Bild versteckt werden.
Eigentlich würden sich auch noch Geruchs-, Tast- und Geschmacksinformationen, sollte es sie jemals wirklich geben, für die Steganographie eignen, was aber zur Zeit nicht in Frage kommt.

Sicherheit von Steganographie

Unter der Bedingung dass ein vernünftiges und auch unauffälliges Medium zum Verstecken benutzt wurde, sollte ein Laie keine Chance haben, etwas zu entdecken. Da Steganographie eigentlich keine Codierung ist, hängt die Sicherheit davon ab, ob jemand speziell dort, wo die Daten versteckt sind, nach diesen sucht. Sollten diese unverschlüsselt im Medium verborgen sein, ist es für professionelle Agenturen (NSA, FBI, BND…) sicherlich kein Problem, diese Daten zu finden. Sollten die Daten aber verschlüsselt im Medium vorliegen, ist es um einiges schwieriger sie zu finden. Nun muss man zum Decodieren jede Möglichkeit, in der die Daten vorliegen, mit jeder Art Code ausprobieren, was sehr viel länger dauert als normales Entschlüsseln.
Mögliche Methode gegen Steganogramme ist der visuelle Angriff. Mit ihm wird das Rauschen in dem/den letzten Bit(s) sichtbar gemacht. Sollte es vorher nicht schon groß und zufällig genug gewesen sein, wird nach diesem Angriff sichtbar, in welchem Teil des Bildes die veränderten Daten sind. Bei einem entsprechend starken Rauschen fällt jedoch das künstliche Rauschen nicht weiter auf. Außerdem sind auch verschiedenste statistische Angriffe möglich, die sich die Farbzusammensetzung des Bildes und auffällige Regelmäßigkeiten in den letzten Bits als Angriffsziel nehmen (zum Beispiel: Alle Buchstaben beginnen binär mit „01“). Bei gutem Ausgangsmaterial und einer entsprechenden zusätzlich Codierung sind aber auch diese Angriffe zum Scheitern verurteilt.
Mein Programm verwendet zwar keine Methode, die Daten gleichmäßig im Bild zu verteilen oder sie gehäuft einzubauen (gegen Übertragungsfehler, die es eigentlich nicht mehr gibt). Weil ich mich dafür entschieden habe, immer nur das letzte Bit zu benutzen und keine anderen Bits, ist aber die Dichte der Codierung sehr dünn, so dass die versteckten Daten nicht geballt vorhanden sind. Außerdem wird der Text vorher mit einer einfachen 512Bit XOr Codierung geschützt, um ein eventuelles Entschlüsseln nicht zu leicht zu machen.

Steganographie und das Gesetz

Da Steganographie viele Geheimnisse vor einem Unbefugten verbergen kann, einige Staaten aber nicht wollen, dass ihre Bürger Geheimnisse haben, gilt die Steganographie, meistens als Teil der Kryptographie aufgefasst, in einigen Staaten als verboten. Beispiele hierfür sind Frankreich und Russland, wobei aber vor allem in den USA nach den Terroranschlägen in New York über ein Verbot von Kryptographie, und damit auch Steganographie, nachgedacht wurde.
In Deutschland ist Kryptographie legal und es gibt auch keine ernsthaften Bestrebungen dies zu ändern. Diese Facharbeit befindet sich also in Deutschland innerhalb der gesetzlichen Möglichkeiten.