veilpass

Design · Threat model

What veilpass protects, and what it doesn't

Being upfront about the edges of the design is more important than listing everything that works. Here is what a stolen file, a compromised device, or a network observer actually buys an attacker.

The one high-value secret

Veilpass protects the contents of your vault. Nothing else is treated as high-value; every other asset is either non-secret by design (a record key, a DHT address) or low-value metadata whose leakage we mitigate but don't fully prevent (vault size, push cadence).

The threat-model contract is:

  1. Only someone with your passphrase can read the vault. Not us. Not Veilid nodes. Not someone who steals the file.
  2. Any modification to the vault file surfaces as a decryption failure — silent tampering isn't possible.
  3. The vault is a local file. As long as you have the file and the passphrase, you have your data. No outage, no acquisition, no revoked account can take it from you.

Adversaries we consider

1. Someone steals your file

Found your laptop, your phone, or a backup drive. Has the .veilpass file. Wants the credentials inside.

Safe if your passphrase is strong. Every guess costs one Argon2id computation — roughly one second on a phone, hundreds of milliseconds on desktop, and Argon2's memory-hardness undercuts GPU-parallel attack. A five-word EFF passphrase (about 64 bits of entropy) is not brute-forceable outside nation-state resources.

Compromised if your passphrase is weak. A dictionary word or a short passphrase falls in a day.

2. Malware on your unlocked machine

Code running with your privileges, on a device where veilpass is currently unlocked, wants to exfiltrate live credentials.

Outside the threat boundary. A password manager cannot defend against code that already runs as you on your own device. The attacker can read plaintext out of process memory, watch the clipboard, install a keylogger, and screenshot your screen.

Mitigation lives elsewhere. Full-disk encryption, OS sandboxing, browser sandbox integrity, and not running untrusted binaries. Prefer autofill over copy-paste for high-value credentials so the clipboard doesn't see them.

3. A passive Veilid observer

Watching Veilid traffic, or running a Veilid storage node, wants to learn what you're doing. Because Veilid uses onion-style compiled routes (a safety route chosen by the sender, a private route chosen by the destination), these are two very different positions to attack from.

The storage node holding your record. Cannot read the vault — the ciphertext on the DHT is the same AEAD-sealed bytes that live on disk. It can see the record key it is serving, the ciphertext size, and probe cadence. It cannot see who is asking: requests arrive from the last hop of your safety route, never from your real IP, and there is no way for the storage node to link accesses back to a device or a person.

Any other node on the network. Sees only encrypted route packets. Each hop only knows its immediate neighbour; the inner envelope containing the DHT operation and the record key is opaque until it reaches the terminal storage node. A passive network observer cannot see the record key, the ciphertext, or the link between a key and a device. They can still do coarse traffic analysis — packet timing and volume between neighbouring nodes — which, aggregated across enough of the network, can in principle weaken safety-route anonymity. This is a fundamental limitation of any low-latency onion network and is out of scope for veilpass.

4. A compromised paired device

An attacker got read access to a device you'd paired for sync — say, a laptop left at a hotel.

Same passphrase story as case 1. Having a paired device isn't the same as having write access to the vault; write access requires the vault to be unlocked, which requires the passphrase.

Passphrase change is not enough. Because the underlying vault key doesn't rotate on passphrase change, a compromised device that already extracted the vault key keeps its access. If you believe a device is compromised, rotate the vault key on a trusted device and re-pair every other trusted device.

5. Someone intercepts your pairing token

The seven words were transmitted over a channel that turned out to be observable (a screenshot in a chat log, a shoulder surf, an unencrypted SMS).

Compromised. Anyone who reads the token while the sponsor record is still on the DHT can pair as if they were the intended recipient. Treat tokens as one-shot secrets even though the sponsor record isn't auto-deleted; transfer them over channels you trust to not be logged.

Trust anchors

Veilpass's confidentiality assumes:

Non-goals

No backdoor

No account escrow, no vendor recovery, no support ticket that can decrypt your vault. Lose the passphrase, lose the vault. The reason there isn't one is the reason no one else can read your vault either.

No plausible deniability

There is no decoy vault you can unlock under coercion. If someone with a wrench can compel you to unlock, they see the real vault.

No forward secrecy on the DHT

A passive observer who collects your ciphertext today and compromises your vault key tomorrow can decrypt every snapshot they captured. Vault-key rotation does not retroactively protect the ciphertexts that were already exfiltrated.

No post-quantum protection

Argon2 + XChaCha20-Poly1305 remain usable under Grover-search at reduced (still large) effective strength. Ed25519 (used by Veilid for DHT signing and for pairing derivation) does not. Migration is on the roadmap.

No hiding of use

Anyone who observes your storage, your network, or your DNS lookups can learn that you use veilpass. Anyone with your record key can learn how often you sync and roughly how large your vault is. None of this discloses entries.

No password reuse checking

We don't send anything about your entries to any external service, breach corpus included. Strength feedback is local and structural.

Common scenarios

Scenario Are you OK?
Laptop stolen Yes, if the passphrase is strong.
Phone stolen while unlocked No. Treat everything in the vault as compromised.
Backup drive lost Yes, if the passphrase is strong.
Malware with your privileges No. Outside the threat boundary once the vault is unlocked.
A Veilid node captures your ciphertext Vault contents safe. Size and cadence exposed.
Someone reads your pairing token Compromised. Rotate the vault key and re-pair.
We go out of business You keep everything. It's a local file on an open network.
A large quantum computer arrives Content confidentiality survives at reduced strength. Sync signing doesn't.
You forget your passphrase Unrecoverable. Back up the passphrase somewhere physical.

Where to report

Please report security issues privately to security@veilpass.io before public disclosure. A longer, code-anchored version of this threat model lives in docs/THREAT_MODEL.md in the repository.

← back to design overview