Steganographie

von Alexandra Weikert

Schon früher wurden steganographische Verfahren verwendet um Nachrichten in unverfänglicheren Informationen zu verstecken. So kann man z.B. mit Zitronensäure einen Brief unsichtbar zwischen die Zeilen eines ganz anderen Briefes schreiben und die Schrift später mit Wärme wieder sichtbar machen. Oder man kann bestimmte Worte des unverfänglichen Briefes mit Nadelstichen markieren, die dann natürlich nur gegen Licht zu entdecken sind. Eine andere Methode ist in der "Geschichte zweier Städte" von Charles Dickens beschrieben. Die Frauen in der Geschichte stricken Informationen in linke und rechte Maschen ein - anstatt der Werte 0 und 1 als Bitwerte. Heute gibt es elektronische Methoden, die hier beschrieben werden.

Warum sollte man heute mit Steganographischen Verfahren arbeiten?

Die Verschlüsselung von Daten gerät durch Mißbrauch (für Kinderpornographie, Terrorismus oder generelle Kriminalität) zunehmend unter Beschuß. Das sollte aber kein Grund sein, auf Verschlüsselung zu verzichten, sondern eher einer dafür, verschlüsselte Daten zu verstecken.

Welche Bedingungen sollte ein solcher Algorithmus erfüllen?

  1. Keine offensichtlichen Veränderungen der Trägerdaten, d.h. die versteckten Daten sollten nur minimal wahrnehmbar sein. Im Prinzip muß man den Betrachter von den Daten ablenken, auch wenn diese nicht sichtbar sind - wie ein Zauberer, der vor unseren Augen ein Kaninchen verschwinden läßt, obwohl wir genau wissen, daß es sich nicht in Luft auflösen kann.

  2. Die vesteckten Daten sollten allen Veränderungen wiederstehen, egal ob durch Rauschen, Filtern, Verschlüsselung, unscharfe, d.h. verlustbehaftete, Kompression, Verkleinerung des Trägermaterials, Drucken, oder durch Umwandlung in andere Dateiformate.

  3. Das Verschlüsseln der Daten mit asymmetrischen Verfahren (RSA, PGP) vor dem Verstecken ist erwünscht. Das versteckt die Daten besser, da nach dem Verschlüsseln ein "weißes Rauschen" übrig bleibt, macht sie aber deshalb nicht schwerer zugänglich (aber selbst wenn sie gefunden werden, sind sie immer noch verschlüsselt!)

  4. Fehlerkorrektur sollte die Korrektheit der Daten sicherstellen.

  5. Die versteckten Daten sollten mit so viel Redundanz gespeichert werden, daß man mit Hilfe von Fehlerkorrektur alle Daten wieder herstellen kann, wenn ein Bit verloren geht.

Anwendungen:

Unabhängig von der Beeinträchtigung des Trägermaterial können Daten auf zwei unterschiedliche Arten gespeichert werden: entweder werden viele Daten versteckt, die sehr anfällig gegenüber Veränderungen sind, oder lieber weniger, die dafür Veränderungen ganz gut widerstehen können.

Doch es geht nicht beides gleichzeitig. Der Wert der Sicherheit bei der Wiederherstellung ist reziprok zur Größe der Datenmenge, die versteckt werden kann. Bei allen Systemen kann man die Widerstandsfähigkeit gegenüber Veränderungen für eine größere Bandbreite aufgeben. Die versteckte Datenmenge und die Sicherheit bei der Wiederherstellung variieren von Programm zu Programm. Für verschiedene Anwendungen gibt es verschiedene Programme.

Digitale Wasserzeichen sind versteckte Daten, die zwar nicht offensichtlich das Trägermaterial verändern sollen, die aber einfach gefunden werden können muß, damit das Wasserzeichen seinen Zweck erfüllen kann: z.B. den Ursprung eines Bildes belegen.

Vorbereitung zum Verstecken von Daten

Die Verschlüsselung der Daten mit RSA, DES erzeugt eine absolute Gleichverteilung, weißes Rauschen, ebenso natürlich PGP 2.6.3i Die meisten Steganographiealgorithmen arbeiten dann am besten, wenn sie mit weißem Rauschen gefüttert werden. Verwendet man verschlüsselte Dateien ohne sie zu verstecken, kann man davon ausgehen, daß sie Neugierde erwecken, da sie ja weißen Rauschen sind, und damit als verschlüsselt zu erkennen sind. Daher ist es eine gut Möglichkeit, eine Datei erst zu verschlüsseln und dann in einer anderen Datei zu verstecken. Steganographie wird durch die Kryptographie sicherer gemacht, auch wenn sie ohne auskommt.

DES verwendet einen 56 bit-Schlüssel um 64-Bit große Blöcke zuverschlüsseln. In 16 Schritten werden die einzelnen Stücke in zwei Teile je 32 Bit zerlegt, verschlüsselt und vertauscht. Allerdings ist DES eine lineare Funktion mit einem Schlüssel, der beiden Seiten, dem Absender und dem Empfänger bekannt sein muß.

Besser sind Verschlüsselungsverfahren mit öffentlichen Schlüsseln. Hierbei werden zwei Schlüssel verwendet, ein öffentlicher und ein privater. Mit dem öffentlichen Schlüssel wird die Nachricht vom Absender verschlüsselt, während der Empfänger die Nachricht mit dem privaten Schlüssel entschlüsselt werden kann. Der öffentliche Schlüssel allein ist wertlos.

Da man weder für DES noch für RSA genau hervorsagen kann, wie der nächste Buchstabe aussehen kann, wenn man z.B. die ersten 3 kennt, kann man keine Vorhersage über den nächsten machen, daher nennt man dieses immer Weißes Rauschen. Nur durch eine direkte Attacke kann man versuchen den Schlüssel zu knacken, aber nicht durch Berechnung anhand der Schlüssel. Reine Verschlüsselungsverfahren wie DES und RSA eignen sich gut, um weißes Rauschen zu erzeugen, das sehr zufällig aussieht. Beginnt man damit, Daten in anderen Daten zu verstecken, ist das schon mal ein guter Anfang um die Welt an der Nase herumzuführen. Außerdem ist bislang keine Möglichkeit bekannt, diese Algorithmen zu knacken, und die entsprechenden Programme sind auch ganz einfach zu benutzen.

Komprimierung der Daten

Die zu speichernden Daten sollten immer komprimiert sein

Ein Versteck im Rauschen

Rauschen ist ein Teil unseres Lebens. Die Werbung für diverse digitale Geräte versucht uns vorzuspiegeln, daß digitale Schaltkreise rauschfrei und damit besser sind. Aber das ist nur die halbe Wahrheit. Das digitale Signal kann wieder und wieder verlustfrei kopiert werden, dank der eingebauten Fehlerkorrektur und der gut ausgedachten Schaltkreise, aber es kann das bereits vorhandene Rauschen nicht eliminieren. Digitalisierte Bilder, digitalisierte Musik und digitalisierte Spielfilme haben alle einen bedeutsamen Anteil an Rauschen aus ihrer ursprünglichen Herstellung. Die Schaltkreise/Programme die Stimmen, Töne und Bilder zu Bits konvertieren, sind alle nicht ganz perfekt. Ein bischen elektrisches Rauschen verändert die Bits ein bischen und es gibt keine Möglichkeit dies zu verhindern. Rauschen wird uns immer begleiten.

Aber dieses Rauschen ist auch eine Chance für uns. Wenn es nicht wichtig ist, ob die Bits wirklich 100%ig korrekt sind, dann kann sich jeder, der Informationen verstecken will, diese Unsicherheit zu Nutze machen. Man kann diese Bits "besetzen". Das ist die beliebteste Form der Steganographie und diejenige, die die meisten Möglichkeiten bietet.

In den Netzwerken dieser Welt befinden sich Millionen von Bildern, als Hintergrund von Webseiten, oder innerhalb dieser, und wer weiß noch wofür. Man kann diese Bits kidnappen und zum Transport der eigenen Nachrichten gebrauchen.

Das Prinzip ist einfach. Digitalisierte Bilder oder Töne werden durch Zahlen dargestellt, die die Intensität zu einer bestimmten Zeit und Raum wiedergeben. Ein digitales Photo ist nur eine Matrix aus Zahlen, die für die Intentistät von Licht stehen, so wie es zu einer bestimmten Zeit an einem bestimmten Ort zu sehen war/ist. Digitale Töne sind nur Aufzählungen des Drucks der auf ein Mikrofon in bestimmten Zeitscheiben ausgeübt wurde.

Alle diese Zahlen sind unpräzise. Digitale Photoapperate, die Bilder erzeugen, sind nicht perfekt, da die Anordnung von Charge-Coupled Devices, welche die Photonen speichern, von Zufallsefekten der Physik abhängig sind. Damit diese Geräte bei noremaler Raumbeleuchtung arbeiten können, müssen sie oft auf wenige Photonen ansprechen. Aber die Zufälligkeiten dieser Welt stellt sicher, daß manchmal zu viele und manchmal zu wenige Photonen auftreffen. Im langfristigen Durchschnitt wird sich die Zahl der Photonen ausgleichen, aber das CCD muß oft innerhalb eines Sekundenbruchteils ein Bild erstellen. Also fehlt an manchen Stellen ein bißchen Helligkeit oder Farbe. Bei Mikrofonen ist es genauso.

Der Anteil von Rauschen, das zum Verstecken von Informationen in einem Bild zur Verfügung steht, kann atemberaubend hoch sein. Viele digitale Farbbilder halten 32 Bits für jedes Pixel bereit. In jeweils 8 Bit werden die Anteile an Rot, Blau und Grün, oder von Cyan, Magenta und Gelb eines jeden Pixels gespeichert. Das ergibt 24 Bit. Wenn pro Pixel nur je ein Bit pro Farbwert zum Verstecken von Informationen verwendet wird, kann man 10 % der Dateigröße dafür verwenden. Im besten Falle hat mein eine Kodak Photo-CD mit 3072 x 2048 Pixel mit 18 MB zur Verfügung. Darin könnte man 1,8 MB Informationen vestecken. Ein gewöhnlicher Roman von etwa 250 Seiten Länge hat etwa 500 KB oder ein halbes MB. Damit könnte man eine Menge von Informationen zusätzlich zum Inhalt eines Romans in einem einzigen Bild verstecken. Aber nicht jeder wird 18 MB für ein einziges Bild verschwernden wollen. Unschärfere Bilder kommen oft schon mit 200 bis 600 KB aus und bieten immer noch 10 % zum Verstecken von Daten.

Aber wenn 10 % des gesamten Speicherplatzes zur Verfügung stehen, wie sehr wird dann das Bild in Mitleidenschaft gezogen? Jedes Byte speichert eine Zahl zwischen 0 und 255. Das letzte Bit in jeder Gruppe von 8 Bit wird das "Least Significant Bit" (LSB), also das unwichtigste Bit, genannt. Der Wert dieses Bits ist 1. Das wichtigste Bit, also das erste, hat den Wert 128, wenn das Bit den Wert 1 annimmt. Das bedeutet, daß das unwichtigste Bit (LSB) die Intensität eines Pixel höchstens um 0,5 - 1 % verändern kann. (1/128 oder 1/255). Wenn man für die Veränderung der Originaldaten um etwa 1 % in Kauf nimmt, kann man dafür etwa 10 % der Originalgröße in Daten verstecken. Ein guter Handel.

Es gibt keinen Grund nicht noch mehr Daten in der selben Datei zu speichern. Wenn die letzten zwei unwichtigen Bits verwendet werden, um Daten darin zu verstecken, dann kann jedes Pixel um maximal 3 Einheiten verändert werden. Das ist immer noch nur 1 - 3 % eines Pixels. Aber das bedeutet, daß man etwa 25 % der Bildgröße mit anderen Daten belegen kann. Eine große Bandbreite wartet nur darauf entdeckt zu werden.

Fehlerkorrektur

Auch bei Computern muß man mit einer gewissen Zufälligkeit rechnen, auch wenn man das eigentlich nicht annimmt. Computerentwickler haben diese Zufälligkeiten durch eine gute Mischung aus Präzision und Mathematik im Giff. Ein ordentlicher Rechner hat soweit alles im Griff, daß es sauber ist, und durch matematische Verfahren, wird der Rest bereinigt. Durch die Mathamatik ist es möglich, einen digitalen Kreislauf mit einer gewissen Ungenauigkeit zu kreieren, die in der analogen Welt nicht möglich wäre. Diese Ungenauigkeit kann mit Hilfe entsprechender Mathematik behoben werden.

Außerdem können die Fehlerkorrektur-Algorithmen zum guten Verstecken von Daten sehr wichtig sein. Die einfachste Methode ist es, gezielt kleine Fehler in eine Datei einzubauen, und das in sehr geordneter weise. Wenn jemand anderes auf diese Datei mit gewöhnlichen Programmen zugreift, wird die Fehlerkorrektur zuschlagen und niemand würde etwas erfahren. Anspruchsvollere Programme könnten die bereinigte Datei mit dem Original vergleichen oder einfach Fehlerkorrekturmethoden anwenden um die entsprechenden Stellen zu finden, in denen Daten versteckt sein könnten.

Eine weitere Möglichkeit ist es, in frei verfügbaren Dateien, die z.B. am Internet "herumschwirren", Daten einzufügen. Es gibt nur dann Probleme, wenn zwei oder mehrere auf die selbe Idee kommen, und eine Nachricht durch eine andere Überschrieben wird. Dafür könnte man aber dazu übergehen, nur Teile von solchen Dateien zu beschreiben, da selbst bei kleinen Überlappungen, die Daten durch die Fehlerkorrektur wiedergewonnen werden können.

Man kann Nachrichten auch auf mehrere Datein verteilen, und auf verschiedenen Wegen schicken. Wenn Teile kompromittiert wurden, kann man sie durch Fehlerkorrektur wieder herstellen.

Das Aufteilen von Geheimen Nachrichten

Es gibt verschiedene Gelegenheiten, bei denen es nützlich ist, die Informationen aufzuteilen. Erst wenn alle Informationsträger sich gemeinsam zusammenfinden, kann das Puzzle zusammengesetzt werden. (z.B. zwei Schlüssel für den Banktresor)

Man hat die Möglichkeit, eine Nachricht so aufzuteilen, daß nicht alle Beteiligten anwesend sein müssen, um die ganze Nachricht zu erhalten, oder daß alle dazu benötigt werden.

Es ist nicht immer wünschenswert, daß man alle Beteiligten benötigt, um ein Geheimnis wieder herzustellen. Eine bessere Variante kann es sein, daß mehrere Leute mit einem Teil das Ganze wiederherstellen können. Eine Möglichkeit ist, daß man annimmt, das Geheimnis sei eine Bestimmte Zahl x auf der Zahlenebene. Dadurch kann man eine Gerade legen - und noch eine ganze Menge weiterer. Kennt man zwei dieser beliebig vielen Geraden, kann man den gemeinsamen Schnittpunkt berechnen und erhält damit x. Kennt man nur eine dieser Geraden, ist man genauso schlau wie vorher. Man benötigt aber immer nur einen beliebigen zweiten, mit der Kenntnis über eine weitere Gerade um das Geheimnis zu lüften. Sollen mehr als zwei Leute nötig sein um eine Botschaft zu entschlüsseln, kann man z.B. Geraden im Raum annehmen, dann benötigt man 3 Gleichungen und damit auch 3 Leute. Sind mehr Geheimnisträger gewünscht, kann man n-dimensionale Gleichungen für Punkte in der n-ten Dimension wählen und verteilen.

Man kann natürlich auch Punkte auf der ersten Linie verteilen (und damit die Geheimnisse), die Schnittpunkt mit anderen Geraden darstellen, oder Punkte auf der y-Achse, mit entsprechenden Geraden, die die y-Achse genau in diesen Punkten schneidet. So kann man auf ganz einfache Weise ein Geheimnis so aufteilen, daß immer eine gewisse Untermenge der Beteiligten anwesend sein muß, um das Geheimnis wieder herzustellen. Allerdings ist es nicht ratsam Punkte auf 2 Geraden zu verteilen, da für die Lösung dieses Systems nur wenige Punkte nötig sind und so das Geheimnis gelüftet werden kann, wenn nur wenige Beteiligte und nicht alle, eigentlich benötigten, anwesend sind.

Selbstverleugnung

Eine andere Möglichkeit Information aufzuteilen: Man kann z.B. auf der eigenen Webseite ein Bild zur Verfügung stellen, in dem Informationen versteckt sind. Allerdings kann man diese nicht so einfach extrahieren. Dazu braucht man noch drei andere, offensichtliche Bilder aus dem Web - z.B. eines auf den Seiten von Disney World, eines der NASA und ein Urlaubsbild eines Fernostreisenden aus Deutschland. Aus diesen drei Bildern werden die LSBs (Least Significant Bits) extrahiert und zu den Informationen aus dem Bild von der eigenen Webseite addiert - erst dann erhält man die geheime Nachricht.

Der Vorteil an dieser Methode ist, daß man nicht genau sagen kann, von wem die eigentliche Information zur Verfügung gestellt wird. Von Disney World? Oder von der NASA? Wenn man die Informationen in nur 4 Bildern zur Verfügung stellt, kann man mit etwas Aufwand vielleicht noch den Verursacher feststellen, aber bei 100 Bildern?

Allerdings sollte man darauf achten, wie die Bilder entstanden sind, die im Web zur Verfügung gestellt werden. Wird z.B. ein Bild aus der "Toy Story" verwendet, das computergeneriert wurde, kann man über die LSBs sehr vorhersagbare Aussagen machen und Disney World scheidet damit schon als Verursacher aus. Das Grundrauschen der ausgewählten Bilder sollte schon sehr deutlich sein.

Dateiformate, Kompression und Praktische Probleme

Wenn man diesen Kanal tatsächlich für die Übertragung von Informationen verwenden will, gibt es ein paar praktische Probleme. Die meisten Bild- und Audiodateien enthalten genug natürliches Rauschen um eine 3 %ige Veränderung zu verstecken. Hier sieht man ein gewöhnliches Schwarz/Weiß-Bild:

Originalbild als GIF-Datei

LSBs des Originalbildes

Das Rauschen ist deutlich zu erkennen. Hier fällt eine Veränderung der LSBs nicht weiter auf. Es ist also gut möglich Informationen in diesem Bild zu verstecken.

Viele Bild- und Audiodateien bieten genug Rauschen, um Daten zu verstecken. Das erste Bild bietet genug Stoff, so daß kleine Veränderungen nicht bemerkt werden. Aber es gibt auch Bilder, die die eingearbeiteten Informationen nicht so gut verstecken. Bilder, die im Computer erzeugt wurden, wie z.B. mit Paintbush oder dem Adobe Illustrator oder Corel Draw. Dabei werden große Flächen gleichmäßig mit einer Farbe ausgefüllt. Selbst wenn dieses Bild nur ein wenig verändert wird, kann man dies leicht entdecken, da die gleichmäßige Farbe mit einem Rauschen überlagert wird. (Eigentlich schmerzen diese gleichmäßigen Farben den Augen. Deshalb verändern Künstler diese Flächen etwas und überlagern sie mit einer Textur. Damit hat man dann auch wieder die Möglichkeit, Daten darin zu verstecken.)

Datenformate sind ein ernstzunehmendes Problem für jeden, der regelmäßig Steganographie auf Bit-Ebene verwenden möchte, um Daten zu verstecken. Viele Bild- und Audiodateiformate sind dafür gedacht, das Rauschen herauszufiltern um Platz zu sparen. Das kann durch ein sehr spezielle und effizientes Dateiformat wie GIF geschehen, oder durch ein sehr aggressives Kompresionsprogramm, wie JPEG, das sich nicht darum schert, ob das Bild nach der Rekonstruktion genau das selbe ist, wie vorher. Beide Formate machen es schwer, einfach im unwichtigsten Bit des Bildes Informationen zu verstecken.

Das GIF Dateiformat und sein 8-Bit-Standard ist ein wichtiges Hindernis, da 8-Bit-Farben sich sehr von 24-Bit-Farben unterscheiden. Hier wird eine Tabelle mit 256 verschiedenen Farben verwendet. Diese ausgewählten Farben repräsentieren die Farben im Bild am besten. Die Farbe eines jeden Pixels wird nun durch einen Eintrag in dieser Farbtabelle beschrieben, und zwar der Farbe, die der eigentlichen am nächsten kommt. Die Bits haben keinen Zusammenhang mit der Intensität der Farbe eines jeden Pixels. Wenn man also das unwichtigste Bit verändert, bedeutet das nicht, daß man die Intensität unwesentlich um maximal 1 % verändert, sondern daß man anstatt des Eintrags 16 der Farbtabelle (hellgelb) nun Eintrag 17 (dunkelblau) erhält. Sie unterscheiden sich zwar nur im unwichtigsten Bit, aber das kann einen gravierenden Unterschied im Ergebnis erzeugen.

Es gibt eine Menge unterschiedlicher Lösungen zu diesem Problem. Eine Möglichkeit ist es, eine kleinere Anzahl an Farben zu verwenden.

Anstatt 256 Farben auszuwählen, welche die Farben des Bildes repräsentieren sollen, kann man 128 wählen und dann 128 weitere, die den ersteren sehr ähnlich sind. Man kann sogar die selben 128 Farben nehmen, aber das wäre zu verdächtig. Die Tabelle könnte so angeordnet sein, daß zwei sehr ähnliche Farben sich nur in einem Bit unterscheiden. Beispiel:

Nummer:BinärcodeRotGrünBlau
000000000904022
100000001894120
20000001012011375
30000001112310771
400000100318999
500000101289495
...............

Will man nun den Wert 1 in einem Pixel verstecken, findet man die ähnlichste Farbe in der Tabelle, indem man das unwichtigste Bit auf 1 setzt. Wenn die ähnlichste Farbe zum Original die Farbwerte Rot=119, Grün = 114 und Blau= 71 hat und 1 Bit versteckt darin versteckt werden soll, dann wählt man die Farbe mit der Nummer 3 aus der Farbtabelle aus, will man eine 0 verstecken, verwendet man die Farben Nummer 2 aus der Tabelle.

Es gibt keinen Grund, warum das unwichtigste Bit in getrennten Paaren benutzt werden muß. Es kann jedes dieser Bits verwenet werden. So kann die Auswahl auch über das 3. Bit erfolgen. (oder auch über das 1. und 3.)

Außerdem gibt es keinen Grund nur 1 Bit pro Pixel zu verschlüsseln.Der selbe Algorithmus der dazu verwendet wird die 128 nächsten Farben aus 256 auszuwählen, kann auch dazu verwendet werden, die nächsten 64 Farben auszuwählen. Dann könnten 2 Bits pro Pixel verschlüsselt werden. Das kann die Qualität des Bildes zwar offensichtlich verschlechtern. Z.B. auch, wenn man versucht 4 Bits pro Pixel zu verstecken. Damit hätte man nur noch 16 Farben für die eigentliche Farbtabelle zur Verfügung. Wenn z.B. eine Person auf dem Bild dargestellt ist, wird dann vermutlich eine Farbe für den Hintergrund ausgewählt, eine für die Haarfarbe, eine für den Pullover und vielleicht nur 2 Farben für die Hautfarbe verwendet. Diese Hautfarbe würde aber eher schrecklich aussehen. Da beim Sehen durch die menschlichen Augen wohl am meisten Augenmerk auf die Hautfarbe gelegt wird, ist es ratsam einen Algorithmus zu verwenden, der dementsprechend versucht, der Haut die meisten (unterschiedlichen) Farben zuzuordnen.

Aber jede dieser zwei Farben würde auch 4 Bit an Informationen mit sich tragen. Und das bedeutet, daß es insgesamt 16 Erstatzfarben gibt, die ziemlich zufällig verteilt werden. Diese verleihen der Hautfarbe natürlich eine Oberflächenstruktur und verringern dadurch die Auffälligkeit der Farbverteilung.

Eine andere wichtige Hürde für das verstecken von Daten in Bild- oder Audiodateien sind Kompressionsfunktionen. Kompression ist so allgegenwärtig, daß es für verschiedene Zwecke verschiedene Kompressionsmöglichkeiten gibt, um Daten in kleineren Dateien unterzubringen, und sie dann z.B. über ein Netzwerk (wie das Internet) zu verschicken, oder große Datenmengen auf einer eigentlich zu kleinen Diskette zu speichern. Ein Kompressionsverfahren ist JPEG, MPEG ist dazu ein sehr ähnlicher Standard für bewegte Bilder.

Beide Verfahren sind für das Speichern von Informationen auf Bitebene sehr gefährlich, da sie ein verlustbehaftetes Verfahren zur Kompression verwenden. Nimmt man ein digitales Bild, komprimiert es mit JPEG und dekomprimiert man es später wieder, wird das Ergebnis nicht genau das Bild sein, das man anfangs hatte. Es wird dem Original sehr ähnlich sein, aber es ist nicht das selbe. Das ist, im Gegensatz zu verlustfreien Verfahren wie sie für Textkomprimierung eingesetzt werden, ein großer Gegensatz. Diese Funktionen stellen die Daten Wort für Wort wieder her. Verlustbehaftete Kompressionsverfahren ermöglichen aber eine deutlich größere Komprimierung weil sie sich einen Teufel um Details scheren. Das Endergebnis reicht trotzdem aus. Der JPEG-Algorithmus selbst ist aber anpassbar. Man kann Daten noch weiter komprimieren, wenn man weitere Verluste der Genauigkeit hinnimmt. So kann man den Algorithmus so weit verändern, daß nicht nur ein Pixel eine bestimmte Farbe annimmt, sondern ein ganzer Block.

Es ist nicht leicht den Umgang von JPEG mit Bilddateien zu bekämpfen. Wenn die verlustbehaftete Funktion die Datei nicht korrekt wieder herstellt, dann sind Details und mit ihnen Informationen, die darin eingebettet waren, verloren. Deshalb verwenden wohl viele Leute die Komprimierung in GIF-Dateien. Außerdem wird der Nachteil der etwas größeren Dateien im Gegensatz zu JPEG-Dateien durch immer schnellere Netzwerkanbindungen und immer größere Speichermedien (Festplatten) aufgewogen.

Die Verwendung von JPEG

Am Anfang haben wir uns darüber beschwert, daß JPEG unerwünschte Effekte in Bildern hinterläßt, die Informatinen im LSB gespeichert haben. Da die Kompression nicht verlustfrei ist, kann sich eine Information, die in diese Datei eingebettet war, in Luft auflösen, da JPEG die Datei nicht wieder so wie das Original herstellt. Auch wenn es Probleme bei der Datenkompression mit JPEG gibt, heißt das nicht, daß der JPEG-Algorithmus nicht zur erfolgreichen Speicherung von Informationen in Bilddateien geeignet ist.

Es gibt zwei unterschiedliche Wege den JPEG-Algorithmus zur Speicherung von Informationen zu verwenden. Der erste untersucht die Komplexität des Bildes. Der zweite speichert Informationen in JPEG-Dateien.

Der JPEG-Algorithmus ist ein gutes Werkzeug um den Detaillierungsgrad eines Bildes zu erkennen. Dieser Grad kann dazu verwendet werden den Bereich des Bildes zu finden, in dem der Rauschpegel am höchsten ist.

Der JPEG-Algorithmus teilt das Bild automatisch in Bereiche ein und erkennt dabei die wichtigsten oder hervorstechendsten Bereiche. Schließlich wurde er dazu entworfen genau dies zu tun um den Faktor der Kompression zu erhöhen. Das Programm erzeugt ansehnliche Ergebnisse, auch wenn einige Details bei der Komprimierung verloren gehen.

Dieser Algorithmus macht es möglich die wichtigen Bereiche eines Bildes zu identifizieren. Außerdem kann man den Wert der Genauigkeit des Bildes selbst auswählen. Wenn das Bild nach dem Verstecken der Daten immer noch gut aussehen soll, dann sollte JPEG auf große Tiefenschärfe eingestellt sein und wird danach möglicherweise eine kleiner Anzahl von Bits finden, in denen Daten gespeichert werden können. Wird auf die Tiefenschärfe kein so großer Wert gelegt, bietet JPEG auch mehr Bits zum Speichern an.

Das obige Bild als JPEG mit geringer Tiefenschärfe:

Bild als JPEG-komprimierte Datei mit
geringer Tiefenschärfe

LSBs dieser JPEG-Datei zeigen sehr deutlich die Bereiche mit größerem Detaillierungsgrad:

LSBs der JPEG-komprimierten Datei

Das einzige Problem bei einem nicht verlustfreien Verfahren wie JPEG ist, daß die Information nicht so einfach wieder hergestellt werden kann, wie beim Einbetten von Daten in einer GIF-Datei. Bei einer GIF-Datei kann der Emfpänger einfach die LSBs extrahieren und damit die Daten eins-zu-eins wieder herstellen. Man benötigt dazu nicht das Originalbild. Da JPEG die Bereiche die Ecken und Spalten des Bildes ausweist, in denen Informationen lauern können, brauchen Sender und Empfänger die Liste der verwendeten Bereiche. Dazu benötigen beide Seiten das Originalbild. Das führt aber zu Problemen, wenn man Informationen mit jemanden austauschen möchte, den man noch nie zuvor getroffen hat. Irgendwie muß die betreffende Person erst einmal eine Kopie des Originals bekommen.

Das Verstecken von Informationen in JPEG-Dateien

Es ist ein offenes Geheimnis, daß der Ansatz mit dem verlustbehafteten JPEG-Verfahren Informationen zu speichern, das prinzipielle Verfahren durcheinanderbringt. Das Rauschen kann in jede beliebige Richtung verändert werden, so könnte man im ersten Moment das Datenformat komplett vernachlässigen. Derek Upham hat sich damit nicht zufrieden gegeben und nachgebohrt. JPEG komprimiert die Dateien in zwei Schritten. Zuerst wird das Bild in Blöcke von 8 x 8 Pixel unterteilt und legt dann Kosinusfunktionen über diese Pixel um diese darzustellen. Dann werden die Frequenzen/Häufigkeiten dieser Kosinusfunktionen als Beschreibung dieser Blöcke gespeichert. Upham hat dann festgestellt, daß man die unwichtigsten Bits dieser Frequenz verändern kann um darin Informationen zu speichern.

Dies ist aber nicht der einzige Grund der für dieses Verfahren spricht. Programme wie S-Tools und Stego durchlaufen immer wieder die selben Berechnungen um Informationen in 8-Bit-Farbbildern zu verstecken. Anschließend enthalten diese Bilder aber Farbtabellen mit sehr ähnlichen benachbarten Farbeinträgen.Das funktioniert so weit so gut, kann aber relativ leicht erkannt werden, wenn die Farbtabelle durchsucht wird.

Verändert man die Frequenzen einer diskreten Kosinusfunktion die einen 8 x 8 Block repräsentiert, hat einen ganz anderen Effekt. Auch wenn diese Veränderungen die Qualität des endgültigen Bildes beeinträchtigen, kann man diese Effekte kaum wahrnehmen. Die diskreten Kosinusfunktionen sind von Haus aus schon Annäherungen und wie soll man kleine Veränderungen in einer Annäherung wahrnehmen? Letztendlich wird die Speicherung der Bits dadurch kontrolliert, ob das JPEG-Programm auf- oder abrundet. Aufrunden bedeutet eine 1, abrunden eine 0. Diese Zahlen können wieder hergestellt werden, wenn man das unwichtigste Bit (LSB) der Frequenz betrachtet.

Upham hat außerdem einen ungewöhnlichen Ansatz beim Verstecken von Daten. Man benötigt dazu eine Kopfzeil in der festgehalten ist, wie viele Bits gespeichert wurden. Üblicherweise ist dies eine ganze Zahl für die 32 Bit benötigt werden, dies kann z.B. 12751 sein. Upham bemerkte, daß vor der Zahl immer führende Nullen stehen. Da die Bits für gewöhnlich zufällig verteilt sind, ist eine Reihe von Nullen immer verdächtig: Sechzehn Nullen in Serie sollte in einem von 65536 Fällen vorkommen.

Deshalb ist bei JPEG die Größe auf 1 GB zu versteckender Daten begrenzt, da das jeweils 6. Bit in der Hälfte aller Fälle auf 0 gesetzt wird, da an dieser Stelle für gewöhnlich eine 1 steht.

Deshalb enthält bei ihm Kopfzeile zwei Zahlenfelder. Das erste enthält die Länge des zweiten Feldes, das wiederum die Anzahl der Bits in der gesamten Datei enthält. Das eliminert große Blocks gleicher Bits am Anfang der Nummer und erhält trotzdem die Flexibilität für extrm große Dateien. Außerdem schlägt er vor, daß das zweite Feld bei jedem 2. Mal mit einer zusätzlichen Null vom ersten getrennt wird. Das verhindert, daß das 6.Bit immer eine 1 ist.

Digitale Wasserzeichen

Robuste Markierungsmethoden als Kopierschutz für Bild- und Audiodateien

Wasserzeichen wurden schon siet etwa 2000 Jahren in Papier eingearbeitet, bis etwa zum Mittelalter. Das Wasserzeichen war das Markenzeichen des Herstellers und hat oft etwas über die Zusammensetzung des Papiers ausgesagt. Im digitalen Zeitalter wird das Wasserzeichen zum markieren von Dateien verwendet, um z.B. den Urheber, wie z.B. einen Photographen, festzuhalten.

Eine Anwendung, die eine minimale Datenmenge versteckt, ist das Digitale Wasserzeichen. Die eingefügten Daten geben Auskunft über den Eigentümer des Trägermaterials. Sie erfüllen den selben Zweck wie die Unterschrift des Autors (resp. Photographen) oder ein Firmenlogo. Da diese Information wichtig ist und intelligenten, sowie beabsichtigten Angriffen, das Wasserzeichen zu entfernen oder zu zerstören, ausgesetzt sein kann, muß die Methode, mit der die Informatinen versteckt werden, immun gegen eine Vielzahl von Veränderungen sein.

Eine weitere Anwendung ist gegen die Veränderung des Trägermaterials resistent. Sie wird dazu benutzt, um versuchte Veränderungen des ursprünglichen Trägersignals anzuzeigen. Eine Veränderung der versteckten Daten induziert automatisch, daß das Trägersignal verändert wurde.

Eine dritte Anwendungsmöglichkeit ist die Speicherung von Hintergrundinformationen in Bildern. Diese Daten werden in speziellen Bereichen eingebettet. Diese Daten sind keine typischen Ziele beabsichtigter Veränderungen. Bilder werden oft verändert, verkleinert, abgeschnitten, oder Farbnuancen verändert. Deshalb müssen auch diese Daten Veränderungen widerstehen.

Kopf- und Fußzeilen von Bild- oder Audiodateien können einen großen Platzbedarf aufweisen. Deshalb benötigt man für ihre Speicherung zusätzliche Kanäle. Diese zusätzlichen Informationen gehen verloren, wenn das Dateiformat verändert wird, z.B. von TIFF (Tagged Image File Format) nach GIF (Graphic Interchange Format). Diese Probleme werden umgangen, indem man diese Zusatzinformationen direkt in die Datenstruktur des Trägersignals einarbeitet.

Diese Seite der Steganographie wird überwiegend kommerziell genutzt - schon allein die Programme zum Einfügen von Wasserzeichen zeigen das: es gibt keine Shareware... Ziel der Industrie ist es, z.B. Musikstücke per Internet zu verkaufen, an einen bekannten Käufer (Kundennummer, Abrechnung etc.), der diese Datei genau einmal kopieren kann. Dann wird ein bestimmtes Kopierbit gesetzt, das verhindern soll, daß die Datei noch einmal kopiert wird. Das widerspricht eigentlich der bisherigen Handhabung, da man LPs CDs oder MCs immer schon mehrfach kopieren konnte und auch verleihen. Außerdem: wer hat schon so viel Plattenplatz um viele Musiktitel z.B. auf seiner Festplatte zu speichern.

Das Kopierbit ist Teil eines Wasserzeichens, das mit der Originaldatei verwoben werden muß. Im Gegensatz zu versteckten Daten, soll das Wasserzeichen natürlich gefunden werden können, aber nicht den Genuß des Bildes oder Musikstückes beeinträchtigen.

Anforderungen an eine Markierungsmethode:

Die Widerstandsfähigkeit ist reziprok zur Markierungsgröße: je größer das Wasserzeichen ist, je weniger kann dieses vor Zerstörung durch JPEG-Komprimierung geschützt werden.

Mögliche Methoden zum Einbetten von Wasserzeichen:

  1. Die Patchworkmethode: Eine Menge von Paaren von Bildpunkten (ai, bi) werden zufällig ausgewählt und die Helligkeit von ai um 1 erhöht, während die von Bi um 1 herabgesetzt wird. Bei n veränderten Punkten erhält man eine Differenz von 2n. Wird bei einer JPEG-Komprimierung eine Qualität von mehr als 75 % erhalten, kann man zu 85 % Wahrscheinlichkeit die eingebetteten Daten wieder herstellen.

  2. Das Bild wird mit Hilfe eines Zufallszahlengenerators in zwei Hälften geteilt. Bei einer Teilmenge wird die Helligkeit um k erhöht. k wird hierbei durch die Differenz zweier zufälliger Stichproben der zwei Teilmengen berechnet. Zur Überprüfung auf Wasserzeichen wird der Mittelwert der zwei Teilmengen berechnet. Ist er k, enthält die Datei ein Wasserzeichen, ist k = 0 dann nicht. Diese Art Wasserzeichen bleibt allerdings nur bei einer JPEG-Komprimierung mit einer Qualität von mindestens 90 % erhalten. k wird der Level der Markierung genannt. Wird das Bild erst in Blöcke zerlegt und k für jeden Block bestimmt, kann das Wasserzeichen größer und widerstandsfähiger sein. Der Level für jeden Block wird anhand einer zweiten JPEG-Kopie minderer Qualität berechnet.

    Die beiden Methoden beeinflussen sich kaum gegenseitig, deshalb kann man beide Methoden auf ein und dasselbe Bild anwenden, damit kann die Größe des Wasserzeichens verdoppelt werden. Wird zuerst DCT und dann die Patchworkmethode auf die Datei angewendet, wird das Wasserzeichen nicht sichtbar sein. Selbst bei einer JPEG-Komprimierung bei 75 % kann das Wasserzeichen noch gut wieder extrahiert werden.

    Eine weitere Möglichkeit ein Wasserzeichen in ein Bild einzufügen ist das Einarbeiten eines Wasserzeichens in eine der drei Farbschichten einzuarbeiten. Es wird also nur sichtbar, wenn man die Farbschichten getrennt betrachtet, aber nicht, wenn man das ganze Bild ansieht.

    Kommerzielle Produkte zum Einbetten von Wasserzeichen: PictureMarc (incl. SpiderMarc) von der Firma DigiMarc, die digitale DNA der kalifornischen Firma Solena, das Programm von Liquid Audi, SureSign von Signum Technologies und EIKON Amark, TigerMark von NEC, oder SysCoP (TM) des Frauenhofer Instituts für Computergraphik in Darmstadt. Im Audiobereich: Musicode von ARIS Technologies (Cambridge, MA)

    Jedes Programm arbeitet mit einer anderen Methode, so daß man die Wasserzeichen untereinander nicht lesen kann. Die Algorithmen dazu werden natürlich nicht offengelegt, da man sonst die Wasserzeichen damit wieder aus den Trägerdateien herauslöschen könnte.

    Aber es gibt bereits Programme wie StirMark oder unZign, die elektronische Wasserzeichen in Bildern völlig zerstören, ohne dabei das Bild selbst zu beeinträchtigen. Diese Programme können bislang die Wasserzeichen aller kommerziellen Programme entfernen.

    In dem Bereich der digitalen Wasserzeichen wird sich deshalb noch sehr viel verändern müssen, ehe man damit wirksam arbeiten kann.