Digitale visuelle Kryptographie



  • Original in meinem Blog

    Als ich das erste Mal mit visueller "Kryptographie" in Kontakt kam, war ich noch ein kleines Kind. Ich hatte ein Detektiv-Buch, in dem Textzeilen nur gut gelesen werden konnten, wenn man eine rote Folie in Form einer Taschenlampe davor hielt. Die Zeilen waren in einem schwachen grau vor einem roten Zahlen-/Zeichenmeer geschrieben. Mit großer Anstrengung konnte man den Text mit bloßem Auge lesen, aber mit der Folie, die das rote Zahlenmeer verschwinden ließ, war es wesentlich besser.

    Natürlich ist das keine echte Kryptographie. Dennoch hat es rein von der Mechanik viel mit der klassischen und analogen visuellen Kryptographie gemein:

    Animiertes Beispiel einer Entschlüsselung

    Es wird immer noch aufeinander geschoben, diesmal aber bedruckte Folien, die zusätzlich sehr genau ausgerichtet werden müssen, um zu sehen, was verschlüsselt wurde. Tatsächlich handelt es sich um eine echte Verschlüsselung, die vergleichsweise sicher ist, da ein One-Time-Pad verwendet wird. Hat man nur einen der beiden Teile, ist es unmöglich auf den "Klartext" zu schließen (halbwegs gute Zufallszahlen beim Verschlüsseln vorausgesetzt). Wie die Verschlüsselung genau funktioniert, will ich hier nicht erklären. kryptografie.de erläutert das Verfahren sehr ausführlich und bietet auch einen Online-Dienst zum Generieren von Folien an.

    Zum Entschlüsseln dieser Bilder braucht man nichts weiter als eine Person, die Folien aufeinander schieben kann. Keinen PC oder Taschenrechner. Das ist der große Vorteil, vor allem für Demonstrationszwecke.

    Diesen Vorteil möchte ich nun aber wieder nehmen. Ich hatte das Ziel, eine Methode zu entwickeln, die farbige digitale Bilder am PC visuell verschlüsselt. Ich wollte das Ergebnis sichtbar machen, weshalb eine direkte Verschlüsselung der Bilddatei keine Option war. Ausdrucken und Übereinanderlegen erschien ebenfalls nicht praktikabel.


    Farbige Bilder sind allein deshalb schwieriger zu handhaben, da es (bei RGB-kodierten Bildern) drei zu verschlüsselnde Werte pro Bildpunkt gibt: R, G und B, also rot, grün und blau.

    Meine erste Idee einer Verschlüsselungsmethode war eine recht simple und kryptographisch auch sehr fragwürdige:

    Gehe das Bild von links nach rechts, von oben nach unten, Pixel für Pixel durch und hole die Werte der einzelnen Farben. Mache das gleiche mit dem darauffolgenden Pixel. Verrechne die jeweils passenden Werte binär mit XOR, also R1⊕R2R_1 \oplus R_2R1R2, G1⊕G2G_1 \oplus G_2G1G2 und B1⊕B2B_1 \oplus B_2B1B2 und speichere das Ergebnis in den aktuellen Pixel.

    Hier eine Grafik zur Veranschaulichung:

    Beim letzten Pixel kommt das Fünkchen Kryptographie ins Spiel. Ich erfinde einen letzten Pixel. Dadurch, dass er nicht gespeichert wird, eignet er sich als Passwort, denn nur mit ihm lassen sich die Farben aller vorherigen Pixel korrekt wiederherstellen. Geht man von 8-Bit pro Farbe aus, können diese jeweils die Werte 0 bis 255 annehmen. Dadurch ergeben sich theoretisch 256³, also 16.777.216 mögliche Passwörter. Diese sind in der Praxis aber in sehr kurzer Zeit durchprobiert, die Methode ist also schon deshalb fragwürdig.

    Betrachtet man eine verschlüsselte Variante, wird aber noch mehr ersichtlich. Hier das gerade gezeigtes Katzenbild mit dem Passwort (35,68,201) nach "Snakeshift":

    Die Form der Katze ist weiterhin gut zu erkennen und auch die Relationen der Farben zueinander sind noch vollständig erhalten (die XOR-Operation hebt sie sogar regelrecht hervor - größere Farbunterschiede zum nächsten Pixel erscheinen heller). Mit einem gut geratenen Passwort kann man das Bild immerhin etwas dem Original näher bringen. Hier mit (25, 50,250) versucht:

    Zum sicheren Verschlüsseln eines Bildes taugt dieses Verfahren natürlich nur bedingt, eher als optischer Effekt. Es lassen sich lediglich die Originalfarben etwas verschleiern.

    Also zurück zum Bekannten: Das One-Time-Pad. Beim One-Time-Pad ist das Passwort immer exakt genauso lang wie der zu verschlüsselnde Text. Zunächst verschlüsselte ich jeden Pixel mit einer Zahl.

    Obiges Katzenbild hat die Ausmaße 400x267 Pixel. Insgesamt sind das 106.800 Pixel. Für jedes dieser Pixel ließ ich eine Zufallszahl (ZZZ) generieren und verrechnete sie mit den drei Farbwerten. Diesmal addierte ich: R1+Zmod256R_1+Z mod 256R1+Zmod256, G1+Zmod256G_1+Z mod 256G1+Zmod256 und B1+Zmod256B_1+Z mod 256B1+Zmod256. Das Ergebnis sieht schon etwas vielversprechender aus:

    Das Passwort lässt sich als schwarz-weiß-Bild mit selbiger Größe darstellen:

    Betrachtet das verschlüsselte Bild genauer, kann man sehr leicht Umrisse erkennen. Manche Teile scheinen aus eher schwarz-weißem Rauschen zu bestehen, andere sind eher farbig. Die Katze lässt sich auf jeden Fall deutlich ausmachen. Das Problem: Dadurch, dass für jeden Pixel nur eine Zufallszahl verwendet wurde, wurden nicht die Farben, sondern nur die Helligkeit der Pixel verschlüsselt. Nur durch zufällige Überläufe einer oder mehrerer Farben beim Verschlüsseln eines Pixels, entsteht buntes Rauschen. Ist ein Pixel im Original weiß, grau oder schwarz, ist auch der verschlüsselte Pixel monochrom.

    Eine Kryptoanalyse könnte deshalb wie folgt ablaufen:

    Nehme von jedem Pixel den rot-Wert und reduziere ihn um sich selbst. Reduziere dann die beiden anderen Farbwerte ebenfalls um diesen Wert.

    Bsp: (45, 76, 201) →\rightarrow (0, 29, 156). Auf das verschlüsselte Bild angewendet (ein Ergebnis für jede Farbe):

    So kann viel vom vorher reingerechneten Passwort wieder eliminiert werden. Zwar erhält man definitiv nicht das Originalbild zurück, doch es genügt, um teilweise auch sehr feine Strukturen erkennen zu können. Hier alle drei Bilder kombiniert:


    Um tatsächlich ein echtes One-Time-Pad zu erhalten, müssen 3 Zufallszahlen für jeden Pixel verwendet werden. Tut man das, erhält man das folgende Bild:

    320.400 Zufallszahlen sind nun mit dem Bild verrechnet. Jegliche Strukturen sind aufgehoben. Das Passwortbild ist nicht mehr vom verschlüsselten Bild zu unterscheiden:

    Eine Kryptoanalyse nach oben genanntem Schema läuft daher auch komplett ins Leere:


    Interessanterweise lässt sich durch eine visuelle Darstellung von klassischen Betriebsarten symmetrischer Blockchiffren ebenfalls leicht zeigen, wie unsicher sie sind. Ange Albertini und Jean-Philippe Aumasson haben das für ECB, CTR und CBC getan:


    Insgesamt sollte die visuelle Darstellung von Verschlüsselungsmethoden zeigen, dass es vor allem bei größeren Datenmengen von großer Bedeutung ist, auf eine gute Verschlüsselung zu achten. Bestünde mein Bild nur aus wenigen Pixeln, könnte ich nicht auf einen Kontext schließen. Eine Katze erkennt allerdings jeder.


Anmelden zum Antworten