1.3 Disappearing & Sealed
Messages that vanish on a timer the relay is never told.
Disappearing messages, sealed sender, panic wipe, and a decoy PIN. A timed message leaves this phone when its timer ends, even if the phone’s clock is set back, and a chat’s rows show black in a screenshot taken on this phone.
The disappearing timer opens once a two-phone test passes.
- FIPS 204
- Destruction receipts ML-DSA-87
- Envelope wrap keys HKDF-SHA-512
- At-rest envelopes ChaCha20-Poly1305
01 / THE DEFENSES — FIVE, TAPPABLE
Five defenses. Tap through them.
Set a timer and each message leaves the phone when it runs out: your copy counts from the moment our relay accepts it, theirs from when they read it, and a photo or file from when it is opened. A copy never read leaves seven days after its timer would have ended. The timer rides inside the encryption, so the relay is never told it.
A clock nobody can set back: setting the phone's clock back does not keep a vanishing message. The limits: a camera can capture any screen.
The outer envelope is addressed to the recipient alone; who wrote it is readable only after decryption. Sender identifiers are stripped from the stored message row (sealed sender), though the relay authenticates the sender at send time.
The relay routes by opaque identifiers. Undelivered messages queue with routing metadata under a published retention ladder.
One gesture erases local key material and state on your device. Honesty note: it cannot un-send what a recipient already holds.
What it destroys, it destroys completely — the keys go first.
A duress PIN opens a believable decoy surface. Once duress fires, the real account is scoped out of view for that unlock — a decoy PIN re-scopes the messenger, it does not re-key it, and we say so.
A coerced unlock yields the decoy. The keys stay where they were; the view is what changes.
A chat's rows show black in a screenshot taken on this phone, and screen recordings and mirroring meet a cover. A photo opened full screen, and the chat list, are covered only while a recording or mirroring runs: a still screenshot of them is not blacked out.
Scope, stated: another phone or a camera pointed at the glass is out of scope — no software defends against optics.
02 / DELETION — LETTERED
Delete a message and follow what the relay keeps.
What the relay deletes
Your messages reach the relay as end-to-end ciphertext it has no key to. A delivered row is purged after the grace window, and destroying a conversation deletes the rows the relay can tie to it; a one-to-one message, sealed by default, names neither its sender nor its conversation, so the destroy does not reach it, and it leaves on its own clock, as any message does. A group message, sealed to each member by default, and a message read with Stealth Mode on or read receipts off wait for the offline horizon instead. A photo, video, file or group voice note is stored apart from its message, encrypted, and stays up to 45 days after upload, even after its conversation is destroyed, unless the sender deletes the message for everyone or a chat timer purges it sooner. Nothing on the database volume is overwritten, so bytes left in a WAL or a backup are that same ciphertext, beside the routing columns that name who wrote to whom.
Rows that arrive on the relay’s REST send lane also sit inside a second, server-side envelope whose key is derived at use, and never stored, from an operator master held in the relay’s environment. Destroying the conversation retires that envelope’s epoch: to anyone without the master its residue never opened, and against someone who holds the master the retirement is policy, not mathematics.
- Wrap key
- HKDF from the erasure master key in the relay’s environment · derived at use, never stored
- Residue
- end-to-end ciphertext · envelope-locked on REST-lane rows
- Source
- fsor.rs · SPEC/06
The receipt
Every destruction emits a Merkle root over the erased messages, signed under ML-DSA-87 and published at the audit endpoint, so an account holder will be able to verify it against the operator key served beside it. A receipt records that the relay deleted a row; it cannot prove that no copy of the bytes survives on a disk. Verifying and showing that receipt in the app is in development.
- Receipt
- ML-DSA-87 · ctx QERYX-FSOR-ROOT-v1
- Verify against
- TOFU-pinned operator key
- Source
- SPEC/06 §8.9
The catch-net
A database trigger fans each row’s purge out to the cache, and to any file-store blob linked to that row, in the same window — the path that catches what a handler missed. No chat send links its file to the row, so a photo, video, file or group voice note is not purged with its message: the media reaper deletes it at its own expiry, up to 45 days after upload.
- Fan-out
- the row’s cache key in the same window, other cache entries bounded by expiry; a file at its own expiry
- Source
- SPEC/06 §8.7
Sealed sender wire v1
The outer envelope names only the recipient; the sender's identity sits inside the seal and is readable only after decryption — the stored row carries no author at all. On the recipient's acknowledgment the row is marked deleted and stops being deliverable; the purge sweep destroys it within the following twenty-five minutes, and the destruction is receipted. A group message is sealed to each member as a row of its own, which the member's receipt does not match: that row, like a message read with Stealth Mode on or read receipts off, is retired without a receipt and waits for the offline horizon. Rows the recipient can never open — control events and undeliverable sealed blobs — are minimised on the spot: sender, recipient and content all cleared.
- On ack
- marked deleted, no longer deliverable
- Then
- destroyed by the sweep within 25 minutes, with a signed receipt · thirty-day offline horizon
- A group member’s row, or a read without a receipt
- retired without a receipt the relay can match · destroyed at the offline horizon
- Source
- SealedSenderService.swift · sender_cert_handlers.rs
Duress
A decoy PIN opens a believable decoy surface; the real account is scoped out of that unlock's view once duress fires — the decoy PIN re-scopes the messenger, it does not re-key it. Activation is the duress PIN itself, nothing quieter.
- Decoy
- decoy surface · opens under the duress PIN
- Real account
- out of that unlock’s view · re-scoped, not re-keyed
The surface
A chat’s rows render inside a secure canvas that shows black in a screenshot taken on this phone, and recordings and mirroring meet a scrim and an overlay. A photo opened full screen, and the chat list, are covered only while a recording runs, so a still screenshot of them is not blacked out. The scope is bounded and we state it: a camera pointed at the screen is out of scope, and the real-time-coercion shadow-copy risk is a policy-and-audit contract, not a cryptographic one.
- Scope
- secure canvas on chat rows · scrim + overlay on recordings
Deleted means the relay’s delivered rows are gone, counted, and rolled back if one survives.
The relay answers for its copy
The relay answers, for each message you sent, whether its copy is gone and when it was erased, and the app asks it about your newest delivered message when you open the chat. That answer is the relay’s own statement, backed by its signed destruction log once the row is purged; it is not proof that no copy exists anywhere else.
During the 10-minute delivery grace, ciphertext still exists — we say so, because the caveat is the credibility engine.
03 / THE RETENTION LADDER — FOOTNOTED
Read the retention ladder in the open.
10 min1
delivered-message hard-purge grace — during it, ciphertext still exists; we say so
30 days2
offline queue horizon for undelivered ciphertext; operator-tunable 1–90 days
ML-DSA-87
the signature on every destruction root you will be able to verify
| Parameter | Value | Source |
|---|---|---|
| Destruction receipt | ML-DSA-87 Merkle root, ctx QERYX-FSOR-ROOT-v1 | SPEC/06 §8.9 |
| Wrap key | HKDF from the erasure master key in the relay’s environment — derived at use, never stored | fsor.rs |
| Delivery erase | soft-delete at ack, hard DELETE at the grace window | handlers.rs · main.rs |
| Grace window | 10 minutes to hard purge; the sweep runs every 15 | backend env · main.rs |
| Offline horizon | 30 days, operator-tunable 1–90 | /api/v1/transparency/retention |
| Re-fetch of a purged row | no row returned | handlers.rs |
| Retired with no matching receipt | a group message sealed to each member, or a read with Stealth Mode or read receipts off: the row waits for the 30-day horizon | handlers.rs · sender_cert_handlers.rs |
| Cache purge | trigger fan-out, same window | SPEC/06 §8.7 |
| Photos, videos, files, group voice notes | stored apart from the message; the media reaper deletes each at its expiry, 45 days after upload by default | handlers.rs · main.rs |
04 / THE VERDICT — CATEGORY COLUMNS
Set timed deletion against a delete button.
| QERYX | Classical E2E | SMS-class | |
|---|---|---|---|
| Real workloads | |||
| Deletion trace | Hard delete after delivery, plus a signed receipt | Delete-flag rows and backups persist | The carrier retains |
| Coerced unlock | Decoy PIN and duress paths | Not included | Not included |
| Sender metadata | Stripped from the stored row; authenticated at send | Sender visible to the server | The sender is the routing key |
| Backup residue | Timed messages left out of the QERYX backup file; chats kept out of device backups | Restorable from backup | Plaintext backups |
| Screenshot attempt | Chat rows show black on this phone | Not included | Not included |
05 / THE HARD QUESTIONS
Ask what survives a delete.
Is deleted really gone?
On your phone, a message that vanishes leaves the chat, the chat list, search and its media caches, and QERYX’s own backup file never carries a message that has a timer. On the relay, the row is deleted after delivery, while a photo, video or file it carried stays stored apart, encrypted, until its own expiry, up to 45 days after upload, unless its sender deletes it sooner; bytes left in a WAL or a backup are the end-to-end ciphertext the relay never had a key to, beside the routing columns that name who wrote to whom. During the delivery grace, ciphertext still exists; we say so. A group message, sealed to each member by default, and a message read with Stealth Mode on or read receipts off keep their ciphertext on the relay until the offline horizon.
Who can set a timer, and when?
Either side of a chat can set it, and the other phone takes it up from your next message. In a group, only admins can change it: our relay enforces that, and the setting reaches members inside the group’s sealed settings. The timer opens once a two-phone test passes.
What can be handed over under subpoena?
Undelivered ciphertext plus the roster and routing metadata under the retention ladder, and, for a group message, sealed to each member by default, or a message read with Stealth Mode on or read receipts off, its ciphertext until the horizon. For destroyed conversations, the rows the relay can tie to them are gone from its database, but a one-to-one message, sealed by default, names neither its sender nor its conversation, so the destroy does not reach it, and one still waiting, or read with Stealth Mode on or read receipts off, stays until the horizon; an old backup of the relay holds end-to-end ciphertext and the routing columns beside it. Each photo, video or file stays, encrypted, with an upload record that names its uploader, until its own expiry, up to 45 days after upload, even after its conversation is destroyed, unless its sender deletes it sooner. Reading content requires breaking both X25519 and ML-KEM-1024.
Can the server see who I message?
Sender identifiers are stripped from the stored message row (sealed sender), though the relay authenticates the sender at send time; the relay routes by opaque identifiers. Undelivered messages queue with routing metadata under a published retention ladder.
What does panic wipe do?
It erases local key material and state on your device in one gesture. It cannot un-send what a recipient already holds — that is physics, and we put it in writing.
What does the decoy PIN show a captor?
A believable decoy surface. The real account is scoped out of that unlock's view; the decoy PIN re-scopes the messenger rather than re-keying it, and we put that limit in writing.
Do screenshots work?
On this phone, a screenshot shows a chat’s rows as black, and recordings or mirroring meet a cover. A still screenshot of a photo opened full screen, or of the chat list, is not blacked out. Another phone or a camera pointed at the screen is out of scope; no software defends against optics, and we will not claim otherwise.
Can I verify a destruction?
Once QERYX arrives, yes, at the audit endpoint: every destroy emits an ML-DSA-87-signed Merkle root you will be able to check against the operator key served beside it. It shows that the relay recorded the delete, not that no copy exists anywhere else. Surfacing that receipt in the app is the next step, and this page will say when it arrives.