KALYPSOOpen app →
Docs/Idea, threat model, promises2 min read
On this page

01 · Idea, threat model, promises

The pitch#

Arkiv is a great public data layer: cheap, queryable, expiring entities. But "public by default" blocks every serious use case with personal data: health, identity, finance, chats, HR, KYC. And GDPR-style "right to be forgotten" is impossible on a chain where old blocks live forever.

Kalypso is a TypeScript library that sits between your app and @arkiv-network/sdk:

  • everything written is encrypted on the client,
  • everything useful about it is provable in zero knowledge,
  • anything can be permanently destroyed by destroying its key (crypto-shredding), so even a node runner who archived every block since genesis is left with noise.

Arkiv facts we design around#

Fact (from Arkiv docs, SDK 1.0.x on Rabdi)Consequence for us
All attributes, $owner, $creator, $expiresAt, tx metadata are publicNever put plaintext in attributes. Indexed attributes must be blinded or coarse.
bytes() columns are stored, selectable, not indexed / not filterableCiphertext, proofs and commitments go in bytes() columns.
deleteEntity = gone from current state, "as if expired"Old calldata still exists in history and archives. Deletion alone is NOT erasure.
Every entity expires (MAX_LIFETIME, no expiration-free option)Keys/key-envelopes can use short lifetimes; data entity lifetime is independent.
Ciphertext length is visiblePad plaintext to fixed buckets.
Encryption cannot retract plaintext someone already decryptedShredding protects against future decryption, not screenshots. We say this out loud.

Threat model#

AdversaryHasWe defend?
Public reader / indexerAll current entitiesYes – sees only ciphertext, commitments, proofs
Old node runner / archive nodeEvery historical block, every deleted entity, foreverYes – after shred, all their copies are undecryptable
Future quantum adversaryArchived ciphertext + archived key envelopesYes – hybrid ML-KEM + X25519 wrapping, AES-256 data
Metadata analystOwners, timestamps, sizes, query patternsPartly – ephemeral signers, padding, blind indexes, batching
Malicious verifierA proofYes – learns only the proven statement (ZK)
Compromised key custodian (1 of n)One key shareYes – threshold t-of-n, one share is useless
Someone who decrypted before shredPlaintextNo – nobody can. Stated explicitly in UX.
Malware on user deviceEverythingNo – out of scope

What we promise users (UX copy)#

  • "Your data is encrypted on your device before it touches Arkiv."
  • "You can prove things about your data without showing it."
  • "When you delete, we destroy the only keys. Every copy anywhere, including old servers, becomes unreadable. You get a signed deletion receipt."
  • "We cannot undo a delete. Neither can anyone else."

Why judges / users care#

  • First GDPR-compatible erasure story for a public DB-chain.
  • ZK makes encrypted data useful (eligibility checks, private attestations) instead of just hidden.
  • Library, not app: any Arkiv builder can npm i arkivzk.