Encryption

How Vauchi protects your data.


Overview

Everything in Vauchi is end-to-end encrypted. Only you and your contacts can read your data — not us, not the relay server, not anyone else.

What's Encrypted

DataEncrypted?Who Can Read
Your contact cardYesYou + your contacts
Messages between devicesYesYour devices only
BackupYesYou only (with password)
Data at rest (on device)YesYou only
Data in transitYesYou + recipient only

How It Works

Your Identity

When you create your identity, Vauchi generates:

  • A master seed (256 random bits) — the root of all your keys
  • A signing key (Ed25519) — proves messages are from you
  • An exchange key (X25519) — establishes shared secrets with contacts

These keys never leave your device unencrypted.

Exchanging Contacts

When you exchange with someone:

  1. You scan their QR code (contains their public key)
  2. Both devices perform X3DH key agreement
  3. A shared secret is established that only you two know
  4. All future communication is encrypted with this secret
Your Keys          Shared Secret          Their Keys
    ↘                   ↓                    ↙
     └───── X3DH Key Agreement ─────┘
                    ↓
          Unique encryption key
          (known only to you two)

Updates Between Contacts

When you update your card:

  1. The update is encrypted with the shared key for each contact
  2. Different contacts may receive different updates (per visibility)
  3. Each message uses a unique key (forward secrecy)
  4. The relay only sees encrypted blobs

Forward Secrecy

Vauchi uses the Double Ratchet protocol (same as Signal):

  • Each message uses a unique encryption key
  • Keys are derived, used once, then deleted
  • Even if one key is compromised, other messages stay secure
  • Past messages can't be decrypted with current keys

Encryption Algorithms

PurposeAlgorithmNotes
SigningEd25519Proves identity and authenticity
Key exchangeX25519Establishes shared secrets
Symmetric encryptionXChaCha20-Poly1305Encrypts all data
Key derivationHKDF-SHA256Derives keys from seeds
Password KDFArgon2idProtects backups

All cryptography uses audited libraries (ed25519-dalek, x25519-dalek, chacha20poly1305, argon2).

What the Relay Server Sees

The relay server routes messages but cannot read them:

Relay SeesRelay Cannot See
Encrypted blobsMessage content
Recipient IDYour identity
TimestampsWhat you changed
Message size (padded)Who you are

Messages are padded to fixed sizes to prevent size-based analysis.

Device Security

Your data is protected on your device:

PlatformKey StorageProtection
iOSSecure EnclaveHardware-backed, biometric
AndroidHardware KeyStoreHardware-backed, biometric
macOSKeychainOS-protected
WindowsCredential ManagerOS-protected
LinuxSecret ServiceIf available

Backup Security

Backups are encrypted with your password:

  1. Key derivation: Argon2id (memory-hard, resistant to brute force)
  2. Encryption: XChaCha20-Poly1305
  3. Result: Without your password, the backup is useless

We recommend passphrases (4+ random words) for memorable yet secure passwords.

Security Properties

PropertyHow Vauchi Achieves It
ConfidentialityXChaCha20-Poly1305 encryption
IntegrityAEAD authentication tags
AuthenticityEd25519 signatures
Forward secrecyDouble Ratchet, one-time keys
Break-in recoveryDH ratchet with ephemeral keys
Replay preventionMessage counters
Traffic analysis preventionMessage padding

Open Source

All Vauchi code is open source:

  • Inspect the encryption implementation yourself
  • Verify our security claims
  • Report vulnerabilities responsibly

Source: https://gitlab.com/vauchi

Limitations

What encryption doesn't protect:

  • Metadata you share: Your name, fields you make visible
  • Physical access: Someone with your unlocked device
  • Screenshots: If a contact screenshots your card
  • Deleted data: Until secure delete completes