\chapter{Das RSA-Verfahren}
    Das nach seinen Erfindern R. Rivest, A. Shamir und L. Adleman benannte Verfahren kann sowohl als asymmetrisches Verschlüsselungsverfahren als auch als Signatur-Verfahren verwendet werden.
    Die Funktionsweise basiert auf der folgenden Implikation des kleinen Satzes von Fermat:
    \begin{mybox}
        Es seien $p$ und $q$ verschiedene Primzahlen und $n:=p\cdot q$.
        Es wird ein $r\in\mathbb{Z}$ definiert für das gilt:
        $$\begin{aligned}
            r\equiv&1\hspace{10mm}&(\textbf{mod }(p-1))\\
            r\equiv&1&(\textbf{mod }(q-1))\\
        \end{aligned}$$
        Dann folgt:
        $$z^r=z\hspace{5mm}\forall z\in\mathbb{Z}_n$$
    \end{mybox}
    Zudem stützt sich das RSA-Verfahren für die nicht effiziente Berechenbarkeit des privaten Schlüssel auf das folgende ungelöste Problem:
    \begin{mybox}
        \textbf{Faktorisierungs-Problem (Integer Factorization Problem (IF-Problem))}\\
        Es ist eine Zahl $n\in\mathbb{N}$ gegeben, die mindestens zwei große Primteiler $p$ und $q$ ($p\neq$) hat.
        Das Problem besteht darin nur auf Basis von $n$ die Primteiler zu ermitteln.
    \end{mybox}

    \section{RSA-Schlüsselpaare}
        Im folgenden wird das Verfahren zur RSA-Schlüsselerstellung anhand der Analogie von Alice und Bob erläutert:
        \begin{itemize}
            \item Alice bestimmt zwei verschiedene Primzahlen $p$ und $q$.\\
                Um zu überprüfen, ob eine Zufallszahl eine Primzahl ist wird ein probabilistisches Verfahren angewandt.
            \item Alice berechnet $n=p\cdot q$
            \item Alice berechnet $v=\text{kgV}(p-1,q-1)$\\
                Alternativ kann Alice auch ein Vielfaches von $\text{kgV}(p-1,q-1)$ für $v$ wählen.
                Wichtig ist, dass $r=1+v$ die Bedingungen $r\equiv1\hspace{5mm}(\textbf{mod }(p-1))$ und $r\equiv1\hspace{5mm}(\textbf{mod }(q-1))$ erfüllt.
                Beliebt ist auch $v=(p-1)(q-1)$ zu wählen.
            \item Alice wählt einen \textbf{öffentlichen Exponenten} $e\in\mathbb{Z}_v^*$.\\
                Häufig wird hier in der Praxis die Fermat'sche Primzahl $F_4={2^2}^4+1=2^{16}+1=65537$ gewählt.
                Hierbei muss darauf geachtet werden, dass $e=F_4$ kein Teiler von $p-1$ oder $q-1$ ist.
            \item Alice bestimmt als \textbf{privaten Exponenten} die Inverse $d=e^{-1}\in\mathbb{Z}_v^*$ zu $e$.
            \item Der öffentliche Schlüssel ist $k_{A,\text{pub}}=(n,e)$
            \item Der private Schlüssel ist $k_{A,\text{priv}}=(n,d)$
        \end{itemize}

        \subsection{Beispiel für die Schlüsselpaarerstellung}
            \includegraphics[scale=0.75]{RSA-Schlüsselpaar.png}

    \section{RSA-Verschlüsselungsverfahren}
        Im folgenden wird das RSA-Verschlüsselungsverfahren anhand der Analogie von Alice und Bob erläutert:\\
        Ausgangssituation: Bob möchte eine Nachricht $m$ an Alice schicken
        \begin{itemize}
            \item Bob benötigt den öffentlichen Schlüssel $k_{A,\text{pub}=(n,e)}$ von Alice
            \item Die Nachricht $m$ ist eine Bitfolge, die kleiner ist als $n$ ($m\in\mathbb{Z}_n$)
            \item Bob berechnet die Geheimtextnachricht $c=E_{k_{A,\text{pub}}}(m):=m^e\mod n$ und verschickt sie an Alice
            \item Alice berechnet mit dem privaten Schlüssel $k_{A,\text{priv}}$ die Klartextnachricht:
                $$m=D_{k_{A,\text{priv}}}(c):=c^d\mod n$$
        \end{itemize}
        {\color{red}\textbf{Achtung:}}\\
        Das RSA-Verschlüsselungsverfahren ist, wenn es direkt verwendet wird anfällig für Wörterbuchangriffe, 
        da sich vermutete Nachrichten mit dem öffentlichen Schlüssel verschlüsseln und mit der Geheimtextnachricht $c$ abgleichen lassen.

        \subsection{Beispiel für die Verschlüsselung}
            \includegraphics[scale=0.75]{RSA-Verschlüsselung.png}

        
    \section{Padding}
        Um die Nachrichten vor Wörterbuchangriffen zu schützen ist es sinnvoll sie durch ein Paddingverfahren zu verändern.

        \subsection{Padding nach PKCS\#1}
            Die RSA Laboratories veröffentlichen regelmäßig Public Key Encryption Standards (PKCS).\\
            Im Folgenden wird auf die erste Variante dieser Standards eingegangen:\\
            Eine Nachricht $m$, die als Byte-Array \texttt{M} eine Länge $\text{mLen}\le k-11$ ($k:=\lfloor log_2(n)/8\rfloor+1$) wird wie folgt erweitert:
            $$\texttt{EM}=\texttt{0x00}||\texttt{0x02}||\texttt{PS}||\texttt{0x00}||\texttt{M}$$
            Hierbei ist \texttt{PS} eine Byte-Array, welches aus mindestens 8 Zufallsbytes $\ne\texttt{0x00}$ besteht.
            \texttt{0x02} gibt die Variante der Kodierung an und die \texttt{0x00}-Bytes dienen der Kennzeichnung des Paddings für die Entschlüsselung.\\
            Das PKCS\#1 Verfahren ist potentiell mit dem Bleichenbacher-Angriff (siehe Skript 3 Seite 48(54)) angreifbar, 
            falls sich anhand des Verhalten des Empfängers ein Orakel dafür bilden lässt, ob eine gewählte Nachricht $\tilde{c}$ eine gültig kodierte Nachricht ist.

        \subsection{Optimal Asymmetric Encryption Padding(OAEP)}
            siehe Skript 3 Kapitel 3.2 Beispiel 3.6 (Seite 49(55))

    \section{Das RSA-Signaturverfahren}
        Das RSA-Verfahren kann auch für das Erstellen und Verifizieren einer Signatur (siehe \ref{signature}) verwendet werden.
        Im folgenden wird das RSA-Signaturverfahren anhand der Analogie von Alice und Bob erläutert:\\
        Ausgangssituation: Alice möchte Bob eine Nachricht $m$ schicken, sodass Bob von der Authentizität überzeugt ist und diese auch anderen nachweisen kann.
        \begin{itemize}
            \item Bob benötigt den öffentlichen Schlüssel $k_{A,\text{pub}=(n,e)}$ von Alice
            \item Die Nachricht $m$ ist eine Bitfolge, die kleiner ist als $n$ ($m\in\mathbb{Z}_n$)
            \item Alice erzeugt eine Signatur $s=S_{k_{A,\text{priv}}}(m):=m^d\mod n$ und schickt $m$ und $s$ an Bob
            \item Nach Empfang errechnet Bob mithilfe des öffentlichen Schlüssels $\tilde{m}=s^e\mod n$ und vergleicht $\tilde{m}=m$
        \end{itemize}
        
        \subsection{Beispiel für ein RSA-Signaturverfahren}
            \includegraphics[scale=0.75]{RSA-Signatur0.png}\\

            \includegraphics[scale=0.75]{RSA-Signatur1.png}
