Zero-knowledge sync: the server keeps your vault, and cannot read it.
Your master password never leaves your device. From it, your device makes two separate keys: one proves to the server that it is you, the other unlocks your vault. The server only ever sees the first, and it cannot be turned into the second.
Each account (the service, your user name, the secret, folders, tags and notes) is encrypted on your device before it is sent. The server stores those encrypted records and hands them back to your other devices, which decrypt them themselves.
If the server were broken into, the attacker would get encrypted records, the number of them, and when they changed. Not a single code.
Because of this, nobody can reset your master password. Keep an encrypted backup (Export page) somewhere safe.
Salt SHA-256("dartvel-authenticator/v1/" + email)
Master key PBKDF2-HMAC-SHA256, 600,000 iterations, 256 bits
Sign-in password HKDF-SHA256(master key, "dva/v1/auth")
Wrapping key HKDF-SHA256(master key, "dva/v1/wrap"), never sent
Vault key 256 random bits made on your device
Records AES-256-GCM, a fresh 96-bit nonce each time, bound to your account and the record id
Passkey unlock WebAuthn PRF output, HKDF, wraps the vault key on that device only
Backup files AES-256-GCM under PBKDF2-SHA256 (600,000) of a password you choose
The server checks the sign-in password like any other (stored only as its own slow hash), limits attempts per account and per address, and serves every page with a strict Content-Security-Policy.
Google Authenticator syncs through your Google account, with no separate master password of its own. It has no folders or tags, no preview of the next code and no browser extension. Here all of those exist, and sync is end-to-end encrypted by design.
Create an account
Sign in