End to end encrypted team communication for industry: a customer case with Tuwunel

10 min read·Tobias Brida
Case studyTeam communicationMatrixTuwunelData sovereignty
OT Security lettering on an abstract red background

Executive summary

An Austrian industrial SME engaged us to replace its SaaS team messaging with a communication platform hosted on its own hardware and encrypted from device to device. The solution uses the open Matrix standard with the Tuwunel homeserver, written in Rust. Its chat services are reachable exclusively through the customer's private VPN

This anonymised case study describes the deployment and its acceptance checks as of 3 November 2026

Aspect Detail
Scope Internal team communication for 20 users, in the office and on mobile devices
Platform Tuwunel homeserver, Rust, embedded RocksDB, one container for the homeserver
Clients Element Web, Element Desktop and Element X for iOS and Android
Infrastructure Debian 13 VM on the customer's own KVM host, with 2 vCPU, 4 GB RAM and 40 GB disk
Network access Private mesh VPN through Tailscale, with no publicly reachable chat ports
Encryption End to end encryption for team messages and attachments, plus TLS between clients and the reverse proxy
Backup strategy Nightly backups, encrypted before transfer to Swiss object storage, with a verified restore
Implementation A few working days, including a pilot phase and disaster recovery verification

Initial situation and objectives

The customer integrates OT and IT systems for manufacturers and extraction sites. Daily conversations include network diagrams, controller configurations, interface specifications and maintenance windows. These are details that its own customers entrust to it when handing over access to production systems

The concern was who could decrypt those conversations. Slack and Microsoft Teams encrypt data in transit and at rest, but ordinary team chat does not have end to end encryption that keeps the service itself outside the trust boundary. Teams offers E2EE for supported calls and meetings, which does not extend that protection to their chat messages

For this customer, control of the chat server alone was insufficient. Message content also needed to remain unreadable to the server

The requirements were concrete:

  • End to end encryption by default for team messages and shared files
  • Hosting on the customer's own hardware, without a chat vendor's cloud backend
  • Familiar daily use, with rooms, threads, reactions, file sharing and desktop and mobile apps
  • Access through a private network, without publishing the chat services on the internet
  • A small operational footprint, manageable by a team of four
  • Encrypted backups and a demonstrated restore, with the limitations of key recovery made clear

Evaluation of alternatives

Among the options we assessed, Matrix with Tuwunel offered the best fit for this combination of encryption, familiar clients and a small deployment. This was a decision for the customer's operating model, rather than a claim that one platform suits every organisation

The comparison below concerns message content in team chat. It distinguishes encryption controlled by the service from encryption whose usable keys stay with the participants

Option Own hosting E2EE for chat Assessment for this project
Slack, Microsoft Teams No No for ordinary team chat Service managed encryption did not meet the requirement
Zulip Yes No between participants Strong topic organisation, but the server processes readable messages
Mattermost Yes Not built in Capable team chat, with readable content available to the server
Rocket.Chat Yes Private rooms and direct messages E2EE is available, but its scope and security history required closer assessment
Wire Yes Yes An encrypted alternative with more backend services to operate
Matrix with Synapse Yes Yes, through clients Mature server, normally operated with a separate PostgreSQL database
Matrix with Tuwunel Yes Yes, through clients Selected for one homeserver container, an embedded database and the required Element workflows

The comparison draws on the published documentation for Zulip, Mattermost, Rocket.Chat, Wire and Synapse

A security analysis published at ACSAC 2025 identified flaws in the Rocket.Chat E2EE protocol and implementation. The researchers' disclosure page also states that critical findings have been patched. The paper is relevant to an assessment of specific versions, not evidence that every current Rocket.Chat deployment remains vulnerable

Tuwunel is the official successor to conduwuit. According to the project, its principal sponsor is the Swiss government, where it is also deployed for citizens. The project describes broad Matrix compatibility, while acknowledging exceptions for specialised use cases

For this deployment, Element Web, Element Desktop and Element X covered the required messaging workflows without client modifications. Tuwunel runs as a single process with embedded RocksDB, so the customer does not need to operate a separate database service

Solution architecture

The chat services run in one small virtual machine on the customer's KVM host. Approved laptops and phones connect through Tailscale, then use HTTPS to reach Caddy. Caddy forwards Matrix requests to Tuwunel and serves the Element web client

Element clients connect through Tailscale to Caddy on the customer VM, which serves Element Web and forwards chat requests to Tuwunel with RocksDB, while restic sends an encrypted backup to Swiss object storage
Private access, one VM and an encrypted backup

Caddy obtains certificates through a DNS challenge, which does not require a publicly reachable web port. A small discovery response on the company website directs Matrix clients to the private chat address, allowing users to enter the company domain when signing in

That discovery response is public and reveals the chat hostname. Access to the chat service still requires an authorised VPN connection

The chat backend runs on company hardware, but the deployment is not disconnected from external services. Tailscale coordination, DNS and certificate services, software updates, mobile push services and the encrypted backup destination remain external dependencies. Tailscale documents this distinction between its control and data planes

Security architecture

The design combines private network access with encryption on the user devices. Each layer addresses a different failure scenario

Layer Measure Risk addressed
Message content E2EE enabled in every room used for team communication, with messages and attachments encrypted on the clients Reading stored content from a copied server database or backup without the users' keys
Device trust New devices verified through emoji comparison or the user's recovery key Sharing message keys with an unrecognised device
Network Chat services reachable only over the private VPN, with no public chat listener Direct internet scans and attacks against the chat endpoints
Transport HTTPS between clients and Caddy, with certificates issued through a DNS challenge Eavesdropping on the client connection
Accounts Federation disabled, registration controlled through onboarding tokens and closed after onboarding Unauthorised account creation and communication with external Matrix servers
Administration SSH keys, disabled root login and automatic security updates Password guessing and avoidable exposure to known software vulnerabilities
Containers Homeserver runs as an unprivileged user, with privilege escalation blocked Excessive privileges if the application is compromised

Matrix encryption takes place in the clients. Room membership and other metadata remain visible to the server. Encrypted key backups can also be stored there, but the server does not receive the user's recovery key needed to unlock them

For a lost device, the response starts by revoking its VPN access and terminating its chat session from a trusted device. This stops further authorised access once revocation takes effect. It cannot erase messages or keys already stored on the lost device, so device encryption and screen locking remain necessary

E2EE also does not protect a compromised user device. A compromised server that serves the web client could deliver altered client code, which makes the integrity of the web client and timely updates part of the security model

Backup and disaster recovery

Backups run nightly and are encrypted before leaving the server. A complete restore was successfully verified before the system entered daily use

The nightly procedure is deliberately simple:

  1. The homeserver stops briefly while its database is copied locally to obtain a consistent snapshot
  2. The homeserver resumes, with the short interruption scheduled for 03:00
  3. The snapshot and configuration are encrypted and deduplicated with restic, then transferred to Swiss object storage
  4. Retention is applied automatically: 7 daily, 4 weekly and 6 monthly snapshots
  5. An integrity check reads a sample of the stored data

There are two separate encryption layers. Message content in the database is already encrypted by the Matrix clients. Restic adds encryption for the backed up database, configuration and metadata before upload

Recovery credentials for the backup are retained separately from the VM so a server loss does not also remove the ability to restore it. The automated backup job still needs access to its backup credentials, which must be protected on the running system

Restoring the server and recovering a user's message keys are different operations. Each user keeps a personal recovery key in a password manager. A server restore alone does not grant an administrator access to the encrypted conversations

Rollout and daily operation

Onboarding took approximately ten minutes per person. Each team member followed the same sequence:

  1. Install the VPN app on laptop and phone, then sign in
  2. Create an account in the branded web client using an onboarding token
  3. Configure secure key backup and save the personal recovery key in a password manager
  4. Install Element X on the phone, sign in and verify it from the laptop

Users enter the company domain when signing in. The discovery response on the company website supplies the chat address, while the VPN provides access to it

The workspace is organised as one private Space with rooms for projects and topics. Threads, reactions, mentions and file sharing provide familiar workflows. Mobile push services signal new activity without receiving decrypted message content, and the app needs access through the VPN to retrieve and decrypt messages

Known limitations

Encryption protects message content, while the deployment still needs clear rules for metadata, devices, recovery and integrations

Limitation Impact Approach in this deployment
Metadata The server sees room membership, message timing and sizes Keep the server private and under the customer's administration
Message search The server cannot search encrypted message content Use local indexing in Element Desktop, with more limited web and mobile search
Sign in by QR code This workflow was unavailable with the deployed server and client combination Sign in manually and verify the device, adding roughly 30 seconds
Recovery keys Losing all devices and the recovery key can make earlier history inaccessible Store the recovery key in the user's password manager during onboarding
Integrations A simple webhook does not provide an encrypted Matrix participant Use a bot that supports E2EE and has its own device keys
VPN access Every device needs VPN access, and external partners cannot join directly Keep this workspace internal and design partner access separately
External services VPN coordination, certificates, push delivery and remote storage still have dependencies Include them in operational planning rather than treating the system as isolated
Changing server software Keeping all data when moving to a different implementation is not guaranteed Assess supported migration paths before choosing a replacement

Element documents local search in its desktop client. Other client capabilities can change between versions, so search and sign in behaviour should be checked when updating

Outcome and relevance for industry

The customer's internal chat now runs on infrastructure it controls. Messages and attachments are encrypted on the participants' devices, and the chat backend is not publicly reachable. The engagement took a few working days and requires one small virtual machine in ongoing operation

  • Control of operational data: the primary chat database stays on company hardware, with encrypted recovery copies in Swiss storage
  • Private access: chat endpoints are available only through the authorised VPN
  • Verified recovery: nightly encrypted backups and a completed restore check before rollout
  • Familiar applications: users work in web, desktop and mobile clients with established messaging workflows
  • No chat licence fees for the selected software: infrastructure, storage, VPN services and maintenance remain operating costs

Plants, engineering firms and suppliers exchange network plans, machine parameters and maintenance information every day. A deployment of this kind can keep those conversations within infrastructure they administer

For a plant environment, the server should sit in an appropriate IT zone with controlled access, preserving the separation from control systems. An E2EE capable bot can deliver machine alerts or shift handover notes to dedicated rooms. Such integration needs its own access design and was not part of this deployment

Sources

The project scope, resource allocation, rollout duration and restore result describe this customer engagement. The following sources support the platform and security background