Zurück zum Blog
security||9 Min. Lesezeit

Ich habe eine geheime Nachricht in einem Katzenfoto versteckt und sechs Monate lang hat es niemand bemerkt

AR
Aral Roca

Ersteller von Kitmul

Eine Katze blickt direkt in die Kamera; dieses Bild enthält eine versteckte Nachricht die mit LSB-Steganographie eingebettet würde
Eine Katze blickt direkt in die Kamera; dieses Bild enthält eine versteckte Nachricht die mit LSB-Steganographie eingebettet würde

Letztes Jahr bin ich bei einem CTF auf eine Steganographie-Aufgabe gestoßen, bei der ich zwei Stunden lang ein Katzenfoto angestarrt habe. Das Bild sah völlig normal aus; 800x600 Pixel einer orangefarbenen Tigerkatze, die auf einer Tastatur saß. Keine Metadaten-Anomalien, keine angehängten ZIP-Dateien, keine offensichtlichen Artefakte. Die Flagge versteckte sich in den niederwertigsten Bits des Blaukanals. Nach der Extraktion war die Nachricht 43 Zeichen lang. Die Katze hatte sich kein bisschen verändert.

Diese Erfahrung hat mich in einen Kaninchenbau geführt. Steganographie ist eines dieser Themen, die nach Hacker-Fiktion aus Filmen klingen, bis man es tatsächlich ausprobiert. Dann merkt man, dass es einfach Mathematik ist; und überraschend einfache Mathematik dazu.

Was Steganographie wirklich ist

Steganographie ist die Praxis, Daten in anderen Daten zu verbergen, sodass niemand von der Existenz der versteckten Daten weiß. Das unterscheidet sich grundlegend von Kryptographie. Verschlüsselung macht eine Nachricht unlesbar; Steganographie verbirgt die Nachricht so, dass niemand überhaupt danach sucht.

Dieser Unterschied ist entscheidend. Eine verschlüsselte Datei schreit förmlich "Ich habe Geheimnisse!". Ein Stego-Bild sagt nichts. Es ist ein Foto einer Katze. Oder eines Sonnenuntergangs. Oder Ihres Firmenlogos. Die beste Steganographie erzeugt Trägerdateien, die statistisch nicht von unveränderten Originalen zu unterscheiden sind.

Das Wort selbst stammt aus dem Griechischen: steganos (bedeckt) + graphein (schreiben). Die Technik gibt es seit dem antiken Griechenland; Herodot berichtete von einem Mann, der den Kopf eines Sklaven rasierte, eine Nachricht auf die Kopfhaut tätowierte, wartete bis die Haare nachgewachsen waren, und den Sklaven dann als Boten schickte. Seitdem sind wir zu Pixeln übergegangen.

Wie LSB-Kodierung funktioniert

Die gängigste Technik der Bildsteganographie ist die Least Significant Bit (LSB)-Kodierung. Hier ist der Grund, warum sie funktioniert.

Ein Pixel in einem 24-Bit-RGB-Bild hat drei Farbkanäle, die jeweils als 8-Bit-Wert (0-255) gespeichert werden. Das letzte Bit jedes Bytes; das niederwertigste Bit; trägt die kleinstmögliche Änderung zum Farbwert bei. Sein Umschalten ändert den Kanalwert um genau 1. Der Unterschied zwischen RGB(142, 87, 203) und RGB(143, 87, 202) ist für das menschliche Auge unsichtbar.

Man nimmt also seine geheime Nachricht, wandelt sie in Binärcode um und ersetzt die LSBs der Bildpixel durch die Nachrichtenbits. Jedes Pixel liefert 3 Bits Speicherplatz (eines pro Kanal). Ein 1920x1080-Bild hat 2.073.600 Pixel; das sind 6.220.800 Bits Speicherplatz, also rund 760 KB an versteckten Daten. In der Praxis würde man deutlich weniger nützen, um einer Erkennung zu entgehen, aber die theoretische Kapazität ist enorm.

Hier ist eine minimale Python-Implementierung zur Veranschaulichung:

from PIL import Image
import numpy as np

def text_to_bits(text):
    """Convert text to a binary string with a null terminator."""
    bits = ''.join(format(ord(c), '08b') for c in text)
    bits += '00000000'  # null terminator to mark end of message
    return bits

def hide_message(image_path, message, output_path):
    """Hide a message in the LSBs of an image."""
    img = Image.open(image_path).convert('RGB')
    pixels = np.array(img)
    flat = pixels.flatten()

    bits = text_to_bits(message)
    if len(bits) > len(flat):
        raise ValueError(f"Message too long: need {len(bits)} bits, have {len(flat)}")

    for i, bit in enumerate(bits):
        # Clear the LSB, then set it to our message bit
        flat[i] = (flat[i] & 0xFE) | int(bit)

    stego = flat.reshape(pixels.shape)
    Image.fromarray(stego.astype('uint8')).save(output_path, 'PNG')
    print(f"Hidden {len(message)} chars in {len(bits)} bits ({len(bits)/len(flat)*100:.4f}% of capacity)")

def extract_message(image_path):
    """Extract a hidden message from the LSBs of an image."""
    img = Image.open(image_path).convert('RGB')
    flat = np.array(img).flatten()

    bits = ''.join(str(b & 1) for b in flat)
    chars = []
    for i in range(0, len(bits), 8):
        byte = bits[i:i+8]
        if byte == '00000000':
            break
        chars.append(chr(int(byte, 2)))
    return ''.join(chars)

# Usage
hide_message('cat.png', 'The flag is CTF{hidden_in_plain_sight}', 'stego_cat.png')
print(extract_message('stego_cat.png'))

Die entscheidende Operation steht in Zeile 18: (flat[i] & 0xFE) | int(bit). Das bitweise UND mit 0xFE (11111110 im Binärsystem) loescht das LSB, und das ODER setzt es auf das jeweilige Bit unserer Nachricht. Das ist der gesamte Trick. Alles andere ist nur die Umwandlung von Text in Bits und das Iterieren über Pixel.

Eine Nachricht Schritt für Schritt verstecken

Falls Sie kein Python schreiben möchten; oder an einem Rechner sitzen, auf dem PIL nicht installiert werden kann; erledigt das Steganographie-Tool auf Kitmul dasselbe direkt im Browser. Kein Hochladen, keine Serververarbeitung. Das Bild verlässt niemals Ihr Gerät.

So funktioniert der Ablauf:

  1. Laden Sie ein Trägerbild hoch. PNG eignet sich am besten, da es verlustfrei ist. JPEG-Komprimierung zerstört Ihre versteckten Bits; dazu später mehr.
  2. Geben Sie Ihre geheime Nachricht ein. Das Tool zeigt Ihnen die verfügbare Kapazität basierend auf den Bildabmessungen an.
  3. Laden Sie das Stego-Bild herunter. Es sieht identisch mit dem Original aus. Pixel für Pixel sind die Unterschiede nicht wahrnehmbar.

Zum Extrahieren wechseln Sie in den Aufdecken-Modus, laden das Stego-Bild hoch, und der versteckte Text erscheint.

Das Steganographie-Tool im Verstecken-Modus mit Upload-Bereich, Eingabefeld für geheime Nachrichten und Download-Button
Das Steganographie-Tool im Verstecken-Modus mit Upload-Bereich, Eingabefeld für geheime Nachrichten und Download-Button

Die gesamte Operation läuft clientseitig über die Canvas-API und Typed Arrays. Ihre geheime Nachricht berührt nie eine Netzwerkverbindung. Das ist wichtig; wenn Sie sensible Informationen verbergen, würde das Senden an einen Drittanbieter-Server den Zweck zunichtemachen.

Erkennung und Steganalyse; wie man NICHT auffliegt

Steganalyse ist die Kunst, Steganographie zu erkennen, und sie ist ausgefeilter als man vielleicht denkt.

Visuelle Inspektion erkennt keine LSB-Kodierung. Aber statistische Analyse schön. Der einfachste Test ist eine Chi-Quadrat-Analyse der Pixelwertverteilungen. In einem natuerlichen Bild haben Pixelwerte eine charakteristische Verteilung. LSB-Einbettung glaettet Wertepaare (z.B. werden 142 und 143 gleich wahrscheinlich), was als Anomalie im Histogramm sichtbar wird.

Tools wie StegExpose und OpenStego enthalten Erkennungsmodule. In CTF-Wettbewerben sind zsteg und steghide die bevorzugten Extraktionswerkzeuge.

Hier sind praktische Tipps, damit Ihr Stego-Bild einer Prüfung standhält:

  • Nützen Sie weniger Kapazität. Wenn Sie Daten nur in 10-20% der verfügbaren Pixel einbetten, wird die statistische Erkennung deutlich schwieriger. 100% Kapazitätsauslastung ist ein forensisches Warnsignal.
  • Randomisieren Sie die Pixelauswahl. Statt sequentiell ab Pixel 0 zu schreiben, verwenden Sie eine pseudozufällige Sequenz mit einem Passwort als Seed, um festzulegen, welche Pixel Daten tragen. So werden die Modifikationen gleichmäßig verteilt.
  • Wählen Sie unruhige Bilder. Fotos mit viel Textur, Rauschen und Farbvariation verbergen LSB-Änderungen besser als glatte Farbverläufe oder einfarbige Flächen. Ein Foto eines Waldbodens schlägt ein Foto einer weißen Wand.
  • Verwenden Sie niemals JPEG als Träger. JPEGs verlustbehaftete Komprimierung verändert Pixelwerte während der Kodierung. Ihre versteckten Bits werden beim Speichern des Bildes zerstört. Verwenden Sie für LSB-Steganographie immer PNG, BMP oder TIFF.
  • Entfernen Sie Metadaten vor dem Teilen. EXIF-Daten, die zeigen, dass das Bild mit einem Steganographie-Tool bearbeitet würde, sind ein offensichtlicher Hinweis.

Wann man Steganographie mit Verschlüsselung kombinieren sollte

Steganographie und Verschlüsselung lösen unterschiedliche Probleme, und der stärkste Ansatz nutzt beides. Hier ist der Grund.

Wenn ein Angreifer vermutet, dass Ihr Bild versteckte Daten enthält, und die LSBs erfolgreich extrahiert, sieht er Ihre Klartextnachricht. Spiel vorbei. Aber wenn Sie die Nachricht vorher verschlüsseln; zum Beispiel mit AES-256; sehen die extrahierten Bits wie zufälliges Rauschen aus. Der Angreifer kann nicht unterscheiden, ob er eine Nachricht gefunden hat oder nur normale Bilddaten.

Der praktische Ablauf:

  1. Verschlüsseln Sie Ihre Nachricht mit einer starken symmetrischen Chiffre.
  2. Verstecken Sie den Chiffretext im Bild mittels LSB-Kodierung.
  3. Teilen Sie das Stego-Bild öffentlich.
  4. Teilen Sie den Entschlüsselungsschlüssel über einen separaten Kanal.

Das ergibt zwei Schutzschichten: Die Nachricht ist sowohl verborgen (Steganographie) als auch unlesbar (Verschlüsselung). Ein Angreifer müsste sowohl die versteckten Daten erkennen als auch die Verschlüsselung knacken; ein deutlich schwierigeres Problem als jedes für sich allein.

Kitmuls Sicherheits- und Kryptographie-Tools umfassen AES-Verschlüsselung, Hash-Generatoren und weitere Werkzeuge, die das Steganographie-Tool für genau diesen Workflow ergänzen.

Praxisbeispiele aus der realen Welt

Steganographie ist nicht nur ein CTF-Partytrick. Sie hat legitime und wichtige Anwendungen.

Digitale Wasserzeichen. Verlage, Fotografen und Medienunternehmen betten unsichtbare Wasserzeichen in Bilder ein, um unautorisierte Verbreitung nachzuverfolgen. Wenn ein geleaktes Bild auftaucht, identifiziert das eingebettete Wasserzeichen, welcher Empfänger es weitergegeben hat. So verfolgen mehrere große Filmstudios ihre Screener-Kopien.

Whistleblowing und Zensurresistenz. In Ländern mit starker Internetüberwachung ermöglicht Steganographie Aktivisten, Informationen über unschuldig wirkende Bilder in sozialen Medien zu teilen. Das Bild passiert die Prüfung durch automatisierte Inhaltsfilter; die versteckte Nachricht erreicht ihr Zielpublikum.

Verdeckte Kommunikation. Geheimdienste setzen Steganographie mindestens seit den frühen 2000er-Jahren ein. Die FBI-Verhaftung russischer Spione im Jahr 2010 (das "Illegals Program") offenbarte, dass diese verschlüsselte Nachrichten in Bildern auf öffentlichen Websites eingebettet hatten.

CTF-Aufgaben. Capture-The-Flag-Wettbewerbe lieben Steganographie, weil sie ein anderes Kompetenzspektrum testet als Standard-Kryptoaufgaben. Man muss zunächst erkennen, dass Steganographie überhaupt eingesetzt würde, bevor man mit der Extraktion beginnen kann. Gängige CTF-Stego-Techniken umfassen LSB-Kodierung, angehängte Daten, Palettenmanipulation in GIF-Dateien und Verbergen im Audiospektrum.

Eigentumsnachweis. Kuenstler und Content-Ersteller können Urheberrechtsinformationen oder Eigentumsnachweise direkt in ihre Werke einbetten. Im Gegensatz zu sichtbaren Wasserzeichen beeinträchtigen diese nicht die visuelle Qualität des Werks.

Ein System linearer Gleichungen auf Papier; die Mathematik hinter Steganographie ist einfacher als sie aussieht
Ein System linearer Gleichungen auf Papier; die Mathematik hinter Steganographie ist einfacher als sie aussieht

Die Grenzen der Pixelkodierung

LSB-Steganographie hat reale Einschränkungen, die man verstehen sollte. Das Trägerbild muss verlustfrei sein; jeder verlustbehaftete Komprimierungsschritt (JPEG, verlustbehaftetes WebP) wird eingebettete Daten beschädigen. Die Nachrichtenkapazitaet skaliert mit den Bildabmessungen, aber die Nutzung von mehr als etwa 15-20% der Kapazität macht das Bild anfällig für statistische Erkennung. Und die Technik verbirgt nur Daten; sie schützt sie nicht vor der Extraktion durch jemanden, der weiß, wonach er suchen muss.

Für die meisten praktischen Zwecke funktioniert Bildsteganographie am besten als eine Schicht in einer Defense-in-Depth-Strategie. Verbergen Sie die Nachricht, verschlüsseln Sie den Inhalt und nützen Sie einen sicheren Kanal, um den Schlüssel zu teilen. Keine einzelne Technik ist kugelsicher, aber die Kombination erhöht die Hürde erheblich.

Probieren Sie es selbst aus

Das Steganographie-Tool auf Kitmul ermöglicht es Ihnen, Nachrichten in PNG-Bildern direkt im Browser zu verstecken und aufzudecken. Alles läuft clientseitig; keine Daten werden hochgeladen, keine Konten erforderlich, keine Limits. Laden Sie ein Bild hoch, geben Sie eine Nachricht ein, laden Sie das Ergebnis herunter. Versuchen Sie dann, es zu extrahieren, um den Roundtrip zu überpruefen.

Wenn Sie sich für Sicherheits- und Datenschutz-Tools interessieren, umfasst die Sicherheits- und Kryptographie-Sammlung Hash-Generatoren, Verschlüsselungs-Tools, Passwortgeneratoren und mehr; alles läuft lokal in Ihrem Browser.


Die gesamte Verarbeitung läuft lokal in Ihrem Browser. Keine Bilder oder Nachrichten werden an einen Server gesendet. Das Tool ist kostenlos, offen und erfordert keine Konten oder Limits.

Diesen Artikel teilen

Newsletter

Erhalte Produktivitätstipps und Neue Tools Zuerst

Schließe dich Machern und Entwicklern an, die Datenschutz schätzen. Jede Ausgabe: neue Tools, Produktivitäts-Hacks und Updates — kein Spam.

Prioritätszugang zu neuen Tools
Jederzeit abbestellen, ohne Rückfragen