| index 31ec530..b3c5b76 100644 |
| --- a/DESIGN.md |
| +++ b/DESIGN.md |
| @@ -192,7 +192,7 @@ items can still be sealed to `vP_j` with no unlock at all. |
| | **Signed-in browser (XSS, hostile extension)** | RK and unlocked vault keys in memory: full read and write. Non-extractable WebCrypto keys stop raw-key exfiltration, not plaintext exfiltration | Other accounts; anything after the keys are dropped | |
| | **Stolen unlocked laptop** | Everything until auto-lock. After lock the disk is equivalent to a bucket leak | RK after lock, without passphrase, paper, or biometric | |
| | **The kit alone (both printed values)** | Full takeover — that is its job — but only once the online recovery flow releases the blobs, which notifies every device and the account email | Nothing offline. No ciphertexts in hand, no server cooperation, zero | |
| -| **The Account Key alone** (photographed while being typed into a new device) | Nothing by itself. It is one input to the passphrase branch, useless without the passphrase | RK, the vault, or any wrap — which is why it is the panel designed to be photographed | |
| +| **The Account Key card alone** | Nothing by itself. It is one input to the passphrase branch, useless without the passphrase | RK, the vault, or any wrap — which is why this is the document you may photograph without guilt | |
| | **The passphrase alone** | Sign-in, on a device that already caches the Account Key. On any other device: nothing | The vault, from a fresh device, without the kit or a handoff from an enrolled one | |
| |
| ## The Emergency Kit — settled (Paul, 2026-09-01) |
| @@ -229,35 +229,81 @@ this would be a re-wrap rather than a redesign. It now carries the real |
| remain peer wraps of the same RK, keyed by their own full-entropy inputs |
| and **not** gated on the Account Key. |
| |
| -That last point is deliberate. The recovery code alone still reaches RK. |
| -Gating recovery on the Account Key as well would add nothing against the |
| -threat that matters — both values live on the same sheet, so anything that |
| -compromises one compromises the other — while adding a second thing to go |
| -wrong on the worst day of a user's life. |
| - |
| -### What the kit is |
| - |
| -A **client-generated PDF**, produced in the browser at signup, which never |
| -touches the server in any form. One page: |
| - |
| -- The **Account Key** — 128-bit, Crockford Base32, `A1-XXXXX-…`, with its |
| - own QR. |
| -- The **recovery code** — 128-bit, `C1-XXXXX-…`, with its own QR, in a |
| - visually separated panel (see the handling note below). |
| -- The account's blind-index handle, so the sheet says which account it |
| - opens without printing an email address. |
| -- The date printed, and one paragraph in plain language: what each value |
| - does, that nobody can reissue them, and that losing this sheet **and** |
| - every enrolled device means the data is gone. |
| - |
| -**Handling note, and it drives the layout:** the Account Key is touched |
| -routinely — every new device needs it — while the recovery code should |
| -ideally never leave the paper. Printing them adjacent means routine |
| -handling of one exposes the other to every shoulder and phone camera in |
| -the room. So the two occupy clearly separated panels with a fold or cut |
| -line between them, and the copy tells the user they may separate the |
| -sheet. The Account Key panel is the one designed to be photographed; the |
| -recovery code panel is the one designed not to be. |
| +That last point is deliberate, and the reason changed when the kit became |
| +two documents. The recovery code alone still reaches RK. |
| + |
| +The tempting move is to gate recovery on the Account Key too, now that the |
| +two live apart — defence in depth, and no longer defeated by one |
| +photograph. **Rejected, because of which document survives what.** The |
| +Account Key card is the *handy* one: it lives with your devices, because |
| +that is where it gets used. The Recovery sheet is the *archived* one, |
| +kept somewhere else precisely so it outlives a disaster at home. A fire, a |
| +burglary or a lost bag that takes your devices very likely takes the card |
| +sitting beside them — and gating recovery on the card would make the |
| +archived sheet useless in exactly the scenario it exists for. |
| + |
| +So the Recovery sheet must be sufficient on its own. What protects it is |
| +not a second factor but its handling — archival storage, never |
| +photographed — and the notify-every-device-and-delay policy on the online |
| +recovery flow. |
| + |
| +### What the kit is — two documents, not two panels |
| + |
| +**Two separate PDFs, both generated in the browser at signup, neither ever |
| +touching the server.** An earlier draft made this one page with a fold |
| +line; that was too weak, for a reason worth writing down. |
| + |
| +The two values have **different blast radii**, and they are not two halves |
| +of one secret: |
| + |
| +- The **Account Key alone is nearly harmless.** It is one input to the |
| + passphrase branch and useless without the passphrase. Photographing it |
| + costs an attacker nothing. |
| +- The **recovery code alone is full takeover**, through the online |
| + recovery flow. It is a bearer credential for the entire vault. |
| + |
| +One is a setup aid; the other is the crown jewel. And the failure we are |
| +actually guarding against is not printing, it is **storage** — people save |
| +PDFs, and one file means both secrets share a folder forever. A fold line |
| +does nothing about that. Two files can go to two places, physically and |
| +digitally. |
| + |
| +**Document 1 — the Account Key card.** Instruction: **store somewhere |
| +safe.** Wallet-sized and meant to stay reachable, because a new device |
| +asks for it — but looked after, not left about. It carries the 128-bit key |
| +as `A1-XXXXX-…` in Crockford Base32, its QR, the account's blind-index |
| +handle, and one line saying it opens nothing without the passphrase. |
| +Printing a second copy for another location is fine. |
| + |
| +**Document 2 — the Recovery sheet.** Instruction: **store securely.** |
| +Archival, and the higher bar of the two: the 128-bit recovery code as |
| +`C1-XXXXX-…`, its QR, the same handle, the date, and plain language saying |
| +this sheet alone can open the vault, that nobody can reissue it, and that |
| +it should never be photographed. |
| + |
| +**The copy must not lean on the adjectives.** "Store securely" and "store |
| +somewhere safe" are near-synonyms in ordinary English, and a reader will |
| +not derive two different standards of care from them. The words set the |
| +register; **concrete places and behaviours do the actual work**, and the |
| +final copy carries both: |
| + |
| +- *Recovery sheet* — "Keep it where you'd keep a passport or a will: a |
| + safe, a deposit box, a trusted person's house. Never photograph it. You |
| + should not need to touch this again." |
| +- *Account Key card* — "Keep it where you can find it and nobody else |
| + goes — a drawer, a wallet, a folder with your documents. It is useless |
| + to anyone who does not also know your passphrase." |
| + |
| +**Do not encourage photographing the Account Key card.** An earlier draft |
| +did, reasoning from its blast radius: alone it opens nothing. But "less |
| +catastrophic" is not "harmless" — it is the second factor protecting the |
| +at-rest copy, and passphrases get phished. Steering people to put it in a |
| +cloud photo library would quietly undo the protection the Account Key |
| +exists to provide. The QR is for scanning at setup, not for archiving to |
| +a camera roll. |
| + |
| +Signup generates both and offers a single **print both** action, so it |
| +stays one gesture, and does not let the user past until both are confirmed. |
| |
| ### The UX ladder for a fresh device |
| |
| @@ -281,9 +327,9 @@ and is unchanged from the original promise. |
| |
| ### Reprinting |
| |
| -If the sheet is lost while at least one device is still enrolled, the user |
| -must be able to produce a new one, and the flow must be obvious rather |
| -than buried. What it can and cannot restore: |
| +If either document is lost while at least one device is still enrolled, |
| +the user must be able to produce a new one, and the flow must be obvious |
| +rather than buried. The two reprint very differently: |
| |
| - The **Account Key can be reprinted exactly**, because enrolled devices |
| cache it. |
| @@ -304,9 +350,23 @@ than buried. What it can and cannot restore: |
| | **Passphrase known, kit lost, every device gone** | **Data is gone.** New, and caused by this decision | |
| | Kit lost and passphrase forgotten | Data is gone — unchanged | |
| |
| -The sixth row is the price of the decision and it is a real one. It is why |
| -the reprint flow has to be prominent and why enrolling a second device is |
| -worth nagging about. The README states it without softening. |
| +**The last two rows are not a price; they are the product.** A vault the |
| +operator cannot open is a vault nobody can reopen for you — that is the |
| +entire promise, and applying it without exception is the rule working |
| +rather than a cost of the Account Key. |
| + |
| +What the sixth row *does* change is a feeling, not a rule. "I forgot my |
| +passphrase" and "I know my passphrase and lost the paper" land very |
| +differently on a person even though the principle is identical. So the |
| +obligation is not to soften the rule, it is to make sure **nobody arrives |
| +there by accident** — the prominent reprint flow, and the nag to enrol a |
| +second device. The README states the rule plainly and does not apologise |
| +for it. |
| + |
| +It also retires a promise that was never quite true once the Account Key |
| +existed: *"your passphrase or your codes get you back in."* The honest |
| +model is simpler. **The kit is the root; the passphrase is the everyday |
| +convenience.** |
| |
| ## Further rulings from the review, adopted |
| |