Back up and restore your local identity

Works today

Backup and restore work today and are entirely local: the payload is encrypted with a passphrase that never leaves your device. There is no server-side recovery, so the backup and its passphrase are the only way to move an identity to another device.

Journey statusWorks today

Steps

  1. 1Why you must back up: there is no server-side recovery

    Works today

    Your signing key is stored passphrase-encrypted in this browser. AIDID has no backend and holds no copy, so there is no recovery link and no support reset: if you forget the passphrase you must create a new identity.

    That is why the backup is the migration path. Keep the exported carrier and its passphrase somewhere safe. The passphrase is not stored inside the carrier, so losing it means the backup cannot be decrypted by anyone.

  2. 2What the backup contains, and what it does not

    Works today

    Every carrier wraps the same payload: your DID document, your Dilithium-5 key material, your credentials, your sub-DID grants and your sub-DID usage receipts.

    It deliberately excludes your local visited-sites footprint and the backup UI preference. Nothing identity-related lives in IndexedDB, sessionStorage or the service-worker cache.

  3. 3Choose a carrier

    Works today

    Open Backup / Restore on the home page, enter a passphrase of at least 8 characters, then export. Carriers: a CKX text string, a .ckx file, a PNG image, a video carrier, or the legacy .encrypted.json. Restore accepts paste, a file picker and drag-and-drop.

    A PNG only survives a byte-for-byte copy: a screenshot, or any chat-app recompression or resize, destroys the hidden payload. A video carrier is appended to a source video you choose (keep it under 64 MB) and the result still plays normally. CKX carriers are optional; the JSON path works on its own.

  4. 4Restore semantics: an old backup never wipes your sub-DID records

    Works today

    Sub-DID grants and usage receipts are optional members of the payload, and their import semantics are deliberately asymmetric.

    If the member is missing or is not an array, restore leaves your existing local records untouched: an old backup that predates sub-DIDs must not silently delete the only copy of a grant. If the member is an array, including an empty array, it is treated as authoritative and replaces the local table wholesale. Malformed entries are filtered by the same validators the storage layer uses.

    Restoring a backup that contains a stale chain mirror can overwrite a newer local cache; the chain copy can always be re-fetched.

  5. 5If a restore fails, read the message

    Works today

    Restore distinguishes four cases before decrypting: not a valid AIDID backup (empty or not a carrier at all), carrier damaged or truncated, unsupported CKX format version, and wrong passphrase or corrupted backup. A structure check runs before the expensive key derivation, so junk input fails fast and nothing is written.

    A failed restore is fail-closed: your current local state is left unchanged.