Skip to content
Snippets Groups Projects
Commit db08a0bb authored by maa's avatar maa
Browse files

Fehlerkorrekturen

parent f512f562
No related branches found
No related tags found
1 merge request!6Added a documentation
......@@ -15,18 +15,18 @@ Ziel des Projektes ist es einen Bot für die Nachrichtenapp Signal zu realisiere
\section{Signal} % Das Ganze hier vllt Kapitel 2
\label{sec:einleitung_Signal}
Signal ist ein kostenfreier quelloffener Messenger der gleichnamigen Stiftung und besticht durch Sicherheit, sowie Datenschutz. Die Signal Technology Foundation \cite{signalfoundationhome} ist eine gemeinnützige US-Amerikanische Stiftung, welche 2013 gegründet wurde. Diese finanziert sich durch Spenden. Dementsprechend verdient Signal im Gegensatz zu beispielsweise Whatsapp kein Geld durch den Einsatz von Werbung oder mit dem Verkauf von Daten der Nutzer*innen. Die Kommunikation wird nach aktuellstem Stand der Technik \cite{signaldprotocolinwhatsapp} \cite{whatsappalternativen} \cite{kasperskysignal} sicher Ende-zu-Ende verschlüsselt und nur auf den Endgeräten gespeichert. Nach Aussage des Gründers Moxie Marlinspike in der New York Times \cite{nytinterview} wird auf den Signal Servern gerade einmal das Datum der Accounterstellung gespeichert, wann sich der User das letzte Mal mit dem Server verbunden hat und temporär noch nicht zugestellte verschlüsselte Nachrichten. Es wird nicht gespeichert Wer mit Wem kommuniziert oder was Inhalt der Gespräche ist. Daher stellt es kein Problem dar, dass für die Server Anbieter wie Amazon oder Google verwendet werden.
Signal ist ein kostenfreier quelloffener Messenger der gleichnamigen Stiftung und besticht durch Sicherheit, sowie Datenschutz. Die Signal Technology Foundation \cite{signalfoundationhome} ist eine gemeinnützige US-Amerikanische Stiftung, welche 2013 gegründet wurde. Diese finanziert sich durch Spenden. Dementsprechend verdient Signal im Gegensatz zu beispielsweise Whatsapp kein Geld durch den Einsatz von Werbung oder mit dem Verkauf von Daten der Nutzer*innen. Die Kommunikation wird nach aktuellstem Stand der Technik \cite{signaldprotocolinwhatsapp} \cite{whatsappalternativen} \cite{kasperskysignal} sicher Ende-zu-Ende verschlüsselt und nur auf den Endgeräten gespeichert. Nach Aussage des Gründers Moxie Marlinspike in der New York Times \cite{nytinterview} werden auf den Signal-Servern lediglich das Datum der Accounterstellung, wann sich der User das letzte Mal mit dem Server verbunden hat und temporär noch nicht zugestellte verschlüsselte Nachrichten gespeichert. Es wird nicht analysiert Wer mit Wem kommuniziert oder was Inhalt der Gespräche ist. Daher stellt es kein Problem dar, dass für die Server Anbieter wie Amazon oder Google verwendet werden.
\subsection{X3DH}
\label{sec:einleitung_Signal_X3DH}
\ac{X3DH} steht für die dreifache Ausführung des Diffi-Hellman Algorithmus mit verschiedenen Schlüsselkombinationen \cite{signalx3dh}, um schlussendlich ein \ac{SK} zu berechnen. Für alle verwendeten Schlüsselpaare werden entweder die Funktionen X25519 oder X448 verwendet, welche beide auf elliptischen Kurven basieren. Dabei werden Schlüsselpaare von den in \ref{sec:einleitung_Signal_XEdDSA_VXEdDSA} beschriebenen Verfahren verwendet.
\ac{X3DH} steht für die dreifache Ausführung des Diffi-Hellman Algorithmus mit verschiedenen Schlüsselkombinationen \cite{signalx3dh}, um schlussendlich einen \ac{SK} zu berechnen. Für alle verwendeten Schlüsselpaare werden entweder die Funktionen X25519 oder X448 verwendet, welche beide auf elliptischen Kurven basieren. Dabei werden Schlüsselpaare von den in \ref{sec:einleitung_Signal_XEdDSA_VXEdDSA} beschriebenen Verfahren verwendet.
\subsubsection{Diffi-Hellman Schlüsselaustausch}
\label{sec:einleitung_Signal_X3DH_Diffi_Hellman_Algorithmus}
Der Algorithmus ist nach den Erfindern Whitfield Diffie und Martin Hellman benannt \cite{diffihellman}. Dieser wurde 1976 veröffentlicht und ermöglicht es einen Schlüssel zwischen zwei Gesprächsteilnehmer*innen auszutauschen ohne diesen zu übermitteln. Für das Beispiel werden die teilnehmenden Personen Alice und Bob genannt.\\
Der Algorithmus ist nach den Erfindern Whitfield Diffie und Martin Hellman benannt \cite{diffihellman}. Dieser wurde 1976 veröffentlicht und ermöglicht es einen Schlüssel zwischen zwei Gesprächsteilnehmer*innen auszutauschen ohne diesen zu übermitteln. Für das folgende Beispiel werden die teilnehmenden Personen Alice und Bob genannt.\\
\begin{enumerate}
\item Für den Schlüsselaustausch einigen sich beide auf eine große Primzahl $g$ und eine maximale Schlüssellänge $n$, welche aktuell üblicherweise entweder 2048 Bit oder besser 4096 Bit groß ist. Diese Zahlen müssen nicht geheimgehalten werden.
\item Anschließend wählen beide Teilnehmer*innen eine Zahl (a für Alice, b für Bob), welche zwischen 0 und $n$ liegt. Die ist der private Schlüssel und wird von Beiden geheim gehalten.
\item Für den Schlüsselaustausch einigen sich Beide auf eine große Primzahl $g$ und eine maximale Schlüssellänge $n$, welche aktuell üblicherweise entweder 2048 Bit oder besser 4096 Bit groß ist. Diese Zahlen müssen nicht geheimgehalten werden.
\item Anschließend wählen beide Teilnehmer*innen eine Zahl (a für Alice, b für Bob), welche zwischen 0 und $n$ liegt. Dies ist der private Schlüssel und wird von Beiden geheim gehalten.
\item Der öffentliche Schlüssel wird mit $A = g^a mod(n)$ für Alice und $B = g^b mod(n)$ für Bob berechnet.
\item Die öffentlichen Schlüssel($A, B$) geben die beidem Teilnehmer*innen dem jeweils anderen bekannt.
\item Zuletzt berechnen Beide jeweils mit $B^a mod(n)$ beziehungsweise $A^b mod(n)$ den gemeinsamen Schlüssel.
......@@ -53,12 +53,12 @@ Die drei Diffi-Hellman Ausführungen sind:
\item EK\textsubscript{A} und SPK\textsubscript{B}
\end{enumerate}
Die drei Ergebnisse werden aneinander gehangen und einer \ac{KDF} übergeben. Das Ergebnis ist der geheime Schlüssel mit dem die Nachricht letztendlich verschlüsselt wird. \\
Sollte optional ein Einmalschlüssel von Bob in dem Schlüsselset enthalten sein wird zusätzlich noch eine vierte Berechnung mit dem EK\textsubscript{A} und OPK\textsubscript{B} durchgeführt und zusammen mit den anderen der \ac{KDF} übergeben.\\
Sollte optional ein Einmalschlüssel von Bob in dem Schlüsselset enthalten sein wird zusätzlich noch eine vierte Berechnung mit dem EK\textsubscript{A} und OPK\textsubscript{B} durchgeführt und zusammen mit den anderen der \ac{KDF} übergeben. Die Funktionsweise des X3DH ist in Abbildung \ref{fig:signalx3dhaufbau} zu sehen.
\begin{figure}[H]
\begin{center}
\includegraphics[width=0.5\textwidth]{X3DH.png}
\caption{Visualisierung des X3DH \cite{signalx3dhaufbau}
\label{fig:statictext}}
\label{fig:signalx3dhaufbau}}
\end{center}
\end{figure}
Nach der Berechnung löscht Alice ihren privaten Einmalschlüssel und berechnet eine Bytesequenz \ac{AD} aus dem IK\textsubscript{A} und IK\textsubscript{B}, welche optional mit weiteren Informationen wie dem Accountnamen ergänzt wird.
......@@ -78,14 +78,14 @@ Analog zu den Berechnungen die Alice für den \ac{SK} durchgeführt hat, verwend
\subsection{Double Ratchet}
\label{sec:einleitung_Signal_Double_Ratchet}
Der Algorithmus wird verwendet um Nachrichten verschlüsselt zwischen zwei Teilnehmer*innen auszutauschen \cite{signaldoubleratchet}. Dabei werden die Schlüssel aus den vorangegangenen Schlüsseln abgeleitet, so dass im Falle eines Leaks nur die Nachricht entschlüsselt werden kann, welche zu jenem geleakten Schlüssel gehört. Daraus können keine früheren oder nachfolgenden Nachrichten entschlüsselt oder die entsprechenden Schlüssel berechnet werden.
Der Double Ratchet Algorithmus wird verwendet um Nachrichten verschlüsselt zwischen zwei Teilnehmer*innen auszutauschen \cite{signaldoubleratchet}. Dabei werden die Schlüssel aus den vorangegangenen Schlüsseln abgeleitet, so dass im Falle eines Leaks nur die Nachricht entschlüsselt werden kann, welche zu jenem geleakten Schlüssel gehört. Daraus können keine früheren oder nachfolgenden Nachrichten entschlüsselt oder die entsprechenden Schlüssel berechnet werden.
Das Herzstück des Algorithmus ist die \ac{KDF}. Dabei wird eine KDF mit einem Schlüssel und Eingabedaten initialisiert und einer der Ausgabeschlüssel wird als KDF Schlüssel für die nächste KDF verwendet. So lässt sich von der Ausgabe nicht auf frühere Schlüssel schließen, selbst wenn die Eingabe bekannt ist und bei genügend Entropie in den Inputs, auch nicht auf zukünftige.
Das Herzstück des Algorithmus ist die \ac{KDF}. Dabei wird eine KDF mit einem Schlüssel und Eingabedaten initialisiert und einer der Ausgabeschlüssel wird als KDF Schlüssel für die nächste KDF verwendet. So lässt sich von der Ausgabe nicht auf frühere Schlüssel schließen, selbst wenn die Eingabe bekannt ist. Bei genügend Entropie in den Inputs lässt sich auch nicht auf zukünftige Schlüssel schließen. Die Visualisierung der dadurch entstehenden KDF Kette lässt sich in Abbildung \ref{fig:kdfchain} nachvollziehen.
\begin{figure}[H]
\begin{center}
\includegraphics[width=0.5\textwidth]{KDFChain.png}
\caption{Visualisierung der KDF Kette \cite{signaldoubleratchetaufbau}
\label{fig:statictext}}
\label{fig:kdfchain}}
\end{center}
\end{figure}
......@@ -95,6 +95,9 @@ Bei dem Double Ratchet Algorithmus gibt es drei Ketten:
\item Sendekette
\item Empfangskette
\end{itemize}
Bei jeder ausgetauschten Nachricht werden neue Schlüssel ausgetauscht, womit der neu berechnete \ac{SK} als Schlüssel für die Stammkette verwendet wird. Dessen Ausgabe wird wiederum als Schlüssel für die Sende- und Empfangskette verwendet und als Diffi-Hellman Ratchet bezeichnet. Die ständige Weiterentwicklung der beiden Ketten und die anschließende Nachrichtenver- oder Nachrichtenentschlüsselung mit deren Ausgaben wird als Symmetric-key Ratchet bezeichnet.
\begin{figure}[H]
\begin{center}
\includegraphics[width=0.6\textwidth]{doubleRatchetDHRatchetSet2_1.png}
......@@ -103,7 +106,7 @@ Bei dem Double Ratchet Algorithmus gibt es drei Ketten:
\end{center}
\end{figure}
Bei jeder ausgetauschen Nachricht werden neue Schlüssel ausgetauscht, womit der neu berechnete \ac{SK} als Schlüssel für die Stammkette verwendet wird. Dessen Ausgabe wird als Schlüssel für die Sende- und Empfangskette verwendet (Diffi-Hellman Ratchet). Die ständige Weiterentwicklung der beiden Ketten und die anschließende Nachrichtenver- oder Nachrichtenentschlüsselung mit deren Ausgaben wird als Symmetric-key Ratchet bezeichnet.
\begin{figure}[H]
\begin{center}
......@@ -124,9 +127,9 @@ Der Double Ratchet ist die Hintereinanderschaltung des DH und des Symmetric-key
\end{figure}
Werden mehrere Nachrichten hintereinander versendet, ohne dass eine Nachricht empfangen wurde, wird die Ausgabe des letzten Symmetric-key Ratchet Durchlaufs als Eingabeschlüssel für den Nächsten verwendet. So ändern sich die Schlüssel für jede gesendete Nachricht.
Da die Nachrichten auf der Empfänger*innen Seite analog durch die Empfängerkette laufen können diese Entschlüsselt werden.
Da die Nachrichten auf der Empfangsseite analog durch die Empfängerkette laufen können diese entschlüsselt werden.
Da so eine starke Abhängigkeit zur richtigen Verarbeitungsreihenfolge entsteht wird bei jeder Nachricht angegeben wie viele Nachrichten in der vorigen Sendekette waren und welche Position die Nachricht in der aktuellen hat. Dies sorgt dafür, dass eine Anzahl vergangener Nachrichten auf dem Endgerät gespeichert werden, für den Fall dass Welche in der falschen Reihenfolge empfangen werden.
Da so eine starke Abhängigkeit zur richtigen Verarbeitungsreihenfolge entsteht wird bei jeder Nachricht angegeben wie viele Nachrichten in der vorigen Sendekette waren und welche Position die Nachricht in der Aktuellen hat. Dies sorgt dafür, dass eine Anzahl vergangener Nachrichten auf dem Endgerät gespeichert werden, für den Fall dass einige in der falschen Reihenfolge empfangen werden.
\subsection{XEdDSA und VXEdDSA}
\label{sec:einleitung_Signal_XEdDSA_VXEdDSA}
......@@ -136,8 +139,8 @@ Mit diesen digitalen Signaturen wird sichergestellt, dass die Absender jene sind
\subsection{Sesame}
\label{sec:einleitung_Signal_Sesame}
Mit Hilfe von asynchronen Schlüsselaustauschverfahren wie X3DH aus Abschnitt \ref{sec:einleitung_Signal_X3DH} können verschlüsselte Nachrichten versendet werden, auch wenn der Empfänger (Bob) zu beginn der Unterhaltung offline ist.
Zudem wird der Schlüssel mit dem Double Ratchet Algorithmus aus Abschnitt \ref{sec:einleitung_Signal_Double_Ratchet} nach jeder Nachricht verändert.
Damit dieser ständige Wechsel von Schlüsseln, aber auch das Hinzufügen und Entfernen von Geräten zu Accounts, sowie das Einspielen von Backups funktioniert wird der Algorithmus Sesame verwendet. Dieser regelt die Sitzungen, indem es immer eine aktive Sitzung pro Gerät gibt mit dem eine Kommunikation stattfindet und bei bedarf Neue erstellt oder Alte gelöscht werden. Sollte eine Nachricht in einer inaktiven Sitzung empfangen werden, so wird Diese zur aktiven Sitzung. Dadurch wird sichergestellt, dass die aktive Sitzung immer jene ist, mit der aktuell kommuniziert wird.
Zudem wird der Schlüssel mit dem Double Ratchet Algorithmus, wie in Abschnitt \ref{sec:einleitung_Signal_Double_Ratchet} beschrieben, nach jeder Nachricht verändert.
Damit dieser ständige Wechsel von Schlüsseln, aber auch das Hinzufügen und Entfernen von Geräten zu Accounts, sowie das Einspielen von Backups funktioniert wird der Algorithmus \ac{Sesame} verwendet. Dieser regelt die Sitzungen, indem es immer eine aktive Sitzung pro Gerät gibt mit dem eine Kommunikation stattfindet und bei Bedarf Neue erstellt oder Alte gelöscht werden. Sollte eine Nachricht in einer inaktiven Sitzung empfangen werden, so wird sie zur aktiven Sitzung. Dadurch wird sichergestellt, dass die aktive Sitzung immer jene ist, mit der aktuell kommuniziert wird.
\subsubsection{Nachrichtenversand}
\label{sec:einleitung_Signal_Sesame_Nachrichtenversand}
......@@ -145,8 +148,8 @@ Die zu sendende Nachricht wird verschlüsselt und mit der Empfänger \ac{IK}, so
\subsubsection{Nachrichtenempfang}
\label{sec:einleitung_Signal_Sesame_Nachrichtenempfang}
Beim Empfang wird vom Server die verschlüsselte Nachricht, sowie UserID und GeräteID gesendet. Falls bisher noch keine Kommunikation mit dem Sender stattgefunden hat, werden die öffentlichen Schlüssel aus dem Nachrichten Header extrahiert und eine neue Sitzung mit den empfangenen Daten erstellt.
Sollte bereits eine Sitzung existiert haben und diese inaktiv ist, so wird Sie wieder aktiviert.
Beim Empfang wird vom Server die verschlüsselte Nachricht, sowie User- und GeräteID gesendet. Falls bisher noch keine Kommunikation mit dem Sender stattgefunden hat, werden die öffentlichen Schlüssel aus dem Nachrichten-Header extrahiert und eine neue Sitzung mit den empfangenen Daten erstellt.
Sollte bereits eine inaktive Sitzung existieren wird sie reaktiviert.
\section{Signal-CLI}
......
No preview for this file type
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment