TgWitness / ドキュメント

参考文献 / 収集

収集の仕組み

記録範囲、リアルタイム更新、再確認、添付ファイル、自身の操作、および「ギャップ」の意味について、記録ごとに解説しています。

TgWitnessは、接続されたTelegramアカウントが検知した内容を記録します。このジャーナルは、 それらの検知内容、その順序、および付随するコンテキストを保存します。また、 欠落したメッセージやアカウントの接続状態から、目に見えない行動を推測することはありません。

ログインからジャーナルまで#

フローチャートユーザーアカウントの認証 → アクセス可能なグループおよびチャンネルを選択してください; アクセス可能なグループおよびチャンネルを選択してください → イベントおよび添付ファイルの設定を保存する; イベントおよび添付ファイルの設定を保存する → 監視を開始する; 監視を開始する → アクティブなクライアントからの更新情報を受け取る; アクティブなクライアントからの更新情報を受け取る → 情報源およびイベントに関するポリシーを適用する; 情報源およびイベントに関するポリシーを適用する → 署名付き観測記録を追加する; 署名付き観測記録を追加する → ジャーナルの確認またはエクスポート; 署名付き観測記録を追加する → キューに格納された添付ファイルを処理する; キューに格納された添付ファイルを処理する → ダウンロード結果を追加してくださいユーザーアカウントの認証アクセス可能なグループおよびチャンネルを選択してくださいイベントおよび添付ファイルの設定を保存する監視を開始するアクティブなクライアントからの更新情報を受け取る情報源およびイベントに関するポリシーを適用する署名付き観測記録を追加するジャーナルの確認またはエクスポートキューに格納された添付ファイルを処理するダウンロード結果を追加してください
図表をテキストで記述
  1. ユーザーアカウントの認証 → アクセス可能なグループおよびチャンネルを選択してください
  2. アクセス可能なグループおよびチャンネルを選択してください → イベントおよび添付ファイルの設定を保存する
  3. イベントおよび添付ファイルの設定を保存する → 監視を開始する
  4. 監視を開始する → アクティブなクライアントからの更新情報を受け取る
  5. アクティブなクライアントからの更新情報を受け取る → 情報源およびイベントに関するポリシーを適用する
  6. 情報源およびイベントに関するポリシーを適用する → 署名付き観測記録を追加する
  7. 署名付き観測記録を追加する → ジャーナルの確認またはエクスポート
  8. 署名付き観測記録を追加する → キューに格納された添付ファイルを処理する
  9. キューに格納された添付ファイルを処理する → ダウンロード結果を追加してください

認証、情報源へのアクセス、稼働中のコレクター、および完全な配信は、 それぞれ異なる問題です。ログインに成功したからといって、すべてのグループへのアクセスが許可されるわけではありません。 接続された転送経路があるからといって、関連するすべての更新が確実に届いたとは限りません。

監視範囲:指定したチャット、フォルダ、またはアカウント全体#

出典 → 監視範囲によって、ワークスペースが記録するチャットが決まります。

モード 記録 新しいチャット
選択したチャット(デフォルト) 手動で追加したチャットのみ 自動的に追加されることはありません
Telegramフォルダ アカウントのフォルダ内のチャット:フォルダに指定されたチャットに加え、そのフォルダのカテゴリ(連絡先、非連絡先、グループ、チャンネル、ボット)に含まれるチャットから、除外されたチャットおよび(フォルダの設定で指定されている場合)アーカイブされたチャットを除いたもの 該当するチャットは、アクティブになるとすぐに追加されます。Telegramのフォルダに追加したチャットは、1時間以内に取り込まれます。
アカウント全体 そのアカウントで表示されるすべてのチャット 新しいチャット、グループ、プライベートチャット、またはボットは、最初の更新が届いた瞬間に追加されます。
  • ソースの種類(チャンネル、グループ、プライベートチャット、ボット)によって、フォルダモードと アカウント全体モードの適用範囲が限定されます。選択したチャットは、プライベートチャットやボットを含め、どのタイプでも構いません。
  • 除外されたチャットは、どのモードにおいても記録されることはありません。フォルダモードおよびアカウント全体モードでは、 ソースに対して「除外」または「削除」を行うと、そのチャットがこのリストに追加されるため、スコープによって再度追加されることはありません。 手動でチャットを再度選択すると(「ソース」または「チャット」から)、リストから除外されます。このリストには 最大5,000件のチャットが登録可能です。それを超えると、「削除」は拒否され、代わりにチャットを一時停止することができます。
  • 自身の操作(デフォルトでオン):このアカウントが送信するメッセージ、その編集、および 返信キーボードのボタン操作。オフにすると、送信メッセージと編集はスキップされます。
  • フォルダまたはアカウント全体に切り替える際には確認が求められます。これらのモードでは、 プライベートチャットや第三者のメッセージも記録されるため、専用のアカウントでのみ使用してください。 確認およびスコープの変更はすべて、scope.changedレコードとして署名されます。
  • スコープによって追加されたチャットは、「auto」とマークされたソースとして表示され、scope.applied (開始時および1時間ごと)またはsource.discovered(監視中に新しいチャットが追加された場合)として記録されます。選択したチャットに 戻すと、自動的に追加されたすべてのソースが一時停止します。

これらのモードでは以下のことができません:

  • シークレットチャットは2台のデバイス間でエンドツーエンド暗号化されており、いかなるモードにおいても TgWitnessには一切送信されません。
  • TgWitnessが実行されていない間は、何も記録されません。再起動後、TgWitnessはTelegramに 見逃した更新情報を問い合わせ、チャットを再確認しますが、長時間の サービス停止後には、Telegramがすべてのデータを返してくれるわけではありません。レポートおよびverify.pyでは、そのような期間はギャップとして表示されます(カバレッジを参照)。
  • 最初は最初の 1,000 件のダイアログのみが表示されます(上限は「パラメータ」に記載されています)。それより古い チャットは、次にアクティブになった時点で追加されます。追加されたチャットのそれ以前の履歴は取得されません。必要な場合は、履歴の スナップショットまたはチャットの完全なエクスポートを行ってください。
  • 常に変化するフォルダの状態(ミュート、既読)は適用されません。そのようなチャットは 引き続き監視対象となります。
  • 別のアプリで押されたインライン(コールバック)ボットボタンは、2つ目の セッションからは認識されません。ボットの返信や編集は記録されます。返信用のキーボード入力は送信 メッセージとして届き、「button_press」というラベルが付けられます。
  • チャットが増えれば、リクエストも増えます。Telegramは、同社が 過剰と判断した通信量に対してアカウントを制限するため、専用のアカウントを使用すべき理由がまた一つ増えます。

適用範囲とイベントの選択#

各ワークスペースには独自の情報源があります。TgWitnessは、グループへの参加、 招待の受諾、または全メンバーの自動列挙は行いません。情報源は、すでに そのアカウントからアクセス可能なものでなければなりません。 起動時、コレクターは選択されたソースを アカウントの表示可能なダイアログと照合します。 「パラメータ」→「アカウントのリストから読み込むチャット」で別段の指定がない限り、最初の 1,000 件のダイアログが検査されます。 ソースが存在しない場合は「アクセス未確認」とマークされ、あなたが削除されたとはみなされません。

設定 収集します 無効にした場合の影響
新しいメッセージ 通常配信されたメッセージ 後から行われた編集や削除については、比較対象となる以前に記録されたテキストが存在しない場合があります。
編集 編集済みのメッセージ版を提供 途中での変更内容は、後から復元されることはありません。
削除 範囲指定された削除通知と、範囲指定のないアカウントレベルの通知 削除通知はジャーナルには追加されません。
反応 送信された反応のスナップショット 個別の反応に関する更新情報は追加されません。
メンバーシップ 会員向けサービスのお知らせや参加者への最新情報を配信しました これらの会員に関する観察事項は追加されていません。

設定は、ワークスペース内で選択されたすべてのソースに適用されます。変更を適用するには、フォームを保存してください。 変更内容は、署名付きの「変更前」および「変更後」の値とともに記録されます。カテゴリを無効にしても、 それ以前の記録は削除されません。また、再度有効にしても、見逃した更新内容は遡って反映されません。

運用記録やその他のグループサービス関連のイベントは、これらの 設定とは別個に扱われます。メンバーシップサービスメッセージについては、通常の 新規メッセージのキャプチャが無効になっている場合でも、メンバーシップが 有効になっているとメッセージ記録が生成されることがあります。キャプチャされたTelegram オブジェクトには埋め込まれたメタデータが保持されます。設定は、情報の黒塗りルールではありません。

プライベートチャットや通常のグループでの削除は、チャットを伴わないメッセージIDとして記録されます。 これらのチャットはアカウント全体で共通のメッセージIDシーケンスを共有しているため、そのIDを持つメッセージが 以前に保存されていた場合、そのチャットは特定されます。削除は当該チャットに記録され、 その仕組みについてはchat_resolutionで説明されています。 保存されたことのないIDは、 明示的に「不明」とされた削除として扱われます。コレクターは推測を行いません。Telegramは、誰がメッセージを削除したかを決して明かしません。 削除されたメッセージがこのアカウントから送信された場合、記録にはその旨が (deleted_message_was_outgoing)記載されますが、削除者の名前は明記されません。

自身の行動#

監視対象アカウントから送信されたメッセージには「outgoing」というラベルが付与されます。送信済み メッセージの編集については、プライベートチャットやグループチャットでは作成者本人がのみ編集可能であるのに対し、チャンネルへの 投稿は他の管理者も編集できることが明記されています。 送信メッセージが、そのチャット内で最も新しく保存された返信キーボードのボタン のテキストを繰り返し使用している場合、そのメッセージにはbutton_pressというラベルが付けられ、 そのキーボードの記録へのリンクが添付されます。

自身の操作を除外する処理は、バックグラウンドでの再チェックや、新しいチャット履歴の自動記録にも適用されます。 スキップされた送信メッセージは、再チェックの位置を先へ進めるため、それ以降の受信メッセージの記録を妨げることはありません。 パネルでの明示的な操作や、手動で要求された履歴のスナップショットは、引き続き記録されます。

調査モード:チームへの参加とボットとの対話#

「ソース」→「監視範囲」→「調査モード」では、チームチャットに参加し、ボットを起動してそこに書き込みを行う専用 アカウントの監視範囲を設定します。対象となるのは、アカウント全体、すべての ソースタイプ、自身のアクション、および表示されるすべてのチャットやボットのプロフィールと、その最新の 200件の表示可能なメッセージです。 フォームを確認し、「スコープを保存」を押してください。アカウント全体への 切り替えには、通常の確認が求められます。

  • ボタン。メッセージの下にあるボタンはメッセージと共に保持され、「チャット」に表示されます:リンク、Web アプリ、ログインリンク、コピー用のテキスト、コールバックデータ、インラインクエリ、電話番号や 位置情報の要求などです。 リンクはテキストとして表示され、パネルによって開かれることはありません。ボットが ボタンのみ(新しい支払いリンクなど)を変更した場合、それはメッセージの新しいバージョンとみなされ、 ライブ更新および再確認の双方において適用されます。
  • 新しいチャットとボット。フォルダモードおよびアカウント全体モードにおいて、新しいチャットやボットが 出現すると、出現直後に保存されます:

    • source.profileレコードとしてのプロファイル:ボットの説明とコマンド、ユーザー、グループ、またはチャンネルの「概要」テキスト、 メンバー、リンクされたチャット、およびTelegramが返した際の招待リンク ;
    • new_chat とマークされた履歴スナップショットとして、最新の表示可能なメッセージ(最大 1,000 件)を保存します。これには、 参加したばかりのチームチャットの以前のメッセージや、監視がチャットに 気付く前にボットが発信した内容などが含まれます。すでに保存済みのメッセージは重複して記録されません。

    モードを有効にした時点で既にリストに含まれているチャットは、スナップショットなしで追加されます。 FloodWaitが発生すると、この処理は一時停止され、その後再開されます。失敗は記録され、 チャットのリアルタイム記録は継続されます。 - プロファイルはリクエストに応じて表示されます。「チャット」→「プロファイル」→「プロファイルを保存」を選択すると、任意のソースの現在のプロファイルが保存され、 メッセージの上部に最新のプロファイルが表示されます。 - 非表示。別のTelegramアプリ内で押されたインライン(コールバック)ボタン、ボットが その押下に応答して表示するポップアップやリンク、および別のアプリで使用された招待リンクは、 TgWitnessには届きません。ボットがその後送信または編集した内容は記録されます。

パネルからの発言#

「Chats」には、選択したワークスペースのTelegramアカウントを使用するミニクライアントが追加されました:

  • プレーンテキストのメッセージを入力するか、保存済みのメッセージの下にある「返信」を選択してください。送信される メッセージは、送信更新が対象範囲から除外されている場合でも記録されます。
  • 「Press」ボタンは、現在のコールバックボタンまたはテキストボタンの下にあります。サーバーは メッセージを再度取得し、キーボード入力が保存されたバージョンと異なる場合は、その操作を拒否します。 コールバックの受信確認には、Telegramのポップアップテキスト、アラートフラグ、およびURLが保持されます。また、返信内容は 会話の下にも表示されます。URLは選択可能なテキストのままとなり、自動的に開かれることはありません。
  • 「Telegramリンクを開く」を展開し、「@username」、公開の「https://t.me/name」リンク、 「https://t.me/+invite」/「joinchat/invite」、または「?start=parameter」を含むボットリンクを入力し、 「プレビューを保存」を押してください。参加前に、元のリンクとTelegramのプレビューに署名が行われます。 参加/開いて確認した後、グループ/チャンネルに参加するか、ユーザー/ボットを開き、 チャットを有効なソースとして追加し、開始パラメータを含む/startをボットに送信します。 管理者の承認待ちの参加リクエストは、メンバーシップとしてではなく「保留中」として記録されます。

「監視を開始」をオンにすると、受信した返信をリアルタイムでキャプチャできます。監視が一時停止している間もパネルの操作は機能しますが、 その場合は直接的な返信のみが確実に保存されます。 新たに追加されたソースは、監視が実行されている際に、設定されたプロファイル/履歴の取り込みを使用します。 ソースが一時停止している場合は、「ソース」で有効にしてから、送信やボタンの操作を行ってください。

interaction.preview、interaction.requested、interaction.resultは、証拠エクスポートに含まれる通常の署名付き ジャーナルイベントです。リクエストには、アカウント、メッセージ/ボタン またはプレビューレコード、および監視が実行されていたかどうかが識別されます。レシートは、成功、 拒否、承認待ち、および不明な結果を区別します。中断されたリクエストはTelegramに到達している可能性があります: 新しい操作を開始する前にチャットを確認してください。 リクエスト ID を再利用すると、 再起動後を含め、アクションを繰り返すことなく保存された受信確認を取得できます。パネルは、 現在のページセッション中に同じアクションに対して曖昧な応答があった場合でも、その ID を保持します。 また、アクションが成功した後でビューの更新に失敗した場合も、その ID を保持します。受信確認は 表示されたままとなり、再度クリックすると取得できます。 コールバックおよび参加 RPC には 1 回の 試行があります。再試行可能な読み取り操作は、設定された再試行ポリシーを維持します。チャットを切り替えると、 下書きと返信先が即座にクリアされ、新しい会話が読み込まれるまで送信が無効になります。

このミニクライアントは、テキストおよびコールバックボタンを処理します。Webアプリ、ログイン/電話番号/位置情報の要求、 支払い、インラインクエリ、添付ファイルについては、引き続きTelegramクライアントが必要となります。保存されたボタンの メタデータは引き続き表示されます。新しいコントロールには英語のテキストが使用されています。

ティアの再確認#

再確認では、Telegramに対し、見逃されたメッセージや編集履歴、および現在返されなくなったメッセージについて再度照会を行います。 星印が付いたソースは優先ソースであり、デフォルトでは15分ごとに再確認が行われます。 その他のソースはすべて6時間ごとに再確認されます。選択されたチャットは当初から優先ソースとして扱われますが、 フォルダまたはアカウント全体から追加されたチャットは通常のソースとして扱われます。 1回の処理につき最大30の情報源が再確認され、 残りは次の分まで待機します。再接続後は、優先情報源が先に処理されます。両方の 間隔は、「情報源」→「記録設定」→「再確認」(0に設定するとその階層がオフになります)で設定され、 recheck.changedとして記録されます。

取得し損ねたメッセージは、前回の処理が停止した地点から上流に向かって取得されます。1回の処理につき、 [パラメータ] → [再チェックごとの新規メッセージ数](デフォルトは1,000件)を上限とします。 長期間の停止後、 再チェックは、その空白期間よりも新しいリアルタイムのメッセージが先に保存されていた場合でも、 空白期間全体を埋めるように行われます。まだ追いついていないチャットは、 ティア間隔を待つのではなく、次の分に再度再チェックされます。recheck.completedは、処理が完了するまでcontinues_afterと表示されます。

比較対象には、メッセージ本文、エンティティ、キーボード入力(削除を含む)、および添付ファイルの 内容・識別情報が含まれます。 ファイルへのアクセスハッシュやファイル参照のみを変更しても、 編集とはみなされません。また、Telegramが自動的に入力する項目(リンクプレビューの読み込み、ストーリーの閲覧、このアカウントによってロック解除された有料 メディア、請求書の受領など)も編集とはみなされません。「チャット」に保存された各バージョンは、メディアのメタデータを含む完全なジャーナル記録にリンクされています。

メッセージ履歴と出典情報#

例えば、コレクターが「10:00に会議」という記録を検知し、その後「11:00に会議」という記録を確認し、 さらに削除通知を受け取ったとします。この場合、3つの異なる記録が追加されます。 元のテキストは残され、編集後の内容は別のバージョンとして扱われ、通知には 削除が検知されたことが記録されます。

最初のバージョンが消えた後に収集が開始された場合、そのテキストは利用できません。 プロセスがオフラインの間に複数の編集が行われた場合、その後確認された バージョンのみが保存されます。削除通知では、一度もキャプチャされなかったコンテンツを復元することはできません。

メッセージの送信者が必ずしも編集者であるとは限りません。Telegramでは通常、 メッセージを削除した人物や正確な削除時刻は提供されません。身元不明の当事者は そのまま不明のままとなります。反応のスナップショットや参加者の更新情報には、 Telegramがそのアカウントに対して表示している件数と身元のみが含まれます。

シーケンス番号は観測順序を表しています。コレクターのUTCタイムスタンプは、その ローカル時計によるものです。Telegramの送信元タイムスタンプが提供された場合は、別途保存されます。 いずれも、独立した信頼できるタイムスタンプではありません。

履歴のスナップショット#

スナップショットは、有効化されたソースから最新の表示可能なメッセージをリクエストするもので、1回のリクエストにつき最大 500件まで取得可能です。結果は「履歴観測」としてラベル付けされます。これらは リアルタイムのキャプチャと重複する場合があり、重複する観測結果は個別の記録として保持されます。

スナップショットは添付ファイルポリシーに従いますが、ライブイベントの切り替えとは別個に処理されます。 削除されたメッセージや見逃された中間バージョンを復元することはありません。 一時停止中にスナップショットをリクエストできますが、キューに入れられた添付ファイルは、監視が開始され、 ダウンロードワーカーが実行されるまで待機します。

添付ファイルの取り扱い#

添付ファイルのダウンロードはデフォルトで有効になっており、空きディスク容量が1 GiB未満になると一時停止します。コレクターは、 メッセージの監視とダウンロードのジョブを同時に実行します。このジョブは元のメディア 記述子とサイズポリシーを維持するため、後から編集された添付ファイルが黙って置き換えられることはありません。

ダウンロードはメッセージのキャプチャ後に実行されます。ダウンロードが完了すると、SHA-256およびバイト数を伴うmedia.saved レコードが生成されます。スキップ、失敗、再試行、および中断された 処理については、それぞれ異なる結果となります。キューに入れられたジョブは、ファイルが保存されたことの証拠とはなりません。 また、完了したファイルは、当初観測された添付ファイル記述子に記載されたバイト数と一致している必要があります。 レスポンスが短すぎたり、予期せず長すぎたりする場合は、保存されたメディアとして記録されません。

制限は、写真、動画、GIFおよびアニメーション、ラウンド動画メッセージ、 音声メッセージ、音楽およびオーディオ、ステッカー、ファイルといった種類ごとに設定されています。 各タイプは個別に無効化可能で、 1~2,000 MiBの範囲で独自のサイズ制限が設定されています。新しいワークスペースでは、写真用が20 MiB、 動画用が100 MiB、ファイル・音声・ラウンド動画用が50 MiB、音声・GIF用が20 MiB、 ステッカーは5 MiBです。最大ファイルサイズは、すべての種類に対して一括で設定されます。種類ごとの制限が設定される前に保存されたポリシーは、 すべての種類に対して単一の制限を維持します。無効化された種類については、 「media.skipped」レコードが生成され、サイズ不明またはサイズ超過のファイルはダウンロードされません。 大容量ファイルの ダウンロード速度は、少なくとも256 KiB/sとなります。ジョブは再起動後も維持されますが、有効期限が切れた参照、アクセス権の喪失、 またはファイルの削除により、復元できない場合があります。既存のジョブは、保存された ポリシーを引き続き保持します。

一時停止、ロック、切断、再起動#

動作または状態 効果
ワークスペースを切り替える パネル表示を変更します。その他のコレクターは状態を維持します。
パネルをロックするか、タブを閉じてください サーバーと監視機能は稼働したままとなります。
観察の一時停止 そのコレクターを停止し、キューに格納されている添付ファイルの処理を保持します。
ソースを無効にする 今後のスコープ指定によるキャプチャを停止します。無効化されている間、それに関連するキューに登録されたメディア処理ジョブは待機状態となります。
出典を削除する 情報源として認識されず、ユーザープロフィールは削除されますが、すでに保存された記録は追記専用ジャーナルに残ります。まだ処理待ちの添付ファイルは、失敗(source_removed)として記録されます。フォルダモードおよびアカウント全体モードでも、これらは除外されます。
接続経路を変更する 一時停止が必要となり、古いクライアントを終了し、未完了のログインをキャンセルします。
Pythonプロセスを停止する すべてのワークスペースを停止します。オフライン中は、いかなる観測も行われません。
アクティブな監視終了後に再起動します 保存されたセッションを使用して、保存された範囲の再開を試みます。手動で一時停止すると、その意図は解除されます。

コレクターは、検知された接続切断、再試行、エラー、起動/停止、および ハートビートを記録します。短時間の中断は、定期的な接続チェックでは検出されない場合があります。 再起動後、見逃された更新は保存された更新位置から要求され、 監視対象のチャットは定期的に再チェックされます。証拠形式をご参照ください。スナップショットは文脈を提供しますが、 ギャップが修復されたことを証明するものではありません。

アカウントの分離と検証#

各ワークスペースには、独自のジャーナル、認証、署名鍵、ポリシー、およびキューがあります。 そのワークスペースのアクティブなクライアントのみが、リアルタイムの観測データを記録できます。拒否されたクライアント、保留中のクライアント、 置き換えられたクライアント、および接続テスト中のクライアントは、そのジャーナルにリアルタイムの更新を書き込むことはできません。 異なるアカウントが同じグループを監視することは可能ですが、それぞれのジャーナルは独立したままです。

各イベントには、前回のハッシュ値とEd25519署名が含まれます。エクスポート対象は、 固定のシーケンス番号を通じてワークスペースのジャーナル全体を網羅します。パネルフィルターは エクスポート内容をフィルタリングしません。エクスポートの準備が行われている間も、その範囲を超えて収集が継続される場合があります。

「ジャーナルの検証」機能は、表示された 境界を通じてイベントの連鎖と署名を検証します。ワークスペースが変更されると結果はクリアされ、パネルには 検証後に追加された新しい記録が表示されます。ZIP形式でのエクスポートでは、収集されたメディアの検証も行われます。

有効な署名は、Telegramの 送信元や内容の真実性ではなく、信頼できる鍵に対する完全性を保証するものです。フィンガープリントとチェックポイントは個別に保持してください。信頼および配信要件については、 証拠モデル、日常の運用、 およびライブ受入手順をご参照ください。