Skip to main content

Threat-model report

Research, not an audit
These pages are research and development and may not match the live app. Do not treat this as an audit. Shared for testing and demo only. Please use responsibly.

This report is for product readers, then developers and security reviewers. It says what the Glitr client addresses against its own goal, and what is still missing against an ideal messenger. It is not an audit, not a theorem, and not a score against another app. Implementation findings with IDs live on the security-audit report — in-house review, not an independent audit.

FieldValue
Date3 October 2026
SubjectGlitr product (whatsup + in-process stack)
AudienceProduct / exec readers, then developers and security reviewers
StatusResearch report — not an audit
Not claimedFormal verification of the messenger; anonymity; nation-state safety

Jump to: Executive summary · Glitr bar · Ideal bar · You may say / may not

Path pages: Assets and attackers, Platforms, Git mailbox, Live links, Tor, Devices and storage, Residual risk. Library models: Verification report. In-house findings: Security audit.

How to read the words​

WordMeaning
DocumentedStated as product behavior
MitigatedA control exists for that attacker and that asset
PartialA control exists and is incomplete, platform-specific, or easy to bypass
OpenNo product control, or the control is not a claimed path
Out of reachThe property conflicts with a shipped path (git-host metadata, WebRTC ICE without a mixnet)

These words are not proofs. They are not the formal-verification words (Tested / Modeled / Type-checked).

Two bars, labeled as such:

  1. Glitr bar — protect message content from the host; do not expect the host to be unaware that you chat.
  2. Ideal bar — properties a theoretically maximal messenger would have. Many are Open or physically hard. Listing them is the point.

The roadmap lists features that would make a messenger as strong as it can be. This page does not score Glitr against Signal, WhatsApp, or any other product. The leftover catalog stays on Residual risk.

Executive summary​

Addressed (Glitr bar). api-core runs in process. There is no Glitr account server and no Glitr chat host. Message bodies, attachment bytes, git-brokered SDP, and live file bytes use the recipient cascade (AES → Signal → PQXDH, then RSA hybrid → ML-KEM). Sealed mailbox folders use Argon2id then AES-GCM. There is no phone-number directory. Each contact has one protocol session shared across git, WebRTC, and onion. Native desktop and TUI can send git HTTPS through Tor SOCKS and pair over a hidden service. A dedicated threat-model draft exists. Four handshake / crypto libraries have models — not the messenger.

Outstanding (Glitr bar). Git tokens may still persist in glitr:connect. A user-supplied CORS proxy still sees git HTTP. Live WebRTC uses public STUN; ICE can leak IPs. Pair now (wu1:) and onion (on1:) invites are plaintext out of band. Live typing, receipts, and call signaling are DTLS-only. The messenger is closed-source and unaudited. A git host still sees activity, access, and IPs.

Ideal bar in one sentence. A maximal messenger would also need anonymity, sealed metadata, audited open source, disappearing messages, hardware-backed keys, mixnet or PIR delivery, reproducible builds, and a compromised-endpoint story Glitr does not claim. No messenger reaches that bar. The list below is a gap map, not a launch checklist.

The app is shared for testing and demo. Do not put sensitive details in it.

Glitr bar​

Protect message content from the host. Do not expect the host to be unaware that you chat.

Roadmap rows marked done are not upgraded here when the threat model already calls them Partial (git SDP is cascaded; Pair now and onion invites are still plaintext).

Transport​

PropertyStatusEvidenceWhere
No Glitr chat or account serverMitigatedIn-process api-core; glitr.io is docsArchitecture
Git mailbox you ownDocumentedPush / poll through a host you chooseGit mailbox
Live WebRTC is peer-to-peerDocumentedData channel after ICE; STUN is still publicLive links
Native onion live pathPartialArti after login; browser does not link it; mobile is not a claimed pathTor
Git over Tor SOCKSPartialNative desktop / TUI onlyTor
Offline deliveryPartialGit-URL contacts only. Pair now and onion have no mailbox fallbackNetwork
Host metadata / IPs / collaboratorsDocumentedExpected on this barEncryption visibility
Host terms of serviceOpenA generic host may throttle, block, or close the repoGit hosts

Encryption​

PropertyStatusEvidenceWhere
Recipient cascade on bodies and filesMitigatedSame stack on git outbound, live chat, live file bytesArchitecture
Git-brokered SDP cascadedMitigatedInner offer/answer encrypted to the contactLive links
Pair now / onion invite confidentialityPartialPlaintext wu1: / on1: QR or pasteLive links, Tor
Live control framesPartialTyping, receipts, call signaling are DTLS-onlyLive links
Keys per contactMitigatedOne ProtocolSession (Signal + PQXDH) per contactData structures
Password at restMitigatedArgon2id (19 MiB, t=2, p=1) → AES-256-GCM on sealed typesDevices and storage
Forward secrecy as a product claimPartialDouble Ratchet is documented in libraries; the messenger is unauditedCryptography
Deniable authenticationOpenNot claimed on product crypto pagesRoadmap

Identity​

PropertyStatusEvidenceWhere
No registration / no phone directoryMitigatedNo Glitr accountWhat Glitr is
TOFU + safety numberPartialHello Store / Match / Mismatch; no global PKIAssets and attackers
You hold keys and tokensPartialNo full key-management UX; GUI stores the connect passwordDevices and storage

Platforms​

PropertyStatusEvidenceWhere
Desktop identity keysMitigatedReal RSA keygenPlatforms
TUI does not persist the encryption passwordMitigatedMerge leaves password as it wasPlatforms
Web first-run identityMitigatedWebCrypto RSA-4096; no shared demo keysPlatforms, Security audit
GUI password persistMitigatedUnlock password not written; tokens may stillDevices and storage
Web git pathPartialNo default public proxy; user-supplied proxy still sees git HTTPGit mailbox
Mobile as a product pathOpenNightly spike; Tor not claimedPlatforms

Trust documentation​

PropertyStatusEvidenceWhere
Product threat-model draftDocumentedThis folderThreat model
Library formal verificationDocumentedFour libraries; messenger not claimedFormal verification
Independent audit of the messengerOpenClosed-source; none done. In-house review does not close this rowResidual risk, Security audit
Open source of the messengerPartialsignal-protocol is public; the rest is notArchitecture

Ideal bar​

Properties a theoretically maximal messenger would have. Status here is versus that ideal, so a Glitr Mitigated row on the first bar is often Partial or Open on this one.

No messenger reaches this bar. This list is a gap map, not a launch checklist.

Confidentiality and keys​

PropertyStatus vs idealGlitr today
Hardware-backed / unextractable long-term keysOpenSoftware keys in process memory and sealed files
No shared demo identity keysMitigatedWeb first-run uses WebCrypto RSA-4096
Encryption password never written to diskMitigatedGUI and TUI do not persist the unlock password; tokens may still
Post-compromise security as a product claimPartialLibrary Double Ratchet; unaudited composition
Key-compromise impersonation resistance as a product claimOpenNot claimed
Deniable authenticationOpenRoadmap: planned
Disappearing / unsaved messagesOpenNot in the data model
Screenshot / screen-security resistanceOpenNotifications and UI can show previews
Constant-time / side-channel storyOpenNot modeled
Published fuzzing of every frame parserPartialSome library fuzz targets; not a product program

Metadata and anonymity​

PropertyStatus vs idealGlitr today
AnonymityOpenRoadmap lists it; product docs disclaim it
Sealed sender / hidden correspondent graphOpenOutbound recipientId and collaborator lists are visible
Sealed-sender style receiptsOpenGit readreceipts/ are intentionally readable
Padding, cover traffic, timing randomizationOpenHost sees sizes, dates, and how often the repo moves
No public STUNOpenstun:stun.l.google.com:19302
No third-party CORS proxyPartialEmpty default; user may still paste a public proxy
No git-host access listOut of reachA clone or collaborator list is how git sharing works
Mixnet or PIR mailboxOut of reachA git host always sees that a mailbox is busy
Live media over an anonymity networkOut of reachLive WebRTC does not ride Tor as shipped
Contact discovery that does not leak the social graphPartialNo phone-number directory; adding a git URL still names a peer

Transport and groups​

PropertyStatus vs idealGlitr today
Encrypted out-of-band pairingOpenwu1: / on1: are plaintext QR or paste
Cascade on live control framesOpenTyping, receipts, call signaling are DTLS-only
Group protocol with membership secrecyOpenFan-out: one outbound copy per member; host can count them
Offline fallback on every contact kindPartialGit-URL only
First-party mailbox free of generic git ToS riskOpenA later possibility; not something this model waits on
WebRTC without ICE address leakageOut of reachOrdinary ICE; no mixnet in the messenger bundle

Device and supply chain​

PropertyStatus vs idealGlitr today
Open source of the messengerPartialSignal library only
Reproducible builds / binary and WASM transparencyOpenNot claimed
SRI on every web fetchOpenService worker pins caches; esm.sh still a remote
No document::eval / CDN trustOpenWebView bridge and GitHub Pages / esm.sh
Independent audit + ongoing program + bug bountyOpenNone
Formal verification of product send / poll / mergeOpenLibrary models only
Mobile as a claimed, entitled pathOpenNightly spike
Multi-device merge with a second factorOpenLive pair exchanges public mailbox rows; long-term secrets stay off the DC
Compromised-endpoint resistance (enclave, attestation)OpenResidual for any app that decrypts on the device
Memory-safe languageDocumentedRust cores. That is not an audit

Policy and operations​

PropertyStatus vs idealGlitr today
Host-policy independenceOpenGeneric git hosts may close a mailbox
Sealed local receipts and signaling filesOpenCoordination rows stay readable so peers can work without your password
Nation-state “safe forever”OpenNot a product target

A compromised endpoint, a hostile OS, or a host who already has the encryption password ends the Glitr bar and the ideal bar. Residual risk keeps that leftover.

You may say / you may not​

What you can say in a review without treating this page as an audit.

You may say​

  • Message content is cascaded to the contact so a git host is not reading “see you at 6.”
  • Sealed mailbox folders need the connect password.
  • There is no Glitr chat server and no Glitr account.
  • A dedicated product threat-model draft exists, including this report.
  • Four libraries have production tests and symbolic models. The messenger does not claim formal verification.
  • Native builds can send git through Tor SOCKS and chat on an onion link. The browser does not run Arti.
  • Neither the TUI nor the GUI persist path writes the encryption password. Git tokens may still persist on the GUI path.

You may not say​

  • Glitr is the theoretically most secure messenger, or close to that bar.
  • The messenger is formally verified, audited, or anonymous.
  • Closing Critical audit rows means Medium findings (CSP, STUN, …) are fixed.
  • DTLS is enough for chat bodies or files.
  • Pair now or onion QR invites are confidential.
  • ProVerif covers the git host, a CORS proxy, or a stolen device.
  • Roadmap “done” on secure signaling means every introduction is encrypted.
  • Rust, a cascade stack, or library proofs make a stolen unlocked session safe.

FAQ sentence: Glitr aims to keep message content from the host. It does not hide that you chat. The ideal-messenger list is a gap map. The app is a demo. Do not put sensitive details in it.

Start of this folder: Threat model. Leftover catalog: Residual risk. Library report: Verification report.