Skip to content
T-kall

Security: what it protects and what it doesn't

Last reviewed: 23 September 2026.

An app that says "end-to-end encryption" and doesn't say where that encryption ends is selling a guarantee it can't keep. Starting with this: the full guarantee is provided by the installed application; in the browser, the program that encrypts is downloaded from our server every time you open it. This page exists so that you can decide what to say on T-kall knowing where things stand.

What it does protect

What it does not protect (yet)

1. We publish the key log ourselves

Until August 2026 this said that the first contact with someone new couldn't be verified, and that closing that gap was "a big project". That project is done and what it does is described above. What remains open is smaller, but it isn't zero.

That log doesn't prevent the attack: it makes it detectable. A malicious server can publish a fake key; what it can no longer do is publish it in secret, because doing so forces it to publish two incompatible versions of the same story and that shows. It is the same deal that has underpinned the certificates of the entire web for a decade.

And it's our own server that publishes it. As long as the log's roots aren't copied to an independent site, whoever checks them and whoever issues them are the same house. Detecting the contradiction still works between two people talking to each other —that doesn't depend on us—, but third-party verification doesn't exist yet.

What closes it: publishing the roots externally, where anyone can audit them without having an account. In the meantime, comparing the safety number over another channel is still the strongest check there is, because it's the only one that doesn't rely on our infrastructure.

2. Chats change keys with every message; healing from a theft, not yet

Each chat message travels with its own key, derived from a fresh agreement per message (X3DH, the same first step Signal uses). That covers one specific attack, and it is worth saying exactly which one and which one it doesn't:

And what still isn't covered, which matters just as much:

Half of this section —that each message carries its own key— is done and in use. The other half —that the conversation heals from a theft— requires the ratchet switched on, and switching it on first requires session recovery: it's the biggest outstanding work on this page. And neither of the two touches point 1 —the first contact—: they serve to protect a conversation, not to prove to you who you are having it with.

3. The server sees everything that isn't encrypted

This does not travel encrypted, and the server sees the whole of it:

That's the metadata, and for many people it is more revealing than the content: two people talking every day at three in the morning says quite a lot without reading a single word. Signal tackles this with techniques we don't have yet.

4. There is no backup, on purpose

Private keys live only on the device and Android's backup is disabled. The price has to be stated up front and not after the fact: when you change phones or reinstall, the history and the keys are lost. There is no way to recover it.

The correct alternative is an encrypted backup with a key that only you hold, like WhatsApp's encrypted backup. It isn't built.

5. The app is a web page inside a container

T-kall runs in the system WebView; it is not a native client. The security of the encryption therefore depends on the security of that WebView, which Google updates and not us. It's mitigated (no cleartext traffic, no backups, with a content policy), but it's an attack surface that Signal or Threema don't have because their clients are native.

6. Fingerprint lock protects less than it seems

Biometric lock stops someone who picks up your unlocked phone from opening the app and reading. That's what it does, and it's fine. What it does not do is encrypt anything: anyone with access to the device's storage (with root, with a forensic dump or with an Android flaw) pulls out the keys —and, since 28 August 2026, the text of messages up to 400 days old— without going through the fingerprint. It's a door, not a safe.

8. Group calls, encrypted on your device (with one caveat)

A call between two people made with a chat's call or video call buttons goes straight from one device to the other. A group call needs a server to gather and distribute everyone's audio and video, and video appointments and "Meet now" meetings also go through that same rooms server, even if there are only two of you in them. As of version 0.4.0 that audio and video are encrypted on your device (SFrame, with key distribution over the already-encrypted channel) and our rooms server only relays them, without being able to see or hear them. The same holds for a meeting joined by link even when the person joining is from another organization: the key is distributed only among those in that meeting.

The caveat. A call is encrypted this way only when all of those present are on a recent version. If someone joins on an old version, that call drops on its own to encryption only as far as the server while that person is there —and the app tells you, with the room indicator— so as not to leave anyone unable to see or hear. While the fleet catches up this will happen often; as everyone updates, it will stop happening. If what you're going to say can't pass through our server in that case, use the two-person call with a chat's call or video call buttons (the group call button goes through the rooms server).

What the rooms server does see, whether the call is encrypted or not: who joins (their account's identifier and their display name), from what IP address, into which room —by its technical identifier, not by the channel's name—, when each person joins and leaves, what each person publishes (microphone, camera or screen share) and whether it is muted, technical data about the connection (the version of the calling software and the browser or system they connect from), whether each device's version can encrypt the room, and the technical "I can't decrypt you" notices that the devices send each other. And the meeting's name, if the host gives it one in "Meet now": it is shared over the room's data channel, which is not encrypted on the device —only the audio and video are—, so that server can read it. If the name is sensitive, leave it out. The title of a video appointment does not travel that way: it stays encrypted. And no call is recorded.

And where it is. The rooms server is a different machine from the one that stores the messages, contracted from Hostinger in a data center in the United States. What it sees of each call therefore leaves the European Economic Area (Privacy, sections 6.2 and 7).

9. No outside party has audited it

All of T-kall's security analysis we've done ourselves. Signal, WhatsApp, Threema and Wire have published external audits and protocols reviewed by academia over years. A cryptographic flaw doesn't show while things are working: the app runs perfectly and the messages read the same. That's why an in-house review, however careful, is no substitute for an external one.

Summary

The same limits we keep noted internally, uncut.
Limit Severity today What would close it
The key log is published by our server: no outside party audits it Medium Publish the roots on an independent site
No recovery after a compromise: a device's stolen key keeps working Medium Switch on the double ratchet, which first requires session recovery
Appointments don't change keys on each send (messages do) Medium Rebuild appointment encryption, which today runs weeks ahead
Whoever takes the device reads the recent stuff, and since 28 Aug 2026 it's the already-decrypted text, not just the keys (400 days / 20,000 messages) Medium A local password that encrypts the store at rest, or reducing that limit
Metadata in the clear Medium Sealed sender and encrypted contacts
No backup Medium (usability) Encrypted backup with a user-held key
WebView as the boundary Medium Native client
Biometrics is not encryption Low Keys tied to the system's secure store
A group call with someone on an old version drops to encryption only as far as the server (the app warns) Medium Update the whole fleet (OTA 0.4.0) so no call has to drop; the warning already appears
The name the host gives a meeting is seen by the rooms server, which is in the United States: the room's data channel is not encrypted on the device Low Encrypt that name with the room key when the whole call is encrypted on the device; in the meantime, don't give it a sensitive name
No external audit — Commission one

What you can do

If your life depends on this

If you are a journalist, an activist or anyone with a capable, well-resourced adversary, use an app with published external audits. Signal is the honest recommendation for that case. The fact that, since August 2026, chats change keys with every message does not change this recommendation, and neither does August's key log. And it's worth understanding why: that log makes a fake key leave a trace, but it's our own server that publishes it and no outside party audits it, so the guarantee still rests on us. On top of that, no outside party has audited this code: the algorithm being the right one doesn't prove it's implemented correctly, and that difference is exactly what an audit pays for. None of these limits stops you from using T-kall; they all change what it's suitable to use it for.

Reporting a flaw

If you find a security problem, tell us before making it public and it gives us time to fix it: angel@engravitysigns.com. Write "Fallo de seguridad" in the subject.

We have no bug-bounty program or disclosure agreement to offer you, and we'd rather say so than imply otherwise. What we do do: reply, fix, and give you whatever credit you want —or none, if you prefer it that way—.