Security

Zero-knowledge encryption

When you enable end-to-end encryption in SnipSync, your clips are encrypted on your device before they ever leave it. The SnipSync server stores only encrypted blobs. We cannot read, access, or recover your encrypted clips. Only you hold the decryption key.

How it works

1
You set a vault password

A separate password you choose — never sent to our servers.

2
Master key is generated

A random 256-bit master key is created locally on your device.

3
Master key is wrapped

Your vault password is run through PBKDF2 (600,000 iterations, SHA-256) to derive a wrapping key. The master key is then encrypted with this wrapping key.

4
Clips are encrypted

Each clip gets its own random nonce. Content is encrypted with the master key using XSalsa20-Poly1305 (NaCl secretbox). Only the encrypted blob is sent to the server.

5
Other devices decrypt locally

On another device, you enter your vault password. It derives the same wrapping key, decrypts the master key, and decrypts your clips — all locally.

Algorithms

Symmetric encryptionXSalsa20-Poly1305 (NaCl secretbox via tweetnacl-js)
Key derivationPBKDF2 with 600,000 iterations, SHA-256
Master key256-bit random (nacl.randomBytes)
Per-clip nonce192-bit random (24 bytes)
Recovery phrase12 words from a 256-word list (96-bit entropy)
TransportTLS 1.3 (Supabase enforced)

What we can see

Clip contentEncrypted blob only
Clip type (link, note, code)Yes — needed for filtering
TimestampsYes — needed for sorting
Device nameYes — needed for device badges
Your vault passwordNever leaves your device
Your master keyNever leaves your device

Infrastructure

Responsible disclosure

If you find a security vulnerability in SnipSync, please email vincent@snipsync.xyz with details. We take all reports seriously and will respond within 48 hours.

Encryption library

SnipSync's encryption implementation uses tweetnacl-js, an audited, minimal NaCl implementation.