Skip to content

Latest commit

 

History

History
116 lines (103 loc) · 6.8 KB

README.md

File metadata and controls

116 lines (103 loc) · 6.8 KB

BlueBubble

cas


This is a Decentralised Peer to Peer Chat Application. That makes sure only necessary data is Decentralised whilst the majority is local to the device. Loaded with a modern UI and features other P2P apps lack.

apple Install Now

win Install Now

Account Creation

2

The Demonstration above shows the login proccess - showing that only a username is needed - allowing users to stay anonymous

Adding Other Users

2

(My Machine to the left) | (Virtual Machine to the right)
The Demonstration above shows adding users from two machines on different networks

Messaging

2

(My Machine to the left) | (Virtual Machine to the right)
The Demonstration above shows messaging between two machines on different networks

Notifications

1 1

The Next Steps

Like with every software, it is never truly finished - you can always add new features, make more improvements - so hear is an explanation of the current state of the project - and how I would propose the next step in development would be - if I did decide to develop this software further in the future or if you decide to try :)

Current Architecture Model

2

This model assumes that both devices have already added each other to their contacts - using their Unique ID

Establishing Peer to Peer Connection

🔹 When wanting to send or receive a message - you must open the messaging tab with their contact.
🔹 Your computer searches for a premade connection or then a temporary server that is hosted by the contact
🔹 If none of the above is found - your device becomes the host - and waits for a connection from the contacts IP and Port
🔹 When both devices are connected to the temp server - Port Hole punching occurs and the temp server is terminated
🔹 Now as long as one of the devices keeps the application running they can both exchanges messages - Privately and Securely

Current Downsides

This Current Model Lacks a major feature of offline messaging - due to it being serverless.
Therefore if the contact is offline all the messages sent would not reach them, only to be saved locally on the sender's device
Also, this solution is IP dependant if IP is changed - device will not be able to send and receive messages until IP is set back to original


Proposed Architecture Model

2

This model is based on torrent - distributed file model
This model assumes that all contacts have a unique encryption key between them.

Getting Offline Messages

🔹 When opening the application - your device downloads the latest Database from the other users that are online
🔹 You check if any entries in the DB are older than 5 Days - if so delete them
🔹 All your messages in the DB are encrypted with different encryption keys based on contact
🔹 You decrypt your messages, save them locally to each contact’s chat and delete them from the DB

Sending Offline Messages

🔹 Only if your contact is offline
🔹 You Upload your encrypted message to the DB - where others connected users will download it
🔹 To prevent DDOS and bloating of the DB - upload requests are limited


Downsides

Even Though all of the downsides of the current solution are mitigated with this implementation, there are still downsides to this approach

This relies on at least one user to have the application running as if no one else is connected there is no DB to send and receive data from and therefore it wouldn’t be passed onto the intended user
Due to everyone having each other’s data - a user could theoretically brute force the encryption, therefore they would be able to read your messages sent offline - with that shared individual.
If requests are not handled correctly the DB for everyone would be bloated and involve a large download
Scalability of this solution would be varied - as more people connect the file download is faster and more reliable as more sources to fetch the data from, however would also result in a larger DB size to download

-Summary-

This was a really fun project to work on
I overcame lots of challenge; Improved my knowledge of numerous programming languages; Improved on my design skills; Learned a lot about networking and cybersecurity and most importantly, made something really cool 😎