WallyMates

Security & Encryption

Privacy in WallyMates isn't a single settings toggle — it's several independent layers of protection, each aimed at a different threat: server-side interception, a stolen phone, a man-in-the-middle attack during a call, syncing with the web version.

1:1 end-to-end encryption — Static X3DH

Private chats are encrypted with an in-house Static X3DH implementation (a triple Diffie-Hellman exchange over an identity key, a signed pre-key, and an ephemeral key — a simplified "SESAME-lite" multi-device session scheme inspired by Signal's approach) with AES-256-GCM. The encryption key is derived independently for every device pair — no Double Ratchet chain, no one-time pre-keys — a simpler model than the classic Signal protocol, but the server still never sees the content and never receives any of the keys.

Group end-to-end encryption — Sender Key

Group chats can't be efficiently encrypted the same way as 1:1 — that would mean separately encrypting every message for every member. Instead, WallyMates uses a Sender Key scheme (v5): each member generates their own AES-256 key for a specific group and distributes it to the other members, individually encrypted through the same end-to-end encrypted channel used for regular private messages — the server sees only encrypted blobs, never the key itself. Group messages are then encrypted with fast AES-256-GCM using that shared key — no per-message key negotiation. The protocol is wire-compatible between Android and Windows — the exact same key-distribution and encryption scheme on both platforms.

More on groups and channels themselves — see the Groups & Channels page.

Call verification — MITM protection

Voice and video in a call are protected separately (see the Calls page), but one question remains: how do you know you're actually calling that person, and not someone who intercepted the connection? During a call, the app shows a "call fingerprint" — a sequence of 96 emoji computed from both parties' long-term identity keys. Compare it out loud, and if it matches, a swap is ruled out: an attacker would need the other party's private key, which not even the server has. It's the same idea as Signal's or WhatsApp's "safety number", and the algorithm is identical on Android and Windows.

More on calls themselves — see the Calls page.

Syncing with the web version

The web messenger (web.worldmates.club) is a special case: to show chat history in a browser, messages are additionally re-encrypted with a Web Sync key (AES-128) and stored encrypted in the database. This is a deliberate trade-off — without it, the web version simply couldn't show chat history at all.

If conversation privacy is critical, use the mobile app or secret chats, and keep the web version for one-off conversations.

Local storage

What data reaches the WallyMates servers?

"Encrypted message storage" is not the same thing as "the server stores nothing." Here's an honest breakdown of what the server actually sees and what it doesn't, without claiming more than the current implementation actually guarantees.

What the server receives and stores

What end-to-end encryption protects

The text of private chats (Static X3DH) and group chats (Sender Key) can't be decrypted by the server — none of the cipher versions currently used for new messages (cipher_version 6 for private chats, 4 for group chats) involve a server-held decryption key. 1:1 voice and video calls run directly between devices (WebRTC) — the app's servers never receive the call's media stream at all, only the signaling data needed to set up the connection.

For everyday messaging features — see the Messaging page.

Where the private key is stored

Both clients — on the Download page.

Account protection