𓂀 Zero-knowledge · mathematical, not promised
Your keys never leave your device. Ever.
Every byte of your data is encrypted on your phone, your
Mac, your laptop — before it
touches any cloud. The keys that turn ciphertext back
into files exist only in your device’s secure
enclave and in your head. EINIX has no copy.
Apple, Google, Proton, Dropbox have no copy. No
government can subpoena a copy — because there is
no copy to subpoena.
“Zero-knowledge” is a word everyone in this
industry uses; almost nobody backs it with math. Here is
the math.
Argon2id · password → key
Your password is run through
Argon2id, the winner of the 2015
Password Hashing Competition. It is
memory-hard: every guess costs hundreds of
megabytes of RAM. A bank of 10,000 GPUs that
cracks SHA-256 passwords in seconds takes
centuries on Argon2id. The
parameters are tunable per-vault — pick the
threat model you actually have.
Why it’s safe: brute-force
attacks scale with money. Argon2id makes the money
line vertical.
X25519 × ML-KEM-768 · key wrap
The vault’s master key is wrapped under a
hybrid of two key-exchange
algorithms combined through an
IETF SHAKE-256 KEM combiner.
X25519 (the elliptic-curve standard
inside TLS 1.3) covers today;
ML-KEM-768 (Kyber,
FIPS 203, NIST-standardised
August 2024) covers tomorrow.
Why it’s unbreakable: to read
the vault, an attacker has to break
both algorithms. A quantum computer breaks
X25519 the day it arrives, but cannot break ML-KEM.
A future cryptanalytic break of ML-KEM still leaves
X25519 standing. The attacker needs both holes at
once. Nobody plans for both.
ML-DSA-65 · tamper-proof signatures
The vault’s config blob is signed with
ML-DSA-65 (Dilithium,
FIPS 204) — the
lattice-based digital-signature standard NIST
finalised alongside ML-KEM. If anyone edits a byte
of your config — cloud provider, malware, a
rogue admin — the signature breaks and your
device refuses to open the vault.
Why it’s safe: the cloud
cannot lie to you about your own vault. A modified
config is a refused config.
AES-256-GCM-SIV · file contents
Every block of every file is sealed with
AES-256-GCM-SIV
(RFC 8452)
— the nonce-misuse-resistant cousin of the
AES-GCM you already trust inside TLS. If two blocks
accidentally use the same nonce, GCM leaks the
plaintext; GCM-SIV does not. Belt-and-braces against
implementation bugs.
Why it’s safe: even a buggy
nonce generator cannot reveal what you wrote. The
only failure mode is “you cannot decrypt”;
never “the attacker can.”
XChaCha20-Poly1305 · alternative AEAD
On ARM cores without AES hardware acceleration,
Sigillum can switch to
XChaCha20-Poly1305 — the same
AEAD WireGuard and TLS 1.3 fall back to.
Stream-cipher speed, same 256-bit security level.
Why it’s safe: identical
security guarantee, picked at vault creation, never
silently degraded.
HMAC-SHA-256 · filename sealing
Filenames in the cloud are deterministic
HMAC-SHA-256 output of the plaintext name under
a per-vault key — not encrypted ciphertext.
Same plaintext name → same blob path, every
time. Sync engines (rclone, NextCloud client, Proton
Drive) can dedupe, version and resume by name
without ever learning what the file is.
Why it’s safe: sync stays
fast and incremental; the cloud sees opaque
digest strings it cannot reverse.
The whole promise, in one sentence.
If somebody breaks into our office tomorrow and walks
out with every disk we own, every laptop, every backup
tape — they will not learn a single byte
of your data. Because nothing on our side ever
held the keys. That is what zero-knowledge means when
you back it with math.