Reference architecture
Security Architecture
Read this if you want to understand exactly how a DRIVUNO file moves from your screen to encrypted storage — and back — without our servers ever holding a usable key.
The trust boundary
Everything sensitive happens on one side of a clear line: your device. The server holds ciphertext and routing metadata, and nothing else useful to an attacker.
Inside the boundary
Your device only
- • Your password (entered, never transmitted)
- • Argon2id master key derivation
- • Per-file XChaCha20-Poly1305 keys, including streaming chunk keys for large files
- • X25519 share, team-folder, and Rooms channel key pairs (private halves)
- • Recovery Key (you write it down)
Outside the boundary
What the server holds
- • Encrypted file blobs and chunk sequences (opaque ciphertext)
- • Sealed key envelopes (encrypted with your public key, or per-member for team folders and Rooms channels)
- • Routing metadata: owner ID, parent ID, size, upload/chunk offsets
- • Operational logs and lifecycle events (no content, audit-only)
- • Account record (email, settings, hashed identifiers)
- • API/webhook payloads (metadata and lifecycle events only, never decrypted content)
1 · Upload flow
From file picker to encrypted storage
- 1You unlock your vault. Your password is run through Argon2id on your device to derive a master key. The password and master key never leave the browser tab.
- 2For each file, the browser generates a fresh random 256-bit file key.
- 3The browser encrypts the file with XChaCha20-Poly1305 using that file key. The output is opaque ciphertext plus an authentication tag.
- 4The file key is sealed against your account's public key (X25519 + libsodium sealed box). Only your master key can unwrap it.
- 5The browser uploads the ciphertext, the sealed envelope, and minimal routing metadata. The server stores all three but never holds a usable key.
- 6On download, the browser fetches the ciphertext and the sealed envelope, unwraps the file key locally, verifies the ciphertext SHA-256 hash, and decrypts in memory.
2 · Sharing flow
Zero-knowledge public share links
- 1You generate a share. The browser creates an ephemeral X25519 key pair specifically for this share.
- 2The file key is sealed against the share's public key. The sealed envelope is stored on the server.
- 3The share's private key is base64-encoded and placed in the URL fragment (after #). Browsers never transmit URL fragments to servers.
- 4You copy/paste the link. The recipient opens it; their browser reads the private key from the fragment locally.
- 5The recipient's browser fetches the ciphertext + sealed envelope, unwraps the file key with the fragment-private-key, verifies the hash, and decrypts.
- 6Optional layers (password, expiration, one-time view, watermark) are enforced server-side and within the receiver UI.
3 · Recovery flow
Account recovery without escrow
- 1When you create your vault, your master key is wrapped against multiple factors: your password (always), and any factor you opt in to — Recovery Key, secondary email, SMS.
- 2Each factor produces an independent sealed envelope. The server stores envelopes; it cannot unwrap any of them without the factor itself.
- 3If you lose your password, you provide a recovery factor in the browser. The browser unwraps the master key locally and prompts you to set a new password (which produces a new envelope).
- 4If you lose every factor, the master key is unrecoverable — by design. DRIVUNO has no backdoor.
4 · Streaming encryption for large files
Chunked encryption without full-file buffering
- 1Large files are split into fixed-size chunks on your device rather than encrypted as one block.
- 2Each chunk is encrypted with a streaming AEAD construction seeded from the file key, so chunks are cryptographically bound to their position and to the stream as a whole.
- 3Chunks are encrypted and uploaded progressively — the browser never needs to hold the full plaintext or full ciphertext in memory at once.
- 4On download, chunks are fetched, verified, and decrypted in order, allowing progressive playback or extraction before the whole file has arrived.
- 5A final chunk marker is authenticated so a truncated or reordered stream is detected and rejected, not silently served as valid.
5 · Resumable chunked uploads
Interrupted uploads resume without re-encrypting
- 1Before upload, the browser records which chunks have been encrypted and confirmed as stored.
- 2If a connection drops (common on mobile networks with large files), the client asks the server which chunks it has and resumes from the next missing one.
- 3Because chunk encryption is deterministic per chunk index and file key, resuming never requires re-deriving keys or exposing plaintext a second time.
- 4The upload is only marked complete once every chunk is stored and the full-stream authentication check passes.
6 · Team folder keys: per-member sealing and rotation
Shared folder keys without a shared secret
- 1A team folder has one symmetric folder key, generated client-side when the folder is created.
- 2That folder key is sealed individually to every current member's public key — there is no single shared password or group secret in transit.
- 3Adding a member seals the existing folder key to their public key; it does not require re-encrypting folder contents.
- 4Removing a member triggers key rotation: a new folder key is generated, existing content is re-wrapped to the new key, and the new key is sealed only to remaining members. The removed member's envelope is deleted.
- 5Rotation is scoped to the folder key only — file content itself is not re-uploaded, only the small sealed envelopes are replaced.
7 · Rooms channel key distribution
End-to-end encrypted channels
- 1Each Rooms channel has its own symmetric channel key, generated on the creator's device.
- 2The channel key is sealed to each member's public key as they join, the same per-recipient sealing pattern used elsewhere in the product.
- 3Messages, threads, reactions, and shared items in the channel (Notes, Documents, Flowboard, Tasks, Calendar) are encrypted with the channel key or a key derived from it.
- 4Removing a member from a channel follows the same rotation pattern as team folders: a new channel key is issued and re-sealed to remaining members.
- 5P2P audio, video, and screen-share sessions negotiate their own ephemeral session key directly between participants' browsers, separate from the channel's stored-content key.
8 · Live Clone continuous replication
Ongoing encrypted sync of a local folder or disk
- 1You point Live Clone at a local folder or disk. Nothing is uploaded until it is encrypted on your device, same as any other upload.
- 2A local watcher detects changes and encrypts only the changed files or chunks, keeping replication incremental rather than re-uploading everything each time.
- 3Each replicated file gets an integrity hash so both sides can confirm the encrypted copy matches what was sent, without either side needing plaintext to compare.
- 4Read-only sharing of a replicated folder reuses the standard per-recipient sealed-envelope sharing flow — replication does not create a separate, weaker sharing path.
9 · The API and webhook boundary
Automation without a plaintext path
- 1API keys are scoped to specific actions and stored server-side only as hashes, never in reversible form.
- 2The REST API and outgoing webhooks expose metadata and lifecycle events — file created, share expired, member removed — never decrypted file or message content.
- 3Because the API never handles content, an API key compromise cannot expose plaintext, even though it can affect metadata, routing, or lifecycle actions until the key is revoked.
- 4Webhook deliveries are signed so a receiving integration can verify they originated from DRIVUNO and were not forged or replayed.
4 · What the server can and cannot do
The server can
- • Store and serve opaque encrypted blobs
- • Enforce access control via Row-Level Security
- • Log security events (logins, shares, deletions)
- • Rate-limit and detect abusive patterns
- • Apply expiration, one-time access, and password gates on shares
The server cannot
- • Read the contents of your files
- • Read file names (encrypted client-side)
- • Derive your password or master key
- • Decrypt shares (the key lives in the URL fragment)
- • Reset your password into a usable state
Primitives used
- Argon2id — password-based key derivation, tuned per-device.
- XChaCha20-Poly1305 — authenticated encryption of file content.
- X25519 — elliptic-curve key agreement for sealing keys to recipients.
- Ed25519 — signing manifests for shares and protected messages.
- HKDF-SHA-256 — subkey derivation for per-purpose keys.
- SHA-256 — ciphertext integrity hashes (verify-before-decrypt).
- HMAC-SHA-256 — blind-index search tags for mailbox subjects.
Full cryptographic rationale lives in the whitepaper. For what falls outside this architecture, see the threat model.