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
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 |
The client-side is implemented as an Android App, allowing users to establish a secured communication channel, as described below:
- 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
- Send and receive messages from server
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).
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.
In order to run 'server.py', the following python modules must be included in your available modules:
- pycrypto
- pyDHE