參考資料 / 設定
連線、代理伺服器與資料保護
驗證、自動代理伺服器池、IP 模式、備用策略、外部請求及機密資料儲存。
本文檔說明 TgWitness 0.7.0 的運作方式及其限制。驗證、 來源存取、網路連線及擷取完整性均為獨立的狀態。 關於登入步驟、檔案格式及多重帳戶,請先參閱「 帳戶與會話格式」;關於事件政策及重新啟動 行為,請參閱「資料擷取運作方式」。
驗證方法#
API ID 和 API 雜湊值用於識別應用程式;它們並不能取代帳戶登入。 在 TgWitness 中,這些資訊為選用項目。優先順序如下:首先是表單中輸入的一組值,其次是來自 匯入帳戶 JSON 檔案的一組值,接著是儲存於工作區的一組值,最後是內建的 50 組 公開配對組,當 Telegram 拒絕某組時,系統會以隨機順序嘗試並自動輪替。僅 Telegram Desktop 配對組 (2040) 會隨附相應的 Telegram Desktop 客戶端描述一併傳送。 您可將從 my.telegram.org 的 API 開發工具取得的專屬配對組用於所有帳戶;每個帳戶仍保有各自的授權。
| 方法 | 要求 | TgWitness 支援 |
|---|---|---|
| 手機號碼、代碼、可選的雙因素驗證 | 帳戶存取;API 配對為選用項目 | 面板登入 |
| 授權金鑰 HEX + DC ID | 完整的 512 字元金鑰及 DC 1–5 | 「直接授權金鑰」分頁;在儲存授權前,會檢查可選的用戶 ID |
| Telethon StringSession | 有效的會話字串 | 面板登入 |
Telethon SQLite .session |
封閉式、一致的文案 | 可直接從面板匯入模式 7/8;可選的離線命令列介面 (CLI) |
Pyrogram SQLite .session |
已關閉的生產環境使用者會話 | 直接匯入模式 2/3 |
| Telegram 桌面版 TData ZIP | 一個現代帳戶;若設有保護,則需輸入本地密碼 | 內存轉換,並包含校驗和/解密檢查 |
| 帳戶 JSON | 支援的 API/會話/金鑰欄位 | 僅憑元資料即可填入 API 憑證;仍需透過會話/金鑰或手機/QR 碼進行登入 |
| QR 碼登入 | 來自授權 Telegram 應用程式的確認 | 本地 QR 碼生成、過期/重試機制,以及可選用的雙因素驗證 (2FA) |
| TDLib / Pyrogram StringSession | 其他特定於資料庫的格式 | 不支援 |
| 機器人代幣 | 一個具備獨立存取/更新模型的機器人 | 此資料蒐集者未使用此工具 |
Telegram 採用代碼傳送方式;簡訊傳送無法保證成功。API 雜湊值無法修復 已被撤銷的連線,亦無法取代遺忘的雙因素驗證 (2FA) 密碼。TgWitness 不會將 登入代碼或 Telegram 雙因素驗證 (2FA) 密碼儲存至磁碟。
若為私人來源,該帳號必須已具備存取權限。群組使用者名稱 並非必要。透過代理或會話匯入,既不會授予成員資格,也不會授予管理員 權限。目前的成員資格並不能保證能存取加入群組前的歷史紀錄。
匯入 Telethon 會話檔案#
Telethon SQLite、Pyrogram SQLite 以及 Telegram Desktop TData 採用不同的格式。 此面板會偵測並轉換受支援的結構;重新命名檔案並不 屬於轉換範疇。請在「檔案」選項中選取一個會話及其對應的 JSON 檔案,然後按下「連線帳戶」。最多可接受四個符合條件的檔案, 總大小不得超過 8 MiB。 有關 TData/JSON 的詳細資訊,請參閱格式限制。 不提供密碼恢復功能。透過手機/雙因素驗證 (2FA) 或 QR 碼登入將建立獨立的授權。
僅限 Telethon 的可選命令列路徑仍可使用:
- 請停止使用原始連線的客戶端,並建立一份一致的副本。該 轉換器會拒絕處理 WAL/日誌未完成的檔案。請正確關閉原始 客戶端,而非刪除這些檔案以繞過檢查。
- 在 TgWitness 環境中,執行:
python -m tgwitness.sessions account.session --out account.tgwitness-session
- 在「新增帳戶」→「檔案」下,載入結果或 貼上其字串,然後繼續。
- 請確認顯示的數字帳號 ID,選擇來源並開始監測。
此轉換器以唯讀模式開啟 SQLite,不會執行任何資料結構升級或網路請求, 也不會輸出該會話內容。它會檢查資料結構版本、資料表類型、單一 會話列、IP/埠/資料中心以及金鑰長度。命令列介面 (CLI) 輸入限制為 64 MiB;StringSession 文字限制為 4 KiB。 面板轉換會將檔案上傳至已驗證的 TgWitness 伺服器,在記憶體中進行處理,並將標準化的憑證傳回該 瀏覽器,且不會儲存上傳的原始檔案。若使用遠端伺服器,請採用 HTTPS。
轉換後的檔案為未加密的帳戶存取密鑰。 請將其存放在受保護的 儲存空間中,切勿將其提交至版本控制系統或傳送給第三方轉換服務。TgWitness 會將授權會話儲存於其加密金庫中。複製會話並不會 建立獨立的授權:請勿同時執行使用克隆授權金鑰的 客戶端,並假設其能獨立接收更新。
轉換操作僅傳遞授權,而非原始訊息、實體快取或 持久性更新游標。此操作不會解決跨程序重啟時的更新復原問題。
MTProto、Telethon 及代理伺服器#
MTProto 是 Telegram 的通訊協定。Telethon 是 TgWitness 所使用的 Python 客戶端函式庫。 MTProxy 是一款 Telegram 傳輸代理伺服器;SOCKS5 和 HTTP CONNECT 提供一般性的 隧道。上述方式均無法取代帳戶驗證。
請在登入前,前往「帳戶」→「設定」→「連線設定」→「變更連線路徑」,為每個工作區儲存路徑。 新建立的工作區預設為「自動 MTProxy」模式,並採用具備「隱藏 IP」功能的公開清單。 現有工作區若曾明確使用「直接連線」模式,將保留允許此模式的設定。
IP 模式#
路由決定連線方式。IP 模式則決定伺服器位址 何時可能被曝光。這些控制功能不會安裝 VPN,也不會將所有裝置流量進行路由。
| 模式 | Telegram | 外部請求 |
|---|---|---|
隱藏 IP (hide) |
請使用代理伺服器;若均無法連線,請稍候。無直接備用方案。 | 需使用 SOCKS5/HTTP;若未透過適用代理伺服器,將拒絕請求。 |
允許備用連結 (fallback) |
自動 MTProxy 可能會在設定的延遲時間過後使用 Direct 連線,隨後再切回正常運作的代理伺服器。 | 建議使用已設定的外部代理伺服器或該帳戶的 SOCKS5/HTTP 路由;否則允許使用「直接連線」。 |
Tunnel / VPN (tunnel) |
允許使用直連路徑,並可立即自動切換至備用池。 | 若未配置任何適用的代理伺服器,則允許直接連線。 |
隧道/VPN 模式假設您會另行管理該網路。若無運作中的 隧道,目標端將能看見伺服器本身的位址。請根據 您的實際網路環境選擇模式,而非僅依據選項名稱。
選擇路徑#
| 路徑 | 設定 | 分隔線 |
|---|---|---|
| 自動 MTProxy | 內建清單或運算子目錄 | 維持一條可運作的 Telegram 路徑;直接備用方案取決於 IP 模式 |
| 直接 | 隧道/VPN 模式 | Telethon 使用主機的網路路由 |
| SOCKS5 | 主機、埠號、可選的使用者名稱/密碼 | python-socks,已啟用遠端目標 DNS 功能 |
| HTTP CONNECT | 主機、埠號、可選的使用者名稱/密碼 | 僅支援純 HTTP CONNECT;尚未實作與代理伺服器本身的 TLS 連線 |
| MTProxy | 主機、埠號、密鑰 | 實驗性 Telethon 傳輸格式;32 位元十六進位數字,或 dd + 32 位元十六進位數字 |
偽 TLS ee 密鑰將被拒絕。Telethon 1.45 的正規化功能可移除前綴
與網域,但並未實作偽 TLS 功能。請貼上 tg://proxy?server=…&port=…&secret=…
或 https://t.me/proxy?server=…&port=…&secret=…,並選擇「從連結填入欄位」。
此操作會在不建立連線或儲存的情況下驗證並填入欄位;請另行檢視並儲存
路由。手動填寫欄位仍可使用。請參閱 Telegram 代理連結。
由您的安裝環境提供的公開代理伺服器#
內建清單整合了四個來源: SoliSpirit/mtproto、 zakky8/mtproto-proxy-pro、 kort0881/telegram-proxy-collector 以及 3yed-61/MTP-Collector。 捆綁的快照包含端點資訊、來源歸屬及下載日期。 供應商名單並不代表該代理伺服器運作正常,亦不保證能傳遞每項 Telegram 更新。
MTProxy 會自動檢查 Telegram 的傳輸連線狀態,維持一個可運作的代理伺服器, 並在連線失敗時切換至另一個。當有足夠 可運作的代理伺服器時,工作區會優先選用不同的代理伺服器;無法保證會使用唯一的出口位址。 失敗的代理伺服器 會暫停一段時間後再次嘗試。若無任何代理伺服器可用,則由 IP 模式決定 是否必須等待,或可改用直接連線。更換代理伺服器不會變更帳戶 或刪除其日誌。路由選擇與變更皆記錄於簽名日誌中。
當自動路由處於啟用狀態時,清單預設每小時刷新一次,傳輸檢查則 每十分鐘執行一次。這些間隔時間均可自行設定。更新公開清單 會觸發刷新;僅瀏覽清單並不會變更已儲存的手動路由。
每個資料源的回應限制為 1 MiB,請求超時為 8 秒,
整體下載時限為 20 秒;重定向
將被拒絕。每個來源最多保留 64 筆相容的條目,並進行去重處理。
解析器支援十六進位數、base64url 密鑰以及 JSON 資料源。
偽造的 TLS ee、無效連結、私有/保留的 IP 字面量以及本機主機名稱將被
跳過。主機名稱會在使用前進行解析與檢查,且所選的 IP 地址將被
固定用於該連線。自動重新取得會再次解析主機名稱;若要再次解析,請重新套用
手動輸入的項目。
若饋送回應失敗、為空或不相容,系統將保留先前的來源快照。 更新操作具有原子性與序列化特性,且每分鐘每個工作區僅限嘗試一次。 成功的傳輸探測僅代表連線已建立,並不代表匿名性或擷取完整性。
Telegram 流量與 HTTPS 請求使用不同的路由。清單下載會使用
獨立的 HTTPS 連線,並透過提供的外部請求路由進行。
TGWITNESS_PROXY_FEED_PROXY 會明確地以 HTTP/SOCKS5 代理伺服器覆寫該路由;
兩種 Compose 版本的收集器皆會轉發該路由。背景池會跟隨主要工作區。
不會將任何 Telegram 會話、API 憑證、控制面板代幣或機器人代幣傳送給資料來源提供者。
提供者名稱、快照日期及下載路徑會顯示於「清單來源」欄位下。
MTProxy 僅傳輸 Telegram 流量。工作區的 HTTP 操作(例如時間戳記、 通知、站外副本及來源檢查)在 已設定的情況下,會使用獨立的 SOCKS5/HTTP 代理伺服器, 隨後則使用該帳戶的 SOCKS5/HTTP 路由。若未設定上述任一項,Hide IP 將拒絕 該請求;其他模式則允許直接連線。 外部請求可被停用。經明確 設定的資訊源下載代理仍屬操作員可獨立覆寫的項目。 獨立的見證服務則維持其專屬路由。
自動池參數
在 **參數 → 自動 MTProxy** 下,設定失敗閾值、冷卻時間、 預定輪替、代理伺服器共享及允許的備用延遲。 | 控制項 | 預設值 | | --- | --- | | 替換前斷線次數 | 10 分鐘內 3 次 | | 每次連線嘗試的代理伺服器嘗試次數 | 3 | | 失敗後的首次/最長休息時間 | 10 分鐘/6 小時 | | 預定輪替 | 已停用;失敗時切換 | | 每個代理的帳戶數 | 0:優先使用獨立條目,必要時共享。設定為 1 則會等待專用條目。 | | 允許直接回退前的延遲 | 10 分鐘;Hide IP 仍拒絕直接連線 | | 資訊源刷新/傳輸檢查 | 60 / 10 分鐘;主工作區的設定值適用於共用池 | 不同的代理伺服器並不保證會產生不同的出口位址。這些設定不會 覆寫 Telegram 的限制,亦無法證明匿名性。若要將公開清單替換為您自己的營運商目錄,請配置以下覆寫設定。
此設定將完全停用外部訂閱功能,即使其 proxies 陣列為空時亦然。
將空目錄
複製到 proxy-config/proxies.json
,並新增您已部署的公開端點:
{"format": "tgwitness-proxy-catalog-v1", "proxies": [
{"id": "project-eu", "label": "Project EU",
"link": "tg://proxy?server=REPLACE_HOST&port=443&secret=REPLACE_SECRET"}
]}
必須替換範例值。最多可接受 32 筆不同的條目。 經驗證的清單會回傳標籤/主機/埠號,且不包含共享密鑰;選取其中一項 將把其憑證儲存至工作區金庫中。在進行 明確的傳輸測試之前,可用性尚未經過測試。若目錄格式不正確,則可進行手動設定。
原生啟動:將 TGWITNESS_PROXY_CATALOG 設定為本機 JSON 路徑。Docker:
docker compose -f compose.yaml -f deploy/compose/compose.proxies.yaml up -d --build
該覆蓋層以唯讀模式掛載 proxy-config;檔案必須可被容器 UID 10001 讀取。
該目錄不包含在 Git、Docker 建置環境及原始碼存檔中。此
目錄用於配置收集帳戶;witness 機器人使用其自身的
HTTP/SOCKS5 路由,而非 MTProxy。
直接備用方案受上述 IP 模式規範。變更路徑前,請先 暫停監測。儲存設定會斷開舊客戶端連線並取消未完成的登入;新 客戶端將使用已儲存的路徑。該帳戶的日誌/會話綁定關係將維持不變。 設定會取代先前路徑:編輯時請重新輸入代理伺服器憑證。
憑證採用 network.enc 加密。API 不會回傳使用者名稱、
密碼或機密金鑰。簽名紀錄包含路由類型及是否包含憑證,
但不包含端點與機密金鑰。操作者可在控制面板中查看端點。
機密欄位會在儲存、鎖定或切換工作區後清空。
「測試 Telegram 連線」功能(登入前亦可使用),會透過該路徑開啟並關閉一個臨時 且未經授權的 Telegram 連線。此功能不會聯繫任何 IP 檢查 網站。測試成功僅表示傳輸連線已建立,並不代表群組存取權限、訊息 完整傳送或匿名性。
此代理適用於 Telegram 客戶端的連線,包括 Telegram 數據中心(DC)的媒體
下載。瀏覽器、pip、SSH 以及手動調用的 TSA 工具則有獨立的路由。
代理主機名稱可於本地解析。rdns 會影響目標主機名稱;
Telegram 通常會提供數據中心的數值 IP 位址。
SOCKS5 和純 HTTP CONNECT 本身並不會加密代理憑證或 客戶端至代理的隧道。MTProto 會另行保護 Telegram 流量。 在不可信的網路環境中,請使用 適當的安全通道連線至代理伺服器。私人群組 屬於雲端聊天;MTProto 並不會將其轉變為端對端加密的「秘密聊天」。
加密與簽名#
| 層級 | 已實作 | 操作員責任 |
|---|---|---|
| Telegram 通訊流量 | Telethon MTProto | 平台可信度、傳輸路徑與可用性 |
| 網頁控制面板 | 承載者代幣、迴路預設值、請求限制 | 透過 HTTPS 或 SSH 隧道進行遠端存取 |
| 秘密 | Fernet 用於管理 API 憑證、會話、代理伺服器憑證及簽名私鑰 | 保護解密金鑰與運行主機 |
| 金庫金鑰 | 新安裝時使用本機金鑰或外部主金鑰 | 獨立的受保護儲存空間與金鑰備份 |
| 訊息與附件 | 明文應用程式儲存 | 加密磁碟/磁碟區 |
| ZIP/JSONL/CSV/HTML | 完整性檢查,無內容加密 | 保護匯出副本與傳輸內容 |
| 來源與時間 | 簽名日誌、流程收據、RFC 3161 工具 | 可信密鑰、獨立檢查點/TSA 及保管程序 |
「帳戶」中的儲存保護功能會顯示這些狀態。面板憑證是一種 存取密鑰,而非加密密碼。它授予管理員存取權限; 已發行的憑證可限定於特定帳戶和聊天室。工作區共享 主進程,並非獨立的租戶。
一個明確啟動且隔離的合成示範環境,可透過直接 迴路連接自動開啟。此功能採用獨立的進程生命週期機制;既不會 洩露已設定的面板憑證,也不會授予存取真實工作區的權限。遠端、 代理或跨來源的請求均無法取得或使用此自動進入功能。 此便利功能並不會消除針對真實帳戶資料的驗證邊界。
BitLocker、LUKS、FileVault 或受管加密卷宗皆可在 各自的威脅模型下保護儲存裝置。 已解鎖且正在運行的機器之管理員 仍可讀取資料。在儲存規劃中,應納入 SQLite WAL/SHM、媒體檔案、臨時匯出檔案、交換檔、備份 以及瀏覽器下載檔案。Docker 卷宗並非僅因 其為卷宗而自動加密。TgWitness 未實作 SQLCipher 或物件加密功能。
外部主金鑰#
若要進行新安裝,請將主金鑰放置於資料目錄之外。 此操作不會自動遷移現有的本機金鑰保管庫。請準備一個 僅限服務身分存取的金鑰目錄,然後執行:
python -m tgwitness.security create-master-key /private/keys/tgwitness-master.key
export TGWITNESS_VAULT_KEY_FILE=/private/keys/tgwitness-master.key
python -m tgwitness --data-dir /private/observations/new-case
PowerShell,使用已安裝的專案環境:
python -m tgwitness.security create-master-key E:\PrivateKeys\tgwitness-master.key
$env:TGWITNESS_VAULT_KEY_FILE = 'E:\PrivateKeys\tgwitness-master.key'
python -m tgwitness --data-dir E:\PrivateData\new-case
在 Docker 中,請將檔案以唯讀方式掛載至 /data 之外的目錄(例如
/run/secrets/tgwitness-master.key),並將環境變數設定為該路徑。
該服務的 UID 必須具備讀取權限。請透過
環境變數/設定檔傳遞路徑,而非金鑰位元組。
每個工作區都會獲得一個隨機的公開鹽值,以及透過
HKDF-SHA256 衍生的專屬 Fernet 金鑰。vault.external.json 僅儲存衍生元數據,而非主金鑰。
若金鑰遺失或錯誤,系統將無法啟動,且不會在後台自動替換金鑰。請同時保留
鹽值元數據與主金鑰,以備復原之用。
所有工作區均源自同一主金鑰;若主金鑰遭洩露,將影響整個 安裝環境。正在執行的程序可解密機密資料。此工具並非 HSM 或 密碼 KDF。不接受以任意人為設定的密碼取代隨機金鑰。
在刻意規劃的遷移方案
實施並驗證完成之前,請保留現有安裝環境中的現有金鑰。刪除 vault.key 或更換主金鑰可能會導致
無法存取會話/簽署金鑰。請將加密備份與金鑰分開存放,並
在隔離的實例中測試還原功能。
資料來源與驗證範圍#
審閱日期:2026年10月26日:
- https://core.telegram.org/api/auth
- https://core.telegram.org/api/obtaining_api_id
- https://docs.telethon.dev/en/stable/basic/signing-in.html
- https://docs.telethon.dev/en/stable/concepts/sessions.html
- https://core.telegram.org/mtproto/mtproto-transports
- https://github.com/telegramdesktop/tdesktop/blob/dev/Telegram/SourceFiles/storage/storage_account.cpp
- Telethon 1.45.0:SQLiteSession、StringSession、
Connection._proxy_connect、TcpMTProxy.normalize_secret及下載方法。
本地測試涵蓋迴路 SOCKS5/HTTP CONNECT 測試案例、模擬的 SQLite 會話、 路由隔離、機密資料排除以及缺失金鑰時的拒絕機制。這些測試並未建立 真實的 Telegram/代理伺服器互通性,亦未模擬 MTProxy 的實際運作行為。請參閱 VERIFICATION.md 及 LIVE_ACCEPTANCE.md。