/Encrypted-Server-Android-App

Implementation of an encrypted bidirectional communication channel between multiple Android App users and a Taylor-made multi-threaded server in python

Primary LanguagePython

Encrypted-Server-Android-App

TABLE OF CONTENTS

Summary

Server

Android App Client

Technical Details

SUMMARY

Implementation of an encrypted bidirectional communication channel between multiple App users and a Taylor-made multi-threaded server in python

Securing the communication channel is achieved via executing the 'Diffie Hellman' key-exchange protocol which results in the client and server jointly establish a shared, secret, and unique key over an insecure channel. This key is used to encrypt subsequent communications using the 'AES-GCM' encryption which provides high speed of authenticated encryption and data integrity

Server

The server program utilizes multithreading allowing it to handle multiple clients, and serves as an EchoServer - sending each client the message it received.

In addition, the server concurrently maintains two logs which monitor various actions, as described in the following table:

Log Records
userslog.txt data received and sent both encrypted and decrypted, clients' times of connection and IP addresses, and key-exchange success status
out.txt server uptime

Android App Client

The client-side is implemented as an Android App, allowing users to establish a secured communication channel, as described below:

  1. Type in your server I.P address and port number (please see 'Important Note' in the 'Technical Details' Section), and click the 'SECURE CHANNEL' button

image

  1. Send and receive messages from server

image

Technical Details

Important Note

When connecting to the server, type in the 'port' text widget: "8080". The 'port' widget was added in case you wish to establish communication via a different port which in this case, requires you to change the port in 'server.py' as well (line 222).

Outside Network

In order to be able to receive data from an outside network i.e. your server program will be able to communicate with clients which are connected to a different network, you must contact your Internet provider and request a static public I.P.

Python Modules

In order to run 'server.py', the following python modules must be included in your available modules:

  • pycrypto
  • pyDHE