# چگونگی کارکرد شواهد

Canonical page: https://phishdestroy.github.io/TgWitness/fa/docs/reference/how-it-works/

زنجیره هش، امضاها، نقاط کنترل و شاهدان با فرمول‌های دقیقی که اعتبارسنج استفاده می‌کند توضیح داده شده‌اند.

TgWitness آنچه را که یک حساب گردآورنده مشاهده کرده است حفظ می‌کند، این مشاهدات را به یک دفترچه ثبت امضا شده پیوند می‌دهد و به شخص دیگری اجازه می‌دهد تا یک خروجی را با استفاده از یک کلید مورد اعتماد و یک نقطه کنترل قبلی که نگهداری شده است، تأیید کند.

[وب‌سایت مستندات محلی](https://github.com/phishdestroy/TgWitness/blob/main/docs/internal/PUBLISHING.md#preview-the-website-locally)، مثال‌های تعاملی را در `/docs/concepts/` و یک کاوشگر تصمیم‌گیرنده نقطه‌کنترل را در `/docs/witness/` اضافه می‌کند. تمام پیام‌های نمونه، شمارش‌ها و تأخیرها فرضی هستند. هش‌ها در محیط شبیه‌سازی زنجیره با SHA-256 در مرورگر محاسبه می‌شوند. هیچ چیزی به تلگرام ارسال نمی‌شود.

## پیامی تغییر می‌کند؛ مشاهدات انباشته می‌شوند

نمودار توالی · تلگرام → جمع‌آور: پیام جدید: ساعت ۱۰:۰۰ ملاقات کنیم; جمع‌آور → دفترچه ثبت‌شده: پیوست: message.new; تلگرام → جمع‌آور: ویرایش: ساعت ۱۱:۰۰ ملاقات; جمع‌آور → دفترچه ثبت‌شده: پیام را ضمیمه کنید. ویرایش‌شده; تلگرام → جمع‌آور: اطلاعیه حذف; جمع‌آور → دفترچه ثبت‌شده: پیوست: پیام حذف‌شده; یادداشتی دربارهٔ دفترچه ثبت‌شده: مشاهدهٔ اصل + ویرایش + حذف باقی می‌ماند · تلگرام · جمع‌آور · دفترچه ثبت‌شده · پیام جدید: ساعت ۱۰:۰۰ ملاقات کنیم · پیوست: message.new · ویرایش: ساعت ۱۱:۰۰ ملاقات · پیام را ضمیمه کنید. ویرایش‌شده · اطلاعیه حذف · پیوست: پیام حذف‌شده · مشاهدهٔ اصل + ویرایش + حذف باقی می‌ماند

**نمودار به صورت متن**

1. تلگرام → جمع‌آور: پیام جدید: ساعت ۱۰:۰۰ ملاقات کنیم
2. جمع‌آور → دفترچه ثبت‌شده: پیوست: message.new
3. تلگرام → جمع‌آور: ویرایش: ساعت ۱۱:۰۰ ملاقات
4. جمع‌آور → دفترچه ثبت‌شده: پیام را ضمیمه کنید. ویرایش‌شده
5. تلگرام → جمع‌آور: اطلاعیه حذف
6. جمع‌آور → دفترچه ثبت‌شده: پیوست: پیام حذف‌شده
7. یادداشتی دربارهٔ دفترچه ثبت‌شده: مشاهدهٔ اصل + ویرایش + حذف باقی می‌ماند

این توالی ساده‌شده فرض می‌کند که تلگرام هر به‌روزرسانی را تحویل داده و حساب انتخاب‌شده قادر به مشاهده آن بوده است. رویدادهای عملیاتی نیز ژورنال را به اشتراک می‌گذارند. یک اعلان حذف، حذف‌کننده یا زمان دقیق حذف را ارائه نمی‌دهد. تحویل‌های تکراری مشاهدات جداگانه‌ای هستند؛ هیچ حذف تکراری در سطح کل ژورنال انجام نمی‌شود.

## آنچه یک هش پوشش می‌دهد

![مشاهده، رمزگذاری، هش‌گیری و امضا: هر رویداد جدید شامل هش رویداد قبلی است.](https://phishdestroy.github.io/TgWitness/assets/evidence-chain-animated.svg)

فرمول را از داخل به بیرون بخوانید: **C** نُه فیلد را به بایت‌های دقیق تبدیل می‌کند؛ **SHA-256** هش آن‌ها را تولید می‌کند؛ **هگز** روشی است که آن هش با آن ذخیره می‌شود. هش قبلی از قبل در رویداد وجود دارد. **unhex** هش ذخیره‌شده را دوباره به ۳۲ بایت که Ed25519 امضا می‌کند، تبدیل می‌کند.

[نمودار ثابت زنجیره](https://github.com/phishdestroy/TgWitness/blob/main/docs/assets/presentation/evidence-chain-static.svg)

بگذارید C(ei) نشان‌دهندهٔ JSON استاندارد UTF-8 از نه فیلد رویداد باشد. اولین `previous_hash` شامل ۶۴ کاراکتر صفر است. هر رکورد بعدی شامل هش هگزادسیمال رکورد قبلی است:

hi = hex(SHA256(C(ei)))

σi = Ed25519.Sign(sk,unhex(hi))

امضا، ۳۲ بایت هش خام را پوشش می‌دهد. ورودی هش دقیقاً حاوی `seq`، `observed_at`، `source_at`، `kind`، `chat_id`، `message_id`، `actor_id`، `payload` و `previous_hash` است. کلیدهای شیء مرتب شده‌اند؛ فاصله‌های خالی و فرار ASCII حذف شده‌اند؛ NaN و بی‌نهایت رد شده‌اند. [رمزگذاری دقیق](https://phishdestroy.github.io/TgWitness/fa/docs/reference/evidence/#event-canonicalization) را ببینید.

نمودار جریان · ۶۴ کاراکتر صفر → ثبت ۱ / هَش h1; ثبت ۱ / هَش h1 → رکورد ۲ شامل h1 / هَش h2; رکورد ۲ شامل h1 / هَش h2 → رکورد ۳ شامل h2 / هَش h3; رکورد ۳ شامل h2 / هَش h3 → نقطهٔ کنترل امضا شده: شمارش ۳، سربرگ h3 (در جای دیگری نگهداری کنید) · ۶۴ کاراکتر صفر · ثبت ۱ / هَش h1 · رکورد ۲ شامل h1 / هَشh2 · رکورد ۳ شامل h2 / هَشh3 · نقطهٔ کنترل امضا شده:شمارش ۳، سربرگ h3 · در جای دیگری نگهداری کنید

**نمودار به صورت متن**

1. ۶۴ کاراکتر صفر → ثبت ۱ / هَش h1
2. ثبت ۱ / هَش h1 → رکورد ۲ شامل h1 / هَش h2
3. رکورد ۲ شامل h1 / هَش h2 → رکورد ۳ شامل h2 / هَش h3
4. رکورد ۳ شامل h2 / هَش h3 → نقطهٔ کنترل امضا شده: شمارش ۳، سربرگ h3 (در جای دیگری نگهداری کنید)

| تغییر به ژورنال ارائه‌شده | چه چیزی آن را تشخیص می‌دهد |
| --- | --- |
| سوابق رکورد ۲ را تغییر دهید در حالی که هش ذخیره‌شدهٔ آن دست‌نخورده باقی می‌ماند | هَش رویداد بازمحاسبه‌شده متفاوت است؛ امضای آن دیگر رویداد تغییر یافته را پوشش نمی‌دهد |
| سوابق تغییر یافته و هر هش بعدی را بازسازی کنید | امضاهای اصلی ناموفق هستند؛ یک نقطهٔ کنترل نگه‌داشته‌شده در مرز آسیب‌دیده نیز با آن اختلاف دارد |
| دم را حذف کنید اما پیش‌وند باقی‌مانده را دست‌نخورده نگه دارید | یک نقطه‌کنترل نگه‌داشته‌شده‌ی قبلی که فراتر از پیشوند ارائه‌شده قرار دارد نشان می‌دهد که خروجی بیش از حد کوتاه است |
| روزنامه جایگزین را با کلید دیگری مجدداً امضا کنید | اثر انگشت کلید مورد اعتماد جداگانه، هویت جایگزین را رد می‌کند |

![تغییر یک فیلد ذخیره‌شده هش آن را تغییر می‌دهد؛ بازسازی هش‌ها امضاهای اصلی را بازیابی نمی‌کند.](https://phishdestroy.github.io/TgWitness/assets/evidence-tamper-animated.svg)

**منطق را روی رکورد ۲ امتحان کنید:** در رویداد ذخیره شده، `Meet at 11:00` را به `Meet at 12:00` تغییر دهید. هش بازمحاسبه‌شده آن دیگر مطابقت ندارد. بازمحاسبه زنجیره بعدی می‌تواند پیوندهای آن را ترمیم کند، اما نمی‌تواند باعث شود امضاهای اصلی، هش‌های جدید را پوشش دهند. در مقابل، یک ویرایش مشاهده‌شده در تلگرام به یک رکورد جدید در دفترچه تبدیل می‌شود.

[نمودار تغییرات ایستا](https://github.com/phishdestroy/TgWitness/blob/main/docs/assets/presentation/evidence-tamper-static.svg)

فقط لینک‌های هش مانع از محاسبه مجدد یک زنجیره جایگزین توسط شخص دیگری نمی‌شوند. اعتماد از طریق بررسی امضاها با استفاده از یک کلید مورد اعتماد مستقل و مقایسه آن‌ها با مراجع نگهداری‌شده خارج از گردآورنده حاصل می‌شود.

## آنچه یک نقطه کنترل قبلی اضافه می‌کند

![شمارش ۳ را حفظ کنید و سرفصل h3 را نگه دارید؛ خروجی بعدی شامل ۴ رکورد در موقعیت ۳ بررسی می‌شود.](https://phishdestroy.github.io/TgWitness/assets/evidence-checkpoint-animated.svg)

**مرجع ثابت می‌ماند در حالی که مجله در حال رشد است.** اگر نقطه کنترل بگوید «۳ رکورد، سر h3»، یک خروجی چهار رکوردی می‌تواند با تطبیق h3 در موقعیت ۳ عبور کند. سر جدیدتر آن h4 است که انتظار می‌رود متفاوت باشد. یک خروجی شامل فقط دو رکورد با شکست مواجه می‌شود.

[نمودار نقطه‌کنترل ایستا](https://github.com/phishdestroy/TgWitness/blob/main/docs/assets/presentation/evidence-checkpoint-static.svg)

پس از تأیید امضای نقطه کنترل، الزامی است:

Nexport ≥ Ncheckpoint and hexport[Ncheckpoint] = Hcheckpoint

یک خروجی ممکن است از یک نقطه کنترل فراتر رود. این خروجی باید در مرز حفظ‌شده با آن مطابقت داشته باشد. اعتبارسنج واقعی همچنین توالی، لینک قبلی، هش و امضای هر رویداد را بررسی می‌کند. مقایسه تنها با سرخط نهایی ذخیره‌شده، یک رکورد داخلی تغییر یافته را که هش ذخیره‌شده‌اش به‌روزرسانی نشده است، نادیده می‌گیرد.

## جایی که شاهد به آن تعلق دارد

نمودار جریان · جمع‌آورنده / جلسه حساب / کلید A → نقطه پایانی نقطه‌کنترل فقط-خواندنی; شاهد / کلید جمع‌آوری ثابت‌شده / کلید خود B → روزنامه شاهد امضا شده جداگانه; شاهد / کلید جمع‌آوری ثابت‌شده / کلید خود B → نقطه پایانی نقطه‌کنترل فقط-خواندنی (درخواست بررسی); نقطه پایانی نقطه‌کنترل فقط-خواندنی → شاهد / کلید جمع‌آوری ثابت‌شده / کلید خود B (پاسخ امضا شده); شاهد / کلید جمع‌آوری ثابت‌شده / کلید خود B → کانالی با پست‌های امضا‌شده TGW1 (رابط برنامه‌نویسی ربات / توکن اختصاصی) · میزبان A · میزبان B · جمع‌آورنده / جلسه حساب /کلید A · نقطه پایانی نقطه‌کنترلفقط-خواندنی · شاهد / کلید جمع‌آوریثابت‌شده / کلید خود B · روزنامه شاهد امضا شدهجداگانه · کانالی با پست‌های امضا‌شدهTGW1 · درخواست بررسی · پاسخ امضا شده · رابط برنامه‌نویسی ربات / · توکن اختصاصی

**نمودار به صورت متن**

1. جمع‌آورنده / جلسه حساب / کلید A → نقطه پایانی نقطه‌کنترل فقط-خواندنی
2. شاهد / کلید جمع‌آوری ثابت‌شده / کلید خود B → روزنامه شاهد امضا شده جداگانه
3. شاهد / کلید جمع‌آوری ثابت‌شده / کلید خود B → نقطه پایانی نقطه‌کنترل فقط-خواندنی (درخواست بررسی)
4. نقطه پایانی نقطه‌کنترل فقط-خواندنی → شاهد / کلید جمع‌آوری ثابت‌شده / کلید خود B (پاسخ امضا شده)
5. شاهد / کلید جمع‌آوری ثابت‌شده / کلید خود B → کانالی با پست‌های امضا‌شده TGW1 (رابط برنامه‌نویسی ربات / توکن اختصاصی)

این شاهد بازپخش، یک سر دیگر در همان شمارش، کلیدهای تغییر یافته، پاسخ‌های نامعتبر و پاسخ‌های از دست رفته را ثبت می‌کند. صرفاً یک شمارش بزرگتر ثابت نمی‌کند که هر رکورد قبلی بدون تغییر باقی مانده است؛ خروجی را با نقاط کنترل نگهداری‌شده مقایسه کنید. یک شاهد روی میزبان دیگر از به اشتراک گذاشتن قطعی میزبان گردآورنده جلوگیری می‌کند؛ یک اپراتور جداگانه استقلال بیشتری فراهم می‌کند.

شاهد به وضعیت گزارش‌شدهٔ دفترچهٔ یادداشت گردآورنده گواهی می‌دهد. این ابزار به‌طور مستقل همهٔ پیام‌های تلگرام را مشاهده نمی‌کند. به [بخش راه‌اندازی شاهد](https://phishdestroy.github.io/TgWitness/fa/docs/reference/witness/) مراجعه کنید.

## ارسال را در برابر اقدامات شناخته‌شده آزمایش کنید

از یک گروه کنترل‌شده، حساب‌های جمع‌آوری مجزا و یک نشانگر جدید استفاده کنید. پیام‌ها را عمداً ارسال، ویرایش و حذف کنید و در فواصل مراحل، ضبط را بررسی نمایید. اقدامات مورد انتظار و یک نقطه قطع را تعریف کنید و سپس نتایج را بازرسی کنید.

R = |observed∩expected| / |expected| Δ t = treceipt - taction

تنها اقدامات مطابقت‌یافته با انتظار شمرده می‌شوند؛ رسیدهای تکراری مخرج را افزایش نمی‌دهند. مخرج باید غیرصفر باشد. یک رسید مفقود، تأخیر اندازه‌گیری‌شده‌ای ندارد. عدم قطعیت ساعت سند را مستند کنید؛ از زمان اقدام حذف کنترل‌شده خود استفاده کنید، زیرا تلگرام زمان دقیق حذف را ارائه نمی‌دهد. نتایجه‌ای مانند ۵/۶ (۸۳.۳٪) اقدامات آزمایشی را توصیف می‌کند، نه کامل بودن کل ترافیک تلگرام را.

## یک گردش کار را انتخاب کنید

[راهنمای کامل تحقیق](https://phishdestroy.github.io/TgWitness/fa/docs/reference/investigation/)، یک رویداد را در یک کانال، گروه، ربات و چت خصوصی دنبال می‌کند:

1. حالت تحقیق کل حساب را فعال کرده و فهرست تمام چت‌های قابل دسترسی را تهیه کنید.
2. دریافت اسنپ‌شات‌های ژورنال، تاریخچه کامل هر چت و پیوست‌های نگهداری‌شده.
3. تغییرات زنده و هرگونه تعامل عمدی با پنل را همراه با رسیدهایشان حفظ کنید.
4. شناسه‌های عددی فرستنده، روابط پاسخ‌گویی، مقاصد تکراری و هش‌های فایل را در سوابق استنادشده و پروفایل‌های افراد دنبال کنید.
5. بازسازی خط زمانی میان‌گفتگوها با هر دو نشانگر زمانی و فواصل صریح.
6. فضای کاری سایر حساب‌ها را مقایسه کنید، در حالی که منشأ و کلیدهای آن‌ها را جدا نگه می‌دارید.
7. ژورنال‌های امضا شده، پروفایل‌ها و خروجی‌های تاریخچه را همراه با یادداشت‌های پرونده گردآوری و تأیید کنید.

راهنمای `/docs/cases/` وب‌سایت شامل یک نقشه پرونده تعاملی و گزینه‌های مختلف برای اختلافات ربات، پیام‌های حذف‌شده و تغییر نام شرکت‌کنندگان است. یادداشت‌های پرونده و تحلیل بین فضاهای کاری خارجی هستند؛ این برنامه به‌طور خودکار نمودار تحقیق جهانی یا آرشیو ادغام‌شده پرونده‌ها را ایجاد نمی‌کند.

[اعتبارسنجی انجام‌شده و کارهای باقیمانده](https://phishdestroy.github.io/TgWitness/fa/docs/reference/verification/) · [صادرات و تأیید](https://phishdestroy.github.io/TgWitness/fa/docs/reference/evidence/#investigation-handoff) · [با یک حساب کاربری شروع کنید](https://phishdestroy.github.io/TgWitness/fa/docs/reference/quickstart/)
