Sicherheit in Rechnernetzen: - Professur Datenschutz und ...
Sicherheit in Rechnernetzen: - Professur Datenschutz und ...
Sicherheit in Rechnernetzen: - Professur Datenschutz und ...
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
144<br />
A. Pfitzmann: Datensicherheit <strong>und</strong> Kryptographie; TU Dresden, WS2000/2001, 15.10.2000, 15:52 Uhr<br />
143<br />
A. Pfitzmann: Datensicherheit <strong>und</strong> Kryptographie; TU Dresden, WS2000/2001, 15.10.2000, 15:52 Uhr<br />
function <strong>in</strong>vE'(<strong>in</strong>: stego; out: emb);<br />
if R(E(stego, 0)) = etwas_verborgen or R(E(stego, 1)) = etwas_verborgen<br />
E(cover, not(emb)) = E(stego, not(emb)),<br />
then emb := leer else emb := <strong>in</strong>vE(stego);<br />
welche durch E<strong>in</strong>setzen von stego = E(cover, emb) äquivalent umgeformt werden kann <strong>in</strong><br />
E(cover, not(emb)) = E(E(cover, emb), not(emb)) 102 ,<br />
Diese <strong>in</strong>effiziente Konstruktion läßt Sendemöglichkeiten aus, wo E(cover, emb) akzeptabel ist,<br />
E(cover, not(emb)) aber nicht. Die folgende effiziente Konstruktion ist also günstiger.<br />
Die effiziente Konstruktion:<br />
Der Sender prüft, ob E(cover, emb) akzeptabel, d.h. aus se<strong>in</strong>er Sicht für e<strong>in</strong>en Stegoanalytiker<br />
die E<strong>in</strong>bettung nicht verratender Werte für Stegotext ist <strong>und</strong> bettet nur dann e<strong>in</strong>, d.h. sendet nur dann<br />
stego := E(cover, emb) statt cover. Wenn sowohl E(stego, 0) wie auch E(stego, 1) akzeptable Werte<br />
s<strong>in</strong>d, betrachtet der Sender emb als übertragen, ansonsten sendet er emb noch mal.<br />
E<strong>in</strong>e Implementierung des verbesserten E<strong>in</strong>bettungsalgorithmusses E' mit möglichst wenig<br />
Aufrufen von E <strong>und</strong> R lautet:<br />
function E'(<strong>in</strong>: cover, emb; out: stego);<br />
stego := E(cover, emb);<br />
if R(stego) = etwas_verborgen<br />
then beg<strong>in</strong> stego := cover; E'(next cover, emb) end<br />
else<br />
if R(E(stego, 0)) = etwas_verborgen or R(E(stego, 1)) = etwas_verborgen<br />
then E'(next cover, emb);<br />
Der Empfänger erhält stego' (dies kann stego oder cover se<strong>in</strong>) <strong>und</strong> berechnet emb' := E-1 (stego').<br />
Der Empfänger prüft, ob E(stego', 0) <strong>und</strong> E(stego', 1) jeweils akzeptable Werte für Stegotext s<strong>in</strong>d<br />
<strong>und</strong> empfängt ggf. emb', ansonsten nichts. (Dies ist exakt gleich wie oben, so daß die obige<br />
Implementierung übernommen werden kann.)<br />
Warum funktioniert dies?<br />
Fall 1: Der Sender sendet stego, d.h. stego' = stego. Der Empfänger empfängt also emb' =<br />
emb genau dann, wenn der Sender emb als übertragen betrachtet.<br />
Fall 2: Der Sender sendet cover, d.h. stego' = cover. Dann ist entweder E(cover, 0) oder<br />
E(cover, 1) nicht akzeptabel (denn e<strong>in</strong>s von beiden ist E(cover, emb), was der Sender<br />
als nicht akzeptabel verwirft) – oder beide. Der Empfänger empfängt also nichts, da<br />
wegen stego' = cover entweder E(stego', 0) oder E(stego', 1) (oder beide) e<strong>in</strong> nicht<br />
akzeptabler Werte für Stegotext s<strong>in</strong>d.<br />
dann kann der Empfänger so auch prüfen, ob beide möglichen Werte des Bits hätten e<strong>in</strong>gebettet<br />
werden können <strong>und</strong> ob der Sender folglich e<strong>in</strong>betten konnte. Der Empfänger gibt das errechnete emb<br />
also nur nach außen, wenn E(stego, not(emb)) e<strong>in</strong> akzeptabler Wert für den Stegotext ist.<br />
E<strong>in</strong>e effiziente Implementierung des verbesserten Extraktionsalgorithmusses E'-1 lautet:<br />
function <strong>in</strong>vE'(<strong>in</strong>: stego; out: emb);<br />
emb := <strong>in</strong>vE(stego);<br />
stego_alternativ := E(stego, not(emb));<br />
if R(stego_alternativ) = etwas_verborgen<br />
then emb := leer;<br />
Es stellt sich nun die Frage: Ist obiges Ziel für E <strong>und</strong> E-1 nur zu erreichen, wenn das Stegosystem die<br />
obigen Gleichungen erfüllt? Die Antwort ist e<strong>in</strong> konstruktives Ne<strong>in</strong>.<br />
4.2 Informationstheoretisch sichere Steganographie<br />
Die <strong>in</strong>effiziente Konstruktion:<br />
Die Idee besteht dar<strong>in</strong>, den Sender wie den Empfänger prüfen zu lassen, ob auch <strong>in</strong> stego beide<br />
möglichen Werte e<strong>in</strong>es Bits e<strong>in</strong>gebettet werden können. Nur dann gilt das Bit als übertragen. Im<br />
e<strong>in</strong>zelnen:<br />
Der Sender prüft, ob E(cover, 0) <strong>und</strong> E(cover, 1) jeweils akzeptable, d.h. aus se<strong>in</strong>er Sicht für<br />
e<strong>in</strong>en Stegoanalytiker die E<strong>in</strong>bettung nicht verratende Werte für Stegotext s<strong>in</strong>d <strong>und</strong> bettet nur dann<br />
e<strong>in</strong>, d.h. sendet nur dann stego := E(cover, emb) statt cover. Wenn sowohl E(stego, 0) wie auch<br />
E(stego, 1) akzeptable Werte s<strong>in</strong>d, betrachtet der Sender emb als übertragen, ansonsten sendet er emb<br />
noch mal.<br />
E<strong>in</strong>e Implementierung des verbesserten E<strong>in</strong>bettungsalgorithmusses E' mit möglichst wenig<br />
Aufrufen von E <strong>und</strong> R lautet:<br />
function E'(<strong>in</strong>: cover, emb; out: stego);<br />
stego := E(cover, emb);<br />
stego_alternativ := E(cover, not(emb));<br />
if R(stego) = etwas_verborgen or R(stego_alternativ) = etwas_verborgen<br />
then beg<strong>in</strong> stego := cover; E'(next cover, emb) end<br />
else<br />
if R(E(stego, 0)) = etwas_verborgen or R(E(stego, 1)) = etwas_verborgen<br />
then E'(next cover, emb);<br />
Der Empfänger erhält stego' (dies kann stego oder cover se<strong>in</strong>) <strong>und</strong> berechnet emb' := E-1 (stego').<br />
Der Empfänger prüft, ob E(stego', 0) <strong>und</strong> E(stego', 1) jeweils akzeptable Werte für Stegotext s<strong>in</strong>d<br />
<strong>und</strong> empfängt ggf. emb', ansonsten nichts.<br />
Warum funktioniert dies?<br />
Fall 1: Der Sender sendet stego, d.h. stego' = stego. Der Empfänger empfängt also emb' =<br />
emb genau dann, wenn der Sender emb als übertragen betrachtet.<br />
Fall 2: Der Sender sendet cover, d.h. stego' = cover. Dann ist entweder E(cover, 0) oder<br />
E(cover, 1) nicht akzeptabel – oder beide. Wegen stego' = cover gilt Gleiches also für<br />
die vom Empfänger getesteten Werte E(stego', 0) <strong>und</strong> E(stego', 1).<br />
E<strong>in</strong>e effiziente Implementierung des verbesserten Extraktionsalgorithmusses E'-1 lautet:<br />
4.2.1 Informationstheoretisch sichere steganographische Konzelation<br />
KlPi_97<br />
4.2.2 Informationstheoretisch sichere steganographische Authentikation<br />
Arbeitspapier von Herbert Klimant <strong>und</strong> Rudi Piotraschke<br />
4.3 Zwei gegensätzliche Stegoparadigmen<br />
4.3.1 Möglichst wenig ändern<br />
Least Significant Bit (LSB)<br />
102<br />
Diese Gleichung besagt: Wenn nache<strong>in</strong>ander zwei <strong>in</strong>verse Bits e<strong>in</strong>gebettet werden, dann überschreibt die zweite<br />
E<strong>in</strong>bettung die erste. D.h. die E<strong>in</strong>bettungsposition ist nicht vom Wert des Bits abhängig.