Security

Identity, keys, and the trust of data. Tally identities are Nostr keys; every durable record is signed and every message is encrypted end-to-end. Crypto lives in app/js/crypto/.

Identity & keys

A user is a Nostr keypair (npub public id, nsec secret). All signing and encryption flow through one seam, the KeyProvider, so the key can live in-app (local) or in a browser extension (NIP-07) without the rest of the code touching raw key material.

Encryption & authorship

Privacy model

Although identities and signatures are Nostr-compatible, Tally never publishes transactions to public Nostr relays — doing so would leak the social and financial graph. Signatures are used inside the encrypted payload only.

A note on cost: secp256k1 in JS is slow, which shapes some choices — see Performance.