MENTIFABERThe workshop · drawn at night
Sheet
23 / 41
Grid
MF-04·03
Drawn
Anders
Date
28.10.2026
Fig. 1 · CryptoVault, on the bench: power it on to run it hereMF-04·03

01Why it exists

RSA can't encrypt your message

A 4096-bit RSA-OAEP key can encrypt about 446 bytes. That's a sentence, not a document. So RSA never touches the message at all: it encrypts a key, and that key encrypts the message. CryptoVault does all of it for real, in your browser, with crypto.subtle; the ciphertext it prints is the actual output, not a stand-in.

02Parts list

  1. An identity of your ownAn RSA-4096 key to receive and an ECDSA P-256 key to sign, generated by your browser. A fingerprint you can read aloud, and a backup file locked with your passphrase (PBKDF2, 600,000 rounds).
  2. Contacts, checkedShare a one-line public ID; anyone who adds it sees your fingerprint and can check it with you over a channel you trust. Swapped keys are the classic attack, so the app keeps that step in front of you.
  3. Sign, then encryptEvery message gets a fresh AES-256 key wrapped to the recipient. Your signature travels inside the ciphertext, so only they learn who sent it, and it's bound to them, so it can't be re-sent to someone else as if it were theirs.
  4. Messages and filesText comes out as a copyable block; files up to 200 MB come out as .cv files, name and type hidden inside. Any change to either is caught on decrypt instead of producing garbage.

03Construction

One file, zero trust in me

No dependencies: no npm tree, no CDN, no crypto library to audit; the browser's own crypto.subtle does every operation. No network, enforced: the page carries a Content-Security-Policy with connect-src 'none', so the browser itself refuses any request, and even a bug can't phone home. Readable: one file you can scroll to the bottom of. Private keys are re-imported as non-extractable, so nothing in the page can read them back out.

Web CryptoRSA-OAEPAES-GCMECDSA P-256PBKDF2

The format

A versioned binary packet: magic, flags, the recipient's short fingerprint, the wrapped key, the IV, then the ciphertext, with the whole header authenticated as GCM additional data. Messages for someone else are recognised and named rather than failing mysteriously.

04Tolerances

Key exchange is still the hard part: compare fingerprints before you trust anyone. There's no forward secrecy, so if your private key and passphrase both leak, past messages to you can be opened. Served over a network, the page is only as trustworthy as whoever serves it; save it and run it locally if that matters. For anything that genuinely matters, use age, GPG or Signal. This is a careful, working use of the primitives, not audited infrastructure.

what it is not, said plainly

05Inscription

A crypto tool that overstates itself is worse than no tool. This one tells you exactly what it does.

06The same room