Cybersecurity & Mobile

Self-Hosted
Zero-Knowledge Vault

A private, encrypted password manager built on the philosophy of absolute data sovereignty. If I don't hold the keys, I don't own the data.

Java BackendiOS (Swift)MySQLArgon2 HashingAES EncryptionREST API

The Problem: Data Sovereignty

I grew tired of seeing notifications from Apple and Google saying, "Your password may have been compromised." Relying on Big Tech for security felt like a vulnerability in itself.

This project was born out of a core belief: I must own my data, or die trying. I wanted to prove that I could build a system where I am the only person on earth who holds the encryption keys—not a cloud provider, and not even the server admin (me).

The "Zero Knowledge" Rule

The server never sees the password. All encryption and hashing happen on the client device (iOS) before the data ever touches the network.

Security Architecture

iOS Client
Input:"MySecretPass"
Argon2 + AESHashing & Encryption
Network (Unsafe)
Payload: "8f7b2c9..."
Java Backend
Received:"8f7b2c9..."
MySQL StoragePersists Blob

Award-Winning Hashing

I chose Argon2 for hashing the master password. Unlike older algorithms (MD5/SHA), Argon2 is memory-hard, making it resistant to brute-force attacks using GPUs.

  • Salted & Hashed on device
  • AES-256 for vault items
  • No plaintext ever leaves the phone

First Steps in API Design

This was my first project dealing with real REST verbs (GET, PUT, POST). Learning how to structure a Java API to securely handle authentication requests without exposing user data was a massive learning milestone.

GET /api/vault/{userID}
// Returns encrypted blob only

Project Status & Roadmap

Development Log

iOS App (MVP)

Fully functional login, encryption engine, list view, and "Copy to Clipboard" utility.

Backend API

Java application running on a Docker container, persisting encrypted strings to MySQL.

Chrome Extension

Planned integration to sync passwords directly to the desktop browser for seamless autofill.

Return to Portfolio