# כיצד פועלת הראיה

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

הסבר על שרשרת חשישים, חתימות, נקודות ביקורת ועדים, תוך שימוש בנוסחאות המדויקות שבהן משתמש המאמת.

TgWitness שומר את מה שנצפה על ידי חשבון האיסוף, מקשר תצפיות אלה ליומן חתום ומאפשר לאדם אחר לאמת ייצוא באמצעות מפתח מהימן ונקודת ביקורת שנשמרה קודם לכן.

[אתר התיעוד המקומי](https://github.com/phishdestroy/TgWitness/blob/main/docs/internal/PUBLISHING.md#preview-the-website-locally) מוסיף דוגמאות אינטראקטיביות ב-`/docs/concepts/`, ומחקר החלטות Checkpoint ב- `/docs/witness/`. כל הודעות הדוגמה, הספירות והעיכובים הם פיקטיביים. חתימות ה-hash בסביבת הבדיקה של השרשרת מחושבות באמצעות SHA-256 בדפדפן. שום דבר לא נשלח ל-Telegram.

## הודעה משתנה; התצפיות מצטברות

תרשים רצף · Telegram → Collector: הודעה חדשה: נפגש ב-10:00; Collector → יומן חתום: הוסף message.new; Telegram → Collector: עריכה: נפגש ב-11:00; Collector → יומן חתום: הוסף message.edited; Telegram → Collector: הודעת מחיקה; Collector → יומן חתום: הוסף message.deleted; הערה לגבי יומן חתום: תצפית על הודעות מקוריות, עריכות ומחיקות נשמרת · Telegram · Collector · יומן חתום · הודעה חדשה: נפגש ב-10:00 · הוסף message.new · עריכה: נפגש ב-11:00 · הוסף message.edited · הודעת מחיקה · הוסף message.deleted · תצפית על הודעות מקוריות, עריכות ומחיקות נשמרת

**תרשים כטקסט**

1. Telegram → Collector: הודעה חדשה: נפגש ב-10:00
2. Collector → יומן חתום: הוסף message.new
3. Telegram → Collector: עריכה: נפגש ב-11:00
4. Collector → יומן חתום: הוסף message.edited
5. Telegram → Collector: הודעת מחיקה
6. Collector → יומן חתום: הוסף message.deleted
7. הערה לגבי יומן חתום: תצפית על הודעות מקוריות, עריכות ומחיקות נשמרת

רצף אירועים מפושט זה מניח ש-Telegram העביר כל עדכון והחשבון הנבחר יכול היה לראות אותו. אירועים תפעוליים נכללים גם הם ביומן. הודעת מחיקה אינה מציינת את המוחק או את זמן המחיקה המדויק. העברות חוזרות הן תצפיות נפרדות; אין דיכוי כפילויות ברמת היומן כולו.

## מה כולל ה-hash

![תצפית, קידוד, חשיש וחתימה: כל אירוע חדש כולל את החשיש של האירוע שקדם לו.](https://phishdestroy.github.io/TgWitness/assets/evidence-chain-animated.svg)

קראו את הנוסחה מבפנים החוצה: **C** הופך את תשעת השדות לבייטים מדויקים; **SHA-256** מייצר את התמצית שלהם; **hex** הוא האופן שבו התמצית הזו מאוחסנת. ה-hash הקודם כבר נמצא בתוך האירוע. **unhex** מחזיר את ה-hash המאוחסן ל-32 הבייטים ש-Ed25519 חותם עליהם.

[תרשים שרשרת סטטי](https://github.com/phishdestroy/TgWitness/blob/main/docs/assets/presentation/evidence-chain-static.svg)

יהי C(ei) ה-JSON הקנוני ב-UTF-8 של תשעת שדות האירוע. הראשון, `previous_hash`, מורכב מ-64 תווים של אפס. כל רשומה מאוחרת יותר כוללת את ה-hash ההקסדצימלי של הרשומה הקודמת:

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

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

החתימה מכסה את 32 הבייטים הגולמיים של ה-digest. קלט ה-hash מכיל בדיוק את `seq`, `observed_at`, `source_at`, `kind`, `chat_id`, `message_id`, `actor_id`, `payload` ו-`previous_hash`. מפתחות האובייקטים ממוינים; רווחים וסימני בריחה של ASCII מושמטים; ערכי NaN ואינסוף נדחים. ראו את [הקידוד המדויק](https://phishdestroy.github.io/TgWitness/he/docs/reference/evidence/#event-canonicalization).

תרשים זרימה · 64 תווים ריקים → רשומה 1 / hash h1; רשומה 1 / hash h1 → הרשומה 2 כוללת h1 / hash h2; הרשומה 2 כוללת h1 / hash h2 → הרשומה 3 כוללת h2 / hash h3; הרשומה 3 כוללת h2 / hash h3 → נקודת ביקורת חתומה: ספירה 3, כותרת h3 (לשמור במקום אחר) · 64 תווים ריקים · רשומה 1 / hash h1 · הרשומה 2 כוללת h1 /hash h2 · הרשומה 3 כוללת h2 /hash h3 · נקודת ביקורת חתומה:ספירה 3, כותרת h3 · לשמור במקום אחר

**תרשים כטקסט**

1. 64 תווים ריקים → רשומה 1 / hash h1
2. רשומה 1 / hash h1 → הרשומה 2 כוללת h1 / hash h2
3. הרשומה 2 כוללת h1 / hash h2 → הרשומה 3 כוללת h2 / hash h3
4. הרשומה 3 כוללת h2 / hash h3 → נקודת ביקורת חתומה: ספירה 3, כותרת h3 (לשמור במקום אחר)

| שינוי ביומן שסופק | מה מזהה זאת |
| --- | --- |
| שינוי הרשומה 2 תוך שמירה על ה-hash השמור שלה | ה-hash של האירוע שחושב מחדש שונה; החתימה שלו כבר אינה מכסה את האירוע ששונה |
| שחזור התיעוד ששונה וכל ה-hash המאוחרים יותר | החתימות המקוריות נכשלו; נקודת ביקורת שנשמרה בגבול המושפע גם היא אינה תואמת |
| הסר את הסיומת אך השאר את הקידומת הנותרת ללא שינוי | נקודת ביקורת מוקדמת יותר, מעבר לקידומת שסופקה, מגלה שהייצוא קצר מדי |
| חתימה מחודשת על יומן חלופי באמצעות מפתח אחר | טביעת אצבע של מפתח מהימן בנפרד דוחה את הזהות החלופית |

![שינוי שדה שנשמר משנה את תקציר ה-digest שלו; בנייה מחדש של חתימות ה-hash אינה משחזרת את החתימות המקוריות.](https://phishdestroy.github.io/TgWitness/assets/evidence-tamper-animated.svg)

**נסו את ההיגיון על הרשומה 2:** שנו את `Meet at 11:00` ל-`Meet at 12:00` באירוע השמור. ההאש המחושב מחדש כבר אינו תואם. חישוב מחדש של השרשרת המאוחרת יכול לתקן את הקישורים שלה, אך אינו יכול לגרום לחתימות המקוריות לכסות את התקצירים החדשים. לעומת זאת, עריכה שנצפתה ב-Telegram הופכת לרשומה חדשה ביומן.

[תרשים שינויים סטטי](https://github.com/phishdestroy/TgWitness/blob/main/docs/assets/presentation/evidence-tamper-static.svg)

קישורי Hash לבדם אינם מונעים מאף אחד לחשב מחדש שרשרת תחליפים. האמון נובע מבדיקת חתימות תחת מפתח מהימן באופן עצמאי ו השוואתן עם הפניות שנשמרו מחוץ לאספן.

## מה מוסיף נקודת ביקורת קודמת

![יש לשמור על ספירת שורות 3 וכותרת h3; ייצוא מאוחר יותר של 4 רשומות נבדק במיקום 3.](https://phishdestroy.github.io/TgWitness/assets/evidence-checkpoint-animated.svg)

**ההפניה נשארת קבועה בעוד היומן הולך וגדל.** אם נקודת הבדיקה מציינת "3 רשומות, כותרת h3", ייצוא של ארבע רשומות יכול לעבור על ידי התאמה ל-h3 במיקום 3. הכותרת העדכנית ביותר היא h4, שצפויה להיות שונה. ייצוא של שתי רשומות בלבד ייכשל.

[תרשים נקודות ביקורת סטטיות](https://github.com/phishdestroy/TgWitness/blob/main/docs/assets/presentation/evidence-checkpoint-static.svg)

לאחר אימות חתימת נקודת הבדיקה, יש לדרוש:

Nexport ≥ Ncheckpoint and hexport[Ncheckpoint] = Hcheckpoint

ייצוא עשוי לחרוג מגבולות נקודת ביקורת. עליו להתאים בגבול שנשמר. המאמת האמיתי בודק גם את רצף האירועים של כל אירוע, את הקישור הקודם, את ה-hash ואת החתימה. השוואה של הראש הסופי המאוחסן בלבד עלולה להחמיץ רשומה פנימית ששונתה וה-hash השמור שלה לא עודכן.

## היכן מקומו של עד

תרשים זרימה · אוסף / הפעלת חשבון / מפתח A → נקודת קצה של נקודת ביקורת לקריאה בלבד; Witness / מפתח אספן מוצמד / מפתח פרטי B → יומן עדים חתום נפרד; Witness / מפתח אספן מוצמד / מפתח פרטי B → נקודת קצה של נקודת ביקורת לקריאה בלבד (בקש בדיקה); נקודת קצה של נקודת ביקורת לקריאה בלבד → Witness / מפתח אספן מוצמד / מפתח פרטי B (תשובה חתומה); Witness / מפתח אספן מוצמד / מפתח פרטי B → ערוץ עם פוסטים חתומים ב-TGW1 (API לבוט / אסימון פרטי) · מארח A · מארח B · אוסף / הפעלת חשבון / מפתחA · נקודת קצה של נקודת ביקורתלקריאה בלבד · Witness / מפתח אספן מוצמד/ מפתח פרטי B · יומן עדים חתום נפרד · ערוץ עם פוסטים חתומיםב-TGW1 · בקש בדיקה · תשובה חתומה · API לבוט / אסימון פרטי

**תרשים כטקסט**

1. אוסף / הפעלת חשבון / מפתח A → נקודת קצה של נקודת ביקורת לקריאה בלבד
2. Witness / מפתח אספן מוצמד / מפתח פרטי B → יומן עדים חתום נפרד
3. Witness / מפתח אספן מוצמד / מפתח פרטי B → נקודת קצה של נקודת ביקורת לקריאה בלבד (בקש בדיקה)
4. נקודת קצה של נקודת ביקורת לקריאה בלבד → Witness / מפתח אספן מוצמד / מפתח פרטי B (תשובה חתומה)
5. Witness / מפתח אספן מוצמד / מפתח פרטי B → ערוץ עם פוסטים חתומים ב-TGW1 (API לבוט / אסימון פרטי)

ה-Witness מתעד ביטולים, כותרת שונה באותו ספירה, מפתחות ששונו, תשובות לא חוקיות ותגובות חסרות. ספירה גבוהה יותר כשלעצמה אינה מוכיחה שכל הרשומות הקודמות נותרו ללא שינוי; יש להשוות את הייצוא עם נקודות הבקרה שנשמרו. שימוש ב-Witness במארח אחר מונע השפעה של השבתת המארח של האספן; מפעיל נפרד מעניק עצמאות נוספת.

ה-Witness מאמת את מצב היומן המדווח על ידי האספן. הוא אינו מפקח באופן עצמאי על כל הודעות Telegram. ראו [הגדרת ה-Witness](https://phishdestroy.github.io/TgWitness/he/docs/reference/witness/).

## בדיקת תפקוד מול פעולות ידועות

יש להשתמש בקבוצה מבוקרת, בחשבונות איסוף נפרדים ובסמן חדש. יש לשלוח, לערוך ולמחוק בכוונה תחילה, תוך בדיקת התיעוד בין השלבים. יש להגדיר את הפעולות הצפויות ואת נקודת הסיום לפני בדיקת התוצאות.

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

רק פעולות תואמות לציפיות נספרות; קבלות כפולות אינן מגדילות את המונה. המכנה חייב להיות שונה מאפס. לקבלה חסרה אין עיכוב נמדד. תעדו אי-ודאות לגבי השעה; השתמשו בזמן פעולת המחיקה המבוקר שלכם, מכיוון ש-Telegram אינו מספק את זמן המחיקה המדויק. תוצאה כגון 5/6 (83.3%) מתארת את פעולות הבדיקה, ולא את השלמות של כל תעבורת טלגרם.

## בחר תהליך עבודה

[המדריך המלא לחקירה](https://phishdestroy.github.io/TgWitness/he/docs/reference/investigation/) עוקב אחר אירוע המתרחש בערוץ, בקבוצה, בבוט ובצ'אט פרטי:

1. הפעל את מצב החקירה של החשבון כולו וסקור את כל הצ'אטים הנגישים.
2. השג תמונות מצב של היומן, היסטוריה מלאה לכל צ'אט וקבצים מצורפים שנשמרו.
3. יש לשמור את השינויים בזמן אמת ואת כל האינטראקציות המכוונות בלוח עם האישורים המתאימים.
4. עקבו אחר מזהי שולח מספריים, קשרי תגובה, יעדים חוזרים ו- השיישים של קבצים באמצעות רשומות מצוטטות ופרופילים אישיים.
5. שחזור ציר זמן חוצה-צ'אטים הכולל הן חותמות זמן והן פערים מפורשים.
6. השוואת סביבות עבודה של חשבונות אחרים תוך שמירה על הפרדה בין מקורותיהם ומפתחותיהם.
7. יש לאסוף ולאמת את היומנים החתומים, הפרופילים והייצואים של ההיסטוריה יחד עם הערות התיק.

המדריך "`/docs/cases/`" באתר כולל מפת מקרים אינטראקטיבית וגרסאות שונות למקרים של מחלוקות בין בוטים, הודעות שהוסרו ומשתתפים שמשנים שמות. הערות על המקרים והניתוח הבין-סביבתי הם חיצוניים; היישום אינו יוצר באופן אוטומטי גרף חקירה גלובלי או ארכיון מקרים מאוחד.

[אימות שהושלם ועבודה שנותרה](https://phishdestroy.github.io/TgWitness/he/docs/reference/verification/) · [ייצוא ואימות](https://phishdestroy.github.io/TgWitness/he/docs/reference/evidence/#investigation-handoff) · [התחל עם חשבון אחד](https://phishdestroy.github.io/TgWitness/he/docs/reference/quickstart/)
