Security

This page describes what Chatalot protects, what it doesn't, and how to report problems responsibly. Honest disclosures — no marketing claims about "military-grade" anything.

Cryptographic architecture

End-to-end encryption

Direct messages and group channels use the Signal protocol:

Cryptography runs client-side, compiled to WebAssembly. The server cannot read plaintext message content because it never holds the decryption keys.

Key verification

Every conversation exposes a fingerprint users can compare out-of-band. Chatalot uses trust-on-first-use (TOFU) by default; identity-key changes trigger a visible warning in the conversation UI. Fingerprint comparison is the authoritative signal — if it matches, you're talking to who you think you are.

Passwords

Passwords are hashed with Argon2id (time=3, memory=64MB) before storage. The server stores only the hash; the plaintext password never touches disk and is discarded from memory after authentication. Nobody can recover a forgotten password — admins can reset it, but cannot read it.

Two-factor authentication

TOTP (RFC 6238) is supported. Secret values are encrypted at rest with ChaCha20-Poly1305 using a per-instance key. An admin who breaches the database without also holding the encryption key gets useless ciphertext.

Transport

All HTTP and WebSocket traffic terminates at TLS. The server enforces HSTS; modern TLS suites only (no legacy cipher fallbacks). WebRTC voice/video uses DTLS-SRTP.

What Chatalot does NOT protect

End-to-end encryption covers message content between two users or within a group. The following are explicitly NOT end-to-end encrypted:

These are architectural limits documented honestly rather than hidden behind "fully encrypted" marketing. Future releases narrow these gaps where feasible.

Reporting a vulnerability

Please do not open a public issue for security bugs. Instead:

What to expect

What to include

Release signing

Every Chatalot release manifest and container image is signed with cosign. The public key is published at /.well-known/keys/chatalot.pub (SHA-256 f1ff3f7ff3a1a7fe53620bbd8db0e362e55dcf622780e271740bc27d1850d082). Clients verify signatures before pulling an update; a compromised distribution channel cannot deliver a malicious release without the signature check failing.

Independent review

Chatalot has not yet had an independent third-party cryptographic audit. The code is open for community review and scrutiny is welcome. Planned: commission a cryptographic audit once the protocol and E2EE implementation stabilize.