Threat scenarios
Storage pattern
Use a small, deliberate backup set:- Export immediately after the app presents the recovery step.
- Keep at least one offline encrypted copy outside the active browser profile.
- Record a human label for purpose and network beside the file, never by editing serialized bytes.
- Prevent cloud photo, clipboard, source-control, telemetry, and chat systems from ingesting it.
- Check that you can read the stored copy without publishing it or importing it into another site.
Multiple copies improve availability but increase disclosure surface. Keep the minimum number needed for recovery, with independent access controls.
Import validation
The client must stop before balance recovery if any of these checks fail:- Prefix, Base58 body, checksum, byte length, or strict JSON schema
- Format version supported by the selected importer
- Chain ID and pool identity
- Commitment recomputed from secret material
- Wallet unlock requirement when the recovery format uses one
- Duplicate, malformed, spent, or unsupported note state
Lost but not disclosed
Losing every valid copy and browser record permanently loses the secret. Do not delete a working local record until its recovery authority is independently preserved.Suspected disclosure
- Stop copying, pasting, uploading, or testing the exposed value.
- From a trusted environment, verify its chain, pool, commitment, and unspent state.
- If spendable, prepare a withdrawal to a new self-custody destination.
- Recheck recipient, gross amount, fee, proof-bound context, and submission route.
- Confirm the expected pool event and recorded nullifier.
- Preserve only public incident evidence; remove unnecessary secret copies.