End-to-end encryption

How TetherBay encryption works

No marketing fog. Here is exactly what is encrypted, what the relay can and can’t see, the primitives we use, and the two places end-to-end encryption does not apply.

The one-sentence version

Your files and clipboard are encrypted on your device with keys that only your devices ever hold; our relay only stores ciphertext it has no way to open — even if the relay itself were seized or compromised.

What “end-to-end” means here, concretely

Encryption and decryption happen on the endpoints — your devices. The server in the middle (we call it the relay) receives bytes that are already encrypted and forwards or briefly stores them. It is never given a key, so it cannot read your data, and neither can anyone who later gets hold of the relay or its disks.

What is — and isn’t — end-to-end encrypted

We’d rather you trust us because we’re precise than because we wave the word “encrypted” around. So, plainly:

PathEnd-to-end?How
Synced foldersYesFile contents encrypted on-device before upload (AES-256-GCM, framed streaming).
Clipboard syncYesEach clipboard item sealed on-device under your account key.
Browser share-linksNo*The recipient opens the file in a browser with no app and no key, so the relay must serve something the browser can read. Encrypted in transit (TLS) and at rest on the relay, then deleted after download — but not end-to-end.

* If you need true end-to-end for something, send it through a synced folder to a device, not as a browser link. We label this honestly in the app and here.

The building blocks

Everything below is built on standard, vetted platform cryptography (.NET’s AesGcm, ECDiffieHellman, and HKDF). There is no home-grown cipher, no custom curve, no hand-rolled key schedule. The raw key-agreement secret is never used as a key directly — it always passes through HKDF first.

PurposePrimitive
Bulk content encryptionAES-256-GCM (256-bit keys, 96-bit nonces, 128-bit auth tags)
Large filesFramed streaming AEAD (STREAM construction, in the spirit of age / libsodium secretstream)
Device identityStatic ECDH key pair on NIST P-256
Key distributionStatic-ephemeral ECDH → HKDF-SHA256 → AES-256-GCM key-wrap (a “sealed envelope”)
Key storageOS secure store — Windows DPAPI, macOS Keychain, Linux Secret Service

How a file is encrypted

A multi-gigabyte file can’t be safely encrypted as one giant block — you’d have to hold all of it in memory and you couldn’t verify integrity until the very last byte. So TetherBay encrypts a file as a sequence of independent 1 MiB frames, each with its own fresh random nonce and authentication tag:

[magic "TBE1"][version][alg][frame size]
per frame:  [nonce 12B][isLast][len][ciphertext][tag 16B]

Clipboard items are small, so they use the same cipher in a single-shot form (marker TBC1), each sealed under your account key and bound to its account and event id.

How the keys reach your devices — without the server seeing them

Encryption is only as good as key handling. The hard part is getting the symmetric content key from a device that has it to your other device, through a server you don’t want to trust. TetherBay does this with sealed envelopes:

  1. Every device generates a P-256 key pair on first run. The private half is written to the OS secure store and never leaves the device — not to the server, not to logs, not to an environment variable. Only the public half is registered with the relay.
  2. To share a folder key with another of your devices, the sending device does an ephemeral ECDH against that device’s public key, runs the result through HKDF-SHA256 to derive a one-time wrapping key, and AES-256-GCM-wraps the content key under it.
  3. The relay stores this sealed envelope and hands it to the recipient device. Only the device holding the matching private key can re-derive the wrapping key and open it. The relay sees an opaque blob.
shared = ECDH(ephemeral_private, recipient_public)
wrapKey = HKDF-SHA256(shared, salt = folderId, info = "tetherbay-folder-key-e2e-v1")
envelope = AES-256-GCM(wrapKey).seal(folderKey,
              bound to: folderId, key version, ephemeral pubkey, recipient device id)

Each wrap uses a fresh ephemeral key pair (so wrapping keys never repeat), folder and account channels use different HKDF labels so their envelopes can never be confused, and the recipient device id is bound in — so if the server ever misrouted an envelope to the wrong device, it would fail to open rather than leak.

Fail-closed by design

Encryption never silently downgrades

Once a folder is end-to-end encrypted, a device will encrypt the upload or hold it — it will never fall back to sending plaintext. If for any reason a device couldn’t encrypt (say it didn’t yet hold the folder key), the file waits rather than leaking to the relay in the clear. The only way you get a plaintext blob is a folder that was never encrypted to begin with.

What the relay can — and can’t — see

End-to-end encryption protects contents. It does not make a relay omniscient-proof about metadata. Being honest about that is part of the point:

The relay never sees

  • × Your file contents
  • × Your clipboard contents
  • × Your encryption keys
  • × File names or folder contents (inside the encrypted blob)

The relay does see (metadata)

  • · Approximate size of each transfer (ciphertext length)
  • · Which account/folder/device, and when
  • · Delivery status and device presence
  • · Each device’s public key

If hiding the existence and timing of a transfer from the infrastructure is part of your threat model, no relay-based tool — ours included — fully solves that. What we guarantee is that the content stays yours.

Honest limitations

Browser share-links are not end-to-end (explained above). Metadata is visible to the relay. And like any client software, end-to-end encryption protects you in transit and at rest on our infrastructure — it does not protect a device that is itself compromised. We’ll keep this page updated as the design evolves, and we welcome scrutiny.

Want to verify, not trust?

Good instinct. The format markers (TBE1 for files, TBC1 for clipboard), the AES-256-GCM / P-256 / HKDF-SHA256 choices, and the sealed-envelope construction above are the whole story — there is no secret second channel. If you’re evaluating TetherBay for sensitive use and want the deeper design notes or to discuss a security review, get in touch.