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
- Confidentiality. Messages travel as envelopes encrypted with NIP-44; the transport (relay or WebRTC) only ever sees ciphertext plus routing fields.
- Authenticity. Durable records carry an authorship proof (a signed Nostr event), so a record forwarded by a third party during sync can still be verified as authored by its true creator.
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.