Skip to main content
Every Arkognito record is owned by a fresh address S that appears nowhere else. Only the user can recompute these addresses, and only the user can find which records they own.

One signature, once

When a client starts, the wallet signs this EIP-712 message:
  • The app name is part of the message, so each app gets an independent set of keys.
  • The chain id is part of it, so testnet keys never carry over to another network.
  • The wallet shows the purpose, so users can spot a site asking for it under false pretences.
The SDK signs twice and compares. Some wallets (certain MPC, passkey or hardware setups) produce a different signature each time, which would lose the user’s keys on the next login. Those wallets are refused; a random root with a recovery code is the fallback. From the signature the SDK derives a private root key:
In a browser the root lives in a Web Worker and never reaches the page.

A fresh key per record

For each record the SDK picks a random 15-byte id and derives the record’s key from it:
There is no counter. That matters:
  • Nothing is ever reused. A counter would restart after old records expire and hand out an old address again, linking new and old records in history.
  • Devices cannot collide. Two devices writing at once never pick the same address.
  • Nothing to sync. A new device needs only the wallet.

Tags: how you find them again

Random ids would be impossible to find again, so every record carries its id in a vtag attribute, encrypted under a key only the root can derive:
Every tag is 44 bytes (59 characters) with a fresh IV, for records and scopes alike, so tags look identical to everyone else. To find their records, a user downloads the app’s tags and tries to open each one. Those that open are theirs. See finding your records.

Scopes

A scope’s key derives from a hash of its name instead of a random id, so every record in a scope shares one owner on purpose. See scopes.

What a key can sign

A derived key signs exactly two things: record envelopes and ownership proofs. The key worker builds each digest itself from structured fields. There is no “sign these bytes” operation, so a compromised page cannot make a one-time key sign a statement that links it to the wallet.

Losing the wallet

  • Lost wallet: the records stay on Arkiv until they expire, but cannot be found or proven.
  • Leaked derivation signature: whoever holds it can find all of that user’s records in that app. Past records cannot be made unlinkable again; start a new key purpose for future ones.
  • Random-root mode: the recovery code (arkognito1-…) replaces the wallet signature. Keep it like a seed phrase.
Last modified on October 12, 2026