this post was submitted on 03 Jun 2026
4 points (83.3% liked)

Privacy

9923 readers
106 users here now

A community for Lemmy users interested in privacy

Rules:

  1. Be civil
  2. No spam posting
  3. Keep posts on-topic
  4. No trolling

founded 3 years ago
MODERATORS
 

A WebRTC messenger where message content never touches a server and the push layer can't see who's messaging whom

Android app, solo-built. Trying to find out where the architecture breaks before I scale it.

The core idea. Messages travel through direct WebRTC data channels (DTLS/SRTP) between two phones. No server stores, reads, or relays content. Group chats use a gossip protocol, sender fans out to a few reachable members who relay onward; members who come online late fetch missing messages from any peer who has them.

The supporting infrastructure, and what each piece can see.

  • Signalling: needed to set up any WebRTC connection. I use a Cloudflare Worker (ephemeral, nothing persisted). The SDP/ICE payload is encrypted with the recipient's public key before it leaves the sender, and the two participants are addressed by opaque per-session hashes. The relay forwards ciphertext between un-linkable identifiers.

  • Push wake-up: FCM, because Android. Sealed-sender design: the wake-up payload is encrypted to the recipient's public key, and the sender's identity is inside that envelope. The push layer sees who's receiving (it must, that's how push works), not who's sending. The FCM request is also forwarded via a Cloudflare Worker so Google doesn't see the sender's IP either.

  • TURN relay: Cloudflare again, for restricted networks. Carries encrypted packets only, like any TURN.

The code is open source (GPLv3).

I wrote a detailed white paper explaining the full architecture on my landing page: https://www.mindtheclub.com/

Mainly interested in where the design assumptions break. The sealed-sender piece, I'd like to know if the threat model I'm assuming there is too generous.

#infosec #privacy #WebRTC #cryptography #Android #FOSS #PeerToPeer

you are viewing a single comment's thread
view the rest of the comments
[–] GradleSurvivor@lemmy.ml 0 points 4 hours ago

Thank you for the comment!

Actually it is open source (GPLv3): https://github.com/AndreaVagheggi/mindtheclub

I have tackled the Cloudflare dependency implementing a “sealed sender” feature, the wake-up/signalling payload is encrypted to the recipient's public key, and the sender's identity is inside that envelope. The push/signalling layer sees who's receiving, not who's sending.

I use the standard webRTC approach for hostile networks, which is TURN, also with Cloudflare.