// security
Zero-knowledge by design
Your secrets are encrypted on your machine, with a key only your team holds. EnvSync's servers store ciphertext they can never read.
What the server can never see
- ✗ Your plaintext .env contents
- ✗ Your Team Master Passphrase
- ✗ The derived encryption key
It only ever stores the encryptedPayload, iv, and authTag (all base64). Even with full database access, an attacker gets only ciphertext.
The cryptography
PBKDF2-HMAC-SHA256, 100,000 iterations, 256-bit key. Salt = the project id, so every teammate with the same passphrase derives the identical key.
AES-256-GCM with a fresh random 12-byte IV and a 16-byte auth tag. AAD binds each blob to its project:environment scope.
API tokens are generated from a CSPRNG, shown once, and stored only as a SHA-256 hash. Passwords use Argon2id.
A wrong passphrase or any modified ciphertext fails the GCM authentication check — decryption refuses loudly instead of returning garbage.
Threat model
We treat the server as untrusted infrastructure. A compromise of EnvSync's API or database exposes only ciphertext. Your secrets are safe as long as your Team Master Passphrase stays off our servers — which, by design, it always does. All transport is over HTTPS, with rate limiting and input validation on every endpoint.
Responsible disclosure
Found a vulnerability? Email security@tryenvsync.com. We'll acknowledge within 72 hours and keep you updated through the fix. The CLI is open-source — audit the crypto yourself.