TgWitness / תיעוד

הפניה / ראיות

פורמט הראיות

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

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

מה נחשב כחתום#

חומר הגנה מה יש לשמור
כל תצפית ביומן, כולל אירועים מבצעיים שרשרת SHA-256 וחתימת Ed25519 לכל אירוע events.jsonl המקורי, טביעת האצבע של המפתח המהימן, ונקודת ביקורת שנשמרה
תוכן קובץ ה-ZIP של הראיות manifest.sig חותם על המניפסט הקנוני, המפרט את חתימות ה-hash של קבצי התוכן קובץ ה-ZIP המלא, כולל קובץ המניפסט והחתימה שלו
קובצים מצורפים שנשמרו SHA-256 ומספר הבתים באירוע media.saved חתום; חתימת קובץ במניפסט ZIP החתום הבייטים המקוריים בתוך קובץ ה-ZIP המאומת
Checkpoint חתימת Ed25519 על אורך היומן, חתימת הראש, המפתח הציבורי וזמן היצירה עותק עצמאי שנשמר לפני שינוי שנוי במחלוקת
אישור ביצוע מדידות אספן חתומות בנפרד; כלולות גם באירוע process.started חתום הקבלה והיומן הנלווה; הנתונים נמסרו על ידי המשתמשים עצמם
קובץ CSV או HTML עצמאי אין חתימה קריפטוגרפית עצמאית; חתימות ה-hash של האירועים בלבד אינן מספיקות יש להשתמש בטקסט המדויק הנמצא בתוך קובץ ה-ZIP המאומת לצורך בדיקת תקינות
צילומי מסך, הדפסות או קבצי PDF שנוצרו על ידי דפדפן אין חתימת TgWitness על התוצר הנגזר יש לשמור את החבילה המקורית המאומתת ולתעד כיצד נוצר הנגזרת

הכלי מאמת את חתימות היומן לפני יצירת כל פורמט ייצוא. בדיקת המקור הזו אינה יוצרת חתימה על קובץ CSV או HTML שהורד בנפרד. כמו כן, חתימת אירוע JSONL תקפה אינה מספקת את בתים של הקובץ המצורף ואינה קובעת באופן עצמאי כי היומן הנצפה במלואו סופק.

העברת חקירה#

  1. רשמו את מספר התיק, המפעיל, מזהה החשבון המספרי ב-Telegram, המקורות שנבחרו, מדיניות האיסוף ותקופת האיסוף בהערות התיק שלכם. TgWitness שומר את התצפיות; הקצאת התיקים ורישומי השמירה מנוהלים מחוץ ליישום. אמתו את הגדרת האיסוף המיועדת באמצעות הליך הקבלה בזמן אמת.
  2. יש לשמור את טביעת האצבע של המפתח הציבורי של סביבת העבודה באופן עצמאי לפני ההסתמכות על הייצואים שלה. יש לשמור נקודות ביקורת חתומות מחוץ לאספן במהלך האיסוף. יש לתעד הפרעות ומגבלות הנראות של החשבון.
  3. ייצא קובץ ZIP חתום ושמור את אישור ההפעלה החתום. השתמש בנקודת ביקורת ב- או לפני גבול היומן המיוצא. נקודת ביקורת מאוחרת יותר עלולה לדחות כראוי ייצוא מוקדם יותר בטענה שהוא קצר מדי. הייצואים כוללים את יומן סביבת העבודה המלא, ללא תלות במסנני הפאנלים; בדוק את החומר לפני שתשתף אותו.
  4. יש לבקש מהנמען לאמת את קובץ ה-ZIP באמצעות עותק מהימן של תוכנת האימות ו טביעת האצבע/נקודת הבדיקה שסופקו בנפרד. מתוך סביבת פיתוח מהימנה שבה סביבת ה-Python פעילה:

    python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_PUBLIC_KEY_SHA256 --checkpoint retained-checkpoint.json

    דוחות פלט מוצלחים מציגים את key_pinned: true ו-checkpoint_checked: true כאשר שני הקלטים מסופקים ומתקבלים. יש לשמור את תוצאת האימות.

    For a handover requiring the final exported record to be witnessed, use
    `--witness witness.zip --witness-fingerprint TRUSTED_WITNESS_SHA256 --require-witness`.
    This refuses an export with an unwitnessed tail. See the
    [witness handover procedure](WITNESS.md#require-a-witnessed-export-boundary).
    
    1. תעדו את ה-SHA-256 של הארכיון, גבולות הייצוא, תאריך ההעברה, השולח וה נמען ברישום השמירה שלכם. שמרו על החבילה המקורית שלמה ועבדו מהעתקים. שתפו קבצי ראיות במקום את ספריית הנתונים הפרטיים של היישום, המכילה גם הפעלות חשבון וסודות חתימה. לצורך העברה, ניתן לארוז את הייצוא בקובץ ZIP המוגן בסיסמה ב-AES-256. הסיסמה מגנה רק על הסודיות ואינה נשמרת; הנמען מחלץ את הארכיון ומאמת את הייצוא החתום שבתוכו, אשר נותר ללא שינוי.
    2. אם נדרשת קיבוע זמן עצמאי, יש לפעול לפי הנוהל המפורט ב-RFC 3161 ולשמור את הבקשה, נקודת הבדיקה, מידע על רשות האישור (CA) המהימנה ותגובת הרשות המאומתת. הכנת בקשה בלבד אינה מספיקה לקבלת חותמת זמן.

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

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

ההתראות הנשלחות דרך Apprise מכילות שמות ומספר של סביבות עבודה וצ'אטים; קטעים קצרים מהודעות שנמחקו ועברו עריכה מתווספים רק כאשר המפעיל מפעיל את האפשרות הזו (כברירת מחדל האפשרות כבויה). הן מהוות אות נוחות, ולא ראיות: המסירה אינה מובטחת, ורק היומן והייצואים החתומים שלו מתעדים את מה שנצפה. באמצעות פרוקסי לסביבת העבודה, ההתראות עוברות באותו מסלול; שירותים שאינם יכולים להשתמש בו, וכן מסלולי MTProxy, נדחים.

קנוניזציה של אירועים#

קלט ה-hash מורכב בדיוק מהשדות הבאים:

seq, observed_at, source_at, kind, chat_id, message_id, actor_id, payload, previous_hash

יש לבצע סידוריזציה באמצעות JSON תואם Python ב-UTF-8, עם מפתחות אובייקטים ממוינים, ללא החלפת תווים ב-ASCII, ללא רווחים חסרי משמעות וללא NaN/אינסוף:

json.dumps(value, ensure_ascii=False, sort_keys=True,
           separators=(",", ":"), allow_nan=False).encode("utf-8")

ה-SHA-256 של אותם בייטים הופך להאש של האירוע. החתימה היא Ed25519 על 32 בייטי ההאש הגולמיים, ולאחר מכן מקודדת ב-base64. ה-previous_hash הראשון הוא 64 אפסים. מספרי הרצף מתחילים ב-1 ועולים ב-1. כל האירועים, כולל אירועים תפעוליים, משתפים שרשרת אחת. אין דיכוי של מסירות כפולות: תצפיות חוזרות הן קבלות נפרדות, ולא טענה לפעולות נפרדות ב-Telegram.

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

observed_at הוא שעון הקיר של האספן ב-UTC. source_at הוא תאריך טלגרם שסופק, כאשר הוא זמין. התראות על מחיקה אינן מספקות שעת מחיקה מדויקת, ולכן source_at נשאר ריק. סדר קבלת הנתונים אינו בהכרח סדר האירועים במקור. תמונות מצב של ההיסטוריה משתמשות בתאריכי מקור ישנים יותר, אך בזמני תצפית עדכניים.

סמנטיקה של שחקנים#

message.new actor_id הוא שולח ההודעה. ל-message.edited אין עורך משוער; payload.sender_id מתעד את שולח ההודעה שנצפתה. מחיקה actor_id נשאר null. הודעות שירות החברות שומרות על השולח וסוג הפעולה, מבלי להמיר כל הסרה לעזיבה מרצון. עדכוני משתתפים גולמיים שומרים על actor_id כפי שסופק. תמונות מצב של תגובות אינן ממציאות גורם שינוי.

התראות מחיקה עבור צ'אטים פרטיים וקבוצות רגילות מכילות רק מזהי הודעות. לצ'אטים אלה יש רצף מזהים משותף לכל החשבון, ולכן מזהה מסוים מזהה הודעה אחת של חשבון זה. כאשר הודעה עם מזהה זה נשמרה קודם לכן ביומן זה, המחיקה נרשמת בצ'אט כ-message.deleted עם payload.chat_resolution כשם השיטה. מזהים שמעולם לא נשמרו נשמרים כ-deletion.unscoped ללא chat_id; לא נעשות השערות כלשהן. ערוצים וקבוצות-על מונים הודעות לפי צ'אט, ולכן לעולם אינם מותאמים בדרך זו. כאשר ההודעה שנמחקה נשלחה על ידי החשבון הנצפה, payload.deleted_message_was_outgoing הוא true; זהות המוחק עדיין לא מסופקת.

היקף: רציפות, פערים ומזהים שלא נצפו#

כל קובץ ZIP חתום נושא את coverage.json, דוח ה-HTML נפתח עם אותו סיכום, ו- verify.py מחשב אותו מחדש מ-events.jsonl במקום להסתמך על הקובץ:

  • נצפה ברציפות מ-X עד Y. תקופה מתחילה ב-observation.started ו מסתיימת בהפסקה, עצירה, אובדן חיבור ל-Telegram, יציאה מהמערכת, התחלת תהליך ללא עצירה מסודרת, או יותר משלוש דקות ללא כל תיעוד במהלך התצפית (דופקים נרשמים מדי דקה, ולכן שתיקה פירושה שהתהליך נעצר, קפא או שה מחשב נכנס למצב שינה). כאשר מרווח הדופק משתנה בפרמטרים, כל דופק מתעד זאת, והשתיקה המותרת הופכת לשלושה מרווחים, לעולם לא פחות משלוש דקות.
  • רשימת הפערים מציינת את הזמן שחלף בין תקופות, יחד עם הסיבה לכך. פער שעדיין פתוח ברישום האחרון מסומן כ-not_resumed_by_last_record.
  • מזהי הודעות שלא נצפו. עבור ערוצים וקבוצות-על, המונים הודעות לפי צ'אט, המזהים החסרים בין אלה שנצפו מפורטים כטווחים. הם מדווחים כ "לא נצפו" — נמחקו, מעולם לא נמסרו, או מחוץ להיסטוריה השמורה — לעולם לא כ "נמחקו". צ'אטים פרטיים וקבוצות רגילות חולקים רצף זהה לכל החשבון, ולכן פערים שם אינם משמעותיים ואינם מפורטים.
  • הודעות על פערים ברמת הצ'אט (לדוגמה, בקשת טלגרם לשחזור ההבדלים בערוץ אחד ) נספרות כהערות; הן אינן מפריעות לכיסוי הכולל.

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

מפיק#

הרשימה החתומה של קבצי ZIP המכילים ראיות, ייצוא צ'אטים, יומני עדים והצהרות בקבצי פרופיל המשתמשים מכילה את producer : תוכנה, גרסה, פרויקט (PhishDestroy), דף הבית ומאגר הקוד המקור. הדוח ב-HTML מציג את אותה השורה, ו-verify.py מדפיס אותה כחלק ממה שאומת. ארכיונים שנוצרו לפני שקיים שדה זה מאומתים כ בעבר ומדווחים ככאלה שאינם מציינים את שם היוצר.

פרופילים אישיים#

קובץ פרופיל (tgwitness-dossier-v1, JSON) נבנה על פי בקשה מתוך רשומות שכבר נמצאות ביומן עבור צ'אט אחד; לא נשאב דבר מ-Telegram ותוכן הפרופיל לעולם לא נכתב ביומן (הפעלה וכיבוי של פרופילים נרשמים כ-dossier.changed). עבור כל אדם שיש לו הודעה שמורה, הוא מפרט את ההיסטוריה של השם ושם המשתמש, דגלי טלגרם (בוט, הונאה, מזויף, פרימיום, מאומת, מוגבל, נמחק) כפי שנראו בזמן השמירה, תעודות זיהוי תמונה, SHA-256 והאש תפיסתי (pHash, תואם ל-imagehash.phash) של האווטאר ממאגר האווטארים המקומי עם אווטארים דומים, פעילות (ההודעה הראשונה והאחרונה, מספרים, שיתופים שעברו עריכה ונמחקו, הודעות לפי שעה UTC), מי עונה למי, צ'אטים אחרים ביומן זה שבו האדם כתב, וארנקים שהוזכרו (BTC, EVM, TRON, TON, LTC, DOGE, XMR, SOL; כתובות Base58Check מאומתות באמצעות בדיקת סיכום), מספרי טלפון, שמות משתמש ו קישורים, כולל קישורים המוסתרים מאחורי טקסט.

כל עובדה מציינת את רשומות היומן (seq) שממנה היא נלקחה, ו-record_hashes מכיל את ה-hash של כל רשומה שמצוטטת. ההצהרה חתומה במפתח סביבת העבודה:

python verify.py tgwitness-dossier-CHAT.json --fingerprint TRUSTED_SHA256 --evidence tgwitness-evidence.zip

בודק את החתימה, מאמת את ייצוא הראיות עצמו (חתימה, שרשרת האש וקבצים) ומבטיח שכל רשומה המוזכרת קיימת ללא שינוי בייצוא זה של אותו מרחב עבודה. האשים של האווטרים מסומנים כמקורם במטמון המקומי (לא מרשומות היומן). אזכורים הם התאמות לדפוס — רמזים לבדיקה, לא עובדות מאומתות. הפרופילים מופעלים לפי צ'אט, ניתנים לייצוא כקובץ ZIP מוצפן ב-AES-256 עם סיסמה, ו נמחקים כאשר הם כבויים או כאשר הצ'אט מוסר מהמקורות.

עד עצמאי#

יומן העד (tgwitness-witness-v1) והפרסומים בערוץ שלו נבדקים מול ייצוא ראיות באמצעות verify.py --witness … --channel …; ראו "עד עצמאי".

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

הקובץ manifest.json כולל את הפורמט, זמן הייצוא, המפתח הציבורי, טביעת האצבע, אורך היומן, ה-hash הראשי, ההיקף, היוצר, המגבלות ו-SHA-256 של כל רכיב תוכן מלבד manifest.json ו-manifest.sig עצמם. manifest.sig הוא חתימת base64 Ed25519 על קובץ ה-JSON הקנוני של המניפסט. המאמת דוחה רכיבים בלתי צפויים או חסרים, שמות כפולים, קבצים פגומים, רצף או שרשרת שבורים, חתימות לא חוקיות ואי-התאמה לנקודת ביקורת שסופקה. הוא לעולם אינו מחלץ נתיבי ארכיון. הוא מגביל את הגודל הכולל המוצהר ללא דחיסה ל-4 GiB; קובץ --max-gib N מאפשר ארכיונים גדולים יותר שנוצרו עם הגבלת פרמטרים מוגברת.

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

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

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

קובצים מצורפים#

הקובצים ממוינים לפי SHA-256 בתיקיית media/. אירוע media.saved מקשר בין חתימת hash ואורך ב-byte לאירוע הודעה ספציפי. שמות הקבצים הגולמיים הם מטא-נתונים, לעולם לא נתיבים מקומיים. בייטים של מדיה מורידים באופן אסינכרוני, ולכן מחיקה מיידית עלולה למנוע את לכידתם. איסוף מושבת, קבצים גדולים מדי או בגודל לא ידוע, כשלים בהורדה, והורדות שנקטעו מוצגים בתוצאות. קריסת תהליך עלולה להשאיר קבצים חלקיים ללא הפניה; הם אינם נכללים בייצוא.

יצואן ה-ZIP מאמת את קבצי המדיה המאוחסנים מול שמותיהם. ייצוא בפורמטים JSONL, CSV ו-HTML מאמת את חתימות האירועים אך אינו כולל את נתוני המדיה עצמם. דוחות נגזרים נועדו לנוחות המשתמש; הקובץ events.jsonl הוא התיעוד המוסמך של האירועים.

איסוף קבוע וקבלות תהליך (0.2)#

משימת מדיה והתחייבות לאירוע ההודעה שלה מתבצעות בעסקה אחת. המשימה מאחסנת את תיאור ההודעה המקורי מ-TL; התצפית החתומה קושרת את ה-SHA-256, החשבון, ומדיניות הגודל שלה. תהליך השחזור מאמת את הקישור לפני ההורדה. הוא לעולם אינו מביא את ההודעה הנוכחית ומחליף בשקט קובץ מצורף חדש יותר. משימות שנקטעו מופעלות מחדש, בעוד שכישלון קבוע נשאר תוצאה מפורשת.

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

נקודות ביקורת אוטומטיות נשמרות באופן מקומי בעת ההפעלה, כל חמש דקות במהלך הניטור (פרמטרים → נקודת ביקורת חתומה כל), וכן בעת כיבוי מסודר. אימות בעת ההפעלה וייצוא משווים את היומן לנקודת הבדיקה המקומית האחרונה שנשמרה. כך ניתן לזהות חזרה לאחור של מסד הנתונים כאשר נקודת הבדיקה נותרת על כנה; מפעיל השולט בשניהם עדיין יכול להחליף את שניהם. שמירה עצמאית וחותמות זמן חיצוניות מהימנות נותרות דרישות נפרדות.

לאחר הפעלה מחדש, מיקום העדכון השמור של Telegram מתחדש (catch_up_from ב- observation.started) ומבוצעת בקשה לעדכונים שהוחמצו. בדיקה חוזרת תקופתית מתעדת את message.recovered עבור הודעות שהוחמצו ואת message.missing_on_recheck כאשר Telegram כבר לא מחזיר הודעה שמורה; האחרון אינו הודעת מחיקה ואינו מציין את שם המחיק או את הזמן.

העתקה ושחזור מחוץ לאתר (S3)#

העותק מחוץ לאתר (ייצוא, כבוי כברירת מחדל) מעלה קטעי יומן, קבצים שנשמרו, נקודות ביקורת עם חותמות הזמן שלהן וייצוא צ'אטים מוגמרים לאחסון תואם S3, מוצפנים באמצעות AES-256-GCM לפני ההעלאה תחת מפתח המאוחסן בכספת סביבת העבודה; שמירת Object Lock חלה כאשר הדלי תומך בכך. ללא המפתח שהורד, לא ניתן לקרוא את העותק. שחזור ואימות באמצעות python -m tgwitness.replica restore --key-file KEY.json --out DIR.

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

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

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

תמונות מצב של ייצוא הזרמה#

ייצוא הזרם משתמש בתמונת מצב קריאה יציבה של SQLite. החלק הראשון שלה עשוי להיות ישן יותר מהיומן החי הנוכחי עם השלמת ההורדה. נקודת ביקורת שנוצרה לאחר אותה תמונת מצב עשויה לדווח נכונה שהארכיון קצר יותר; יש להשוות לנקודת ביקורת בנקודת ההתחלה של הייצוא או לפניה, ולא לנקודת ביקורת מאוחרת שרירותית.

הכנה לאימות תגובות לפי RFC 3161 (0.2)#

מצב הראיות (כבוי כברירת מחדל) שולח רק את ה-SHA-256 של כל נקודת ביקורת חתומה לרשויות RFC 3161 וללוחות השנה של OpenTimestamps המפורטים, דרך נתיב סביבת העבודה ולעולם לא דרך MTProxy. התשובות נשמרות ב-checkpoints/anchors/, מיוצאות ונבדקות על ידי verify.py (--tsa-ca בודק את חתימת ה-TSA; מאמת את הוכחות OpenTimestamps באמצעות ots upgrade ו-ots verify).

הפאנל מכין ארכיון בקשות המכיל את הבתים הקנוניים של הקובץ checkpoint.json, טביעת הודעה ב-SHA-256 ו-nonce אקראי בקובץ timestamp.tsq, סכומי ביקורת והוראות. לא מתבצעת כל בקשת רשת. ההכנה אינה מהווה חותמת זמן מהימנה.

python -m tgwitness.anchor verify קורא ל-OpenSSL פעמיים: פעם אחת ביחס לבייטים של נקודת הבדיקה ופעם אחת ביחס לבקשה המקורית. נדרש במפורש קובץ CA מהימן; תעודות כלולות אינן נחשבות לאמינות באופן אוטומטי. בדיקת הבקשה היא אופציונלית ב-CLI, לכן יש לשמור ולהזין את האופציה --request כדי לבדוק את ה-nonce. התוצאה מציינת אם הבדיקה בוצעה. חתימת נקודת הבדיקה של האספן ויומן הראיות עדיין חייבים להיות מאומתים בנפרד באמצעות טביעת האצבע המהימנה של האספן.

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