Privacy-focused notification system with end-to-end encrypted FCM token management.
Android App → App Backend (8081) → Notification Backend (8080) → Firebase FCM
Privacy by Design: The app-backend acts as a zero-knowledge intermediary that cannot decrypt device tokens, ensuring organizational separation between user data and notification infrastructure.
- End-to-End Encrypted Notifications: RSA + AES hybrid encryption
- Zero-Knowledge Intermediary: App-backend cannot decrypt tokens
- Durable Storage: Exoscale SOS integration with automatic cleanup
- Public Key Hash Namespacing: Prevents key collision in multi-tenant scenarios
- Modern FCM API: Uses Firebase Cloud Messaging API v1
# Generate private key
openssl genrsa -out private_key.pem 4096
# Generate public key from private key
openssl rsa -in private_key.pem -pubout -out public_key.pem- Android App: Replace
demo-app/app/src/main/assets/public_key.pem - Notification Backend: Place
private_key.peminnotification-backend/ - Never commit
private_key.pemto version control
# Terminal 1: Start notification backend
cd notification-backend
go run main.go # Runs on :8080
# Terminal 2: Start app backend
cd app-backend
go run main.go # Runs on :8081See notification-backend/README.md for Firebase setup instructions.
- Android App: Token → AES-256-GCM → RSA-4096(AES-key) → Base64 → Network
- App Backend: Pass-through (zero-knowledge)
- Notification Backend: Base64 → RSA-decrypt(AES-key) → AES-GCM-decrypt → Token → FCM
- Zero-Knowledge Relay: App-backend cryptographically cannot access tokens
- Just-in-Time Decryption: Tokens decrypted only when sending notifications
- Memory Security: Keys wiped immediately after use
- Private Key Isolation: Private key never leaves notification-backend
- Per-Token Keys: Each token encrypted with unique AES key
- demo-app: Android FCM client with hybrid encryption
- app-backend: Zero-knowledge intermediary service
- notification-backend: FCM notification service with token decryption
See individual component READMEs for detailed setup and API documentation.