// wallet-bound encryption

Only your wallet
holds the key.

Status: Ticker (placeholder, no token exists):
// the working app

Seal it. Share it. Only you open it.

Pick a key source, derive the key with one signature, then seal text or files into a .wlck blob. Opening it later needs the same wallet to sign the same message again.

1 Choose a key source and derive the key

Your wallet signs the message below. Ed25519 signatures are deterministic, so the same wallet always produces the same signature — Walletlock runs it through HKDF-SHA-256 to get an AES-256-GCM key.

2 Seal

Write a note, or drop files. Each blob gets a fresh random salt and IV; filenames and types are encrypted too.

Drop files here or click to choose · up to 20 MB each

3 Open

Paste a sealed block or drop a .wlck file. Walletlock checks the key fingerprint first, then decrypts and authenticates with AES-GCM.

Drop a .wlck file or click to choose
// how it works

One signature in, one key out.

  1. A fixed, domain-separated message. The text is walletlock v1 | <origin> | key derivation. It names the app, a version, and the site origin, so it can't be confused with a login prompt or a message for another app.
  2. Your wallet signs it. Ed25519 (RFC 8032) signatures are deterministic: same key + same message = the same 64 bytes, every time. Walletlock verifies the signature against your public key before using it.
  3. HKDF turns it into a key. HKDF-SHA-256(ikm = signature, salt = random 32 bytes, info = "walletlock v1 | aes-256-gcm") gives a 256-bit AES-GCM key; a second HKDF output with a different info is stored as a key fingerprint so a wrong wallet is detected before decrypting.
  4. AES-256-GCM seals the payload. A fresh 12-byte IV per blob; the plaintext header (origin, salt, fingerprint, optional hint) is bound as additional authenticated data, so tampering with any byte makes opening fail.
  5. The blob is just text. A .wlck file is an armored base64 block you can email, store in the cloud, or paste anywhere. It is useless without a fresh signature from your wallet.
  6. Opening repeats the signature. Walletlock asks your wallet to sign the same message, re-derives the key with the stored salt, checks the fingerprint, and decrypts. The signature is kept only in this tab's memory until you press “Forget key” or close it.
// privacy model

What stays with you, what's in the file.

Never leaves this tab

  • Your plaintext notes and files
  • The signature (it is the key material) and the derived AES key
  • The demo private key, if you use demo mode
  • Walletlock makes no RPC calls and has no backend storage — the server only serves this page

Readable by anyone holding a sealed blob

  • That it is a Walletlock blob, and the site origin it was sealed on
  • Approximate size of the content (ciphertext length ≈ plaintext length)
  • The random salt, IV and key fingerprint (useless without the signature)
  • Your wallet address — only if you ticked the hint box when sealing

Walletlock reduces information exposure for data at rest: a leaked blob reveals nothing about its content. It does not provide anonymity, and it does not hide anything you do on-chain.

Known limitations — please read

  • The message is the password. Any site, script or person that convinces your wallet to sign the exact Walletlock message can derive your key. Wallets show the message text — never approve it anywhere except here.
  • Lose the wallet, lose the files. There is no recovery, no backdoor and no server copy. If the wallet's key is gone, every blob sealed to it is permanently unreadable.
  • Depends on deterministic signing. Standard Ed25519 wallets sign deterministically. A wallet that formats messages differently (for example a hardware wallet's off-chain message envelope) produces a different signature, so the same seed in a different wallet app may not open your blobs. Run the determinism check before trusting a wallet.
  • Bound to the site origin. The origin is part of the message. Blobs sealed on another origin can still be opened here, but Walletlock will show you that origin's message and ask before signing it.
  • Browser-level threats win. A malicious extension, XSS, or a compromised device can read the signature or your plaintext while this tab is open. Close the tab or press “Forget key” when done.
  • Unaudited demo code. The cryptography is standard Web Crypto (HKDF, AES-GCM) plus a pinned Ed25519 library, but the app itself has had no security review. Don't make it the only copy of anything important.