April 29, 2026
How Dia Sync keeps your data safe by design
On Thursday, April 9, 2026, we launched a much-anticipated feature in Dia: Sync. Here's how we shipped this feature securely.
TL;DR
Sync lets you access your bookmarks, tabs, and profiles (with more to come!) across multiple devices. Your sync data is end-to-end encrypted before it ever leaves your device — we can't read it, even though we store it on your behalf. This post walks through how we generate and protect your encryption keys, how we transfer them between devices without exposing them to our servers, and the design principle at the center of all of it: assume our servers are compromised, and ensure they still can't access your data.
If you haven't tried Sync yet, here's how to get started.
Our design principle: assume compromise, design for containment
Before getting into the technical details, it's worth explaining the mental model we used when designing Sync's security.
We asked ourselves a simple question: if our own servers were compromised and fully controlled by an attacker... could they access your synced data?
The answer had to be "no."
Every design decision in Sync flows from that constraint. The encryption happens on your device. The keys stay on your devices. The server stores ciphertext it cannot decrypt. When we needed to transfer keys between devices, we designed the transfer so that even a compromised server sitting in the middle can't extract the key.
This is the same philosophy we applied to fetch_web_content and other Dia capabilities. Don't just try to prevent bad outcomes. Design so they're structurally infeasible.
Your encryption key
When you enable Sync, Dia generates a random 256-bit encryption seed on your device. We call this your sync key. It's the root of all Sync encryption, and never leaves your devices.
From that seed, we use HKDF-SHA256 to derive two keys:
- A 256-bit AES key - this is the encryption key. Before any sync data leaves your device, it's encrypted with this key via AES-256-GCM. Our servers only ever receive ciphertext they cannot decrypt.
- An Ed25519 keypair - this is the authentication key. The server uses the public half to verify that sync operations are coming from a device that holds your sync key. Even if your Dia account is compromised, your synced data can’t be accessed or modified without one of your syncing devices.
Before any data is sent to Dia's servers, it's encrypted with your encryption key via AES-256-GCM. Both keys are derived from your sync key, and neither the sync key nor its derived keys are ever shared with our servers. Only your devices have the capacity to decrypt or modify your synced data.
We also use the BIP39 protocol to convert your sync key into a 24-word recovery phrase. This gives you a human-readable backup of your key that's much easier to type than the raw key itself.
Adding new devices is the hard part
Encrypting data is the straightforward piece. The challenge is: how do you get your sync key onto a new device without exposing it to our servers?
Existing approaches all have tradeoffs for a desktop browser:
- QR Codes - Encrypted messengers like Signal use this: show a QR code on one device, scan it with the other. But Dia runs on laptops and desktops. Holding one laptop screen up to another is awkward, and desktops don't always have a camera. QR transfers work best with a phone.
- Passwords - Services like iCloud and password managers let you pick a password that derives the encryption key, but you already have a Dia password. Enterprises often use SSO without a password at all. We didn't want to introduce a second password just for Sync.
- Recovery phrases - Many services use these as a backup (Sync included), but they're cumbersome as a primary transfer method.
All three approaches transfer the key out of band, without touching the server. We started looking for a way to transfer keys through our server, between your devices, in a manner where our server could not eavesdrop. In other words: secure key transfer over an untrusted channel.
The solution: SPAKE key exchange
We landed on Symmetric Password-Authenticated Key Exchange (SPAKE), facilitated by our server, to pass the sync key between two devices in your account.
SPAKE is a special kind of key exchange. Like standard Elliptic Curve Diffie-Hellman, two parties exchange information across a server to compute a shared secret. But in SPAKE, the initial handshake itself is encrypted with a password both parties know beforehand. This means that any party in between (here, Dia's servers) would have to guess the password before they could attempt to insert themselves into the key exchange.
Here's how it works in practice:
When you add a new device, your existing device displays a device transfer code - a short alphanumeric code you type into your new device. This is the SPAKE password. You pass it between devices yourself; the server never sees it.
If a compromised server wanted to perform a man-in-the-middle attack, it would have to guess this code. But here's the critical detail: only your devices can validate whether a guess is correct. The server has to send its guesses to the client, and we've configured Dia to allow only three wrong attempts before the code is rotated. Since sync codes are 6 characters drawn from digits and uppercase letters, that's roughly 3 chances in 2 billion.
Once the transfer completes, the code is discarded and never reused.
Your data, your control
You can disable Sync at any time. And when you do, your encrypted data is permanently deleted from our servers. No retention period, no archival copy. It's gone.
If you delete your Dia account entirely, all associated data (including sync data) is deleted from our servers within 30 days.
Our broader design principle
With Sync, we're not just guaranteeing "we don't read your data." We can't read your data, by design. A compromised server can refuse to sync your data (a denial-of-service), but it cannot read it, cannot modify it undetected, and cannot intercept your keys during device transfer.
This is the approach we take across all of Dia's security architecture: assume compromise, design for containment. We don't rely on our servers staying safe. We build so that even if they don't, your data does.
Sync's encryption, key exchange, and server components were independently assessed by a third-party security firm before launch.
For more on how Dia handles your data, see our Privacy page and Security FAQ.