\chapter{Verschlüsselungsverfahren}
    \section{Das Kerckhoffs'sche Prinzip}\label{kerckhoff}
        \say{Ein Verschlüsselungssystem darf nicht der Geheimhaltung bedürfen und soll ohne Schaden in Feindeshand fallen können.}\\

        \noindent Folglich ist für die Entschlüsselung der Nachricht nicht die Kenntnis über das Verfahren, sondern der Schlüssel die relevante Information.\\

        \noindent\say{Es soll nicht möglich sein, einen Geheimtext ohne Kenntnis des hierfür vorgesehenen Schlüssels \textbf{effizient} zu entschlüsseln.}
    
    \section{Mathematische Modelierung von Verschlüsselungsverfahren}
        Klartextnachrichten und Geheimtextnachrichten sind Elemente einer Menge $\mathscr{M}$.\\
        Schlüssel sind Elemente eines Menge $\mathscr{K}$, die als Schlüsselraum bezeichnet wird.\\
        Die Verschlüsselungsverfahren bestehen aus einem Paar von Funktionen zur Verschlüsselung ($E$) und Entschlüsselung ($D$):
        $$E:\mathscr{K}\times\mathscr{M}\rightarrow\mathscr{M}$$
        $$D:\mathscr{K}\times\mathscr{M}\rightarrow\mathscr{M}$$
        Hierbei sind die definierten Abbildungen bijektiv ($D_k:=E_k^{-1}$):
        $$E_k:\mathscr{M}\rightarrow\mathscr{M},\space E_k(m):=E(k,m)$$
        $$D_k:\mathscr{M}\rightarrow\mathscr{M},\space D_k(m):=D(k,m)$$
        Die Nachrichtenmenge $\mathscr{M}$ besteht in Realität aus einer endlichen Folgen (Tupeln) von Bit- oder Bytewerten.
        Diese können entweder die gleiche Länge besitzen (Blockverschlüsselung) oder von beliebiger Länge sein (Stromverschlüsselung).
        $$\mathscr{M} = \mathscr{Z}^n = \{(z_1,z_2,...,z_n)\mid z_i\in\mathscr{Z}\} \text{ für ein festes } n\in \mathbb{N} \text{ (Blockverschlüsselung)}$$
        $$\mathscr{M} = \mathscr{Z}^{>0} = \bigcup_{n\in\mathbb{N}} \mathscr{Z}^n =  \{(z_1,z_2,...,z_n)\mid z_i\in\mathscr{Z}, n\in\mathbb{N}\} \text{ (Stromverschlüsselung)}$$ 

    \section{Schlüsselaustausch}
        Um mithilfe eines symmetrischen Schlüssels Daten austauschen zu können muss der Schlüssel auf eine Sichere Art und Weise ausgetauscht werden.
        Dies ist zwar offline möglich, stellt allerdings kein praktikables Verfahren für die Kommunikation im Internet dar.
        Daher werden für einen sicheren Schlüsselaustausch über eine unsichere Infrastruktur asymmetrische Verschlüsselungsverfahren benötigt.
    
    \section{Angriffsszenarien}
        Da für eine effiziente Entschlüsselung einer Geheimtextnachrichten die Kenntnis des Schlüssels essentiell ist versuchen die meisten Angriffe diesen herauszufinden.

        \subsection{Ciphertext-only Angriffe}
            \begin{tabbing}
                Vorraussetzung: \= ein oder mehrere Geheimtexte $c_i=E_k(m_i)$ bekannt\\
                Angriffsziel: \> Bestimmung von $m$ oder von $k$
            \end{tabbing}

        \subsection{Known-plaintext Angriffe}\label{known-plaintext}
            \begin{tabbing}
                Vorraussetzung: \= Geheimtext $c=E_k(m)$ und eine Reihe von bekannten Paaren $(m_i,E_k(m_i))$ sind bekannt\\
                Angriffsziel: \> Bestimmung von $m$ oder von $k$
            \end{tabbing}
        
        \subsection{Chosen-plaintext Angriffe}\label{chosen-plaintext}
            \begin{tabbing}
                Vorraussetzung: \= Geheimtext $c=E_k(m)$ und für eine Reihe von beliebig vorgegebenen Klartextnachrichten $m_i$ kann die zugehörige Geheimtextnachricht $c_i=E_k(m_i)$ errechnet werden\\
                Angriffsziel: \> Bestimmung von $m$ oder von $k$
            \end{tabbing}
        
    \section{Brute-Force Angriffe}\label{brute-force}
        Da die Vorraussetzung für ein gutes Verschlüsselungsverfahren ist, dass es nicht \textbf{effizient} entschlüsselt werden kann (siehe \ref{kerckhoff}) muss die \textbf{Effizienz} definiert sein.
        An dieser Stelle setzen Brute-Force Angriffe an.
        Sie versuchen wie der Name schon sagt mit roher Rechenleistung den Schlüssel zu ermitteln.\\
        \subsection{Beispiel: Brute-Force Angriff auf $k$}
            Unter der Annahme, dass ein known-plaintext Angriff (siehe \ref{known-plaintext}) vorliegt lässt sich der Schlüssel bestimmen,
            indem alle möglichen Schlüssel $k$ des Schlüsselraums $\mathscr{K}$ \say{ausprobiert} werden.
            Hierbei können für die einzelnen bekannten Klartextnachrichten mehrere Schlüssel passen:
            $$\mathscr{K}_i := \{\tilde{k}\in \mathscr{K} \mid E_{\tilde{k}}(m_i)=c_i\}$$
            Bei einer ausreichenden Menge bekannter Klartextnachrichten lässt sich der Schlüssel aus der Schnittmenge der möglichen Schlüssel bestimmen:
            $$\bigcap_{i=1}^N \mathscr{K}_i=\{k\}$$

        \subsection{Beispiel: Brute-Force Angriff auf $m$}
            Liegen die Vorraussetzungen für einen chosen-plaintext Angriff vor, so kann die Klartextnachrichten herausgefunden werden,
            indem alle möglichen Klartextnachrichten $\tilde{m}\in\mathscr{M}$ \say{ausprobiert} werden:
            $$E_k(\tilde{m}) = c = E_k(m) \Longrightarrow \tilde{m}=m$$
        
        \subsection{Anforderungen zum Schutz vor Brute-Force}
            \begin{enumerate}
                \item Es soll keinen Angriff auf den Schlüssel $k$ geben, der durchschnittlich weniger als $\frac{|\mathscr{K}|}{2}$ Ver- oder Entschlüsselungsoperationen braucht.
                \item Es soll keinen Angriff auf die Klartextnachricht $m$ geben, der durchschnittlich weniger als $\min \big\{\frac{|\mathscr{K}|}{2}, \frac{|\mathscr{M}|}{2} \big\}$ Ver- oder Entschlüsselungsoperationen braucht.
            \end{enumerate}
        
    \section{Wörterbuchangriffe}
        Nachrichtenpaare (Geheim- und Klarttext), die mithilfe eines Schlüssels $k$ verschlüsselt wurden können in einem Wörterbuch abgespeichert werden.
        Mithilfe des Wörterbuchs können diese Paare jederzeit entschlüsselt werden.
        Zudem kann für einen chosen-plaintext Angriff (siehe \ref{chosen-plaintext}) ein Wörterbuch mit häufig vorkommenden Wörtern erstellt werden, 
        sodass eine Entschlüsselung in wesentlich kürzerer Zeit möglich wird.
        
        \subsection{Schutz vor Wörterbuchangriffen}
            Um einem Wörterbuchangriff vorzubeugen ist es wichtig, dass sich der Geheimtext bei jeder Verschlüsselung des gleichen Klartextes unterscheidet.
            Dies wird meist dadurch erreicht, dass die Klartextnachricht vor Anwendung des Verschlüsselungsverfahrens abgeändert wird.
            Meist wird hierfür eine Nonce (Number used Once) verwendet.
            Die Nonce kann ein Zähler, ein Zeitstempel oder eine Zufallszahl sein.
            Der Nonce-Wert muss beiden Seiten bekannt sein.
            Hierbei kann er entweder mitverschlüsselt übertragen werden oder besteht aus einem Wert (z.B. Zähler), der beiden Seiten bekannt ist.

            \subsubsection{Nonce-Verschlüsselung}
                Ein Nonce-Wert $v\in\mathscr{M}$ wird dazu genutzt die Klartextnachricht $m\in\mathscr{M}$ abzuändern:
                $$\tilde{m}=m+v$$
                Anschließend wird die veränderte Nachricht verschlüsselt:
                $$c = E_k(\tilde{m})$$
                Für die Entschlüsselung wird der Schlüssel $k$ und der Nonce-Wert $v$ benötigt:
                $$m=D_k(c)+v$$