दस्तावेज़ीकरण / 08
देखें कि सबूत कैसे काम करता है
एक संदेश बदल सकता है। आपने जो देखा, उसका रिकॉर्ड जाँच योग्य रहना चाहिए।
नीचे दो छोटे प्रयोग देखें। ये काल्पनिक संदेशों का उपयोग करते हैं, आपके ब्राउज़र में ही रहते हैं और कभी भी टेलीग्राम से कनेक्ट नहीं होते।
एक संदेश, तीन अवलोकन
जब टेलीग्राम कोई नया संदेश, संपादन या हटाने की सूचना भेजता है, तो कलेक्टर तीन अलग-अलग अवलोकन जोड़ता है। संपादन पहले रिकॉर्ड को प्रतिस्थापित नहीं करता। हटाने की सूचना इसे मिटा नहीं देती।
संदेश चैट दृश्य से गायब हो गया है।
- 01✓
message.new10:00 बजे मिलें
- 02✓
message.edited11:00 बजे मिलें
- 03✓
message.deleted#42 के लिए हटाने की सूचना
तीनों प्राप्त अवलोकन जर्नल में बने रहते हैं।
एक हटाने की सूचना न तो हटाने का विश्वसनीय समय बताती है और न ही संदेश हटाने वाले व्यक्ति की पहचान। इन मानों को अज्ञात रखना एक अवलोकन और एक अनुमान के बीच के अंतर को बनाए रखता है।
रिकॉर्ड बदलें। हैश का अनुसरण करें।
प्रत्येक रिकॉर्ड में पिछले रिकॉर्ड का हैश शामिल होता है। इसका अपना हैश घटना क्षेत्रों को कवर करता है, जिसमें वह लिंक भी शामिल है। एक बाहरी रूप से बनाए रखा चेकपॉइंट एक विशिष्ट जर्नल लंबाई और हेड हैश को पिन करता है।
h₁ = SHA-256(e₁)64 शून्यों के लिंकh₂ = SHA-256(e₂)h₁ शामिल हैh₃ = SHA-256(e₃)h₂ शामिल हैh₃इस निश्चित सीमा की तुलना प्रदान किए गए जर्नल से करें।किसी घटना को बदलने से उसका हैश बदल जाता है। श्रृंखला का पुनर्निर्माण करने से इसका सिर बदल जाता है। पूंछ हटाने से यह बचे हुए चेकपॉइंट से छोटा हो जाता है।
रिकॉर्ड 2 और पूर्ण हैशों का निरीक्षण करें
यह इस उदाहरण में हैश किया गया बिल्कुल वही UTF-8 JSON है। मान काल्पनिक हैं; नौ फ़ील्ड और सीरियलाइज़ेशन जर्नल प्रारूप से मेल खाते हैं।
- सहेजा गया रिकॉर्ड 2 हैश
- रिकॉर्ड 2 हैश की पुनर्गणना
वास्तविक नियम, कुछ पंक्तियों में
hi = hex(SHA-256(C(ei)))
σi = Ed25519.Sign(sk, unhex(hi))
C नौ इवेंट फ़ील्ड्स को UTF-8 JSON के रूप में सीरियलाइज़ करता है: क्रमबद्ध कीज़, कोई अतिरिक्त व्हाइटस्पेस नहीं, कोई ASCII एस्केपिंग नहीं और कोई NaN/इन्फिनिटी नहीं। इवेंट का previous_hash hi−1 है। प्रदर्शित h0 का अर्थ 64 शून्य कैरेक्टर्स है; सिग्नेचर 32 कच्चे डाइजेस्ट बाइट्स को कवर करते हैं।
ये नौ फ़ील्ड हैं: seq, observed_at, source_at, kind, chat_id, message_id, actor_id, payload और previous_hash। यह TgWitness का दस्तावेज़ीकृत JSON एन्कोडिंग है; हैश और हस्ताक्षर स्वयं हैश-इनपुट फ़ील्ड नहीं हैं।
hexport[Ncheckpoint] = Hcheckpoint
पिन किए गए कलेक्टर कुंजी के अंतर्गत चेकपॉइंट हस्ताक्षर को सत्यापित करें, फिर इसकी सीमा को सत्यापित जर्नल से तुलना करें। बाद में किया गया एक्सपोर्ट अधिक रिकॉर्ड्स शामिल कर सकता है; फिर भी इसे पहले के चेकपॉइंट पर मेल खाना चाहिए।
तीन प्रश्न, तीन अलग-अलग जाँचें
हैश और हस्ताक्षरों की पुष्टि एक अलग विश्वसनीय कुंजी के खिलाफ करें।
02 / निरंतरतापहले क्या संरक्षित किया गया था?एक हस्ताक्षरित निर्यात की तुलना एक अलग गवाह द्वारा रखे गए चेकपॉइंट्स से करें।
03 / वितरणक्या ये परीक्षण घटनाएँ आईं?प्रत्येक खाते के जर्नल में नियंत्रित भेजने, संपादित करने और हटाने की क्रियाओं का मिलान करें।
एक मेल खाने वाली हैश श्रृंखला अखंडता संबंधी प्रश्न का उत्तर देती है। यह पूर्ण टेलीग्राम डिलीवरी, संदेश की सत्यता या स्वतंत्र रूप से विश्वसनीय अवलोकन समय स्थापित नहीं करती।
प्राप्ति से लेकर केस पैकेज तक पूरे खाते की जांच का अनुसरण करें।