An open-source relay for sensitive, private data between devices
Sealed on the device. Gone after delivery.
ZeroByte moves sensitive, private data, such as health and medical records, between any two devices that were paired with each other: a phone and a laptop, a watch and a tablet, an app and its companion. Every update is encrypted on the device that sends it, with a key the relay never receives. The relay passes the sealed envelope on and deletes it once the other device has collected it.
-
No accounts
Two devices pair once, on the local network. Nobody signs up or signs in.
-
No request logs
Usage is counted per app, anonymously, for billing. No mailbox names, tokens or IP addresses.
-
No keys on the relay
Every update is sealed on the device that sends it. The relay cannot open it.
How it works
Three steps, and the relay is in one of them.
-
01
Pair
Two devices pair once, in the same room or on the same network: a QR code or a comparison of digits on both screens. They agree a 32-byte link key. It stays in each device's keychain and is never sent to the relay.
-
02
Seal
From the link key, each device derives a mailbox name, an access token and one encryption key per direction (HKDF-SHA256). Every update is sealed with ChaCha20-Poly1305 before it leaves the device. A replayed or altered envelope fails to open.
-
03
Pass
The relay holds a sealed envelope until the other device collects it. The reader deletes what it has read. A mailbox without a write for 30 days erases itself, and unpairing deletes it at once.
What the relay sees
We wrote down what we can see. The list is short.
The relay can see
- Which app a mailbox belongs to
- A random 128-bit mailbox name
- The size and time of each envelope
- The IP address of each connection
The relay never receives
- Health, medical or any other private data
- Names, emails or phone numbers
- Device names
- The link key or any key derived from it
There is no account to create and nothing to sign in to. The relay keeps no request logs. For billing it counts requests and bytes per app, anonymously, without mailbox names, tokens or IP addresses. An envelope is capped at 1 MiB, a mailbox at 32 MiB.
Protocol
Built from open standards.
The two devices agree their key once, at pairing, on the local network. After that, every update is sealed and checked with algorithms published as open standards: HKDF (RFC 5869) and ChaCha20-Poly1305 (RFC 8439).
The relay only stores and forwards sealed envelopes. It has no key to open them with, and nothing to keep once they are delivered.
Read the protocol specification- Key agreement
- At pairing, on the local network
- Key derivation
- HKDF-SHA256
- Encryption
- ChaCha20-Poly1305, one key per direction
- Replay protection
- Sequence numbers in the authenticated header
- Retention
- Until read; idle mailboxes after 30 days
Open source
The code is open. Read it, or run it yourself.
The protocol, the relay and the SDKs are public on GitHub. You can read every line that handles an envelope, check the test vectors against your own implementation, and run the relay on your own server, in Docker or on your own Cloudflare account.
The hosted relay at relay.zerobyte.cloud runs the same code, operated by Peakbits & Co. for teams that would rather not run one.
Read the documentation zerobyte-cloud on GitHub
In the documentation: Quickstart Protocol Relay SDKs
-
ProtocolSpecification and test vectorsCC BY 4.0
-
RelayNode, Docker or Cloudflare WorkersAGPL-3.0
-
Swift SDKiOS, iPadOS, macOS, watchOS, tvOS, visionOSApache-2.0
-
Android SDKAndroid and the JVM, in KotlinApache-2.0
-
JavaScript SDKBrowsers, Node, Deno, Bun, WorkersApache-2.0
-
.NET SDKWindows and .NET 10Apache-2.0
-
DocumentationGuides, references and samplesCC BY 4.0
Contact
Interested? Write to us.
If you would like to move sensitive data between devices through ZeroByte, or have a question about how it works, send us an email.
Write to hello@peakbits.co