oc · vault
oc · vault·bitcoin-bound · ciphertext-only · zero lock-in

the password manager
that can't read your data.

Sign in to your OrangeCheck identity — a Bitcoin wallet (BIP-322) or email-OTP. Every entry is sealed under a key your browser derives from your passphrase — no master password on our servers to phish, no recovery backdoor to subpoena. Every entry exports as a portable .lock envelope you can decrypt locally even if vault.ochk.io disappears tomorrow.

· bip-322 identity· x25519 + chacha20-poly1305· on-chain paid· no fiat
§ what you can store

eight entry types. every secret you actually have.

Each entry is a self-contained, AES-256-GCM-encrypted blob sealed to your wallet. The vault doesn't care what's inside; only your wallet can read it. Mix and match — there's no per-entry-type quota.

passwords
every login. one wallet.

Username, password, URL, notes. Generate a 24-character password in two clicks. Copy with one. No browser extension required — the dashboard is the autofill.

totp codes
live 2fa codes. authy without the cloud.

Paste a base32 secret or an `otpauth://` URI. The 6-digit code rotates every 30 seconds, visible in the list view at a glance. Survives phone loss; never sees a Google or Authy cloud.

api keys
github · openai · stripe · aws · coinbase.

Never paste your `OPENAI_API_KEY` into a browser tab again. Never email a Stripe live key to a coworker. Never type your AWS access key into a shell history. Pulls into your terminal via the CLI; never typed into the URL bar.

cards
card numbers, cvv, pin — masked until you need them.

Cardholder, number, expiry, CVV, PIN, billing ZIP. The list view shows only the last four digits; the rest stays sealed until you reveal it. Copy the number with one click and the clipboard self-wipes 30 seconds later.

identities
the form-filler details you retype on every signup.

Name, email, phone, company, address — the block of personal data every checkout and signup asks for. Kept in one encrypted entry instead of scattered across a dozen browser autofill profiles you do not control.

recovery codes
github · gmail · 1password kit · every wall-of-codes service makes you keep.

Every service emits a wall of 8-character recovery codes that are "important — save these somewhere safe." This is somewhere safe. Sealed to your wallet, addressable from any browser you sign in from, gone after one share.

secure notes
will. wifi password. ssh key. license keys. medical records.

Anything you would type into a Note app, but encrypted at rest under a key only your wallet produces. Pass it to anyone with your wallet seed, decrypt anywhere with the open SDK.

small files
passport scan. tax forms. id documents.

Up to ~1 MB of binary payload per entry. The file becomes ciphertext on disk and stays ciphertext in transit. Export, decrypt, restore — anywhere with the SDK and your wallet.

what NOT to put in here

Bitcoin (or any cryptocurrency) seed phrases. The whole point of self-custody is that the seed never touches a connected device. Put your seed on metal — Coldcard tap-seed, Seedplate, Steelplate, Bitkey, Hodlr, Cobo Tablet, hand-stamped washers — and keep it in a safe. The vault supports a "seed phrase" entry type only for edge cases (BIP-39 passphrases that are NOT the full seed, non-Bitcoin recovery phrases, etc.). We will not market vault as "the place for your seed," and you should not treat it as one.

> If you came here to store a Bitcoin seed: please don't. Go here first. Software is the wrong layer.

> Every entry is sealed client-side with AES-256-GCM under a vault key your browser holds. OC sees ciphertext only. Lose the cloud → your local copy keeps working. Lose your passphrase → unlock with the recovery code from setup. Lose both → no recovery, by design; we hold only the sealed blob.

§ how it works

four steps. one wallet. zero accounts.

OC Vault uses Flow 4 of the open OC Lock protocol — the "self-vault" pattern. You're the sender, the recipient, and the verifier. OC is only a ciphertext relay. The cryptographic contract is the product contract.

  1. [01]

    connect

    Open vault.ochk.io and sign in to your OrangeCheck identity — a single BIP-322 signature from a Bitcoin wallet, or an email one-time code. No password to choose, no second account to create.

  2. [02]

    add a secret

    Password, seed phrase, TOTP seed, API key, secure note, or small file. The browser seals it client-side as a portable .lock envelope. Plaintext never leaves your tab.

  3. [03]

    sync or export

    Free: store locally in IndexedDB, or point at your own Nostr relay / HTTP blob URL. Paid: 7,000 sats / month or 70,000 sats / year on-chain for vault.ochk.io cloud sync — one OrangeCheck identity, prepaid, no card on file.

  4. [04]

    unlock anywhere

    Any browser, any device. Sign in, then enter your vault passphrase — that is what unwraps the key; signing in only fetches the sealed blob. Lose the cloud? @orangecheck/lock-core from npm decrypts your exports forever.

§ why it exists

every other vault asks you to
trust their company to hold
the master key.

OC Vault seals every entry under a key derived from a passphrase only you know, in your browser. There is no plaintext on our servers to breach. There is no proprietary export format to escape from. The cryptographic contract — “only the holder of the passphrase can decrypt” — is the product contract.

systemaccountmaster passwordrecoveryexport formatpaymentbreach exposure
1Passwordrequiredyes (KDF-protected)recovery kit + secret keyproprietary 1puxcard · subscriptionmarketplace cloudflare incident (2023)
Bitwardenrequiredyes (KDF-protected)emergency contactjson (cleartext)card · subscriptioncustodial · subpoenable
LastPassrequiredyes (KDF, weak by default)account-recovery flowcsv (cleartext)card · subscriptionfull vault exfiltration (2022)
Apple iCloud Keychainapple id requireddevice passcodeapple-mediatednone (locked-in)bundled w/ icloudcustodial · subpoenable
self-hosted KeePassXCnoneyes (file passphrase)you keep the filekdbx (open)free · self-managedonly what you leak
oc vaultnone (wallet is identity)generated passphrase (never yours to invent)passphrase or recovery code.lock envelope (open)sats · on-chain · no card on filecryptographically impossible

> Breach references are public-record incidents at the named vendors. For OC Vault, an attacker with full access to vault.ochk.io’s database recovers ciphertext only: the vault key is sealed under scrypt (N=217) and the passphrase is never sent to us. There IS a KDF — that is the point. The difference from a breached password vault is not its absence but its input: your passphrase is generated with ~120 bits of entropy rather than chosen, so an offline brute force against the sealed blob has nothing to chew on. That is a hard trade-off, not an impossibility, and it is the honest version.

no oc account

Your wallet derives your device key locally. OC never sees the wallet, has no recovery backdoor, cannot leak what it does not hold.

contract = product

OC holds ciphertext only. No "master password KDF stops us" story — your passphrase never reaches our servers. The math is the policy.

zero lock-in

Every entry is a portable .lock envelope. Export anytime. If vault.ochk.io disappears, @orangecheck/lock-core from npm decrypts your backups forever.

Read the underlying protocol design at oc-lock-protocol/WHY.md — OC Vault is the consumer-facing productization of Flow 4 (self-vault) from that spec.

§ questions worth asking

the four objections we hear most. addressed up front.

do I need a bitcoin wallet to use this?
For full sovereignty, yes — any BIP-322-capable wallet works (Sparrow, Xverse, Leather, UniSat, Alby, OKX, Phantom). For the easy on-ramp, no — sign in with email + a one-time code. A Fedimint wallet is provisioned in your browser on your first visit to me.ochk.io, and its sats are held by that federation's guardians — never by OrangeCheck. You can graduate to your own wallet later without losing any data.
what if vault.ochk.io disappears tomorrow?
Your local copy keeps working. Every entry is an AES-256-GCM ciphertext sealed under a vault key your browser holds. Download the portable JSON export at any time; @orangecheck/lock-crypto from npm decrypts it forever, with or without vault.ochk.io existing.
can OC read my entries?
No. We hold ciphertext only. The vault key is derived from your passphrase, in your browser; cloud-sync blobs are double-encrypted so we don't even see entry names or types — just random envelope ids and timestamps. Full database access recovers ciphertext that requires your passphrase to decrypt.
how is this different from just using LastPass or 1Password?
Those vaults are protected by a master password that's stored, KDF-stretched, and verified server-side. A breach of the vendor's database — like LastPass in 2022 — exposes your entire vault to offline brute force. OC Vault has no vendor account, and its passphrase is generated, never one you invent: ~120 bits of entropy, never sent to us, sealed under scrypt. The database breach still yields a sealed blob — what changed is that guessing it is not a realistic attack rather than a slow one.

> More questions on /pricing — and the underlying protocol design is at oc-lock-protocol.

§ open by construction

the protocol is open. the SDK is on npm. the family survives this product.

vault.ochk.io is one consumer of oc-lock-protocol — the same envelope spec powers every other family product. If vault.ochk.io disappears, the protocol and the SDK stay. Your data decrypts with code anyone can audit, host, and fork.

§ open by construction

one open protocol. three open packages.

OC Vault is the commercial product. The protocol it implements and the SDK it depends on are MIT-licensed and reusable. Re-implement the SPEC in any language — the test vectors are the ground truth. The web client is a convenience over the SDK, never the authoritative implementation.

§ open your vault

bitcoin-bound.
ciphertext-only.
yours by construction.

Free forever locally. Cloud sync is 7,000 sats / month or 70,000 sats / year, per OrangeCheck identity. Prepaid on-chain. No fiat, no card, no auto-renew, no account.

with thanks to bram kanstein — whose work on bitcoin as sovereignty layer shaped the premise.