Security & Privacy

What's protected, what's visible, and what can be obtained under subpoena — organized by which features you use.

If your hosting provider is subpoenaed

They CAN provideThey CANNOT provide
Call/message metadata (times, durations)Note content, transcripts, report bodies
Encrypted database blobsVolunteer names (end-to-end encrypted)
Which volunteer accounts were active whenContact directory records (end-to-end encrypted)
Message content (encrypted on arrival, stored as ciphertext)
Decryption keys (protected by your PIN, your identity provider account, and optionally your hardware security key)
Per-note encryption keys (ephemeral — destroyed after wrapping)
Your HMAC secret for reversing phone hashes

The server stores data it cannot read. Metadata (when, how long, which accounts) is visible. Content (what was said, what was written, who your contacts are) is not.


By feature

Your privacy exposure depends on which channels you enable:

Voice calls

If you use…Third parties can accessServer can accessEnd-to-end encrypted content
Twilio/SignalWire/Vonage/PlivoCall audio (live), call recordsCall metadataNotes, transcripts
Self-hosted AsteriskNothing (you control it)Call metadataNotes, transcripts
Browser-to-browser (WebRTC)NothingCall metadataNotes, transcripts

Telephony provider subpoena: They have call detail records (times, phone numbers, durations). They do NOT have call notes or transcripts. Recording is disabled by default.

Transcription: Transcription happens entirely in your browser using on-device AI. Audio never leaves your device. Only the encrypted transcript is stored.

Text messaging

ChannelProvider accessServer storageNotes
SMSYour telephony provider reads all messagesEncryptedProvider retains original messages
WhatsAppMeta reads all messagesEncryptedProvider retains original messages
SignalSignal network is end-to-end encrypted; bridge re-encrypts on arrivalEncryptedPreferred route when available

Signal-first delivery: When a recipient has Signal, messages are routed through Signal automatically — your telephony provider never sees the content. For SMS, only a generic “you have a new message” notification is sent by default (no message body), so your provider’s logs contain no sensitive content.

Messages are encrypted the moment they arrive at your server. The server stores only ciphertext. Your telephony or messaging provider may still have the original message — that’s a limitation of those platforms, not something we can change.

Messaging provider subpoena: SMS providers have full message content only if you explicitly enable full-content SMS mode. With the default notification-only mode, SMS bodies contain no message content. Meta has WhatsApp content. Signal messages are end-to-end encrypted to the bridge, but the bridge (running on your server) decrypts them before re-encrypting for storage. In all cases, your server only has ciphertext — the hosting provider cannot read message content.

Notes, transcripts, and reports

All volunteer-written content is end-to-end encrypted:

  • Each note uses a unique random key (forward secrecy — compromising one note doesn’t compromise others)
  • Keys are wrapped separately for the volunteer and each admin
  • The server stores only ciphertext
  • Decryption happens on your device, in a secure layer that never exposes keys to the app’s user interface
  • Custom fields, report content, and file attachments are all individually encrypted

Device seizure: Without your PIN and access to your identity provider account, attackers get an encrypted blob protected by Argon2id — a memory-hard key derivation function that makes brute-force attacks with specialized hardware (GPUs, ASICs) orders of magnitude more expensive than traditional approaches. If you also use a hardware security key, three independent factors protect your data.


Volunteer phone number privacy

When volunteers receive calls to their personal phones, their numbers are exposed to your telephony provider.

ScenarioPhone number visible to
PSTN call to volunteer’s phoneTelephony provider, phone carrier
Browser-to-browser (WebRTC)No one (audio stays in browser)
Self-hosted Asterisk + SIP phoneOnly your Asterisk server

To protect volunteer phone numbers: Use browser-based calling (WebRTC) or provide SIP phones connected to self-hosted Asterisk.


Recently shipped

These improvements are live today:

FeaturePrivacy benefit
Argon2id key protectionYour device keys are protected by a memory-hard function that resists brute-force attacks with GPUs and specialized hardware
Signal-first message routingMessages are automatically routed through Signal when available, keeping content off SMS provider logs
SMS notification-only modeSMS recipients see only “you have a new message” — no sensitive content in provider logs
Traffic analysis resistanceReal-time event sizes are padded so observers cannot distinguish short messages from long ones
No plaintext phone numbers in databaseCaller numbers are stored as irreversible hashes — your database never contains the actual phone number
Per-hub encryption with forward secrecyEach hub’s real-time events are encrypted with keys that rotate every 24 hours — old keys cannot decrypt new events
Cryptography in Rust on all platformsDesktop, iOS, and Android all run the same audited Rust cryptography library — keys never enter JavaScript, Swift, or Kotlin code
Restricted relay accessYour Nostr relay accepts events only from your server — no outside party can inject fake notifications
Encrypted message storageSMS, WhatsApp, and Signal messages stored as ciphertext on your server
On-device transcriptionAudio never leaves your device — processed entirely on-device using local AI
Multi-factor key protectionYour encryption keys are protected by your PIN, your identity provider, and optionally a hardware security key
Hardware security keysPhysical keys add a third factor that cannot be remotely compromised
Reproducible buildsVerify that deployed code matches the public source
Encrypted contact directoryContact records, relationships, and notes are end-to-end encrypted

Still planned

FeaturePrivacy benefit
Native call-receiving appsNo personal phone numbers exposed

Summary table

Data typeEncryptedVisible to serverObtainable under subpoena
Call notesYes (end-to-end)NoCiphertext only
TranscriptsYes (end-to-end)NoCiphertext only
ReportsYes (end-to-end)NoCiphertext only
File attachmentsYes (end-to-end)NoCiphertext only
Contact recordsYes (end-to-end)NoCiphertext only
Volunteer identitiesYes (end-to-end)NoCiphertext only
Team/role metadataYes (encrypted)NoCiphertext only
Custom field definitionsYes (encrypted)NoCiphertext only
SMS/WhatsApp/Signal contentYes (on your server)NoCiphertext from your server; provider may have original
Real-time eventsYes (per-hub, rotating keys)NoCiphertext only
Call metadataNoYesYes
Caller phone hashesHMAC hashedHash onlyHash (not reversible without your secret)
User-Agent stringsSHA-256 hashedHash onlyHash (not reversible)

For security auditors

Technical documentation:

Llamenos is open source: github.com/rhonda-rodododo/llamenos-platform