# 确保安全

Canonical page: https://phishdestroy.github.io/TgWitness/zh/docs/security/

了解 Telegram 的传输路径、公共代理列表以及可选的外部服务。了解每项加密功能能解锁什么、保护措施涵盖哪些内容，以及哪些方面需要您自行处理。

**127.0.0.1**默认面板地址

**256 位**随机面板令牌

**0**内容分发网络（CDN）、分析工具或远程字体

**Ed25519**每条记录均附有签名

## 所有内容的归宿

该采集器、其控制面板以及所有保存的记录均存储在您运行该工具的计算机或服务器上。默认情况下，Telegram 是唯一的输出目标；其他目标均需通过单独的开关进行设置。

06 / 机器留下的痕迹您的安装

您的计算机或服务器

**面板**127.0.0.1:8787 · 承载令牌

**收集器**每个工作区仅限一个 Telegram 客户端

数据目录

**日志**SQLite · 哈希链 · 签名

**媒体**文件名采用 SHA-256 哈希值命名

**Vault**Fernet · 会话、API 对、签名密钥、代理

- **Telegram**始终 · 通过您的路径

  该账户的 MTProto 连接方式包括：直接连接、SOCKS5、HTTP 或 MTProxy。“隐藏 IP”模式会等待可用的代理。若要启用直接连接回退，则需使用明确允许此功能的模式。
- **站外文案**可选 · 默认关闭

  日志、文件和检查点在上传至兼容 S3 的存储之前，会使用 AES-GCM 进行加密。密钥由您自行保管；附件的命名基于密钥哈希值，而非其内容哈希值。
- **通知**可选 · 默认关闭

  显示问题及变更数量，并附带聊天标题。消息摘录仅在您开启该功能时才会显示。
- **时间戳权威性**可选 · 默认关闭

  仅包含已签名的检查点的 SHA-256 哈希值和一个随机非ce值。不包含任何消息内容，也不包含聊天昵称。
- **Witness**可选 · 默认关闭

  使用只读令牌提取带签名的检查点和捕获计数器。该工具无法读取对话内容或更改设置。

默认设置：仅 Telegram 连接会离开这台机器。

可选的存储位置需按工作区进行配置。消息正文和媒体文件以未加密形式存储在数据目录中：请通过磁盘加密和文件权限对其进行保护。

## 每个秘密揭示的内容

| 秘密 | 存储位置 | 它能带来什么 | 若发生泄露 |
| --- | --- | --- | --- |
| **面板令牌** | 数据目录中的 `panel-token.txt`；浏览器仅将其保留在当前标签页中 | 所有工作区中的所有内容：阅读和导出、更改范围、登录账户 | 停止 TgWitness，删除 `panel-token.txt`，然后重新启动：将生成一个新令牌 |
| **Telegram 会话** | Vault，加密版（`credentials.enc`） | Telegram 账号本身 | 在 Telegram 中通过*“设置”→“设备*”结束当前会话 |
| **签名密钥** | Vault，加密版（`signing.enc`） | 通过您的数字指纹进行验证的签名记录 | 检查点存储在其他位置，见证记录和时间戳可显示此前存在的内容 |
| **保险库密钥** | 数据旁标注 `vault.key`，或为新数据目录使用外部主密钥 | 解密保险库 | 请将会话密钥和签名密钥也视为已泄露 |
| **Witness 代币** | 关于 Witness 主机 | 只读：带签名的检查点和健康状态 | 在“Witness”页面上将其删除；创建一个新的 |
| **站外文案关键点** | Vault；只需下载一次即可进行数据恢复 | 解析异地副本 | 任何持有存储对象的人均可对其进行解密：请将该副本视为已泄露 |

## 保护范围

### 已收录

- 导出记录中若存在被修改、删除或重新排序的条目：哈希链或签名将无法通过验证。
- 在检查点之后被截短或重建的日志：保留的检查点已不再匹配。
- 面板令牌猜测：256 位随机位，在常数时间内进行比对；每分钟失败 15 次后，该地址将被拒绝。
- 恶意聊天内容：文本以纯文本形式插入，绝不以 HTML 形式呈现；附件以文件形式下载；该面板不会从其他网站加载任何内容。
- 一个包含外部保险库密钥的复制数据目录：若无主密钥，会话和签名密钥将保持加密状态。

### 由您决定

- 主控制面板的令牌拥有完全控制权。可向其他人授予其所需的、针对特定范围的账户、聊天和操作访问权限；请务必将主密钥保密。
- 服务器管理员可以读取所有内容，并可重写和重新签署日志。请将指纹和检查点保存在另一台系统上。
- TgWitness 不会对消息文本和媒体文件进行加密。请使用磁盘加密并设置严格的权限。
- 若通过 localhost 以外的普通 HTTP 连接，网络上将暴露令牌。请使用 HTTPS 或 SSH 隧道。
- 签名仅证明所记录的内容未被篡改，而非证明每个 Telegram 事件均已被记录。

可通过设置权限、有效期和会话限制[来共享案件访问权限](https://phishdestroy.github.io/TgWitness/zh/docs/access/)。Witness 令牌仍作为独立的凭证存在。

## 强化安装安全性

已完成 0/8

1. **请使用专用的 Telegram 账号**——切勿使用您的主账号。控制面板令牌和会话可让您对其拥有完全控制权。
2. **请将控制面板保留在 127.0.0.1 上。**仅可通过 HTTPS（随附的 Caddy 配置）或 SSH 隧道进行远程访问。
3. 对存放数据目录的磁盘进行加密：消息正文和媒体文件均按接收时的原始状态存储。
4. **将数据目录限制**在服务账户内。在 Unix 系统中，新建目录的权限应设为 0700；在 Windows 系统中，请设置文件夹的权限。
5. **请将保险库主密钥保存在其他**服务器上：在创建数据目录之前，请设置 `TGWITNESS_VAULT_KEY_FILE`。
6. **请将签名密钥指纹和检查点保存在**另一台系统上，并在另一台主机上添加一个见证节点。
7. **切勿将** `data/`、会话密钥、`panel-token.txt` 或保险库密钥**上传**至 GitHub 或聊天群组。
8. **请勿**在反向代理服务器上**记录** `Authorization` 标头或请求正文。

**我可以更改面板令牌而不丢失数据吗？**

是的。该令牌仅用于打开控制面板。停止 TgWitness，从数据目录中删除 `panel-token.txt`，然后重新启动；日志、会话和密钥均保持不变。设置 `TGWITNESS_TOKEN` 后，将使用环境变量值代替文件。

**为什么消息在静止状态下不进行加密？**

采集者必须读取这些日志才能进行搜索、版本比对和导出。若仅在同一台机器上使用密钥对日志进行加密，对于能够读取该机器的人来说，这种加密措施几乎起不到什么作用。磁盘加密可保护已停止运行或被盗的磁盘；而严格的权限设置则可保护正在运行的磁盘。

## 报告漏洞

请在 GitHub 仓库中使用**“Security”→“Report a vulnerability”（安全 → 报告漏洞）**功能。请包含版本号、影响范围以及最简复现步骤。切勿发送凭据、账户目录或真实证据存档。如果无法进行私下报告，请提交一个问题，请求开通一个不包含漏洞细节的私有频道。
