vaultless

passwords from thin air
Source

Your passwords, remembered by nobody

There is no vault. Your passphrase, your passwords and your oracle's key are never written to this computer or anywhere else — they are worked out fresh each time. The site remembers only which oracles you trust and which account you used last.

Deterministic derivation through a two-party oblivious PRF over ristretto255, with a verified oracle. No vault, no sync, no stored secret.

Watch first The whole thing in seven minutes Making your paper oracle, your first password, and coming back the next day — every step, on this very site. Watch on YouTube (opens in a new tab)

one curve · three worlds · live y² = x³ − 3x + 5, over the reals, a finite field, and the complex numbers

How does this work?

Think of your paper oracle as a key that only works together with your phrase.

  1. You type your phrase. It stays in this browser — it is never sent anywhere.
  2. Your browser scrambles the phrase and the account number into a point on a curve.
  3. It stamps that point with the key from your paper, playing a little animation while it works.
  4. The stamped result is turned into your password.

Because the answer depends on both your phrase and your oracle, someone who steals only one of them gets nothing. And because the same two things always produce the same answer, there's no vault to lose, back up, or have stolen.

Worth knowing: if you lose your paper with no copy, you lose the passwords it makes — print two and keep them apart. And anyone who photographs it and learns your phrase can make them all, so store it like cash.

vaultless is a deterministic password manager: every password is re-derived on demand from your master passphrase, an account number and a key printed on paper. Same inputs, same password, every time. Nothing to sync, back up, or leak.

Pure deterministic derivation lets anyone who steals the passphrase recompute every password offline. vaultless closes that with a second factor: a 256-bit scalar k, printed as a QR square and a typable code.

  1. The browser hashes passphrase‖index to a ristretto255 point P.
  2. It computes S = k·P with the key from your sheet, and checks the key's public half Y = k·G against the one this browser pinned on first use.
  3. S is expanded through HKDF-SHA256 into the password.

S is exactly the output of a two-party oblivious PRF with key k, and the demo plays it that way against a simulated oracle: blind B = r·P, receive B′ = k·B with a DLEQ proof, unblind r⁻¹·B′ = k·P. The blinding cancels, so both roads reach the same point.

why this resists theft
  • Without k, a stolen passphrase alone regenerates nothing.
  • Without the passphrase, a stolen or photographed sheet regenerates nothing either.
  • A different sheet is caught: its public key must match the one pinned on first use.
  • The sheet is not encrypted under the passphrase — that would let the phrase alone rebuild k, collapsing two factors into one.
  • k is in this browser's memory while the sheet is loaded, so only scan it on a computer you trust. It is dropped after 5 minutes idle, on Forget, and on reload.
  • Nothing is persisted: not the passphrase, not k, not the password.
source

github.com/Ak1ra00/vaultless

derivation: ristretto255 · S = k·H(phrase ‖ account) · HKDF-SHA256

  1. Paper oracle
  2. Phrase
  3. Account
  4. Style
  5. Password