Dieses Kapitel soll die Intention, Zielsetzung und vorbereitende Schritte des Projektes darstellen. Zudem wird die Funktionsweise der Nachrichtenapp Signal beleuchtet werden.
Dieses Kapitel soll die Intention, Zielsetzung und vorbereitende Schritte des Projektes darstellen. Zudem soll die Funktionsweise der Nachrichtenapp Signal beleuchtet werden.
\section{Motivation}
\section{Motivation}
\label{sec:einleitung_Motivation}
\label{sec:einleitung_Motivation}
...
@@ -15,14 +15,7 @@ Ziel des Projektes ist es einen Bot für die Nachrichtenapp Signal zu realisiere
...
@@ -15,14 +15,7 @@ Ziel des Projektes ist es einen Bot für die Nachrichtenapp Signal zu realisiere
\section{Signal}% Das Ganze hier vllt Kapitel 2
\section{Signal}% Das Ganze hier vllt Kapitel 2
\label{sec:einleitung_Signal}
\label{sec:einleitung_Signal}
Signal ist ein kostenfreier, quelloffener Messenger, von gleichnamiger 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. Sie finanziert sich durch Spenden, was dazu führt, dass deren Messenger Signal kein Geld durch den Einsatz von Werbung oder mit dem Verkauf von Nutzerdaten verdient, was einen der wichtigsten Gegensätzen zu anderen Messengern, wie beispielsweise Whatsapp, darstellt. Die Kommunikation wird mit, nach aktuellem Stand der Technik, sicherer Ende-zu-Ende Verschlüsselung gesichert 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 und wann sich der User das letzte Mal mit dem Server verbunden hat. 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 QUELLE 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 und wann sich der User das letzte Mal mit dem Server verbunden hat. 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.
\subsection{XEdDSA und VXEdDSA}
\label{sec:einleitung_Signal_XEdDSA_VXEdDSA}
Mit XEdSA beziehungsweise VXEdDSA sind die Diffi-Hellman Funktionen für eliptische Kurven X25519 und X448 gemeint. VXEdDSA ist eine Erweiterung von XEdDSA und sorgt dafür, dass es eine verifizierbar zufällige Funktion ist. Mit diesen Funktionen können Bytesequenzen signiert werden.\\
Mit diesen digitalen Signaturen wird sichergestellt, dass die Absender jene sind, für die sie sich ausgeben. Dafür wird das Public-Private-Key Verfahren angewendet. In diesem Anwendungsfall werden die Nachrichten mit dem privaten Schlüssel des Absenders verschlüsselt und beim Empfänger mit dem öffentlichen Schlüssel des Absenders entschlüsselt. So wird der Absender verifiziert, da nur der Absender Zugriff auf seinen privaten Schlüssel hat.
\subsection{X3DH}
\subsection{X3DH}
\label{sec:einleitung_Signal_X3DH}
\label{sec:einleitung_Signal_X3DH}
...
@@ -30,7 +23,7 @@ Mit diesen digitalen Signaturen wird sichergestellt, dass die Absender jene sind
...
@@ -30,7 +23,7 @@ Mit diesen digitalen Signaturen wird sichergestellt, dass die Absender jene sind
Der Algorithmus ist nach den Erfindern Whitfield Diffie und Martin Hellman benannt. Dieser wurde 1976 veröffentlicht und ermöglicht es einen Schlüssel zwischen zwei Gesprächsteilnehmern (Alice und Bob) auszutauschen ohne Diesen zu übermitteln.\\
Der Algorithmus ist nach den Erfindern Whitfield Diffie und Martin Hellman benannt. Dieser wurde 1976 veröffentlicht und ermöglicht es einen Schlüssel zwischen zwei Gesprächsteilnehmern auszutauschen ohne diesen zu übermitteln. Für das Beispiel werden die teilnehmenden Personen Alice und Bob genannt.\\
\begin{enumerate}
\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 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 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 Anschließend wählen beide Teilnehmer 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.
...
@@ -42,16 +35,15 @@ Der Algorithmus ist nach den Erfindern Whitfield Diffie und Martin Hellman benan
...
@@ -42,16 +35,15 @@ Der Algorithmus ist nach den Erfindern Whitfield Diffie und Martin Hellman benan
Für die verständlichere Erklärung des Ablaufs und welche Schlüssel verwendet werden, wird beispielhaft von zwei Gesprächsteilnehmern Alice und Bob ausgegangen.\\
Damit eine Kommunikation selbst dann aufgebaut werden kann, wenn Bob offline ist, hinterlegt er bei der Registrierung auf dem Signal Server seinen Identitätsschlüssel, einen signierten und mehrere Einmalschlüssel. Sollten diese nahezu aufgebraucht sein, wird Bob aufgefordert neue Einmalschlüssel auf dem Server zu hinterlegen.
Damit eine Kommunikation aufgebaut werden kann, sollte Bob offline sein, hinterlegt Bob bei der Registrierung auf dem Signal Server seinen Identitätsschlüssel, einen signierten und mehrere Einmalschlüssel. Sollten die Einmalschlüssel nahezu aufgebraucht sein wird Bob aufgefordert neue Einmalschlüssel auf dem Server zu hinterlegen.
Bei dem \ac{X3DH} werden die folgenden Schlüssel beim ersten Gesprächsaufbau von Alice mit Bob eingesetzt:
Bei dem \ac{X3DH} werden die folgenden Schlüssel beim ersten Gesprächsaufbau von Alice mit Bob eingesetzt:
@@ -60,8 +52,8 @@ Die drei Diffi-Hellman Ausführungen sind:
...
@@ -60,8 +52,8 @@ Die drei Diffi-Hellman Ausführungen sind:
\item EK\textsubscript{A} und IK\textsubscript{B}
\item EK\textsubscript{A} und IK\textsubscript{B}
\item EK\textsubscript{A} und SPK\textsubscript{B}
\item EK\textsubscript{A} und SPK\textsubscript{B}
\end{enumerate}
\end{enumerate}
Die drei Ergebnisse werden aneinander gehangen und einer \ac{KDF} übergeben. Das Ergebnis ist der geheime Schlüssel mit dem die Nachricht schlussendlich verschlüsselt wird. \\
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 Keyset 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.\\
\begin{figure}[H]
\begin{figure}[H]
\begin{center}
\begin{center}
\includegraphics[width=0.5\textwidth]{X3DH.png}
\includegraphics[width=0.5\textwidth]{X3DH.png}
...
@@ -69,7 +61,7 @@ Sollte optional ein Einmalschlüssel von Bob in dem Keyset enthalten sein wird z
...
@@ -69,7 +61,7 @@ Sollte optional ein Einmalschlüssel von Bob in dem Keyset enthalten sein wird z
\label{fig:statictext}}
\label{fig:statictext}}
\end{center}
\end{center}
\end{figure}
\end{figure}
Nach der Berechnung löscht Alice ihren privaten Einmalschlüssel und berechnet eine Bytesequenz AD aus dem IK\textsubscript{A} und IK\textsubscript{B}, welche optional mit weiteren Informationen wie den Nutzernamen ergänzt wird.
Nach der Berechnung löscht Alice ihren privaten Einmalschlüssel und berechnet eine Bytesequenz AD aus dem IK\textsubscript{A} und IK\textsubscript{B}, welche optional mit weiteren Informationen wie dem Accountnamen ergänzt wird.
Anschließend kann Alice die erste Nachricht an Bob senden und damit das Gespräch beginnen. \\
Anschließend kann Alice die erste Nachricht an Bob senden und damit das Gespräch beginnen. \\
Diese Nachricht enthält:
Diese Nachricht enthält:
\begin{itemize}
\begin{itemize}
...
@@ -82,11 +74,11 @@ Abhängig von den Sicherheitseinstellungen nutzt Alice den SK oder davon abgelei
...
@@ -82,11 +74,11 @@ Abhängig von den Sicherheitseinstellungen nutzt Alice den SK oder davon abgelei
Analog zu den Berechnungen die Alice für den SK gemacht hat verwendet Bob die entsprechenden privaten Schlüssel und Alice öffentliche Schlüssel. Durch den Zusammenhang des Public-Private-Key Verfahrens erhält Bob den gleichen SK und kann damit die empfangene Nachricht entschlüsseln.
Analog zu den Berechnungen die Alice für den SK durchgeführt hat, verwendet Bob die entsprechenden privaten Schlüssel und Alices öffentliche Schlüssel. Durch den Zusammenhang des Public-Private-Key Verfahrens erhält Bob den gleichen SK und kann damit die empfangene Nachricht entschlüsseln.
\subsection{Double Ratchet}
\subsection{Double Ratchet}
\label{sec:einleitung_Signal_Double_Ratchet}
\label{sec:einleitung_Signal_Double_Ratchet}
Der Algorithmus wird verwendet um Nachrichten verschlüsselt zwischen zwei Gesprächsteilnehmern auszutauschen.
Der Algorithmus wird verwendet um Nachrichten verschlüsselt zwischen zwei Teilnehmer*innen auszutauschen.
@@ -95,73 +87,78 @@ Der Algorithmus wird verwendet um Nachrichten verschlüsselt zwischen zwei Gespr
...
@@ -95,73 +87,78 @@ Der Algorithmus wird verwendet um Nachrichten verschlüsselt zwischen zwei Gespr
\end{center}
\end{center}
\end{figure}
\end{figure}
\subsection{XEdDSA und VXEdDSA}
\label{sec:einleitung_Signal_XEdDSA_VXEdDSA}
Mit XEdSA beziehungsweise VXEdDSA sind die Diffi-Hellman Funktionen für eliptische Kurven X25519 und X448 gemeint. VXEdDSA ist eine Erweiterung von XEdDSA und sorgt dafür, dass es eine verifizierbar zufällige Funktion ist. Mit diesen Funktionen können Bytesequenzen signiert werden.\\
Mit diesen digitalen Signaturen wird sichergestellt, dass die Absender jene sind, für die sie sich ausgeben. Dafür wird das Public-Private-Key Verfahren angewendet. In diesem Anwendungsfall werden die Nachrichten mit dem privaten Schlüssel des Absenders verschlüsselt und beim Empfänger mit dem öffentlichen Schlüssel des Absenders entschlüsselt. So wird der Absender verifiziert, da nur der Absender Zugriff auf seinen privaten Schlüssel hat.
\subsection{Sesame}
\subsection{Sesame}
\label{sec:einleitung_Signal_Sesame}
\label{sec:einleitung_Signal_Sesame}
Mit Hilfe von asynchronen Schlüsselaustauschverfahren wie X3DH \ref{sec:einleitung_Signal_X3DH} können verschlüsselte Nachrichten versendet werden, auch wenn der Empfänger zu beginn der Unterhaltung offline ist.
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 zu beginn der Unterhaltung offline ist.
Zudem wird, mit dem Double Ratchet Algorithmus \ref{sec:einleitung_Signal_Double_Ratchet} , nach jeder Nachricht der Schlüssel verändert.
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 (bei Sesame Session genannt) funktioniert und auch Hinzufügen und Entfernen von Geräten zu Accounts oder das Einspielen von Backups funktioniert wird der Algorithmus Sesame verwendet.
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 sorgt dafür, dass der ständige Sitzungswechsel funktioniert, auch wenn gerade ein Teilnehmer offline ist.
\section{Signal-CLI}
\section{Signal-CLI}
\label{sec:einleitung_SignalCLI}
\label{sec:einleitung_SignalCLI}
Für die Kommunikation mit den Signal Servern wird das Programm\cite{gitsignalcli} verwendet, da es einfach zu benutzen, stabil und open source ist. Das erste Release wurde im Juli 2015 veröffentlicht und wird seitdem stetig weiterentwickelt. Es ist in Java geschrieben, weshalb das Projekt, wie in \ref{sec:einleitung_SignalCLI_Deamon} beschrieben, dauerhaft als deamon läuft und so nicht pro Nachricht/Nutzung die \ac{JRE} neu gestartet werden muss.
Für die Kommunikation mit den Signal Servern wird die \textit{signal-cli}\cite{gitsignalcli} verwendet, da sie einfach zu benutzen, stabil und quelloffen ist. Das erste Release wurde im Juli 2015 veröffentlicht und wird seitdem stetig weiterentwickelt. Es ist in Java geschrieben, weshalb das Projekt, wie in Abschnitt \ref{sec:einleitung_SignalCLI_Deamon} beschrieben, dauerhaft als Deamon läuft und so nicht pro Nachricht/Nutzung die \ac{JRE} neu gestartet werden muss.
\subsection{Installation}
\subsection{Installation}
\label{sec:einleitung_SignalCLI_Install}
\label{sec:einleitung_SignalCLI_Install}
Diese Anleitung beschreibt die Installation von signal-cli auf einem Raspberry Pi 4. Hierbei ist zu beachten, dass frühere Hardwareversionen auf Grund der eingebauten Prozessorgeneration nicht unterstützt werden.
Dieser Abschnitt beschreibt die Installation der signal-cli auf einem Raspberry Pi 4. Hierbei ist zu beachten, dass frühere Hardwareversionen aufgrund der eingebauten Prozessorgeneration nicht unterstützt werden.
Für die Installation und spätere Ausführung sind verschiedene Programme notwendig. Im Falle der Installation auf dem Raspberry Pi muss die signal-cli, sowie einzelne Bibliotheken, manuell kompiliert werden, da keine kompilierte Variante bereitsteht.
Für die Installation und spätere Ausführung sind verschiedene Programme notwendig. Im Falle der Installation auf dem Raspberry Pi müssen die signal-cli, sowie einzelne Bibliotheken manuell kompiliert werden, da keine kompilierte Variante bereitsteht.
\itemInstallation von Gradle\\\lstinline[breaklines=true]|$ sudo apt-get install gradle|
\item Rust\\ Bei der Installation von Rust auf einem Raspberry Pi wird die Installation von "'rustup - The Rust Language installer"' von snapcraft \cite{snapcraftrustup} empfohlen.
\itemInstallation von Rust\\ Bei der Installation von Rust auf einem Raspberry Pi wird die Installation von \textit{rustup - The Rust Language installer} von snapcraft \cite{snapcraftrustup} empfohlen.
\begin{itemize}
\begin{itemize}
\item Installation des Snap Store\\\lstinline[breaklines=true]|$ sudo apt install snapd|
\item Installation des Snap Store\\\lstinline[breaklines=true]|$ sudo apt install snapd|
Signal-cli benötigt die Bibliotheken "'Libsignal-client"'\cite{gitlibsignalclient} und "'Libzkgroup"'\cite{gitlibzkgroup}. Diese werden von GitHub heruntergeladen und anschließend kompiliert.
Die \textit{signal-cli} benötigt die Bibliotheken \textit{Libsignal-client}\cite{gitlibsignalclient} und \textit{Libzkgroup}\cite{gitlibzkgroup}. Diese werden von GitHub heruntergeladen und anschließend kompiliert.
Die kompilierte Bibliothek befindet sich dann im libsignal-client Verzeichnis unter \lstinline[breaklines=true]|target/release/libsignal_jni.so|
Die kompilierte Bibliothek befindet sich dann im Verzeichnis \lstinline[breaklines=true]|libsignal-client| unter \lstinline[breaklines=true]|target/release/libsignal_jni.so|
\item Libzkgroup\\\lstinline[breaklines=true]|$ make libzkgroup |\\
\item Installation der Libzkgroup Bibliothek\\
Mit dem Parameter -j4 kann beispielsweise mit 4 Prozessorkernen kompiliert werden
\lstinline[breaklines=true]|$ make libzkgroup|\\
Optional kann mit dem Parameter -j4 mit vier Prozessorkernen kompiliert werden
\end{itemize}
\end{itemize}
\subsubsection{Kompilierung und Installation von signal-cli}
\subsubsection{Kompilierung und Installation der signal-cli}
Diese Anleitung entspricht der signal-cli Anleitung zum Kompilieren.\cite{gitsignalclibuilding}
Diese Anleitung entspricht der signal-cli Anleitung zum Kompilieren\cite{gitsignalclibuilding}.
\begin{enumerate}
\begin{enumerate}
\item Herunterladen des Git-Repositorys\\\lstinline[breaklines=true]|$ git clone https://github.com/AsamK/signal-cli.git|
\item Herunterladen des Git-Repositorys\\\lstinline[breaklines=true]|$ git clone https://github.com/AsamK/signal-cli.git|
\item mit Gradle kompilieren\\\lstinline[breaklines=true]|$ ./gradlew build|
\item mit Gradle kompilieren\\\lstinline[breaklines=true]|$ ./gradlew build|
\item Einen shell wrapper in "'build/install/signal-cli/bin"' erstellen\\\lstinline[breaklines=true]|$ ./gradlew installDist|
\item Einen shell wrapper im Verzeichnis \lstinline[breaklines=true]|build/install/signal-cli/bin| erstellen\\\lstinline[breaklines=true]|$ ./gradlew installDist|
\item tar Datei in "'build/distributions"' erzeugen\\\lstinline[breaklines=true]| ./gradlew distTar|
\item tar Datei im Verzeichnis \lstinline|build/distributions| erzeugen\\\lstinline[breaklines=true]|$ ./gradlew distTar|
\end{enumerate}
\end{enumerate}
Die in \ref{sec:einleitung_SignalCLI_Install_KompilierungDerSignalCLIBibliotheken} kompilierten Bibliotheken müssen in der kompilierten signal-cli tar ausgetauscht werden.
Die in Abschnitt \ref{sec:einleitung_SignalCLI_Install_KompilierungDerSignalCLIBibliotheken} kompilierten Bibliotheken müssen in der kompilierten signal-cli tar ausgetauscht werden.
\begin{enumerate}
\begin{enumerate}
\item in das Verzeichnis "'signal-cli/build/distributions"' wechseln
\item in das Verzeichnis \lstinline|signal-cli/build/distributions| wechseln
\item tar entpacken\\\lstinline[breaklines=true]|$ sudo ln -sf /opt/signal-cli-"${VERSION}"/bin/signal-cli /usr/local/bin/|
\item tar entpacken\\\lstinline[breaklines=true]|$ sudo ln -sf /opt/signal-cli-"${VERSION}"/bin/signal-cli /usr/local/bin/|
\item libsignal-client aus der jar in "'/opt/signal-cli-*/lib"' löschen\\\lstinline[breaklines=true]|$ zip -d signal-client-java-*.jar libsignal_jni.so|
\item libsignal-client aus der jar in \lstinline|/opt/signal-cli-*/lib| löschen\\\lstinline[breaklines=true]|$ zip -d signal-client-java-*.jar libsignal_jni.so|
\item Die Bibliothek libzkgroup aus der jar löschen\\\lstinline[breaklines=true]|$ zip -d zkgroup-java-*.jar libzkgroup.so|
\item Die Bibliothek libzkgroup aus der jar löschen\\\lstinline[breaklines=true]|$ zip -d zkgroup-java-*.jar libzkgroup.so|
\item Pfad zu den kompilierten Bibliotheken in "'/opt/signal-cli-*/bin/signal-cli"' angeben\\\lstinline[breaklines=true]|JAVA_LIBRARY_PATH="-Djava.library.path=/your/java/library/path"|\\\lstinline[breaklines=true]|exec "$JAVACMD" "$JAVA_LIBRARY_PATH" "$@"|
\item Pfad zu den kompilierten Bibliotheken in \lstinline|/opt/signal-cli-*/bin/signal-cli| angeben\\\lstinline[breaklines=true]|JAVA_LIBRARY_PATH="-Djava.library.path=/your/java/library/path"|\\\lstinline[breaklines=true]|exec "$JAVACMD" "$JAVA_LIBRARY_PATH" "$@"|
\end{enumerate}
\end{enumerate}
...
@@ -170,14 +167,14 @@ Die in \ref{sec:einleitung_SignalCLI_Install_KompilierungDerSignalCLIBibliotheke
...
@@ -170,14 +167,14 @@ Die in \ref{sec:einleitung_SignalCLI_Install_KompilierungDerSignalCLIBibliotheke
Für die Erstellung eines Accounts wird eine Telefonnummer benötigt. Dabei ist der Empfang des Eröffnungscodes per SMS oder Sprachanruf möglich. In dieser Anleitung wird für den Account eine Festnetznummer verwendet und damit die Aktivierung per Sprachanruf. Zu bachten ist, dass bei der Telefonnummer die Ländervorwahl anzugeben ist, diese lautet für Deutschland $+49$.
Für die Erstellung eines Accounts wird eine Telefonnummer benötigt. Dabei ist der Empfang des Eröffnungscodes per SMS oder Sprachanruf möglich. In dieser Anleitung wird für den Account eine Festnetznummer verwendet und damit die Aktivierung per Sprachanruf. Zu bachten ist, dass bei der Telefonnummer die Ländervorwahl anzugeben ist, diese lautet für Deutschland $+49$.
\begin{enumerate}
\begin{enumerate}
\item Registrieren der Telefonnummer "'USERNAME"' ist dabei durch die Telefonnummer zu ersetzen
\item Registrieren der Telefonnummer. \lstinline|USERNAME| ist dabei durch die Telefonnummer zu ersetzen
\begin{itemize}
\begin{itemize}
\item mit SMS Verifikation \lstinline[breaklines=true]|signal-cli -u USERNAME register|
\item mit SMS Verifikation \lstinline[breaklines=true]|signal-cli -u USERNAME register|
\item mit Sprachverifikation \lstinline[breaklines=true]|signal-cli -u USERNAME register --voice|
\item mit Sprachverifikation \lstinline[breaklines=true]|signal-cli -u USERNAME register --voice|
\end{itemize}
\end{itemize}
\item Sollte die Registrierung mit der Fehlermeldung "'Captcha invalid or required for verification"' fehlschlagen, muss ein CAPTCHA gelöst werden.
\item Sollte die Registrierung mit der Fehlermeldung \textit{Captcha invalid or required for verification} fehlschlagen, muss ein \ac{CAPTCHA} gelöst werden.
\begin{enumerate}
\begin{enumerate}
\itemIn einem Browser muss die Signal CAPTCHA Website geöffnet werden \cite{signalcatpchagenerator}
\itemAufruf Signal CAPTCHA Website \cite{signalcatpchagenerator} in einem Browser
\item das CAPTCHA lösen
\item das CAPTCHA lösen
\begin{figure}[H]
\begin{figure}[H]
\begin{center}
\begin{center}
...
@@ -186,7 +183,7 @@ Für die Erstellung eines Accounts wird eine Telefonnummer benötigt. Dabei ist
...
@@ -186,7 +183,7 @@ Für die Erstellung eines Accounts wird eine Telefonnummer benötigt. Dabei ist
\label{fig:statictext}}
\label{fig:statictext}}
\end{center}
\end{center}
\end{figure}
\end{figure}
\item Über die Konsole der Web-Entwickler Werkzeuge kann das Token ausgelesen werden. Im Firefox ist das Shortcut die F12 Taste. Achtung: Die Website hat keinen weiteren Inhalt und ist gänzlich leer.
\item Über die Konsole der Web-Entwickler Werkzeuge kann das Token ausgelesen werden. In den meisten gängigen Browsern ist diese per F12 aufrufbar. Es ist zu beachten, dass die Website keinen weiteren Inhalt hat und somit gänzlich leer ist.
@@ -194,19 +191,20 @@ Für die Erstellung eines Accounts wird eine Telefonnummer benötigt. Dabei ist
...
@@ -194,19 +191,20 @@ Für die Erstellung eines Accounts wird eine Telefonnummer benötigt. Dabei ist
\label{fig:statictext}}
\label{fig:statictext}}
\end{center}
\end{center}
\end{figure}
\end{figure}
Das Token ist hierbei alles nach der Redirect-Adresse "'signalcaptcha://"'.
Das Token ist hierbei der gesamte Inhalt nach der Redirect-Adresse\\\lstinline|signalcaptcha://|
\item Nun wird der Registrierungsbefehl, mit dem Zusatz \lstinline[breaklines=true]|--captcha 03AGdB...._9w|, erneut gestartet
\item Nun wird der Registrierungsbefehl aus Punkt 1, mit dem zusätzlichen Parameter\lstinline[breaklines=true]|--captcha 03AGdB...._9w|, erneut gestartet
\end{enumerate}
\end{enumerate}
\item Der per SMS oder Anruf erhaltene Code wird anstelle von "'CODE"' übergeben \lstinline[breaklines=true]|signal-cli -u USERNAME verify CODE|
\item Der per SMS oder Anruf erhaltene Code wird anstelle von \lstinline|CODE| übergeben\\
Bei der Einrichtung des Deamon Dienstes dient ein Artikel der c't 14/2021\cite{ctsignalartikel} als Grundlage, welcher wiederum auf die SystembusAnleitung von signal-cli aufbaut \cite{gitsignalsystembus}. Dabei wird die signal-cli als Systemd-Dienst eingerichtet, so dass Sie beim Systemstart automatisch gestartet wird. Zudem wird der Dienst im Fehlerfall automatisch neu gestartet.\\
Bei der Einrichtung des Deamon Dienstes dient ein Artikel der c't 14/2021 \cite{ctsignalartikel} als Grundlage, welcher wiederum auf der Systembus-Anleitung der signal-cli aufbaut \cite{gitsignalsystembus}. Dabei wird die signal-cli als Systemd-Dienst eingerichtet, so dass Sie beim Systemstart automatisch gestartet wird. Zudem wird der Dienst im Fehlerfall automatisch neu gestartet.\\
Wie in der c't und dem signal-cli Wiki beschrieben wird ein eigener User für signal-cli eingerichtet. Dies ist eine übliche Praxis, um beispielsweise Zugriffsrechte einfacher regeln zu können. Zudem haben im Anschluss alle User des Systems Zugriff auf die laufende signal-cliSession über den D-Bus.
Wie in der c't und dem signal-cli Wiki beschrieben wird ein eigener User für die signal-cli eingerichtet. Dies ist eine übliche Praxis, um beispielsweise Zugriffsrechte einfacher gestalten zu können. Zudem haben im Anschluss alle User des Systems Zugriff auf die laufende signal-cli-Session über den D-Bus.
Der User "'signal-cli"' für den den Deamon wird über den Befehl \lstinline[breaklines=true]|sudo adduser --system --home /var/lib/signal-cli signal-cli| eingerichtet. Als root-User werden die Standard Konfig- und Servicedateien aus dem signal-cli Verzeichnis mit dem Befehlen \lstinline[breaklines=true]|sudo cp data/org.asamk.Signal.conf /etc/dbus-1/system.d/| und \lstinline[breaklines=true]|sudo cp data/org.asamk.Signal.service /usr/share/dbus-1/system-services/| kopiert.
Der User \lstinline|signal-cli| für den Deamon wird über den Befehl \lstinline[breaklines=true]|sudo adduser --system --home /var/lib/signal-cli signal-cli| eingerichtet. Als root-User werden die Standard Konfig- und Servicedateien aus dem signal-cli Verzeichnis mit dem Befehlen \lstinline[breaklines=true]|sudo cp data/org.asamk.Signal.conf /etc/dbus-1/system.d/| und \lstinline[breaklines=true]|sudo cp data/org.asamk.Signal.service /usr/share/dbus-1/system-services/| kopiert.
\begin{figure}[H]
\begin{figure}[H]
\begin{lstlisting}
\begin{lstlisting}
...
@@ -221,7 +219,7 @@ Der User "'signal-cli"' für den den Deamon wird über den Befehl \lstinline[bre
...
@@ -221,7 +219,7 @@ Der User "'signal-cli"' für den den Deamon wird über den Befehl \lstinline[bre
# JVM always exits with 143 in reaction to SIGTERM signal
# JVM always exits with 143 in reaction to SIGTERM signal
...
@@ -234,9 +232,10 @@ Der User "'signal-cli"' für den den Deamon wird über den Befehl \lstinline[bre
...
@@ -234,9 +232,10 @@ Der User "'signal-cli"' für den den Deamon wird über den Befehl \lstinline[bre
\caption{signal-cli.service % Hier Quelle
\caption{signal-cli.service % Hier Quelle
\label{fig:signalCLIService}}
\label{fig:signalCLIService}}
\end{figure}
\end{figure}
Die in \ref{fig:signalCLIService} dargestellte Service-Datei wird unter "'/etc/systemd/system/signal-cli.service"' abgelegt. Um die Datei dort zu speichern sind ebenfalls root-Rechte notwendig. Mit dem Eintrag \lstinline[breaklines=true]|ExecStart=/usr/local/bin/signal-cli --config /var/lib/signal-cli -u USERNAME daemon --system| wird der Befehl für den Programmaufruf angegeben. Hier ist "'USERNAME"' durch die bei der Accounterstellung \ref{sec:einleitung_SignalCLI_Accounterstellung} angegebene Telefonnummer zu ersetzen.
In das, bei der Accounterstellung des signal-cli Users, angegebenen Home-Verzeichnis werden die in \ref{sec:einleitung_SignalCLI_Accounterstellung} angelegten Kontodaten gespeichert. Über den Befehl \lstinline[breaklines=true]|sudo cp -r ~/.local/share/signal-cli*/var/lib/signal-cli| werden sämtliche Dateien aus dem persönlichen Verzeichnis kopiert. Abschließend wird mit \lstinline[breaklines=true]|sudo chown -R signal-cli /var/lib/signal-cli| eingestellt, dass sämtliche Dateien in dem signal-cli Home-Verzeichnis dem User signal-cli gehören.
Die in Abbildung \ref{fig:signalCLIService} dargestellte Service-Datei wird unter \lstinline|/etc/systemd/system/signal-cli.service| abgelegt. Um die Datei dort zu speichern sind ebenfalls root-Rechte notwendig. Mit dem Eintrag \lstinline[breaklines=true]|ExecStart=/usr/local/bin/signal-cli --config /var/lib/signal-cli -u USERNAME daemon --system| wird der Befehl für den Programmaufruf angegeben. Hier ist \lstinline|USERNAME| wieder wie in Abschnitt \ref{sec:einleitung_SignalCLI_Accounterstellung} zu ersetzen.
In das dem Home-Verzeichnis des Users \lstinline|signal-cli| werden die in Abschnitt \ref{sec:einleitung_SignalCLI_Accounterstellung} angelegten Kontodaten gespeichert. Über den Befehl \lstinline[breaklines=true]|sudo cp -r ~/.local/share/signal-cli* /var/lib/signal-cli| werden sämtliche Dateien aus dem persönlichen Verzeichnis kopiert. Abschließend wird mit \lstinline[breaklines=true]|sudo chown -R signal-cli /var/lib/signal-cli| eingestellt, dass sämtliche Dateien im angelegten Home-Verzeichnis dem gleichnamigen User gehören.
Der Service wird mit dem Befehl \lstinline[breaklines=true]|sudo sytemctl --now enable signal-cli| aktiviert und über \lstinline[breaklines=true]|sudo systemctl start signal-cli| gestartet.\\
Der Service wird mit dem Befehl \lstinline[breaklines=true]|sudo sytemctl --now enable signal-cli| aktiviert und über \lstinline[breaklines=true]|sudo systemctl start signal-cli| gestartet.\\
Mit dem Befehl \lstinline[breaklines=true]|sudo systemctl status signal-cli.service| kann im Anschluss kontrolliert werden, ob die Einrichtung erfolgreich war und ob der Service aktiv ist.
Mit dem Befehl \lstinline[breaklines=true]|sudo systemctl status signal-cli.service| kann im Anschluss kontrolliert werden, ob die Einrichtung erfolgreich war und ob der Service aktiv ist.
...
@@ -248,68 +247,7 @@ Mit dem Befehl \lstinline[breaklines=true]|sudo systemctl status signal-cli.serv
...
@@ -248,68 +247,7 @@ Mit dem Befehl \lstinline[breaklines=true]|sudo systemctl status signal-cli.serv
\end{center}
\end{center}
\end{figure}
\end{figure}
Als "'Hello, World!"' kann abschließend über die Kommandozeile eine Nachricht an einen anderen Signal-Account geschickt werden \lstinline[breaklines=true]|signal-cli --dbus-system send -m "Hello, World!" RECEIVER|. Für \lstinline|RECEIVER| muss die Telefonnummer des Signal-Accounts inklusive Ländervorwahl angegeben werden. Bei dieser Konfiguration ist es nicht notwendig den User mit dem Parameter \lstinline[breaklines=true]|-u USERNAME| angegeben werden, da Dieser in der Service-Datei hinterlegt ist.
Abschließend kann über die Kommandozeile mit \lstinline[breaklines=true]|signal-cli --dbus-system send -m "Hello, World!" RECEIVER| eine Testnachricht an einen anderen Signal-Account geschickt werden. Für \lstinline|RECEIVER| muss die Telefonnummer des Signal-Accounts inklusive Ländervorwahl angegeben werden. Es ist nicht notwendig den User mit dem Parameter \lstinline[breaklines=true]|-u USERNAME| anzugeben, da dieser bereits in der Service-Datei hinterlegt ist.
%
%\section{Klassische Textformatierungen}
%\label{sec:einleitung_formatierung}
%
%Normaler Text ist in \LaTeX{} mit Serifen versehen und im Blocksatz geschrieben. Dies soll die Lesbarkeit des Textes vereinfachen.
%Natürlich können und müssen wichtige Bestandteile hervorgehoben werden. Dies kann wie folgt passieren:
%
%\textbf{Fett} % STRG + B
%
%\textit{Kursiv} % STRG + I
%
%\textsc{Kapitälchen}
%
%\textsf{Serifenlose Schrift }
%
%\textrm{Schrift mit Serifen}
%
%\textsl{geneigt, nicht kursiv}
%
%\texttt{Schreibmaschine}
%
%Text\textsuperscript{hochgestellt}
%
%Text\textsubscript{tiefgestellt}
%
%\lstinline[breaklines=true]|// Code in einer Zeile, bei manchen Pruefer*innen nicht gerne gesehen|
%% Die graue entsteht durch das Kommentarsymbol. Siehe main.tex -> Quellcode. Man beachte, dass auch alle anderen Einfärbungen passieren, auch die selbst definierten.
%% es ist zu empfehlen || anstatt {} für \lstinline zu nutzen, da so die farbliche Hilfe in TeXstudio besser funktionert
%% In den eckigen Klammern kann man weitere Einstellungen vornehmen, wie zum Beispiel einen möglichen automatischen Zeilenumbruch
%% Es funktioniert nur der UTF-8 Zeichensatz, keine Umlaute.
%
%\begin{center}
% Der Text ist nun zentriert,
%\end{center}
%\begin{flushleft}
% jetzt ist er links ausgerichtet,
%\end{flushleft}
%\begin{flushright}
% und nun ist der Text rechtsbündig.
%\end{flushright}
%
%Bei der Textformatierung gilt: Weniger ist mehr.
%Deswegen sollten \textcolor{red}{nicht} \textcolor{blue}{unbedingt} Farben benutzt werden, außer sie dienen zur Hervorhebung im Code.
%In den meisten Fällen reicht es sich auf eine \textit{kursive} oder \textsl{geneigte} Hervorhebung für Eigennamen, Klassen, Objekten oder Dateinamen zu verständigen.
%
%Es ist wichtig, dass "`Anführungszeichen"' \textbf{immer nur für Zitate} und niemals für Hervorhebungen verwendet werden.
%Wenn etwas so umgangssprachlich geschrieben ist, dass man es in Anführungszeichen setzen muss, dann muss eine professionellere Umformulierung gefunden werden.
%\section{Absätze}
%\label{sec:einleitung_absatz}
%Ein neuer Absatz muss immer mit 2x Enter anstatt mit einem oder zwei Backslashes erfolgen.
%
%Der Grund liegt am \LaTeX -Compiler, welcher die doppelte Nutzung der Enter-Taste anders als Backslashes übersetzt. Geübte Prüfer*innen sehen es, wenn man Absätze mit einem \\ oder zwei \\ \\
%Backslashes umsetzt.
%
%\section{Multiple Spalten} % und die Nutzung des Lipsum Packages
%\label{sec:multicolumn}
%\begin{multicols}{2}
%\lipsum[1-2] % Anzahl der einzufügenden Paragraphen. 1-1 ist ebenfalls möglich.
In dieser Dokumentation wird die Vorgehensweise zur Erstellung eines Signal Community Bots dargestellt.
In dieser Dokumentation wird die Vorgehensweise zur Erstellung eines Signal Community Bots dargestellt.
Dieser verwendet das Signal Command Line Interface, um Nachrichten über einen eigenen Signal-Account zu empfangen und zu versenden. Es wurden diverse, von Nutzer*innen erfragte Kommandos eingebaut, die sich in die Kategorien statische Texte, APIs, Crawler, Datenbanken und Diverses einordnen lassen. Alle Funktionen des Bots werden bereits von mehreren Gruppen und ehrenamtlichen Organisationen verwendet, weshalb es auch ein Berechtigungssystem gibt.
Dieser verwendet das Signal Command Line Interface, um Nachrichten über einen eigenen Signal-Account zu empfangen und zu versenden. Es wurden diverse, von Nutzer*innen erfragte Kommandos eingebaut, die sich in die Kategorien statische Texte, APIs, Crawler, Datenbanken und Diverses einordnen lassen. Alle Funktionen des Bots werden bereits von mehreren Gruppen und ehrenamtlichen Organisationen verwendet, weshalb es auch ein Berechtigungssystem gibt.
\\
This documentation describes the procedure for creating a Signal community bot.
This documentation describes the procedure for creating a Signal community bot.
It uses the Signal Command Line Interface to receive and send messages from it's own Signal account. Various user-requested commands have been included, which can be categorized as static texts, APIs, crawlers, databases, and miscellaneous. All of the bot's functions are already used by several groups and volunteer organizations, which is why there is also an authorization system.
It uses the Signal Command Line Interface to receive and send messages from it's own Signal account. Various user-requested commands have been included, which can be categorized as static texts, APIs, crawlers, databases, and miscellaneous. All of the bot's functions are already used by several groups and volunteer organizations, which is why there is also an authorization system.