Qendra

Security FAQ

Honest, specific answers about what Qendra protects against — and what it cannot. If a question is not answered here, read the source.

Highlight protections for your threat model

1. About Qendra

What does Qendra mean? Qendra comes from Albanian and means "center" or "hub". It reflects the purpose of this project: to be a secure, central place for private communication — a hub where protection is built in by design, not added as an afterthought.

Mission. To make genuinely private communication available to everyone. Qendra is built on the belief that security should not be a premium feature, a marketing promise, or a trade-off for convenience. It is the foundation. Every message is protected with post-quantum cryptography, and no content is ever stored in readable form on any server.

Vision. A future where European-built communication infrastructure sets the global standard for privacy and digital sovereignty. Where users hold their own keys, control their own data, and decide for themselves who to trust — free from jurisdictions and business models that treat personal information as a resource to be mined.

Behind Qendra. Qendra was created by someone based in the Netherlands, working at the intersection of information technology, security, and artificial intelligence. Every project this person builds starts from the same non-negotiable principles: digital sovereignty first, European infrastructure and standards wherever possible, and a firm belief that technology should serve the people who use it. There are no investors to satisfy, no surveillance-based revenue model to protect, and no pressure to compromise on privacy. Just a stubborn, deliberate commitment to building tools that respect the humans on the other side of the screen.

2. What is protected

Can the server read my messages?

No. Every message is sealed with a hybrid ML-KEM-768 + X25519 key encapsulation and dual-signed with ML-DSA-65 + Ed25519. Private keys never leave your device. The relay only sees opaque ciphertext and the recipient ID.

Is it safe against future quantum computers?

Every layer that touches user data uses a quantum-resistant primitive. Shor-breakable algorithms (RSA, plain ECDH, plain ECDSA) appear nowhere in the data path.

  • Messages. Hybrid ML-KEM-768 + X25519 for confidentiality and ML-DSA-65 + Ed25519 for authenticity. If the classical half is broken later, the post-quantum half still holds.
  • Symmetric layer. ChaCha20-Poly1305 with 256-bit keys — Grover's algorithm only halves the search space, leaving ≥128-bit security, which NIST classifies as quantum-safe.
  • Local vault & keystore. Argon2id (memory-hard) + ChaCha20-Poly1305. No PBKDF2, no AES-CBC, no RSA-wrapped keys.
  • Encrypted appointment export (.qapt). Same Argon2id + ChaCha20-Poly1305 profile as the keystore. Legacy v1 files (PBKDF2 + AES-GCM-256, also symmetrically quantum-safe) can still be opened, but new exports are written in the v2 profile.
  • Attachments & voice notes. Per-file ChaCha20-Poly1305 with random 256-bit keys, themselves wrapped by the recipient's hybrid ML-KEM-768 + X25519 envelope.
  • Device unlock (Face ID / Touch ID / Windows Hello). Uses the WebAuthn PRF extension: the platform authenticator releases 32 raw bytes that we mix into a ChaCha20-Poly1305 wrap key via SHA-256. The classical WebAuthn signature (ES256/RS256) only gates access on-device — it never protects data in transit or at rest, so a future quantum break of ES256 still can't extract the PRF output from the secure enclave. Key derivation and the wrapped mnemonic are symmetric-only and quantum-safe.
  • Key-change indicator. Non-security DJB2 fingerprint of an already-public key — used only to detect rotation, never to authenticate.

Even captured ciphertext stays unreadable and unforgeable in a "harvest-now, decrypt-later" scenario.

What if my phone is stolen?

The local database is encrypted with audited Argon2id (memory ≥ 64 MiB, t ≥ 3) and ChaCha20-Poly1305. Without your passphrase or device biometric, an attacker cannot read it. The one-tap Lockdown wipe destroys all keys and the message cache.

Can a tampered relay replay my messages?

No. The client tracks a sliding replay window and rejects duplicate envelopes. Every envelope also carries a sender-signed counter and expiry, so the relay cannot extend timers or resurrect old messages.

3. What is not protected

My contact takes a screenshot, or their phone is compromised.

End-to-end encryption only protects the wire. If the other endpoint leaks the plaintext — screenshot, malware, shoulder-surfing — Qendra cannot help. Pick contacts you trust.

My own device is infected by malware.

If something is reading your screen or your keystrokes, no messenger on earth can save you. Keep your OS updated, prefer biometric unlock, and use Lockdown if you suspect compromise.

Can the server tell that two people are talking?

The relay sees the recipient address and the rough time a message arrived (bucketed). Sender is sealed inside the envelope, but if you and one contact are the only people online at a given second, traffic analysis is still possible — see §4.

Is the recovery phrase recoverable if I lose it?

No. There is no password reset. Lose the 24 words and the account is gone — by design. Store them on paper, in a safe place, not in a cloud password manager.

4. Warrants & legal compulsion

What can a court order force the operators to hand over?

Only what the server actually holds: opaque per-user account IDs, encrypted envelopes (auto-purged after 14 days), and public keys. The server does not store plaintext, private keys, recovery phrases, or message history beyond the TTL.

Could you be compelled to push a malicious update?

In principle, any operator of any service can be compelled. The defense is auditability: the client is open source, builds are reproducible, and contact safety codes will change immediately if your keys are swapped server-side. Verify them.

How will I know if a warrant is served?

Check the Warrant Canary. If it stops being updated past the "next update due" date, or if it disappears or is materially weakened, assume legal compulsion has occurred and treat the service as potentially compromised.

What about subpoenas for metadata only?

The relay deliberately retains as little metadata as possible: timestamps are bucketed, presence/broadcast channels are disabled, and messages are purged after 14 days. There is no IP log, no read receipt log, no device-identifier log beyond the auth session. The edge layer (Cloudflare) sees connection metadata only for the duration of a request — see §4 and the Privacy page for the sub-processor disclosure and CLOUD Act assessment.

5. Metadata leaks

What metadata is exposed on the wire?

Your TLS connection to the edge (IP, time, approximate byte count). Message bodies are padded to fixed-size buckets, so wire length does not leak content length.

Who sees my IP address? Doesn't Cloudflare terminate TLS?

Yes. Cloudflare terminates TLS at the edge, so it sees your IP, request timing, and byte count — but only opaque ciphertext as the payload. The origin relay sees the same ciphertext and a Cloudflare-forwarded IP. Neither party can read message content. If hiding your IP from the edge is part of your threat model, use Tor or a trusted VPN at the network layer. We treat the edge as untrusted by design: the cryptography assumes it can be observed, compelled, or replaced.

Does the OS see what is inside a notification?

Push notifications carry no plaintext. They only tell the device that "something" arrived — the actual decrypt happens after the app is unlocked.

What about the map in appointments — does that leak my location?

The appointment invite itself (date, time, coordinates, title, accept/decline answers) is end-to-end encrypted in the same envelope as a normal message — the Qendra server never sees it. The map tiles, however, are fetched directly from tile.openstreetmap.org by your browser, so OpenStreetMap sees your IP and the tile coordinates you are viewing. Pick Approximate precision (~100 m) when you do not want the exact pin in any party's logs, and use a VPN or Tor if hiding your IP from the tile provider matters.

Can traffic analysis link sender and recipient?

The sealed-sender envelope prevents server-side linking, but a global adversary watching both endpoints can still correlate timing. If that is in your threat model, use Tor / a VPN at the network layer — that is the right tool for it.

What does the relay log?

Only what is needed to deliver: the recipient ID, the encrypted blob, a bucketed arrival timestamp, and an auth-session token. Realtime presence and broadcast channels are disabled to avoid accidental leaks.

6. Key rotation & verification

When do my keys rotate?

On reinstall, restore from recovery phrase, or after Lockdown. The client publishes the new public keys (ML-KEM, X25519, Ed25519, ML-DSA) and signs a KEY_CHANGED notice that goes out to every verified contact.

What happens on my contact's side?

Their app shows a warning, marks the contact as unverified, and blocks sending until they re-verify the safety code with you over a trusted channel. This is the same defense against an attacker-induced swap as against a legitimate reinstall.

Why is verification mandatory?

Because without it, a server compromise could silently substitute keys (MitM) and you would never know. Comparing the 6-emoji code, numeric safety number, or hex fingerprint takes 10 seconds and defeats the entire class of attack.

Is verification per-device or per-account?

Per-device. Each install enrols its own biometric and tracks its own verification state. A second device starts unverified for every contact until you re-check the safety code.

7. Tamper-evident security claims

Every claim above is tied to a specific source file. The hashes below are computed in your browser from the actual bytes of the running code — not from a server response. Compare them against the published reference for this release to confirm the FAQ matches what is executing on your device.

Manifest 2026.08.22-beta3

Hashing running code…

How to verify this yourself
  1. Clone the repository at the tag matching version 2026.08.22-beta3.
  2. Run shasum -a 256 src/lib/crypto.ts src/lib/attachments.ts src/lib/keystore.ts src/lib/appointment-vault.ts src/lib/device-auth.ts.
  3. Compare each digest with the live hash shown above. They must match byte-for-byte.
  4. If a hash differs, the running app is not the published source for that file — treat it as compromised until explained.

Threat models differ. If you are a journalist, activist, or anyone facing a state-level adversary, combine Qendra with Tor / a VPN, a hardened OS, and verified out-of-band contact channels. No single tool is a complete solution.

See also: User Guide · Privacy & EU Hosting · Warrant Canary