- Records
- Only sources selected by hand.
- New chats
- Not added automatically.
- Choose for
- A known set of channels or groups. No fixed chat capacity has been qualified.
Does not do It does not discover other chats or backfill earlier history.
Modes, scenarios and evidence levels
TgWitness records what the connected account observes. A third party can verify the record’s integrity against an independently trusted key.
Account-visible updates
Linked records, each signed
Trusted key + retained boundary
h₁ → h₂ → h₃ · Ed25519Integrity is checked. Telegram origin and the truth of a message remain separate questions.Three scopes and an investigation preset. Exclusions and enabled source types still apply.
Does not do It does not discover other chats or backfill earlier history.
Does not do It does not apply the folder’s changing muted/read conditions.
Does not do It does not join chats automatically or bypass source access.
Does not do It does not snapshot every existing chat or observe callbacks pressed in another client.
These cards are a local comparison, not live collector controls. They do not change an account.
Does not do No mode reads secret chats, records while the process is stopped, joins sources on its own or retrieves earlier history beyond a requested snapshot/export.
Read the detailsOnly delivered or explicitly requested observations enter the record. Unknown attribution stays unknown.
The panel applies these switches per workspace. Turning one off keeps existing records; turning it back on does not reconstruct missed events.
| Category | Saved | Remains unknown |
|---|---|---|
| Message | Text, IDs, sender metadata, reply context and original update envelope. | No third-party-verifiable Telegram signature. |
| Edit | Every observed version, without overwriting earlier ones. | Intermediate edits may be missed; sender is not necessarily editor. |
| Deletion | Notice plus previously saved text, if available. | The deleter and exact action time are not supplied. |
| Unscoped deletion | Account-level notice; unknown peer remains explicit. | No guessed chat. Correlation uses previously saved account-scoped IDs when possible. |
| Reaction | Delivered counters and visible recent identities. | Not every reactor is visible; a full available list needs separate queries. |
| Membership | Delivered service messages and participant updates. | Role and chat type limit visibility; silence does not establish absence. |
| Attachment | Original-version descriptor, saved bytes, SHA-256 and attempt outcomes. | A vanished file may be unavailable; a newer version does not replace it. |
| History snapshot | Currently visible messages, marked as history observations. | Earlier edits and vanished content are not reconstructed. |
| Own actions | Outgoing messages/edits and matching reply-keyboard button_press metadata. | Callbacks pressed in another Telegram client are not visible. |
| Bot buttons | Callback, URL, web-app and request metadata retained with the message. | URLs and phone/location requests are text, not automatically opened or executed. |
Does not do A switch does not redact embedded metadata or disable operational records. Capture does not identify an actor whom Telegram did not supply.
Read the detailsEach account has its own workspace, journal, signing key, route and queue.
Enter 2FA when enabled.
Scan from an authorized device; 2FA may still be required.
Import the account’s session file.
Import the supported Pyrogram session format.
One supported Desktop account; local passcode if set.
Paste a Telethon StringSession.
Select the session and matching companion metadata.
Import account authorization with its data-center identifier.
Direct · SOCKS5 · HTTP CONNECT · MTProxyMTProxy is experimental; built-in public MTProxy lists are available. A failed proxy route does not fall back to a direct connection.
Two workspaces on one machine are not two independent witnesses.
Does not do Import does not bypass Telegram authorization, 2FA or unsupported session formats. Accounts still share the application process.
Account formatsSend or reply, press a current bot button, save a link preview, then explicitly join a chat or start a bot with its start parameter.
interaction.previewinteraction.requestedinteraction.resultPreview, request and result receipts are signed. Before a button press, the server fetches the message again and rejects a changed keyboard. Returned callback text and URLs remain recorded context.
Does not do No web apps, payments, phone/location sharing or inline queries. Displaying a URL does not open it.
Read the detailsGaps are shown, not hidden.
After restart, Telegram is asked for missed updates. Finite retention and expired differences can leave gaps.
Defaults: priority sources every 15 minutes, others every 6 hours. Outcomes include message.recovered and message.missing_on_recheck.
Observation periods, gaps with reasons and unobserved IDs accompany the signed export. A missing-on-recheck record is not a deletion notice.
Does not do A later history snapshot does not erase an outage or recover every vanished version. The saved cursor is not a lossless acknowledgement of journal acceptance.
Read the detailsEach mechanism answers a bounded question. Configure external services separately and retain their trust anchors outside the collector.
SHA-256 chain + Ed25519 per event; the first previous_hash is 64 zeroes.
Third party checks Ordering and signatures under the pinned collector key.
Does not do It does not prove Telegram origin or completeness.
python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_SHA256manifest.json lists file hashes; manifest.sig signs it. media.saved binds attachment bytes to an event.
Third party checks The supplied files agree with the signed manifest and media receipts.
Does not do It does not sign a separately downloaded CSV, HTML or screenshot.
python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_SHA256Checkpoint at startup, every 5 minutes by default, and orderly stop. Keep a copy elsewhere.
Third party checks The later export agrees with an earlier retained length and head; rollback can be detected.
Does not do It does not detect replacement of both journal and all retained checkpoints.
python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_SHA256 --checkpoint checkpoint.jsonEvidence mode sends a checkpoint SHA-256 to RFC 3161 authorities (FreeTSA, DigiCert) and OpenTimestamps calendars.
Third party checks A verified TSA response dates those bytes; a confirmed OpenTimestamps proof anchors them to Bitcoin.
Does not do It does not treat a prepared request or pending calendar receipt as a confirmed timestamp.
python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_SHA256 --tsa-ca trusted-ca.pem
ots upgrade checkpoint.ots
ots verify checkpoint.otsSeparate host, scoped read-only endpoint, fresh challenge, its own key/journal and TGW1 channel posts.
Third party checks Earlier accepted heads; statuses ok, key_changed, rollback, fork, invalid and no_response.
Does not do It does not turn two workspaces on one collector host into independent witnesses.
python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_SHA256 --witness witness.zip --witness-fingerprint WITNESS_SHA256 --channel result.jsonS3-compatible copy encrypted with AES-256-GCM; Object Lock when the bucket supports it.
Third party checks Restore publishes files only after journal, checkpoint and preserved-media verification succeeds.
Does not do It does not restore without the exported key or assume retention without checking the storage response.
python -m tgwitness.replica restore --key-file KEY.json --out EMPTY_DIRSigned run receipt: source hashes, dependency versions and process context. Self-reported.
Third party checks What the signing collector reported about its own execution.
Does not do It does not provide independent process attestation or exclude compromise before recording.
python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_SHA256Local SHA-256 experiment
The next record keeps the previously saved link. Changing the text changes record 2’s calculated hash.
h1Starts with 64 zeroesh2Includes the saved h1h3Includes the saved h2Static example: h2 covers “Meet at 11:00”. Changing that text changes h2; record 3 still references the saved h2.
SHA-256(e₂)SHA-256(e₂)Fictional situations. Start collection before the relevant event; preserve the boundaries and gaps alongside the content.
Does not do It does not recover an original that was never captured.
Does not do It does not identify the deleter from a notice that supplies no actor.
Does not do It does not open a bot web app, make a payment or record another client’s callbacks.
Does not do It does not turn a wallet, phone-like string or username into proven identity.
Does not do It does not replace an independent witness or a separately retained decryption key.
Supply the signed original, an independently retained key fingerprint, the relevant checkpoint and the verification result.
python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_SHA256 --checkpoint checkpoint.jsonObtain the verifier from a trusted copy, not from the archive being checked.
Does not do Standalone CSV and HTML are not signed containers. A password protects transfer confidentiality, not authenticity. Multiple exports do not merge account journals.
Read the detailsBasic artifacts without added signing, timestamp or witness systems. Scripts and loggers vary by implementation; “partial” means limited to captured or visible material.
| Approach | Edits / deletions | Record signature | External time | Independent witness | Coverage / gaps | Verification without author |
|---|---|---|---|---|---|---|
| Telegram Desktop export | Partial | No | No | No | No | No |
| Telethon snapshot script | Partial | No | No | No | No | No |
| Deletion logger: text log | Partial | No | No | No | No | No |
| Screenshots / web capture | Partial | No | No | No | No | No |
| TgWitness with configured extras | Partial | Yes | Yes | Yes | Partial | Yes |
Does not do The table does not assess every script or logging product. Optional time and witness checks require their own services and trust anchors; none establishes source truth.
Read the detailsVerification is useful when its scope stays explicit.
Does not do No mode or evidence level establishes legal admissibility, complete Telegram delivery or real-world identity.