summaryrefslogtreecommitdiffstats
path: root/ausarbeitung/Friend_Finder.tex.backup
diff options
context:
space:
mode:
authorPatrick Hornecker2010-02-11 18:06:06 +0100
committerPatrick Hornecker2010-02-11 18:06:06 +0100
commit1428440cfffe73e75320dde46d8afb3afe9fced5 (patch)
tree41e91c24b50e7227fe6d3fe6b0e1e768de5f55f5 /ausarbeitung/Friend_Finder.tex.backup
parentkey bugs... (diff)
downloadfriendfinder-1428440cfffe73e75320dde46d8afb3afe9fced5.tar.gz
friendfinder-1428440cfffe73e75320dde46d8afb3afe9fced5.tar.xz
friendfinder-1428440cfffe73e75320dde46d8afb3afe9fced5.zip
tex source
Diffstat (limited to 'ausarbeitung/Friend_Finder.tex.backup')
-rw-r--r--ausarbeitung/Friend_Finder.tex.backup158
1 files changed, 158 insertions, 0 deletions
diff --git a/ausarbeitung/Friend_Finder.tex.backup b/ausarbeitung/Friend_Finder.tex.backup
new file mode 100644
index 0000000..33904f7
--- /dev/null
+++ b/ausarbeitung/Friend_Finder.tex.backup
@@ -0,0 +1,158 @@
+\section{Friend Finder}
+
+Die eingangs beschriebene Software hat den Namen \textit{Friend Finder} und wurde im Rahmen dieser Arbeit mit fast allen
+aufgezählten Funktionen realisiert. Das fotographieren des Barcodes sowie der Gruppenchat sind in der Implementation nicht
+enthalten. Im folgenden wird auf die Verwendeten Verfahren sowie Bibliotheken, die zur Realisierung notwendig waren, eingegangen.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection{Verwendete Verfahren und Bibliotheken}
+
+\textit{Friend Finder} wurde so konzipiert, dass die Graphische Darstellung ohne großen Aufwand vom den restlichen
+Teilen der Software abgekoppelt und durch eine andere, darstellende Bibliothek ersetzt werden kann. Somit
+könnte man \textit{Enlightenment} durch eine andere Art der Darstellung austauschen, ohne dabei die Funktionalität der
+zugrunde liegenden Komponenten zu zerstören. \newline
+Da das ver- und entschlüsseln der Daten möglichst wenig Rechenaufwand erzeugen und der Schlüsselaustausch nicht zu
+kompliziert sein soll, nutzt das Programm ein symmetrisches Verschlüsselungsverfahren. \newline
+\textit{Abbildung 3} zeigt den Kommunikationsaustausch von \textit{Friend Finder}. Der \textit{Message Sender} ist für das
+Versenden und Empfangen der Textnachrichten zuständig, \textit{Sender} sendet die eigene Position, \textit{Receiver} empfängt
+die Positionen der anderen Nutzer und sendet Acknowledgements an die teilnehmenden \textit{Sender}. Alle drei Teile geben ihre
+empfangenen Daten an die \textit{GUI} weiter, welche sie mit Hilfe von \textit{Enlightenment} ausgibt.
+
+\begin{figure}[h]
+\centering
+ \includegraphics[width=10cm]{Bilder/ablauf}
+ \caption{\textit{Friend Finder} Nachrichtenaustausch}
+\end{figure}
+
+\subsubsection{Grafisches Benutzeroberfläche}
+
+Zum erstellen der Oberfläche wurde \textit{Enlightenment} verwendet. Diese Bibliothek stellt alle benötigten Funktionen bereit und
+bietet eine Fülle an vordefinierten Oberflächenelement. Der gesammte Programmcode der Benutzeroberfläche wurde in einer Datei
+zusammengefast (\textit{gui.c}). Diese Tatsache vereinfacht das Erhalten der Modularität, da einfach nur diese Datei
+durch eine andere ersetzen werden muss um einen anderen Typ von Oberfläche zu benutzen. \newline
+In der der Datei \textit{gui.c} sind alle Funktionen enthalten um die Oberflächenelement zu erzeugen und zu platzieren. Um die
+gewünschte Funktionalität der einzelnen Elemente zu realisieren wurden auch die Aufrufe der benötigten Funktionen aus anderen
+Modulen in dieser Datei implementiert. \newline
+Wie schon erwähnt, wurde die Graphische Nutzeroberfläche mit Hilfe von Bibliotheken aus dem \textit{Elementary}-Paket
+realisiert.
+
+\subsubsection{Versenden der Nachrichten}
+
+Um Daten im Allgemeinen zu versenden wurde das \textit{IRC}-Protokoll \citep{IRC} verwendet. Die
+Vorteile dieses Protokolles liegen in seiner weiten Verbreitung, einer ausgedehnten Serverstruktur, sowie in dessen
+Stabilität.\newline
+
+In der Datei \textit{msg\_sender.c} sind alle Funktionen und Aufrufe implementiert, welche nötig sind um die Verbindung zum
+\textit{IRC-Server} zu erstellen und die Nachrichten zu verschicken. Um eine Verbindung zu einem gegebenen \textit{IRC-Server} zu
+erstellen muss eine \textit{IRC-Session} initialisiert werden. Diese \textit{Session} beinhaltet Informationen wie zum Beispiel
+den \textit{Nickname} des Benutzers oder die \textit{IP-Adresse} des Servers. Nachdem diese \textit{Session} gestartet wurde,
+kann man nun durch das Aufrufen der Funktion "\textit{set\_txt\_msg(char* msg)}" die Nachricht versenden. Wird eine Nachricht
+empfangen so wird diese an die Funktion "\textit{show\_message(char* msg)}" , welcher zur Benutzeroberfläche gehört, übergeben.
+Bei der Implementerierung des Nachrichtenversandes ist eine Besonderheit zu erwähnen. Das genutzte Verschlüsselungsverfahren
+\textit{Blowfish} wurde seitens der \textit{OpenSSL}\citep{OpenSSL} Bibliothek als \textit{Blockcipher} implementiert. Das
+bedeutet, das immer nur maximal 64 Bit Nachrichten verschlüsselt werden können. Da in der Programmiersprache \textit{C} dies genau
+acht ASCII-Zeichen entspricht, werden alle zu sendenden Nachrichten in Blöcke der Größe acht aufgeteilt, versendet und beim
+Empfänger wieder zusammengesetzt. \newline
+Ein weiterer wichtiger Unterschied zu den Modulen Senden und Empfangen von \textit{GPS}-Positionen ist die Tatsache, dass bei
+diesem Programmteil Sender und Empfänger in der gleichen Datei implementiert wurden. Der Grund hierfür ist, dass man hier nicht
+zwischen mehreren Sendern oder Empfängern unterscheiden muss, und diese zwei Teile hier somit nicht komplett getrennt voneinander
+arbeiten müssen.\newline
+
+Um Nachrichten zu versenden wurde für dieses Projekt die \textit{IRC-Client Bibliothek}\citep{libircclient} verwendet. Diese
+\textit{library} bietet verschiedene Funktionen um eine Verbindung mit einem \textit{IRC-Server} zu erstellen und Nachrichten an
+diesen zu senden, sowie eingehende Nachrichten zu empfangen.\newline
+Zur Ver- und Entschlüsselung der gesendeten Nachrichten, sowie der Positionsdaten wird die Bibliothek
+des \textit{OpenSSL-Projekts}\citep{OpenSSL}, namens \textit{libcrypto}, verwendet. Hierzu werden die Daten mit dem
+\textit{Blowfish-Algorithmus} verschlüsselt. Bei diesem Algorithmus handelt es sich um ein symmetrisches
+Verfahren, bei welchem alle Teilnehmer den gleichen privaten Schlüssel zum ver- sowie entschlüsseln nutzen.
+
+\subsubsection{Versenden der eigenen Position}
+
+Der benötigte Programmcode zum Versenden der eigenen Position ist in der Datei \textit{sender.c} zu finden. Auch hier muss zuerst
+eine \textit{IRC-Session} initialisiert werden um danach die Position zu versenden. Der Ablauf beim Senden der Positionen erfolgt
+in einer vorgegebenen Reihenfolge. Zuerst wird der verschlüsselte Längengrad, danach der verschlüsselte Breitengrade gesendet.
+Daraufhin werden solange keine Daten mehr gesendet, bis der Empfänger eine Bestätigung an den \textit{IRC-Kanal} sendet. Diese
+Bestätigung ist unverschlüssel. Kommt dieses \textit{Acknowledgement} beim Sender an, so versendet dieser wieder ein
+\textit{Latitude/Longtitude Paar}.\newline
+
+Auch hier wird, wie beim Versenden der Nachrichten zum verschlüsseln der \textit{Blowfish-Algorithmus} aus \textit{libcrypto},
+sowie \textit{libircclient} zum versenden der Daten genutzt.
+
+\subsubsection{Empfangen der eigenen Position}
+
+noch nicht final....empfänger empfängt nachricht, ordnet sie, leitet sie zum zeichnen weiter....grob gesehen
+
+\subsubsection{Erzeugen eines 2D-Barcodes}
+
+Die Datei \textit{barcode.c} beinhaltet die Funktionen zum erstellen eines 2D-Barcodes. Hierzu wird die Funktion
+"\textit{generate\_barcode(char* key)}", mit einer Zeichenkette als Übergabeparameter, aufgerufen. Aus dieser Zeichenkette wird
+dann ein Barcode erstellt, welcher im darauf folgenden Schritt als \textit{.png} Datei auf das Speichermedium geschrieben wird.
+Zum erstellen des Barcodes wurde die offene Bibliothek \textit{qrencode} genutzt. Diese erstellt aus einer Zeichenkette einen
+2D-Barcode. Aus den Bilddaten dieses Barcodes wurde mit \textit{libpng} eine \textit{.png} Datei erstellt.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection{Analyse}
+
+Das Ziel war es mit \textit{Friend Finder} Daten verschlüsselt zu übertragen. Es soll dabei ein möglichst geringer
+Berechnungsaufwand entstehen um die Daten zu verschlüsseln, sowie möglichst wenig Datenoverhead produziert und versendet werden.
+Unter Datenoverhead werden die Hintergrunddaten gesehen, welche versendet werden um zum Beispiel die Verbindung
+zwischen Client und Server aufrecht zu erhalten oder um zu kontrollieren ob Server oder Client noch verfügbar sind. Diese Daten
+ sind von Interesse da mit vielen versendeten Daten ein höherer Anspruch des Rechenkerns einhergeht, was wiederrum in einem
+höheren Stromverbrauch resultiert.\newline
+
+Im folgenden Teil wird der erzeugte Datenverkehr von \textit{Friend Finder} analysiert. Ein Hauptaugenmerkt wird hierbei vor allem
+auf die Packetgröße, sowie die Menge der versendeten Datenpakete geworfen. Der \textit{Traffic} wurde mit Hilfe des Programmes
+\textit{Wireshark} \citep{Wireshark} untersucht.Wie bereits erwähnt wird zum Versenden der Nachrichten das \textit{IRC-Protokoll}
+verwendet. In dieser Testumgebung wurde die Software \textit{IRCD-Hybrid} genutzt. Der Server lief auf dem gleichen Computer wie
+der Client und wurde über das \textit{localhost} Interface mit dem Client verbunden. \newline
+
+Die Analyse ist in drei Teile aufgeteilt. Als erstes wird auf den allgemein entstehenden Datenverkehr eingegangen, welcher
+bei Verbindungsaufbau, sowie bei Beenden der Verbindung entsteht. Der zweite Teil beschäftigt sich mit dem Versenden sowie
+Empfangen von Nachrichten. Im letzten Teil dieser Analyse wird auch das dritte Feature, dass Versenden und Empfangen von
+Positionen, unter die Lupe genommen.
+
+\subsubsection{Allgemeiner Datenverkehr}
+
+Bei Messung des allgemeinen Datenaufkommens mit eine normalen \textit{IRC-Clients}, hier \textit{X-Chat}, ergeben sich folgender
+Datenverkehr. \newline
+Beim Verbindungsaufbau sendet der \textit{IRC}-Server zuerst ein Paket mit Informationen wie Limit der \textit{Channels}
+oder Anzahl der aktiven Benutzer. Dieses Paket hatte in der Versuchsumgebung eine Größe von 1090 Bytes. Hiervon müssen noch 20
+Bytes \textit{IP-} und 32 Byte \textit{TCP-Header} abgezogen werden. Somit sind die hat das Datenfeld eine Größe von 1038 Bytes.
+Bei im folgenden genannten Paketgrößen sind diese 52 Byte schon abgezogen. \newline
+Wenn im nächsten Schritt der Benutzer nun eine \textit{Channel} beitritt so sendet dieser drei Pakete an den Server. Diese
+beinhalten den Namen des \textit{Channels} dem beigetreten werden soll, eine Anfrage der aktiven Nutzer in diesem \textit{Channel}
+sowie welche Rechter der beitretende Nutzer in diesem \textit{Channel} inne hat. Diese drei Pakete haben alle die Größe von 26
+Byte. Ist die Verbindung zwischen Client und Server aufgebaut so sendet der Server alle 30 Sekunden ein \textit{Ping} Paket an den
+Client, welches dieser mit einem \textit{Pong} beantwortet. Diese Pakete haben eine Größe von 40 Byte für die \textit{Ping}
+Nachricht und 58 Byte für die beantwortende \textit{Pong} Nachricht. Alle 60 Sekunden versendet der Client eine Anfrage, welche
+Teilnehmer sich im \textit{Channel} befinden. Diese Nachricht von Client zu Server ist 25 Byte groß. Die Antwort hierzu ist
+abhängig von der Anzahl der Benutzer. Ist nur ein Benutzer im \textit{Channel} so ist sie 151 Bytes groß, bei zwei ist sie schon
+233 Byte groß. Wird eine Verbindung beendet, so schickt der Client noch eine \textit{Quit} Nachricht an den Server. \newline
+
+\subsubsection{Versenden und Empfangen von Nachrichten}
+
+Um das Versenden von Nachrichten zu evaluieren wurde "Hello World" als Testnachricht benutzt. Der \textit{Blockcipher} von
+\textit{Friend Finder} teilt den Satz "Hello World" in zwei Teile auf: "Hello " und "World". Diese werden dann von \textit{TCP}
+aufgrund der Fenstergröße in ein Paket gepackt. Das gesamte Paket hat die größe von 147 Bytes, wobei \textit{TCP-}
+und \textit{IP-Header} in der Summe auch wieder mit 52 Byte abzuziehen sind. Somit haben die Daten eine Größe von insgesamt 95
+Bytes.\newline
+Beachtet man dass ein \textit{char} in \textit{C} die Größe von einem Byte hat und der Beispielsatz aus elf Zeichen besteht, so
+ist dieser unverschlüsselt 11 Byte groß. Somit vergrößern sich die Daten nach der Verschlüsselung um circa den Faktor 8,6.\newline
+Wenn $h$ die Größe des \textit{TCP-Headers} und $t$ die Anzahl der Zeichen der unverschlüsselten Nachricht ist, so ergibt sie die
+Länge der zu versendenden Nachricht aus: $h + (t * 2,6)$.
+
+\subsubsection{Versenden und Empfangen von Positionen}
+
+\subsubsection{Fazit der Auswertung}
+
+Zur Analyse des Allgemeinen Datenverkehrs ist zu sagen dass Aufgrund der Tatsache dass das \textit{IRC-Protokoll}
+auf \textit{TCP/IP} bassiert, eine großer Overhead an Paketen versandt wird. Somit werde wesentlich mehr Pakete als
+nur die benötigten Daten verschickt. Hinzu kommen noch Pakete welche zur ständigen Kommunikation zwischen Server und
+Client ausgetauscht werden.
+
+Um den den von \textit{TCP} generierten Datenoverhead zu minimieren, wäre auch das versenden von Daten über \textit{UDP}
+interessant. Dies gilt weniger für das versenden der Textnachrichten sondern eher für das versenden der Positionen. Hier werden,
+wenn mehrere User aktiv sind, ständig Positionsdaten und Acknowledgements zwischen Server und Clients ausgetauscht. Somit könnte
+durch die Nutzung von \textit{UDP} hier einiges an versendeten Packeten gespart werden.\newline