David Modelo, Demi Chen, Eduardo Chavez, Noah Scoot, Raquel Cruz
The RSA key pairs included in crypto/keys/ are for testing and demonstration purposes only.
In real-world deployment, each user would generate and securely manage their own key pairs. Private keys would never be committed to a repository.
This project implements a client-server file drop service that allows one user to upload a file that can only be accessed by a single intended recipient securely.
- Confidentiality (only the recipient should be able to read the file)
- Digital Signature (the recipient should be able to verify that the file came from the sender)
- Sender encrypts file locally
- Sender encrypts symmetric key using recipient’s public key
- Sender signs the file
- Server stores encrypted data
- Recipient downloads and verifies
Local Development
The server can be run locally for testing, which allows direct inspection of stored files and verification of tamper resistance.
Make sure you have requests and npm installed
npm install
pip install requestsFor macOS/Linux
export JWT_SECRET="your_secret_here"
node server.jsFor Windows Command Promp
set JWT_SECRET="your_secret_here"
node server.jsFor Windows PowerShell
$env:JWT_SECRET="dev-secret-key"
node server.jsYou should see something like
Server running on port 3000To run the client locally, you must execute it from the project’s main directory. The client relies on relative paths, so running it from the wrong location will cause errors.
Steps
- Open a terminal.
- Navigate to the main project folder (the directory that contains
client_gui.py). You can either:
- Open the terminal directly in the project folder, or
cdinto the folder manually. Example:
cd ~/Downloads/File-Drop-Project-main- Run the client using Python 3:
python3 client_gui.pyTo test the system, users should create two separate accounts so files can be sent from one user to another.
- Register Users Open the client and enter a username and password. Click the Register button. Wait until the message "Registered Successfully" appears.
Note: Registration may occasionally fail. If this happens, register again using a different username.
Repeat this process to create a second user account.
-
Log In Enter the username and password for one of the accounts. Click Log In. After a successful login, the application features will be available.
-
Upload a File After logging in, click the File tab. Type the recipient’s username in the recipient field. Click Choose File and select the file to upload. Click Upload. Wait for the upload confirmation message.
The file is encrypted and digitally signed on the client before being sent to the server.
- Download a File Log in as the recipient user. View the received file in the inbox. Select the file and click Download.
The client will verify the file’s digital signature before downloading. If the key pairs match, the client will display "Valid" and allow the file to be downloaded. If verification fails, the download is blocked.
Demi: implemented client-side cryptographic protocols, and designed the security protocol diagrams and documentation.
David: implemented the client-side application logic for uploading and downloading files, and handling user interaction through a command-line interface.
Noah: implemented the server-side functionality for storing encrypted files and metadata and enforcing recipient-only access, without handling any plaintext data or cryptographic keys.
Eduardo: Designed the overall system architecture and protocol flow and contributed to the project design documentation.
Raquel: Organized and compiled the final project documentation and presentation.