مستندسازی / 08
ببینید مدرک چگونه کار میکند
یک پیام میتواند تغییر کند. ثبت آنچه مشاهده کردهاید باید قابل بررسی باقی بماند.
در ادامه دو آزمایش کوچک را بررسی کنید. این آزمایشها از پیامهای ساختگی استفاده میکنند، در مرورگر شما باقی میمانند و هرگز به تلگرام متصل نمیشوند.
یک پیام، سه مشاهده
وقتی تلگرام یک پیام جدید، یک ویرایش و یک اطلاعیه حذف را ارسال میکند، ابزار جمعآوری سه مشاهدهٔ جداگانه را اضافه میکند. ویرایش، رکورد اول را جایگزین نمیکند. اطلاعیه حذف نیز آن را پاک نمیکند.
پیام از نمای چت ناپدید شده است.
- 01✓
message.newساعت ۱۰:۰۰ ملاقات کنید
- 02✓
message.editedساعت ۱۱:۰۰ ملاقات کنید
- 03✓
message.deletedاطلاعیه حذف برای #۴۲
تمام سه مشاهده دریافتشده در دفترچه شواهد باقی میمانند.
یک اطلاعیهٔ حذف نه زمان حذف قابلاعتماد را ارائه میدهد و نه شخص حذفکنندهٔ پیام را. ناشناخته نگهداشتن این مقادیر تمایز بین مشاهده و حدس را حفظ میکند.
یک رکورد را تغییر دهید. هش را دنبال کنید.
هر رکورد حاوی هش رکورد قبلی است. هش خود رکورد، فیلدهای رویداد از جمله آن لینک را پوشش میدهد. یک نقطهٔ کنترل خارجی، طول مشخصی از مجله و هش سرآغاز آن را تثبیت میکند.
h₁ = SHA-256(e₁)پیوندها به ۶۴ صفرh₂ = SHA-256(e₂)شامل h₁h₃ = SHA-256(e₃)شامل h₂h₃این مرز ثابت را با دفترچهٔ ارائهشده مقایسه کنید.تغییر یک رویداد، هَش آن را تغییر میدهد. بازسازی زنجیره، سر آن را تغییر میدهد. حذف انتها، آن را کوتاهتر از نقطهٔ کنترل باقیمانده میکند.
رکورد ۲ و هشهای کامل را بررسی کنید.
این دقیقاً همان JSON با هش UTF-8 است که در این مثال آمده است. مقادیر فرضی هستند؛ نه فیلد و سریالسازی با فرمت دفترچه شواهد مطابقت دارد.
- هَش دوم رکورد ذخیره شده
- هاش رکورد ۲ مجدداً محاسبه شد
قوانین واقعی، در چند خط
hi = hex(SHA-256(C(ei)))
σi = Ed25519.Sign(sk, unhex(hi))
C نُه فیلد رویداد را بهعنوان JSON با کدگذاری UTF-8 سریالی میکند: کلیدهای مرتبشده، بدون فضای خالی اضافی، بدون فرار ASCII و بدون NaN/infinity. previous_hash رویداد برابر hi−1 است. h0 نمایشدادهشده به معنای ۶۴ کاراکتر صفر است؛ امضاها ۳۲ بایت خام هش را پوشش میدهند.
نه فیلد عبارتند از seq، observed_at، source_at، kind، chat_id، message_id، actor_id، payload و previous_hash. این رمزگذاری JSON مستندشده TgWitness است؛ خود هش و امضا فیلدهای ورودی هش نیستند.
hexport[Ncheckpoint] = Hcheckpoint
امضای نقطهٔ کنترل را زیر کلید جمعآورندهٔ سنجاقشده تأیید کنید، سپس مرز آن را با دفترچهٔ تأییدشده مقایسه کنید. خروجی بعدی ممکن است رکوردهای بیشتری داشته باشد؛ اما همچنان باید با نقطهٔ کنترل قبلی مطابقت داشته باشد.
سه سؤال، سه بررسی متفاوت
هشها و امضاها را با یک کلید قابل اعتماد جداگانه تأیید کنید.
۰۲ / تداومچه چیزی قبلاً نگهداری شده بود؟مقایسهٔ یک خروجی امضاشده با نقاط کنترلی نگهداریشده توسط یک شاهد جداگانه.
۰۳ / تحویلآیا این رویدادهای آزمایشی دریافت شدند؟همگامسازی اقدامات کنترلشده ارسال، ویرایش و حذف با دفترچهٔ هر حساب کاربری.
یک زنجیره هش تطبیقیافته به یک پرسش یکپارچگی پاسخ میدهد. این زنجیره تحویل کامل تلگرام، صحت یک پیام یا زمان مشاهده مورد اعتماد مستقل را اثبات نمیکند.
تحقیقات کل حساب را از مرحلهٔ بهدستآوردن تا بستهٔ پرونده دنبال کنید.