Asymmetrische Steganografie/Public-Key-Steganografie (kurz PKS)

Theorie der PKS

Optimal wäre die PKS in monolithischer Form: Die Information wird mit dem öffentlichen Schlüssel des Empfängers eingebettet und nur der Empfänger kann die Information mit seinem privaten Schlüssel extrahieren. In gleicher Weise funktioniert ja die Pulic-Key-Kryptografie schon seit den 90ern.

Die PKS benötigt man zur unauffälligen und nicht nachweisbaren Kontaktaufnahme und auch anschießender Kommunikation z. B. über anonyme Email-Accounts. Allein mit Public-Key-Kryptografie ist dies nicht zu erreichen, denn eine nur verschlüsselte Nachricht kann leicht gefunden werden.
Wichtig ist dies beispielsweise für Journalisten und Informantenschutz, denn auch schon die Information wann eine verschlüsselte Nachricht geschickt wurde, kann einen Informanten verraten! Zudem kann man auch aus der Größe einer verschlüsselten Nachricht Schlüsse ziehen; beispielsweise kann in einer kleinen verschlüsselten Nachricht keine große Nachricht untergebracht sein, sofern auch mit Kompression die unverschlüsselte Nachricht zu groß ist um hinein zu passen.
Die Praxis zeigt auch, das Staatsanwälte gerne in verschlüsselte Nachrichten etwas belastendes hineinphantasieren. Zudem gibt es Länder in denen wegen allgemeiner Zensur verschlüsselte Nachrichten nicht legal sind und auch dem Empfänger Probleme bereiten.
Zusätzlich gibt es Länder, die unterzeichnete internationalen Menschen- und Bürgerrechtsabkommen ignorieren und sogar schon den Besitz von einigen Informationen bestrafen; beispielsweise Nordkorea und England:
http://www.heise.de/tp/r4/artikel/26/26579/1.html
http://www.heise.de/tp/r4/artikel/26/26668/1.html
In solchen Ländern gibt es auch menschen- und bürgerrechtswidrige Gesetze, die zu einer Passwort-Herausgabe verpflichten können:
http://www.heise.de/newsticker/meldung/97050
Verstoßen wird in diesem Fall beispielsweise gegen den Rechtsgrundsatz "Accusare se nemo debet." (Niemand muss sich selbst belasten.), Bestandteil der bürgerlichen Rechte seit der römischen Antike, also rund 2000 Jahren. Festgeschrieben ist dieser Bestandteil der abendländischen Kultur auch im internationalen Recht, u. A. im Internationalen Pakt über bürgerliche und politische Rechte,
http://wayback.archive.org/web/20090603010329/http://www.uni-potsdam.de/u/mrz/un/int-bill/ipbprde.htm Artikel 14, Paragraph 3, Absatz g.
Veröffentlicht wurde er u. a. im Bundesgesetzblatt von 1973.
Die neueste Fassung und Liste der Unterzeichnerstaaten findet man unter http://www.ris.bka.gv.at/GeltendeFassung.wxe?Abfrage=Bundesnormen&Gesetzesnummer=10000627.

Mit PKS vermeidet man all diese Probleme.

Eine weitere Anwendung der PKS ist das Verstecken von Informationen zu verstecken ( Hiding Information Hiding, ISSN 0302-9743, and Information Hiding: 8th International Workshop, IH 2006, ISBN 978-3-540-74123-7, Page 161-171).

Praxis der PKS

Bisher ist noch kein Programm bekannt, das PKS realisiert; die bekannten Steganografie-Programme, z. B. steghide oder outguess, realisieren nur symmetrische Steganografie, also mit nur einem Schlüssel.
Bis es ein PKS-Programm gibt, muß man daher mit Workarounds arbeiten, also die PKS mit mehreren Programmen realisieren.

Neben den theoretischen Anforderungen an die PKS gibt es weitere, die erfüllt werden müssen um für Anwender akzeptabel zu sein. Die wichtigsten sind:

- Optional eine Kompression der Daten

- Nicht nachweisbare Stenanografie (deniable steganography).

Dies erreicht man durch Modularisierung: Ein Programm A wird für die optionale Kompression und sichere Verschlüsselung verwendet und ein Programm B für die Steganografie.
Hierbei muß man auf ein paar Details achten; die beiden wichtigsten sind: A muß Deniable Encryption (abstreitbare Verschlüsselung) verwenden: Die verschlüsselte Datei darf keinen unverschlüsselten Header oder ähnliches enthalten, denn das würde das Verschlüsselte verraten; es wäre von weißem Rauschen, beispielsweise dem Inhalt von /dev/urandom, unterscheidbar.

Vor der Verwendung der Träger-Datei für die Steganografie, meist eine Bild-Datei, sollte man sie von möglicherweise verräterischen Metadaten befreien oder diese Daten anpassen: http://netzreport.googlepages.com/versteckte_daten_in_jpeg_dateien.html.

Die Anwendung ist danach wie folgt: Mit dem Programm A und dem public key wird die Nachricht vom Sender verschlüsselt (u. optional komprimiert), so das sie von Zufallsbytes (Datenmüll/weißes Rauschen) nicht unterschieden werden kann, und mit dem Programm B wird diese verschlüsselte Nachricht ohne Passwort eingebettet.
Der Empfänger extrahiert die verschlüsselte Nachricht mittels B und anschließend entschlüsselt er sie mit A und seinem privaten Schlüssel.

Für A, also das Programm zum Verschlüsseln mit Public-Key-Kryptografie, eignen sich PGP und GPG (und andere PGP-Klone), denn deren Verschlüsselung ist nach heutigem Kenntnisstand unknackbar. Zudem können sie auch komprimieren und die verschlüsselte Nachricht binär ausgeben.
Zusätzlich verarbeitet zumindest GPG angehängten Datenmüll korrekt, so das zumindst GPG auch steganografische Verfahren verwendet werden kann, bei denen an die eingebettete Nachricht beim Extrahieren etwas Datenmüll angehängt wird.
Allerdings gibt es noch ein Problem: Die mit GPG verschlüsselte Nachricht enthält einen Header und dieser ist NICHT verschlüsselt!!! Es gibt zwar Programme wie Truecrypt, die ohne unverschlüsselten Header verschlüsseln können, aber die bieten keine Public-Key-Kryptografie.

Die PGP/GPG-Nachricht beginnt gemäß der RFC 1991 mit dem cipher type byte (CTB). Und dieses CTB ist praktisch immer 0x85, was bedeutet normal CTB, public-key-encrypted packet, 2-byte packet-length field.
Beispielsweise beginnen zwei verschiedene Nachrichten, die mit verschiedenen Schlüsseln verschlüsselt wurden, nach der Verschlüsselung einmal mit 0x85020e03867b und einmal mit 0x85040e038b77.

Für B, also die Steganografie, eignen sich nur solche Steganografie-Programme, die a) ohne Passwort oder mit leerem Passwort einbetten und extrahieren können und b) ohne Passwort oder mit leerem Passwort auch dann extrahieren können, wenn vorher KEINE Nachricht eingebettet wurde. Dieser letzte Punkt b ist für die Abstreitbarkeit der Steganografie eine wichtige Voraussetzung, aber natürlich nicht die einzige, wie man beispielsweise in diesem Artikel nachlesen kann: http://www.heise.de/kiosk/archiv/ct/2001/9/170_kiosk.
Die grundlegende Anforderung an in Frage kommende Steganografie-Programme ist natürlich eine hohe Resistenz sowohl gegen visuelle/auditive Angriffe (d. h. Anschauen/Hinhören) als auch gegen statistische Angriffe (z. B. mittels stegdetect). An dieser grundlegenden Anforderung scheitern schon gut zwei Drittel der Steganografie-Programme.

Das Programm Steghide erfüllt unter Anderem nicht die Voraussetzung b, aber das Programm outguess erfüllt sie. Zudem bietet outguess optional ECC, also automatische Fehlerkorrektur, so das einzelne gekippte Bits korrigiert werden können und im Gegensatz zu Steghide können die damit eingebetteten Daten nicht erkannt werden (Linuxmagazin 04.2008, Seite 83). Zudem kann man mit outguess auch problemlos mehrere Dateien mit je einem separaten Passwort einbetten und auch separat extrahieren (LinuxUser 07/2007, Seite 94-95). Dadurch kann beispielsweise ein Bild separate Nachrichten für mehrere Empfänger enthalten, ohne das ein Empfänger etwas von den anderen erfahren kann; es ist nicht einmal die Anzahl der versteckten Nachrichten erkennbar.

Beispiel 1
0.) GPG installieren und für dieses Beispiel den public key der German Privacy Foundation importieren
1.) Erstellen der Nachricht text.txt
2.) Falls nicht vorhanden, ist mit einem Hex-Editor wie khexedit eine Datei
mit Namen 0x85.bin mit nur dem Byte 0x85 anzulegen.
3.) Verschlüsseln der Nachricht, hier an die German Privacy Foundation:
gpg --encrypt --bzip2-compress-level 9 -r 580E34BE text.txt
4.) Das erste Byte abschneiden (unter Linux/BSD etc. oder Cygwin unter MS-Win):
4.1) mv text.gpg tmp.gpg
4.2) dd if=tmp.gpg of=text.gpg bs=1 skip=1
4.3) rm tmp.gpg
5.) Einpacken der Nachricht in ein Bild:
outguess -d text.gpg picture.jpg bild.jpg
6.) Verschicken des Bildes über einen Anonymizer oder Proxy oder Onion-Router wie Tor von einem anonymen Email-Account weit weg im Ausland, z. b. bei https://hushmail.com, in einer unauffälligen Mail.
7.) Der Empfänger muß zuerst das Bild bild.jpg abspeichern.
8.) Auspacken der Nachricht:
outguess -r bild.jpg tmp.gpg
9.) Anfügen des redundanten Bytes (unter Linux/BSD etc. oder Cygwin unter MS-Win):
cat 0x85.bin tmp.gpg > text.gpg
10.) Entschlüsseln der Nachricht:
gpg --decrypt text.gpg > text.txt

Der Schritt 6.) ist wichtig für absteitbare Kommunikation (deniable communication), denn schon Kommunikations-Verhältnisse können zum Datenmißbrauch führen. Hierzu gibt es ja Programme wie Ontrack Firstview, aber es reicht ja schon eine Darstellung in Matrix-Form um zu erkennen, wer mit wem wie oft und in welchem Umfang kommuniziert und wie gerichtet die Kommunikationsbeziehung ist. Deshalb sollte man für neue Kontakte möglichst neue anonyme Email-Accounts verwenden und keinen anonymen Email-Account über Jahre hinweg.
Dieses Beispiel ist aber nicht wirklich gut, weil in der gemailten Nachricht noch ein Rest des unverschlüsselten GPG-Headers steht, aber der variiert mit der Nachricht und die Nachricht ist gut versteckt, sehr sicher verschlüsselt und ein Nachweis der Steganografie immerhin unsicher.
Ein kleines Problem ist hierbei auch die Statistik von dem, was outguess ohne ein Passwort extrahiert, denn das könnte sich statistisch von einer eingebetteten Nachricht unterscheiden. Es ist aber kein großes Problem, auch weil auch Spam oder sonstiger Datenmüll eingebettet sein kann; ohne korrekte Entschlüsselung kann das nicht sicher festgestellt werden.

Eine Verbesserung ist ein zuätzlicher Salt: Die Nachricht ohne das erste Byte wird nicht direkt eingepackt, sondern es werden zuvor 0 oder 1 oder 2 oder ... n Zufallsbytes (z. B. aus /dev/urandom) angefügt. Der Empfänger muß dann bis spätestens zum Ende es Extrahierten ausprobieren (testen) ob nach dem Entfernen der ersten m Bytes und Anfügen des 0x85-Bytes eine Nachricht entpackt werden kann. Dies ist nicht sehr aufwendig: GPG erkennt relativ zuverlässig ob eine Nachricht vorhanden ist oder nicht und meldet im Fehlerfall:

> gpg --decrypt tmp.txt
gpg: no valid OpenPGP data found.
gpg: decrypt_message failed: eof
> echo $?
2

Ein weiteres Tuning erlauben die GPG-Optionen --throw-keyids und --hidden-recipient um den Empfänger der Nachricht geheim zu halten: http://linux.die.net/man/1/gpg.
Aber auch damit ist das Beispiel nicht perfekt; eine saubere Lösung ist nur eine komplette Verschlüsselung der Nachricht, inklusive Header, wie im nächsten Beispiel.

Beispiel 2
Skizze:
0.) Die Nachricht wird mit GPG oder PGP in einem binären Standard-Format verschlüsselt
1.) Der durch das Standard-Format redundante Header wird entfernt.
Das PGP Stealth, http://cypherspace.org/adam/stealth/ reicht hierfür nicht, unter Anderem weil in dessen Dokumentation steht, das Stealth nicht alle Auffälligkeiten entfernt, den private Key benötigt und 1996 für das inzwischen veraltete PGP 2.6.x gemacht wurde.
Vielleicht ist MacPGP ab Version 2.6.3 mit der Option Stealthify eine Alternative.
2.) Einpacken, Verschicken, Auspacken (sihe Beispiel 1).
3.) Den Header Rekonstruieren und vorne Anhängen.

Demnächst kommt hier das ausführliche Beispiel, auch mit einem Bild: Einmal mit und einmal ohne Nachricht.

Juristische Fallstricke

Es gibt einige Länder die das Wassenaar Abkommen unterzeichnet haben und daher Export-Beschrändkungen auch für Kryptografie-Software unterliegen: http://www.wassenaar.org/controllists/2008/WA-LIST%20(08)%201/WA-LIST%20(08)%201.pdf.
In dem Abkommen steht zwar nicht, welche Länder es unterzeichnet haben und die Lockerung der Krypto-Exportbeschränkung von 1999, http://www.heise.de/newsticker/Clinton-lockert-Krypto-Exportbeschraenkung--/meldung/6142, fehlt ebenfalls aber man findet die Liste und einiges andere zu dem Bereich Kryptografie-Beschränkungen auf http://rechten.uvt.nl/koops/cryptolaw/cls2.htm.
Nach dem Wassenaar Abkommen ist einige Software, insbesondere Software für Kryptografie ein "Dual-Use Good" das generell Exportbeschränkungen unterliegt, aber beispielsweise Public-Domain-Software unterliegt KEINEN Beschränkungen; sie ist ausdrücklich von dem Abkommen ausgenommen!
Zudem ist sie in den meisten Ländern der Erde durch Rechte wie Redefreiheit, Pressefreiheit, Meinungsfreiheit usw. geschützt, so das man zumindest in der EU und auch den meisten Staaten der Erde keinerlei Einschränkungen bei der Verwendung und dem Export von Public-Domain-Software hat.

Von der Legende, das Kryptografie-Software als Waffe kategorisiert wird, ist auch in dem Wassenaar Abkommen nichts zu finden. Bei dieser Legende handelt es sich nur um eine Übertreibung einiger Journalisten, denn eine Waffe ist ein Mittel, das Gegenstände (auch Lebewesen) und immaterielle Güter beschädigen, zerstören oder gebrauchsunfähig machen kann, aber die (angewandte) Kryptografie bewirkt nur eine Verhinderung von unauthorisierten Zugriffen auf Daten durch Transformation und hat daher nichts mit einer Waffe gemein.
Eine nur passiv schützende Technik wie die angewandte Kryptografie als Waffe zu bezeichnen ist daher Unfug.

Sitemap