\documentclass[12pt,compress]{beamer} \usepackage{amsmath} \usepackage{url} \usepackage{ucs} \usepackage[utf8x]{inputenc} \usepackage[ngerman]{babel} \usepackage{ulem} % sout \usepackage{multicol} \usepackage{comment} % Manual syntax highlighting \newcommand{\synfunc} [1]{\color{blue!50!black}#1\color{black}} \newcommand{\synstr} [1]{\color{red!50!black}#1\color{black}} \newcommand{\synvar} [1]{\color{purple!50!black}#1\color{black}} \newcommand{\synclass} [1]{\color{green!50!black}#1\color{black}} \newcommand{\syncomment}[1]{\color{blue!20!black}#1\color{black}} \newcommand{\syncool} [1]{\color{beamer@blendedblue}#1\color{black}} \newcommand{\synoder} {\ \ \color{black}$\vee$\ \ } \newcommand{\hr} {\rule[4pt]{\textwidth}{0.1pt}\\} \newcommand{\hicolor} [1]{\color[rgb]{0.6,0.2,0.8}#1\color{black}} \newcommand{\synhilight}[1]{\hicolor{\textbf{#1}}} \newcommand{\doofcomment}{\ \ \syncomment{\# :-(}} \newcommand{\gutcomment} {\ \ \syncomment{\# :)}} \title{Steganographie} \author{Ingo~Blechschmidt, \\ Michael~Hartmann} %~\texttt{<iblech@web.de>},\\\hbox{Michael~Hartmann~\texttt{<michael.hartmann@as-netz.de>}}} \institute{LUGA} \date{4. Oktober 2006} \usetheme{Warsaw} %Warsaw, Berkeley? \usecolortheme{seahorse} \usefonttheme{serif} \useinnertheme{rectangles} \usepackage{bookman} \setbeamercovered{transparent} \begin{document} \frame{\titlepage} \frame[t]{ \frametitle{Inhalt} \tableofcontents } \section{Grundlagen} \subsection[Def.]{Definition der Steganographie} \frame[t]{ \frametitle{Was ist Steganographie?} \begin{block}{Definition} Steganographie ist die Wissenschaft der verborgenen Übermittlung von Informationen. \end{block} \vfill Einsatzgebiete: \begin{itemize} \item{Sprache} \item{Digitale Medien} \item{Sport} \item{Kopierschutz} \end{itemize} } \subsection[Beispiele]{Beispiele für Steganographie} \frame[t]{ \frametitle{Beispiele für Steganographie} \begin{itemize} \item{Handzeichen beim Volleyball und Fußball} \item{Einsagen bei Ausfragen} \item{Versteckte Daten in Bildern, Audio- und Videodateien} \item{Umgehen von Servereinschränkungen (versteckte MP3 in Bildern)} \item{Passiver Kopierschutz $\rightarrow$ Wasserzeichen} \item{Verfassen von Briefen mit "`Geheimtinte"'} \end{itemize} \vfill\hfill \includegraphics[scale=0.15]{images/volleyball.jpg} } \subsection[Geschichte]{Historische Anwendungen der Steganographie} \frame[t]{ \frametitle{Historische Anwendungen} \begin{itemize} \item{Demeratus' Warnung an Sparta vor Angriff der Xerer} \item{Tätowierung von kahlrasierten Köpfen} \item{microdots: winzige Punkte, denen man keine Beachtung schenkt (1941 in Deutschland erfunden)} \item{Verbot von Postsendungen mit u.a. Schachaufgaben, Kreuzworträtseln, Zeitungsausschnitten, Strickmuster in den USA und England während des Zweiten Weltkriegs} \end{itemize} \vfill\hfill \includegraphics[scale=0.22]{images/tempel.jpg} } \subsection[Abgrenzung]{Abgrenzung zur Verschlüsselung} \frame[t]{ \frametitle{Abgrenzung zur Verschlüsselung} \begin{itemize} \item{Erregung von Verdacht durch verschlüsselte Nachrichten} \item{Verheimlichung von Informationsübermittlung durch Steganographie} \item{Steganographie kaum erkennbar} \item{Einfache bis sehr komplexe\\steganographische Algorithmen} \end{itemize} \vfill\hfill \includegraphics[scale=0.3]{images/postkarte.jpg} } \subsection[Mathematik]{Mathematischer Hintergrund} \frame[t]{ \frametitle{Mathematischer Hintergrund} \begin{block}{Informationsgehalt eines Zeichens} \[ I(x) := -\log_2 P(x); \qquad [1 \,\mathrm{bit}] \] \end{block} \begin{block}{Entropie: Zu erwartender Informationsgehalt} \[ E(I) := \sum\limits_{x \in \Sigma} P(x) \cdot I(x); \] \end{block} \vspace*{-1em} \begin{tabbing} asdfff \= \kill $x$: \> ein bestimmtes Zeichen \\ $\Sigma$: \> Menge aller vorkommenden \\ \> Zeichen \\ $P(x)$: \> Wahrscheinlichkeit \\ \> des Auftretens von $x$ \\ \end{tabbing} \vspace*{-9em}\hfill \includegraphics[scale=0.15]{images/log.png} } \frame[t]{ \frametitle{Beispiel} \begin{block}{Definitionen} \[ \renewcommand{\arraystretch}{1.2} \begin{array}{rcl} I(x) &:=& -\log_2 P(x); \\ E(I) &:=& \sum\limits_{x \in \Sigma} P(x) \cdot I(x); \end{array} \] \end{block} \[ \begin{array}{rcl} M &=& \left(a,l,l,e,s\right); \\ \Sigma &=& \left\{a,e,l,s\right\}; \end{array} \] \[ \renewcommand{\arraystretch}{1.2} \begin{array}{rcl} I(a) = I(e) = I(s) &=& -\log_2 \frac{1}{5} \approx 2{,}32 \,\mathrm{bit}; \\ I(l) &=& -\log_2 \frac{2}{5} \approx 1{,}32 \,\mathrm{bit}; \end{array} \] \[ E(I) \approx 3 \cdot \frac{1}{5} \cdot 2{,}32 \,\mathrm{bit} + \frac{1}{5} \cdot 1{,}32 \,\mathrm{bit} \approx 1{,}67 \,\mathrm{bit}; \] } \frame[t]{ \frametitle{Eigenschaften der Entropie} \begin{itemize} \item Je seltener ein Zeichen, desto höherer Informationsgehalt \item Spezialfall bei gleicher Häufigkeit aller Zeichen: \\ $P(x_1) = P(x_2) = \cdots = P(x_n) =: p$ \\ $I(x_1) = I(x_2) = \cdots = I(x_n) = -\log_2 p =: i$ \\ $E(I) = i$ \\\ \\ Beispiel: \\ $M = (1,2,3,4,1,2,3,4,1,2,3,4);$ \\ $p = \frac{1}{4};$ \\ $E(I) = i = -\log_2 \frac{1}{4} = 2 \,\mathrm{bit};$ \item Maximale Entropie bei $\Sigma = \left\{ 0, 1 \right\}^8$: \\ $E(I) = 8 \,\mathrm{bit};$ \end{itemize} } \frame{ \frametitle{Praktische Entropiebestimmung} \begin{center}\Huge \scalebox{2}{\textsl{Live-Demo}}\end{center} } \frame{ \frametitle{Praktische Entropiebestimmung} \begin{center} \includegraphics[scale=0.4]{images/entropy-pl.png} \\\ \\ \footnotesize \texttt{entropy.pl} von \url{http://xrl.us/luga-entropy} \end{center} } \frame[t]{ \frametitle{Praktische Entropiebestimmung} \begin{itemize} \item Beispielimplementierung \texttt{entropy.pl} zur Bestimmung von Informationsgehalt und Entropie \item Aufruf mit: \\ \texttt{\$ perl entropy.pl} oder: \\ \texttt{\$ perl entropy.pl corpus.txt} \\ \item Benötigte nicht-Standard-Perl-Module: \\ Compress::Zlib, Gtk2 \item Installation über: \\ \scriptsize \texttt{\# apt-get install libcompress-zlib-perl libgtk2-perl} oder: \\ \texttt{\# perl -MCPAN -eshell \\ > install Compress::Zlib \\ > install Gtk2} \end{itemize} } \section[Anwendungen]{Anwendungen} \subsection{Verzeichnisse} \frame[t]{ \frametitle{Verzeichnisse als Trägermedium} \scriptsize \texttt{% \$ ls -l\\ -rw-rw-rw- 1 user group 3237\textbf<2>{2} 01-Mathematik.txt\\ -rw-rw-rw- 1 user group 6381\textbf<2>{4} 02-Physik.txt\\ -rw-rw-rw- 1 user group \ 483\textbf<2>{1} 03-Chemie.txt\\ -rw-rw-rw- 1 user group \ 112\textbf<2>{9} 04-Biologie.txt\\ -rw-rw-rw- 1 user group 1003\textbf<2>{7} 05-Musik.txt\\ -rw-rw-rw- 1 user group 5700\textbf<2>{1} 06-Kunst.txt\\ } } \subsection{Text} \frame[t]{ \frametitle{Text als Trägermedium} \vspace*{3em} \scalebox{1.2}{ \vbox{ \begin{tiny} \texttt{% \textbf<2>{L}inux ist ein freies und plattformübergreifendes Betriebssystem, das \\ \textbf<2>{U}NIX ähnlich ist. Schon bald nach Beginn der Entwicklung liefen viele \\ \textbf<2>{G}NU-Tools, beispielsweise cat, echo, bash uvm. Nach kurzer Zeit wurde \\ \textbf<2>{a}uch ein Maskottchen für das noch junge System gefunden: ein Pinguin. \\ } \end{tiny} } } \vfill \only<2>{ \begin{itemize} \item{Relativ einfach zum Lesen und Erstellen} \item{Viele Algorithmen denkbar} \item{Kaum nachvollziehbar} \end{itemize} } } \subsection{Bilder} \frame[t]{ \frametitle{Bilder als Trägermedium} \begin{itemize} \item{Verbergen von Daten durch Veränderung von Farben oder Verzerrung} \item{% Farbänderung: \\ Nutzung der Least Significant Bits (LSB) als Träger $\rightarrow$ minimale (kaum wahrnehmbare) Veränderung des Bildes \\ \ \\ $10001010_2$ ($= 1\cdot 2^7 + 1\cdot 2^3 + 1\cdot2^1 = 138$) → \\ $10001011_2$ ($= 1\cdot 2^7 + 1\cdot 2^3 + 1\cdot2^1 + 1\cdot2^0 = 139$) } \item{Veränderung der LSB prinzipiell auch bei Audiodateien möglich} \item{Verzerren: \\ Geringfügige, systematische Verzerrung abhängig von den zu versteckenden Daten} \end{itemize} } \frame[t]{ \frametitle{stega.pl -- Funktionsweise} \begin{itemize} \item{Beispielimplementierung stega.pl von \url{http://xrl.us/lugastega}} \item{Einbettungsalgorithmus: \\ Veränderung der drei LSB der Rot-, Grün- und Blaufarbwerte jedes Pixels (von links nach rechts und oben nach unten) } \item{Extraktionsalgorithmus: \\ Auslesen der drei LSB des Rot-, Grün- und Blaufarbwerte jedes Pixels (von links nach rechts und oben nach unten) } \item{Kapazität: \[ \frac{\text{Höhe} \cdot \text{Breite} \cdot 3 \,\mathrm{bit}}{8 \,\frac{\mathrm{bit}}{\mathrm{B}}} \] \\ \footnotesize (Höhe, Breite in Pixeln; z.B.: 50x50px: 0,9 KiB) } \end{itemize} } \frame[t]{ \frametitle{stega.pl -- Nutzung} \begin{itemize} \item{Daten in Bild verstecken: \\ \footnotesize \texttt{% \$ ./stega.pl \textbackslash\\ \ \ \ \ --mode=embed \textbackslash\\ \ \ \ \ --input=originalbild.png \textbackslash\\ \ \ \ \ --output=verändertes-bild.png } } \item{Daten aus Bild extrahieren: \\ \footnotesize \texttt{% \$ ./stega.pl \textbackslash\\ \ \ \ \ --mode=extract \textbackslash\\ \ \ \ \ --input=verändertes-bild.png } } \end{itemize} } \frame{\begin{center}% \includegraphics[scale=0.4]{images/leuchtturm-vorher.png} \\\ \\% \footnotesize unverändertes Bild \textcolor{white}{g}% \end{center}} \frame{\begin{center}% \includegraphics[scale=0.4]{images/leuchtturm-nachher.png} \\\ \\% \footnotesize steganographisch verändertes Bild% \end{center}} \frame{\begin{center} \includegraphics{images/lena-vorher.png} \\\ \\ \footnotesize Lena, Original \end{center}} \frame{\begin{center} \includegraphics{images/lena-nachher.png} \\\ \\ \footnotesize Lena, steganographisch verändert \end{center}} \frame{\begin{center} \includegraphics{images/raster-vorher.png} \\\ \\ \footnotesize Raster, Original \end{center}} \frame{\begin{center} \includegraphics{images/raster-nachher.png} \\\ \\ \footnotesize Raster, steganographisch verändert \end{center}} \frame[t]{ \frametitle{Beispielimplementierung} \begin{itemize} \item steghide von Stefan Hetzl (\url{http://steghide.sourceforget.net/}) \item Einbettung in Bilder (JPEG und BMP) und Audiodateien (WAV, AU) \end{itemize} \scriptsize \begin{enumerate} \item{\texttt{steghide embed -cf \ \ träger.jpeg -ef geheim.txt}} \item{\texttt{steghide extract -sf träger.jpeg}} \end{enumerate} } \subsection[TTL]{Variation des TTL-Wertes} \frame[t]{ \frametitle{Variation des TTL-Wertes von IP Paketen} \begin{itemize} \item{Time-to-Live: Zahl im Header von IP Paketen, die nach jedem passierten Rechner dekrementiert wird} \item{Verhindern von "`Endlosrouting"' durch TTL (A schickt Paket an B, B zurück zu A)} \item{Übermittlung von Daten durch unterschiedliche TTL-Werte in IP Paketen} \end{itemize} \vfill\hfill \includegraphics[scale=0.2]{images/ab.png} } \frame[t]{ \frametitle{Beispiel: Variation des TTL-Wertes} Variation des TTL-Wertes nach einem (hier sehr einfachen) Algorithmus: \\ \begin{itemize} \item{Zuordnung: \\ TTL des empfangenen Pakets $\rightarrow$ Buchstabe im Alphabet \\ 1 $\mapsto$ a,\\ 2 $\mapsto$ b,\\ \ldots} \item{Beispiel-Route: Sender $\rightarrow$ Router $\rightarrow$ Empfänger:\\ \begin{enumerate} \item{Sender schickt Paket mit TTL 13} \item{Router dekrementiert TTL auf 12} \item{Empfänger empfängt Paket mit TTL 12} \item{Interpretiert Paket als "`L"'} \end{enumerate}} \end{itemize} } \frame[t]{ \frametitle{Beispiel: Variation des TTL-Wertes} \includegraphics[scale=0.29]{images/ttl.png} } \subsection[DNS]{Domain Name Service (DNS)} \frame[t]{ \frametitle{Domain Name Service (DNS)} \hbox{\footnotesize$ \left. \begin{array}{l} \text{1. Nicht-rekursiver} \\ \text{2. Rekursiver} \\ \text{3. Nicht-rekursiver} \end{array} \right\} \begin{array}{l} \text{Lookup auf nicht} \\ \text{existente Domain} \end{array} \rightarrow \left\{ \begin{array}{@{}ll} \text{NOERROR} & := \texttt{0} \\ \text{NXDOMAIN} & := \texttt{1} \\ \text{NXDOMAIN} & := \texttt{1} \end{array} \right. $} \vfill \begin{itemize} \item Setzen eines Bits: \\ \texttt{\$ \textbf{dig @ns bit-addr +recursive}} \\ \item Abfragen eines Bits: \\ \texttt{\$ \textbf{dig @ns bit-addr +norecursive}} → \begin{tabbing} NXDOMAIN? \= \kill NOERROR? \> → \texttt{0} \\ NXDOMAIN? \> → \texttt{1} \end{tabbing} \item \ldots mit \texttt{bit-addr} beispielsweise \texttt{1234.pugs-rules.de} für das 1234. Bit \end{itemize} } \frame{ \frametitle{Beispielimplementierung} \begin{center}\Huge \scalebox{2}{\textsl{Live-Demo}}\end{center} } \frame[t]{ \frametitle{Beispielimplementierung} \begin{itemize} \item Beispielimplementierung dnsx von \url{http://xrl.us/lugadnsx} \item Benötigtes nicht-Standard-Perl-Modul: \\ Net::DNS \item Installation über: \\ \scriptsize \texttt{\# apt-get install libnet-dns-perl} oder: \\ \texttt{\# perl -MCPAN -eshell \\ > install Net::DNS} \end{itemize} } \frame[t]{ \frametitle{Speichern im DNS} \texttt{% \$ ./dnsx \textbackslash\\ \ \ \ \ --nameserver=\textsl{Nameserveradresse} \textbackslash\\ \ \ \ \ --domain=\textsl{Unbenutzte Domain} \textbackslash\\ \ \ \ \ --mode=store } (dnsx liest von der Standardeingabe.) } \frame[t]{ \frametitle{Holen aus dem DNS} \texttt{% \$ ./dnsx \textbackslash\\ \ \ \ \ --nameserver=\textsl{Nameserveradresse} \textbackslash\\ \ \ \ \ --domain=\textsl{Unbenutzte Domain} \textbackslash\\ \ \ \ \ --mode=receive \textbackslash\\ \ \ \ \ --length=\textsl{Länge der Daten} } (dnsx schreibt auf die Standardeingabe.) } \frame[t]{ \frametitle{Anmerkungen zu dnsx} \begin{itemize} \item Wahl einer unbenutzten Domain als \texttt{--domain} zwingend \item Keine "`prinzipielle Korrektheit"' der Domain erforderlich; \\ beispielsweise Möglichkeit von \texttt{--domain=weltklasse.9live} \item Unterdrücken der Debuggingmeldungen durch Umleitung der Standardfehlerausgabe \end{itemize} } \subsection[JitterBugs]{Tastaturverzögerung} \frame[t]{ \frametitle{Tastaturverzögerung mit JitterBugs} \begin{itemize} \item Verbergen von Information durch systematische Verzögerung von Tastenanschlägen durch ein externes Gerät zwischen Tastatur und Computer \item Mathematisches Prinzip: \begin{tabbing} $\Delta t$: \= \kill $\Delta t$: \> Zeitdauer zwischen zwei Anschlägen \\ $T$: \> Zeitfenster, bspw. $20 \,\mathrm{ms}$ \end{tabbing} \ \\ Übertragung von $0$? \\ → Verzögerung so, dass $\Delta t$ durch $T$ teilbar \ \\ Übertragung von $1$? \\ → Verzögerung so, dass $\Delta t + \frac{T}{2}$ durch $T$ teilbar \end{itemize} } \frame[t]{ \frametitle{Beispiel} \begin{itemize} \item Zeitdauer zwischen Anschlägen des Benutzers: \\ $\begin{array}{cccc} 42 \,\mathrm{ms}, & 57 \,\mathrm{ms}, & 19 \,\mathrm{ms}, & 86 \,\mathrm{ms} \end{array}$ \item Zeitfenster: $T = 20 \,\mathrm{ms}$ \item Zu übertragende Information: $1011_2$ \item Zeitdauer zwischen den Anschlägen nach künstlicher Verzögerung: \\ $\begin{array}{cccc} \underbrace{60 \,\mathrm{ms}}_1, & \underbrace{70 \,\mathrm{ms}}_0, & \underbrace{20 \,\mathrm{ms}}_1, & \underbrace{100 \,\mathrm{ms}}_1 \end{array}$ \end{itemize} \vfill \begin{block}{Trotz verschiedenen Quellen von Rauschen\ldots} \ldots Detektierbarkeit solcher Verzögerungen übers Netzwerk! (!!) \end{block} } \frame{ \begin{center} \Huge \scalebox{2}{\textsl{Live-Demo}} \vfill \includegraphics[scale=0.8]{images/keyboard-delay-pl.png} \end{center} } \frame{\begin{center} \includegraphics[scale=0.7]{images/jitterbugs-vorher.png} \\\ \\ \footnotesize Ohne JitterBugs \end{center}} \frame{\begin{center} \includegraphics[scale=0.7]{images/jitterbugs-nachher.png} \\\ \\ \footnotesize Mit JitterBugs \end{center}} \frame{\begin{center}\Huge \scalebox{2}{\textsl{Fragen?}}\end{center}} \section{Quellen} \subsection{Literatur} \frame[t]{ \frametitle{Literatur} \tiny \begin{itemize} \item{\url{http://arxiv.org/pdf/math.HO/0404335}} \item{\url{http://m19s28.vlinux.de/iblech/klasse11/Sonstiges/1337/LUGA/DNS.pdf.pdf}} \item{\url{https://db.usenix.org/events/sec06/tech/shah/shah_html/index.html}} \item{\url{http://www.expmath.org/expmath/volumes/11/11.3/Calude361_370.pdf}} \item{\url{http://www.petitcolas.net/fabien/publications/ieee99-infohiding.pdf}} \end{itemize} } \subsection{Bildquellen} \frame[t]{ \frametitle{Bildquellen} \tiny \begin{itemize} \item{\url{http://perl.plover.com/yak/presentation/samples/present.gif}} \item{\url{https://db.usenix.org/events/sec06/tech/shah/shah_html/index.html}} \item{\url{http://www.alte-geschichte.uni-hd.de/grafik/tempel1.jpg}} \item{\url{http://www.htwm.de/~sstiller/kroatien/Postkarte\%20Balaton\%202.jpg}} \item{\url{http://www.meganandjack.com/mt/archives/signals4.jpg}} \item{\url{http://www.petitcolas.net/fabien/publications/ieee99-infohiding.pdf}} \end{itemize} } \appendix \frame{ \begin{center}\Huge Bonus-Slides\end{center} \tableofcontents \vspace*{10em} \hfill\raisebox{0pt}[0pt][0pt]{\vspace*{10em}\includegraphics[scale=0.20]{images/bonus.png}} } \section{Algorithmische Informationstheorie (AIT)} \subsection{Algorithmische Information} \frame[t]{ \frametitle{Algorithmische Informationstheorie (AIT)} \begin{itemize} \item Problem am Entropiekonzept: \\ Entropien von \\ $00001111$ und \\ $01101000$ gleich! \item Reihenfolge spielt beim Entropiekonzept keine Rolle! \item Lösung: Algorithmische Information -- \\ Länge des kürzesten Programms einer bestimmten Programmiersprache, die die jeweilige Zeichenkette ausgibt \[ H(x) := \operatorname{min} \left\{ \left|p\right| \,|\, M(p) = x \right\}\!; \] $M(p)$: Ausgabe des Programms $m$ \end{itemize} } \subsection{Vergleich zur Entropie} \frame[t]{ \frametitle{Vergleich zur Entropie} \begin{itemize} \item Beachtung der Reihenfolge durch die algorithmische Information \item Bessere Erfassung des anschaulichen \\ Konzepts \textsl{Ordnung}: \begin{tabbing} $00001111$: \= \kill $00001111$: \> 4 Nuller gefolgt von 4 Einsern \\ $01101000$: \> Eine Null, zwei Einser, eine Null, \\\> eine Eins, drei Nuller \end{tabbing} \item Allerdings: Praktische Bestimmung von $H(x)$ mitunter schwierig, da Ausprobieren sehr vieler Programme notwendig \item \textsl{Weitreichende, hier nicht näher genannte Konsequenzen für die Mathematik!} \\ \scriptsize Stichworte: G. Chaitin, CHAITINsche Kon\-stan\-te/Hal\-te\-wahr\-schein\-lich\-keit $\Omega$, \ldots \end{itemize} } \end{document}
Download