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.
Install Now
Install Now
The Demonstration above shows the login proccess - showing that only a username is needed - allowing users to stay anonymous
(My Machine to the left) | (Virtual Machine to the right)
The Demonstration above shows adding users from two machines on different networks
(My Machine to the left) | (Virtual Machine to the right)
The Demonstration above shows messaging between two machines on different networks
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 :)
This model assumes that both devices have already added each other to their contacts - using their Unique ID
🔹 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
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
This model is based on torrent - distributed file model
This model assumes that all contacts have a unique encryption key between them.
🔹 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
🔹 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
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
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 😎