Wavelet-basierte digitale Wasserzeichen

Aus LinuxUser 12/2010

Wavelet-basierte digitale Wasserzeichen

© gerard79, sxc.hu

Perfekte Welle

Einfache digitale Wasserzeichen lassen sich sehr leicht aus Dateien entfernen. Wollen Sie Bilder dauerhaft manipulationssicher markieren, müssen Sie zu ausgefeilteren Algorithmen greifen.

Wasserzeichen kennt man in der physischen Welt vorrangig von Geldscheinen oder teuren Papieren. Sie fungieren als quasi unsichtbare Echtheitsnachweise, die nur bei genauer Betrachtung auffallen. Die unmittelbare Verbindung von Wasserzeichen im Papier garantiert hier den Wert etwa der Banknote. In der digitalen Welt haben Wasserzeichen zwar ein Pendant, bedeuten dort allerdings etwas grundlegend Anderes.

Zum einen hat es sich in den letzten Jahren eingebürgert, kleine, manchmal unscheinbare, manchmal auffallende Schriftzüge (oft Copyright-Vermerke oder URLs) auf Bildern so zu bezeichnen, selbst wenn man sie immer und ohne besondere Hilfsmittel sehen kann und sie das Bild stören. Bringt der Urheber solche Vermerke am Rand an, reicht es, das Bild geringfügig zu beschneiden, um den Vermerk wieder zu entfernen. Genauso einfach ist es mit in den Metadaten eingebrachten Anmerkungen: Auch sie lassen sich mit minimalem Aufwand wieder löschen.

Zum anderen gibt es aber auch vollständig unsichtbare digitale Wasserzeichen [1], die man in Bilder oder auch Audio- und Video-Dateien einbettet und die sich nur mit speziellen Programmen wieder auslesen lassen. Das Stichwort heißt hier DRM. Bei Wasserzeichen gibt es dazu zwei unterschiedliche Ansätze: “Copyright Protection” bettet immer das gleiche dem Urheber zugeordnete Wasserzeichen ein und kennzeichnet so dessen Urheberschaft, “Fingerprinting” geht vom Käufer der Dateien aus und verwendet ein ihm zugeordnetes Wasserzeichen. Damit kann der Urheber später feststellen, wer die möglicherweise unberechtigt weitergegebenen Dateien zur Verfügung gestellt hat.

Methodik

Zum Einbringen der Wasserzeichen kann man eine versteckte Nachricht (den Copyright-Vermerk) unsichtbar mittels Steganographie in die Datei einzubetten ([2],[3]). Das eigentlich zum Verschleiern der Existenz einer Nachricht gedachte Verfahren ist jedoch “fragil”: Jede Manipulation an der Trägerdatei zerstört die versteckte Nachricht und damit die Signatur. Es reicht dabei schon aus, das Bild geringfügig zu skalieren oder die Helligkeit zu verändern. Derartige Wasserzeichen kommen daher vorrangig zum Einsatz, um die Unverfälschtheit einer Datei nachzuweisen.

Digitale Wasserzeichen für Copyright-Vermerke müssen dagegen “robust” sein, also bei den eben genannten und weiteren Manipulationen wenigstens teilweise erhalten bleiben [4]. Dafür hat sich die Methode der auf Wavelets [5] basierenden Wasserzeichen als geeignet erwiesen. Als Wavelets bezeichnet man mathematische Funktionen, die insbesondere in der Signal- und Bildbearbeitung weite Anwendung finden.

Die im Folgenden vorgestellten Programme implementieren eine ganze Reihe von Wavelet-Wasserzeichen-Algorithmen mit unterschiedlichen Schwerpunkten, verschiedener Robustheit [6] gegenüber den Manipulationen sowie mit variierenden Rechenzeit- und Ressourcenverbrauch. Sie stammen alle aus einer Programmsammlung des Computerwissenschaftlers Peter Meerwald [7] und sind nicht als fertige Produkte anzusehen, sondern wurden für Studienzwecke entwickelt.

Daher arbeiten sie in der hier verwendeten Form nur mit Graustufenbildern, was aber keine wesentliche Einschränkung darstellt, da sich beliebige Bilder automatisch in diese umwandeln (“decompose”) und später – nach dem Signieren eines oder mehrerer Teile – wieder zu einem Farbbild montieren lassen (“compose”). Auch müssen die Bildgrößen Vielfache von 8 Pixeln sein. Es existieren derzeit nur über Optionen gesteuerte Befehlszeilenvarianten, die sich aber einfach anwenden lassen und stabil laufen.

Um die Programme aus Peter Meerwalds Sammlung zu verwenden, laden Sie das Programmarchiv  [8] herunter und entpacken es. Nach einem Wechsel in das neu entstandene Verzeichnis wm_source übersetzt make die Quelltexte. In den Verzeichnissen Meerwald und Fotopoulos entstehen nun die Programme, die Sie anschließend manuell nach /usr/local/bin/ verschieben. Dort finden sich auch unkomprimierte Manpages (gehören nach /usr/local/man/man1/) für die Programme.

Theorie …

Die Programme nutzen alle verschiedene Algorithmen und gliedern sich in vier grundsätzliche Typen:

  • gen_algorithmus_sig – erzeugt Signaturen, speichert sie in einer Datei
  • wm_algorithmus_d – bettet Signaturen in Bilder ein
  • wm_algorithmus_e – extrahiert Signaturen aus Bildern
  • cmp_algorithmus_sig – überprüft originale und aus dem Bild ausgelesene Signatur und zeigt so das noch vorhandene Maß an Authentizität

Nach dem Aufspalten der Farbbilder in drei Graustufenbilder (R-, G- und B-Kanal) versehen Sie diese einzeln – oder zumindest eines von ihnen – mit einer zuvor automatisch generierten Signatur. Die Art der Signatur hängt von gewählten Verfahren ab; ein Generatorprogramm erzeugt sie und speichert sie zur späteren Authentifikation in einer Datei. Alle gen_*-Programme nutzen dazu einen Pseudo-Zufallszahlengenerator, wodurch bei jedem Aufruf eine neue Signatur entsteht.

Anschließend bringt ein zweites Programm die Daten in die Bilddatei ein. Normalerweise erfolgt das, ohne sichtbare Artefakte zu hinterlassen. Abbildung 1 zeigt, was bei einer ungeschickten Wahl der Parameter geschieht. Allerdings sind diese Fehler unproblematisch, da sie sich zum einen mit anderen Parametern leicht vermeiden lassen und die Signatur zum anderen auch nach dem Entfernen der Artefakte – in Gimp etwa durch Verwischen oder Klonen – weitestgehend erhalten bleibt (siehe auch Kasten “Original oder Fälschung?”).

Abbildung 1: Im Testbild zeigen sich Artefakte durch die eingebrachte Signatur (in der Ausschnittsvergößerung im Detail). Normalerweise bleiben die durch eine Signatur hervorgerufenen Veränderungen unsichtbar.

Abbildung 1: Im Testbild zeigen sich Artefakte durch die eingebrachte Signatur (in der Ausschnittsvergößerung im Detail). Normalerweise bleiben die durch eine Signatur hervorgerufenen Veränderungen unsichtbar.

"Abbildung

Original oder Fälschung?

Bei Bildern, die vollständig und daneben auch im Original vorliegen, benötigt man zur Überprüfung eigentlich keine Wasserzeichen. Hier genügt es, Original und zu untersuchendes Bild als zwei Ebenen in Gimp zu laden und mit einem geeigneten Ebenenmodus (etwa Faser extrahieren) zu vergleichen. Gimp stellt dann die Unterschiede pixelgenau dar (Abbildung 2). Unterscheiden sich die beiden Bilder aufgrund von Manipulationen, zeigt diese Methode viel mehr Unterschiede, als menschliche Augen tatsächlich wahrnehmen. Wasserzeichen in den Originalbildern helfen hier zu beweisen, dass ein manipuliertes Bild aus einem (bekannten und signierten) Original entstanden ist.

… und Praxis

Ein praktisches Beispiel anhand des Koch-Algorithmus verdeutlicht die Vorgehensweise. Als Beispielbild dient, wie so oft in der Bildbearbeitung, die Lena. Das kleine Skript aus Listing 1 fasst die erforderlichen Schritte zusammen. Sie rufen es mit dem Namen des zu bearbeitenden Bilds als Parameter auf.

Zunächst erstellen es mittels gen_koch_sig die Signatur in der .sig-Datei (Zeile 8). wm_koch_e bettet diese in das Bild ein (Zeile 12), welches anschließend ein Viewer anzeigt (Zeile 17). Im Beispiel kommt EoG zum Einsatz, der wie viele andere Bildbetrachter anschließend ein externes Programme wie Gimp starten kann, um das signierte Bild zu bearbeiten. Nach dem Speichern zeigt es der Viewer immer noch, mittels [R] aktualisieren Sie die Darstellung.

Nach dem Beenden des Viewers geht es mit der Extraktion (wm_koch_d) der nun veränderten Signatur weiter (Zeile 20). Im letzten Schritt vergleicht cmp_koch_sig diese mit dem Original (Zeile 24). Eine hohe Übereinstimmung von mehr als 70 Prozent (abhängig vom gewählten Algorithmus) weist auf die Echtheit hin, in identischen Bildern beträgt die Übereinstimmung 100 Prozent.

Listing 1

#! /bin/bash -e
echo "Bild: $1"
Bild=${1%%.pgm}
echo "${Bild}"
# Signatur erstellen
gen_koch_sig -l 55 >"${Bild}-koch.sig" "${Bild}.pgm"
echo "Signatur erzeugt"
# Signatur einbetten
wm_koch_e -s "${Bild}-koch.sig" -o "${Bild}-koch.pgm" "${Bild}.pgm"
echo "Signatur eingebettet"
echo "Ausgabebild: ${Bild}-koch.pgm"
# Signiertes Bild im Viewer zeigen
eog "${Bild}-koch.pgm"
# Signatur extrahieren
wm_koch_d -s "${Bild}-koch.sig" -o "${Bild}-koch-modify.sig" "${Bild}-koch.pgm"
echo "Signatur extrahiert"
# extrahierte Signatur mit Original vergleichen
cmp_koch_sig -s "${Bild}-koch.sig" "${Bild}-koch-modify.sig"
echo "Signaturen verglichen"

Hier sind dem Spieltrieb nun keine Grenzen mehr gesetzt. Zum Testen der Algorithmen gibt es eine einfache Methode: Vergleichen Sie einen unsignierten Teil (also einen, in dem keine Artefakte auftraten) aus dem Original dem selben Bereich aus dem signierten Bild. Die Übereinstimmungen in den Signaturen sollten gering ausfallen.

Der gebrochene Pfeil

Ein neuer Algorithmus zum Signieren und Aufspüren der Signaturen wurde im Rahmen des Wettbewerbs BOWS (“Break Our Watermarking System”, [9]) unter dem Namen BrokenArrows [10] entwickelt. Die Quelltexte für den BrokenArrows-Algorithmus laden Sie von der Website der Entwickler herunter [11]. Nach dem Auspacken des Archivs reicht ein make im src-Verzeichnis aus, um die Programme embed und detect zu erzeugen.

Um Farbbilder per BrokenArrows zu signieren, müssen Sie diese zunächst in Farbkanäle aufspalten. Besonders gut eignet sich dazu das L*a*b-Farbmodell, das neben einem Luminiszenz-Kanal zwei abstrakte Farbkanäle verwendet. Gimp bietet eine entsprechende Funktion im Farben-Menü unter Komponenten als Zerlegen an. Nach dem Signieren rekonstruieren Sie das Farbbild durch Wieder zusammenfügen.

Ähnlich, aber viel schneller geht es auf der Befehlszeile mit dem Imagemagick-Werkzeug convert. Es verfügt über die Optionen -separate (zerlegen) sowie -channel mit r, g und b für die Farbkanäle. Auf diese Weise erzeugen Sie mit Convert schnell PGM-Bilder. So extrahiert der Befehl

$ convert -channel g -separate Bild Bild-g.pbm

beispielsweise den Grün-Kanal aus dem Bild und speichert ihn in einer entsprechend benannten Datei. Umgekehrt setzt das Kommando

$ convert Bild-r.pbm Bild-g.pbm Bild-b.pbm -combine Bild.png<c>

das Bild aus den einzelnen Kanälen wieder zusammen und speichert das Resultat als PNG ab.

Danksagung

Der Autor bedankt sich bei Peter Meerwald, der die Programme entwickelt hat, für die vielen Informationen und schnellen Antworten auf alle Fragen rund um das Watermarking.

Glossar

DRM
Digital Rights Management. Oberbegriff für Verfahren zur Kontrolle der Nutzung digitaler Medien. Da solche Verfahren oft auch die Nutzung durch den Berechtigten stark einschränken, wird DRM oft treffender auch als Digital Restriction Methods apostrophiert.
Wavelets
Mittels dieser lassen sich komplexe Strukturen (“Signale”) in mehrere Ebenen ähnlicher Feinheit auftrennen. In der Bildbearbeitung kommen Wavelets bei der Rauschentfernung (“Wavelet Denoise”), beim Schärfen (“Wavelet Sharpen”), zum Entwickeln von RAW-Daten und für viele weitere Zwecke zum Einsatz.
Lena
Gebräuchliches Testbild für Bildverarbeitungsalgorithmen. Das Original ist das Centerfold des schwedischen Playmates Lena Söderberg aus der US-Playboy-Ausgabe vom November 1972. [12]

Infos

[1] Beispiel für unsichtbare Wasserzeichen: http://watermarking.sit.fraunhofer.de/Wasserzeichen/index.jsp

[2] Steganografie mit Outguess: Erik Bärwaldt, “Gut versteckt”, LU 11/2007, S. 94, https://www.linux-community.de/14367

[3] Phatch: Erik Bärwaldt, “Abgestempelt”, LU 09/2010, S. 46, https://www.linux-community.de/21720

[4] Wasserzeichen-Problematik: http://ig.cs.tu-berlin.de/oldstatic/w99/1332l501/ref1/wasserzeichen/

[5] Wavelets: http://de.wikipedia.org/wiki/Wavelet

[6] Vergleich unterschiedlicher Algorithmen: http://www.cosy.sbg.ac.at/~pmeerw/Watermarking/WaveletRobustheit/wm_wavelet_robustheit.ps.gz

[7] Wavelet-Wasserzeichen unter Linux: http://www.cosy.sbg.ac.at/~pmeerw/Watermarking/

[8] Quelltext zu den Programmen: http://www.cosy.sbg.ac.at/~pmeerw/Watermarking/source/wm_source.tar.gz

[9] BOWS: http://bows2.gipsa-lab.inpg.fr/

[10] BrokenArrows-Algorithmus: http://www.hindawi.com/journals/is/2008/597040.html

[11] BrokenArrows-Quellcode: http://bows2.gipsa-lab.inpg.fr/BrokenArrowsV1_1.tgz

[12] Lena: http://www.lenna.org

LinuxUser 12/2010 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

2 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Pollewetzer
4 Jahre her

So ein BESCH…. Design! – Was soll das hellgrau auf creme! und dann auch noch SOO klein! – Für einen Mensch mit etwas ermüdeter Sehkraft ist das bereits eine Herausforderung! Was manch einer da nur für Ideen herumspinnen mag???

Dreisam
4 Jahre her
Reply to  Pollewetzer

Wo ist denn da was hellgraues auf creme? Falls die Bilder gemeint sind: Das ist ja gerade Sinn der Sache, dass man das Wasserzeichen *nicht* deutlich sieht.

Nach oben