◉

# Amulet Vault

offline encrypted wallet keeper
checking… no vault

## A place for your seeds

Every wallet is encrypted with its own password. The vault's index (names & dates) is encrypted with a master password. Nothing ever leaves this page.

⚙ Advanced
🔎 Don't trust, verify this file ▾
SHA‑256 drop the HTML file to compute its SHA-256
Drag `amulet_vault.html` here ·
Compare the result against the hash published on the project's release page. Different hash → don't enter a real seed. How to verify →
⚗️ Self sanity check ▾
The vault runs published test vectors against your browser's Web Crypto API, the bundled Argon2id WASM module, and the embedded EFF wordlist. If any row fails, that part of the stack is broken and you shouldn't trust it with real seeds. Every input is reproducible with `openssl`, Python's `hashlib`, or `argon2-cffi`.
📡 Network sentinel: 0 blocked ▾
Every outbound network API (`fetch`, `XMLHttpRequest`, `sendBeacon`, `WebSocket`, `EventSource`, dynamic `<img>/<script>/<link>/<iframe>`, service workers) is patched at startup. Same-origin reads and `data:/blob:` URLs are allowed; everything else is blocked and logged here.

## Unlock vault

Enter your master password.

Master password
``
A checksum of this exact passphrase. Compare it with the fingerprint you recorded alongside your backup: if the code and the glyph both match, the passphrase is correct, with no need to reveal the words.
deriving key…
Vault …

### Create new vault

Pick a master password. It encrypts the vault's index (the names and dates of your wallets). Each wallet inside still has its own separate password on top of that.

Vault name
A short label, just for you. Helps you tell vaults apart when you reopen one.
Recommended: tap the dice button (or the link below the meter) and let the vault roll a passphrase for you. Six random words gives ~77 bits of entropy, eight gives ~103, both well above the 70-bit floor where offline attacks become a concern. Random words beat clever short strings on every axis: stronger, easier to write on paper, easier to type back later.
How does this work?
The dice button picks words at random from the EFF Large Diceware list: a hand-curated set of 7,776 short, easy-to-spell English words. Spaces between the words are fine and recommended — they make the passphrase easier to read and type.
How the bits add up. Diceware entropy is `log₂(wordlist_size) × number_of_words`. With 7,776 words, that is `log₂(7,776) ≈ 12.92` bits per word.

- 6 random words: `12.92 × 6 ≈ 77.5` bits
- 8 random words: `12.92 × 8 ≈ 103.4` bits
- 10 random words: `12.92 × 10 ≈ 129` bits

Letters inside each word are not independent random characters — once a word is picked, every letter in it is determined. So you don't get character-level entropy on top of the word entropy. The numbers above are the real ceiling for a Diceware passphrase of this length.
The strength meter below estimates your entropy in real time and flags common patterns (keyboard runs, common words, digit sequences). Want extra safety? Use 8 or more words.
What protects the vault behind the password?
Your vault uses Argon2id for maximum protection against brute-force attacks. The unlock time is tuned for security and convenience: about 0.5 to 1 second on typical user hardware, longer on older machines. Argon2id is memory-hard and GPU-resistant, so an attacker who steals the encrypted vault file still has to spend real money on every guess they try. With a 70-bit-or-stronger passphrase plus this KDF, offline cracking stays impractical on civilian hardware budgets for years. The exact parameters (m=256 MiB, t=2, p=1) sit well above the current OWASP minimum and are saved alongside each encrypted file so you can change defaults later without breaking older vaults.
Master password
enter a password, or click 🎲 to roll one
Want a wider word pool? The dice above draws from the 7,776-word EFF Diceware list. The standalone Amulet Picker draws from 10,000 words (BIP-39 + EFF + extras). A passphrase from the Picker works here directly as a master password, no digits or symbols needed.
If you type your own password, it must have:
Passphrase recognised. Every word is in a known passphrase word list (the vault's EFF generator or the Amulet Picker 10,000-word pool), so the letter / number / special character rules below are skipped automatically.

- 10 or more characters in total
- at least one letter (`a-z` or `A-Z`)
- at least one number (`0-9`)
- at least one special character (e.g. `! @ # $ % ^ & * ( ) [ ] { } + - = _ | \ / ~ < > , . ? : ; ' " €`)
- 77 or more bits of entropy (the meter above)

Generator-rolled passphrases skip the letter / number / special requirements: 8 random words from the EFF list already give ~103 bits, which is well above the floor and is easier to write down than a string with punctuation.
Write the passphrase shown above down before you continue. It is the only way to unlock the vault: lose it and the vault is permanently inaccessible. About 103 bits of entropy (8 random words × log₂(7,776) ≈ 12.92 bits each, from the EFF Large Diceware list).
Confirm
``
Record this fingerprint with your backup. When you open the vault later, the unlock screen shows the same fingerprint for the correct passphrase, so you can confirm it without revealing the words. One wrong character changes it completely.

### Open existing vault

Pick the folder where your vault is saved. The vault will find the right files inside (`vault.meta` plus the wallet `.enc` files) automatically — you don't need to select them by hand.

⚙ Advanced: wallets in a different folder?
My wallet .enc files are in a different folder than vault.meta
When checked, the browser will ask you to pick two folders: first the vault folder (with `vault.meta`), then the wallets folder (with the `.enc` files). New wallets added in this session save to the wallets folder; vault.meta updates save to the vault folder. Requires a Chromium-based browser.
📥
Or drop a backup `.zip` here
All files stay local — nothing is uploaded.

### Add to vault

Everything you add here is stored encrypted in the vault. Pick what you're adding.

### Add wallet to vault

Paste your seed phrase and assign a password. The seed is encrypted with that password and stored as a `.enc` file in the vault.

Wallet name Seed phrase (12 or 24 BIP‑39 words)
0 words · paste space‑separated
Notes (stored encrypted, optional)
⚠️ This wallet uses a BIP‑39 passphrase (advanced — rarely used)
Read this before typing anything below. A BIP‑39 passphrase (often called the “25th word”) is a value you optionally choose when you generate a seed. It is not the wallet password set further down. Same 24 seed words plus a different passphrase produce a completely different wallet with completely different addresses. If you generated this wallet without a passphrase, leave this empty and close this block.
BIP‑39 passphrase (25th word)
Case sensitive. Whitespace counts. Same words + different passphrase = different wallet.
🔒Wallet encryption (how it’s stored inside the vault)
This password locks the wallet’s `.enc` file in your vault folder. It is unrelated to your seed phrase or any BIP‑39 passphrase. You’ll be asked for it whenever you open this wallet later.
Wallet password
enter a password
Confirm wallet password
encrypting…

### Add public key only (watch-only)

No seed phrase, no private key. Paste a `xpub` / `ypub` / `zpub` for a hierarchical deterministic wallet, or a single Bitcoin address. The vault stores it encrypted (the password protects the privacy of which addresses you watch, not the key itself).

Wallet name Public key or address
paste an extended public key or a single address
Derivation path (optional, for your records) Notes (stored encrypted, optional) Wallet password
enter a password
Confirm wallet password
encrypting…

### Wallet

Enter this wallet's password to decrypt.

Wallet password
decrypting…
Sensitive content visible. Anyone in viewing distance of your screen can steal this wallet. Close the view when done.
Watch-only entry. No seed, no private key — this is a public key by definition. The password protected it from prying eyes inside your vault, but it can't spend coins.
Public key / address
Seed phrase
Want to view balances or build transactions without putting the seed in a file? Use Export watch-only… below to make a watch-only file for the Amulet Scryer or the Transaction Creator.
BIP‑39 passphrase (25th word)
Notes
First public addresses
The vault stores wallets only — no balances or UTXOs are displayed (that would require network requests, which the sentinel blocks). Click the button to derive the first 3 receive addresses for each script type, locally and offline. Same derivation as Amulet v1.3+, so you can cross-verify.
Metadata
Rename wallet
New name Wallet password (to confirm)
saving…

### Delete wallet?

This removes the `.enc` file from the vault. The encrypted file on disk is overwritten with zeros before deletion, but if you've ever had it backed up elsewhere, those copies remain.

You've already proven you know this wallet's password (that's how it was decrypted). Click Delete to confirm.
Type DELETE to confirm

### Forget vault?

This wipes everything this browser tab currently holds about your vault. It's stronger than Lock (which keeps the encrypted files around for a quick re-unlock) — after Forget, nothing decrypted remains in this tab and, if applicable, the on-disk vault files are erased too.

What gets wiped:

- Every decrypted wallet and timelock payload held in memory.
- Every password field, mnemonic, private key, and note currently visible on screen.
- The system clipboard (best-effort — clipboard-manager history is outside our reach).
- Local browser storage used by the vault (just the theme setting).
- If you opened a vault folder directly: `vault.meta` and every `.enc` in that folder are overwritten with zeros and unlinked.

What this does NOT touch:

- Your downloaded `.zip` backup — the vault has no way to reach it from here. If you want it gone, delete it with your OS file manager.
- OS swap / hibernation files — if the kernel paged out memory containing a seed during this session, that swap page isn't something a browser script can scrub. Close the browser and reboot for full session hygiene.
- Browser / SSD internal caches — V8 heap pools, SSD over-provisioned cells, and clipboard-manager histories all sit outside the JS sandbox.

Type FORGET to confirm
wiping…

### Lock without saving?

This vault is not saving to a folder, so the wallets you added or changed are held in memory only. They have not been written to disk. If you lock now and then close this tab, those changes are gone and cannot be recovered.

Save the vault into a folder (recommended: it then saves automatically), or download a fresh backup .zip, before you lock.

### This folder already has a vault

The folder you picked already contains an Amulet vault. Saving here overwrites its index file (`vault.meta`), which makes that other vault unopenable from this folder. Its encrypted wallet files are left in place but become unused.

Already in this folder:
About to save here:
If that is a different vault you want to keep, click Cancel and pick an empty folder instead. Overwriting cannot be undone.

### Export watch-only file

For each wallet you want to include, enter its password below. The Vault decrypts it locally, derives the public extended keys (xpub/ypub/zpub) and any timelock addresses, immediately zeroes the seed buffer, and bundles only the public material into a single download. The seed never leaves this tab and never gets written anywhere — not even briefly.

Why use this instead of the .zip backup? When you import a watch-only file into the Amulet Scryer, no seed or private key is ever decrypted or held in memory there. The Scryer simply reads the public keys and queries balances. Maximum hygiene for the online side.
Timelocks: Their P2SH/P2WSH addresses are watch-only by nature and will be included automatically — no password needed.
deriving…

### Export wallet

Choose how to save this wallet outside the vault. All options produce files you can store elsewhere; the vault copy is untouched.

Amulet-compatible .enc — can be decrypted in Amulet v1.3+'s decrypt tab. Use this for emergency offline recovery.
Plaintext .txt report — human-readable seed + addresses. Do not store this on a synced drive or cloud folder.
Format
Encryption password
enter a password
Confirm password
encrypting…

### Import .enc file

Add an existing encrypted wallet file to this vault. Supports both vault `.enc` files and Amulet v1.3+ encrypted wallet reports.

📄
Drop a `.enc` file here, or

This is an Amulet wallet report (`AMLT` format). Enter the password you used when encrypting it in Amulet — the report will be decoded, and you'll then set a new password for storing it in this vault.

File: `—`
Amulet .enc password
decrypting…

### Import timelock script

Drop a timelock `.txt` backup or pick one. Both RC2 (SHA‑256) and legacy RC1 (MD5) formats are accepted. The file stays local — nothing is uploaded.

⏳
Drop `timelock-backup-*.txt` here, or
— File: `—`
Address
—
Type
—
Unlock (UTC)
—
Unlock UNIX
—
Format
—
Redeem script
—
The plaintext `.txt` is kept verbatim inside the encrypted vault entry, so the original file can always be reproduced byte‑for‑byte later. The private key (WIF) in this backup is sensitive — give this vault item a strong password.
Item name Notes (stored encrypted, optional) Item password
enter a password
Confirm item password
encrypting…

### Timelock item

Enter this item's password to decrypt.

Item password
decrypting…
Sensitive content visible. This screen shows the private key (WIF) that controls the timelocked funds. Close the view when done.
Bitcoin address
Private key (WIF)
Redeem script (hex)
Public key
Unlock time
Notes
Metadata
Rename item
New name Item password (to confirm)
saving…

### Decrypt a single .enc (read‑only)

Pick an encrypted wallet file to inspect. The decrypted contents are shown in-memory only — no vault is created, no files are written, and nothing leaves this page. Accepts vault-native `.enc` (JSON wrapper) and Amulet v1.3+ binary `.enc` (AMLT).

🔎
Drop a `.enc` file here, or
File: `—`
Format: `—`
Password
decrypting…
Sensitive content visible. The decrypted payload is shown in-memory only. No vault was opened, no disk writes, nothing persisted. Click Close & clear when done.

### How to verify file integrity

Compare the SHA‑256 of this HTML file against the canonical hash published by the project author. Matching = nobody has modified the file since release. Not matching = stop using this file.

Why can't the page hash itself automatically?
Browsers block pages opened from `file://` URLs from reading their own source via `fetch()` — a security measure that also blocks self-verification. When you drop the HTML file onto the panel, the browser reads it via the standard file-picker API and we compute SHA‑256 in-memory. No network, no file write.
Computed hash (after you've dropped the file)
—
Alternative: compute the hash yourself from the command line
Linux / macOS: sha256sum amulet_vault.html macOS (BSD): shasum -a 256 amulet_vault.html Windows (PS): Get-FileHash amulet_vault.html -Algorithm SHA256
Honest limitation: by the time you see this hash, the page has already loaded and any code in the file has already run. The check is a detection tool, not a defense. For a file you don't trust at all, compute the hash on the command line before opening it in a browser. A hash computed inside the page can be faked by a sufficiently tampered file — the command-line check cannot.