ডকুমেন্টেশন / 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₃এই স্থির সীমাটি সরবরাহিত জার্নালের সাথে তুলনা করুন।ইভেন্ট পরিবর্তন করলে তার হ্যাশ পরিবর্তিত হয়। চেইন পুনর্নির্মাণ করলে এর হেড পরিবর্তিত হয়। টেইল অপসারণ করলে এটি সংরক্ষিত চেকপয়েন্টের তুলনায় ছোট হয়ে যায়।
রেকর্ড 2 এবং সম্পূর্ণ হ্যাশগুলো পরিদর্শন করুন।
এই উদাহরণে ব্যবহৃত JSONটি সঠিক UTF-8-এ হ্যাশ করা হয়েছে। মানগুলো কাল্পনিক; নয়টি ক্ষেত্র এবং সিরিয়ালাইজেশন জার্নাল ফরম্যাটের সাথে মেলে।
- সংরক্ষিত রেকর্ড 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
পিন করা কালেক্টর কী-এর অধীনে চেকপয়েন্ট স্বাক্ষর যাচাই করুন, তারপর যাচাইকৃত জার্নালের সীমানার সাথে এর মিল পরীক্ষা করুন। পরবর্তী রপ্তানিতে আরও রেকর্ড থাকতে পারে; তবুও এটি পূর্ববর্তী চেকপয়েন্টে মিল থাকতে হবে।
তিনটি প্রশ্ন, তিনটি ভিন্ন পরীক্ষা
হ্যাশ এবং স্বাক্ষরগুলো একটি পৃথকভাবে বিশ্বাসযোগ্য কী-এর বিরুদ্ধে যাচাই করুন।
০২ / ধারাবাহিকতাআগে কী রাখা হয়েছিল?একটি স্বাক্ষরিত রপ্তানিকে একটি পৃথক সাক্ষী দ্বারা সংরক্ষিত চেকপয়েন্টগুলোর সাথে তুলনা করুন।
০৩ / ডেলিভারিএই পরীক্ষা ইভেন্টগুলো কি এসেছে?প্রতিটি অ্যাকাউন্টের জার্নালের বিরুদ্ধে পাঠানো, সম্পাদনা এবং মুছে ফেলার ক্রিয়াগুলো মিলিয়ে নিয়ন্ত্রণ করুন।
একটি মিলিত হ্যাশ চেইন অখণ্ডতার একটি প্রশ্নের উত্তর দেয়। এটি সম্পূর্ণ টেলিগ্রাম ডেলিভারি, বার্তার সত্যতা বা স্বতন্ত্রভাবে বিশ্বাসযোগ্য পর্যবেক্ষণ সময় প্রতিষ্ঠা করে না।
অধিগ্রহণের পর থেকে মামলা প্যাকেজ পর্যন্ত সম্পূর্ণ হিসাব তদন্ত অনুসরণ করুন।