GithubHelp home page GithubHelp logo

bfreitas16 / secure-communication Goto Github PK

View Code? Open in Web Editor NEW
1.0 1.0 0.0 1.14 MB

Highly Dependable Location Tracker System

License: Apache License 2.0

Shell 1.84% Java 98.05% Dockerfile 0.11%
byzantine-fault-tolerance symmetric-key-cryptography assymetric-key-cryptography keystore shared-memory byzantine-atomic-register byzantine-regular-register reliable-broadcast byzantine-reliable-broadcast double-echo-broadcast

secure-communication's Introduction

Secure-Communication

The world pandemic we live in calls for tools for dependable location tracking and contact tracing. The goal of the project is to design and implement a “Highly Dependable Location Tracker”.

Table of Contents

System Architecture Overview

System

Communication between entities

  • All communication between Client and Server are encrypted and properly signed
  • All communication between Special Client and Server are encrypted and properly signed
  • All communication between Client and Client is in clear text but properly signed
  • All communication between Special Client and Client is in clear text but properly signed

  • Client can submit a report and obtain his reports from Server
  • Client cans ask for proofs to other Clients
  • Special Client can obtain report of valid users and obtain the users at a specific location at a given time
  • [EXTRA - Testing: Special Client can submit reports to Server and ask for proofs to other Clients (to act as a malicious user)]

Deployment and Testing

Deployment

To deploy the project, the host computer requires to have Apache Maven, PostgreSQL installed and the JDK installed. The following instructions are meant for linux operative systems (tested on Ubuntu 20.04):

Configuring the database:

  • The database must operate locally on port 5432 with the user name 'postgres' and password 'root'. (This must be done in such a way that the connection url is 'jdbc:postgresql://localhost:5432/sec'). To change the password of the default user postgres you need to connect to the psql instance (sudo -u postgres psql) and execute the command "ALTER USER postgres WITH PASSWORD 'root';"
  • Create a database with the name 'sec': "sudo -u postgres createdb sec"

(This guide can be followed for the configuration https://www.digitalocean.com/community/tutorials/how-to-install-postgresql-on-ubuntu-20-04-quickstart-pt)

Configuring the clients and servers:

  • Start 3 different terminals.
  • Navigate to the "deploy" folder.
  • Execute in the first terminal "sudo ./deploy_server.sh" and await around 15 seconds until you get the message that the server deployment is complete.
  • Execute in the second terminal "sudo ./deploy_clients.sh".
  • Execute in the third terminal "sudo ./deploy_special_user.sh".

The output of the API's (clients & server) will be printed to each terminal, so it can become very confusing to observe what is happening, for that reason the deployment script will log all information printed to the logs folder e.g. "../deploy/logs/server_logs.txt". You can observe the log of each API in particular with the command "watch tail -n 15 server_logs.txt".

After executing the command there will be an initial delay of around 5 seconds before the clients start automatically sending location reports to the server.

Example organization: Help COmmand

Testing

To test the functionalities of the project and possible attacks, the special user has a couple commands implemented which have byzantine cases implemented. Those cases can be executed throught the commands "obtainreporttest case" (for server->client attacks), "submitreporttest case" (for client->server attacks) and "gatherproofstest case" (for attacks between clients).

To see all test possibilities execute the command "help" in the special user terminal.

Help COmmand

secure-communication's People

Contributors

bfreitas16 avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.