// 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

It only ever stores the encryptedPayload, iv, and authTag (all base64). Even with full database access, an attacker gets only ciphertext.

The cryptography

Key derivation

PBKDF2-HMAC-SHA256, 100,000 iterations, 256-bit key. Salt = the project id, so every teammate with the same passphrase derives the identical key.

Encryption

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.

Tokens

API tokens are generated from a CSPRNG, shown once, and stored only as a SHA-256 hash. Passwords use Argon2id.

Tamper-evident

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.