project-proposal-2024

Pigeon: serverless E2EE instant messenger

Abstract

Encryption is now a requirement for any traffic travelling through the internet, and this is especially true for private instant message (IM) conversation. Some IM connections still occur in plain text, and others only employ encryption in transit, which means your IM app can decrypt and store your messages before they reach you, and can do whatever they want with them. End-to-end encryption (E2EE) is the solution to this. With E2EE, messages are encrypted by the sender and can only be decrypted by the reciever, meaning it is impossible for anyone else to read them (technically). Most IM applications (e.g. WhatsApp, Signal) use a server-client architecture, but this is not the gold standard of privacy, as there is no guarantee of what happens to the messages once they reach the server. A serverless architecture (e.g. peer-to-peer) allows a text conversation to take place between the users with no intermediaries. Pigeon is a serverless E2EE instant messenger application, the ultimate messaging app for all your super secret communications.

Author

Name: Kaitlyn Lake

Student number: 46426372

Functionality

Scope

The functionality and features required for an MVP:

Architecture

Data & storage

UI

Basic functionality

Compatibility & deployment

Quality Attributes

Security - the point of Pigeon is that it is as secure and private as possible, so security is the most important quality attribute. Messages should be sent peer-to-peer to enhance privacy and encrypted both at rest and in transit with the greatest feasible encryption. The Pigeon application should follow the principle of least privilege, meaning the application should store as little data possible about its users, and have as little access as possible to the OS. Where necessary, security should be chosen over all other quality attributes.

Reliability - users need to be able to rely on their messages being sent and recieved without error, as Pigeon is designed to maintain the privacy and integrity of communication. Also, any security and software error could also potential lead to a security event.

Availability - users should be able to message their contacts whenever they like, wherever they have a reliable enough internet connection. The ability to text wherever and any time of day is crucial, such as during emergency situations. Reliability and availability are equally important and trade-offs considered on a case-by-case basis.

Scalability - it is important the application is able to handle a large volume of users, since instant messengers are designed to connect as many people as possible. But due to the principles and motivation behind Pigeon - an application users can trust and rely on the integrity of - reliability and availability should take priority over scalability.

Evaluation

Unit tests - unit tests will be written as the app develops to test the logical components of the system and their integration, i.e. UI, storage and persistence, sending and recieving functionality, etc. There will be >100 unit tests.

User tests - the UI and UX design for all UI components outlined in Scope should be simple enough for a user with no technical training, to make the app as accessible as possible. >=5 user tests will be conducted with each round of testing, and the UI will be revised until all users are able to accomplish the basic functions of the app.

Security tests - the application will be tested if it meets the security quality attribute by attempting to launch cyberattacks against it. Packet analysers like Wireshark will be used to collect application packets, and will be analysed for the following features:

Spoofing and Man-in-the-Middle attacks will be attempted, and if neither succeed, the application will be deemed secure.

Reliability and availability tests - the app will be tested for reliability and availability attributes, by messenging between two users at up to 40km distance from each other. If they are able to send and recieve text messages with less than 10 seconds of latency and without error, the application will have met the reliability and scalability requirement.

Scalability - if the application can tolerate up to 100 users without a reduction in security, reliability or availability, it will have met the scalability requirement. This may be tested with a tool similiar to Grafana k6. If no tool exists that can test this, five pairs of users will repeat the reliability and availability tests instead.