رفتن به محتوای اصلی
بازگشت به وبلاگ

داده و اتصال فنی

اثبات حضور Merkle؛ یک برگ را با ریشهٔ مورداعتماد بسنجیم

اثبات حضور Merkle را روی پنج برگ بسازید؛ verifier جدا،نه تغییرِ مردود،proof تک‌برگی و۴۵کنترلِ مستقل با کد اجرا می‌شوند.

اثباتِ حضورِ Merkle اجازه می‌دهد با خودِ یک برگ و چند هشِ همسایه،آن را نسبت به یک ریشهٔ معلوم بررسی کنیم. این اثبات،همهٔ فایل‌ها را به verifier نمی‌دهد؛ اما ریشه باید از قبل قابل اعتماد باشد. ریشه‌ای که همان فرستندهٔ نامطمئن همراه داده ساخته،به‌تنهایی هویت ناشر یا کیفیت محتوا را ثابت نمی‌کند.

درختِ پنج‌برگی با شکلِ مشخص

پنج بایت‌رشتهٔ اصیل alpha،beta،gamma،delta وepsilon داریم. قراردادِ این تمرین از بخش Merkle در RFC9162 گرفته شده است: هشِ برگ،SHA-256 روی بایت صفر و سپس داده است؛ هشِ گره،SHA-256 روی بایت یک و سپس هشِ چپ و راست. این دو پیشوند،دامنهٔ برگ و گره را از هم جدا می‌کنند.

برای n بزرگ‌تر از۱،لیست با بزرگ‌ترین توانِ ۲ که از n کوچک‌تر است شکسته می‌شود. در پنج برگ،چهار برگِ اول سمت چپ و پنجم سمت راست‌اند. برگِ فرد را خودسرانه کپی نمی‌کنیم؛ برخی قراردادهای دیگر شکل متفاوت دارند و proofهایشان را نباید بی‌خبر جابه‌جا کرد.

برای یک برگ،چه چیزهایی لازم است؟

برای alpha در اندیس۰،سه هشِ همسایه لازم داریم: هشِ beta،هشِ گرهِ gamma وdelta،و هشِ epsilon. با ترکیبِ درست از پایین به بالا،هشِ چهار برگِ اول و سپس ریشهٔ پنج‌برگی ساخته می‌شود. برای epsilon در اندیس۴،فقط هشِ زیر‌درختِ چهار برگِ اول لازم است.

generator همهٔ داده‌های این fixture را دارد و path را می‌سازد؛ verifier تابعی جداست و فقط payload،اندیس،اندازهٔ درخت،path وریشهٔ مورداعتماد را می‌گیرد. پنج proof با لیستِ کاملِ هش‌هایِ واقعاً محاسبه‌شده در JSON هستند؛ هیچ گواهی TLS یا دادهٔ شخصی خوانده نمی‌شود.

اندیس و اندازه جزئیات تزئینی نیستند

verifier با اندیس و اندازه تشخیص می‌دهد هر هش از چپ یا راست ترکیب شود و چند مرحله لازم است. در هر گام،هشِ قبلی با همسایه و پیشوندِ گره ترکیب می‌شود؛ در پایان باید هم مسیر به ریشه رسیده باشد و هم هشِ حاصل با ریشهٔ مرجع برابر باشد. مقایسهٔ تنها آخرین رشته،بدون کنترلِ تمام مسیر کافی نیست.

درختِ تک‌برگی،proof خالی دارد و همان برگ باید ریشه را بسازد. اندیسِ خارج از اندازه،pathِ اضافی یا ناقص و هشِ همسایهٔ نامعتبر،پاسخِ معتبر نمی‌گیرند. اندازهٔ پشتیبانی‌شده در wrapperِ verifier تا۱۶برگ است؛ این سقفِ آموزشی را حدِ ذاتیِ درخت نمی‌نامیم.

چه چیزهایی را عمداً خراب کردیم؟

در مثالِ پنج‌برگی،نه تغییر جدا واقعاً اجرا می‌شود: تغییر دادهٔ alpha،اندیسِ متفاوت با جهتِ ناسازگار،اندیس بیرون،اندازهٔ چهار به‌جای پنج،حذفِ همسایه،افزودنِ همسایه،معکوس‌کردنِ path،تعویض یک هش و ریشهٔ اشتباه. هر نه مورد در همین fixture رد می‌شوند.

آزمونِ اندازه،ساختارِ واقعاً متفاوتِ همین مثال را انتخاب می‌کند؛ ادعا نمی‌کنیم تغییرِ دلخواهِ عددِ اندازه برای هر proof ممکن همیشه از نظر ساختار همان اثر را دارد. برگ،ترتیب،اندیس و قراردادِ شکل باید همگی با مرجع هماهنگ باشند.

کنترلِ مستقلی برای خودِ ریشه

برای اندازه‌های۱تا۹،ریشهٔ تابعِ بازگشتی با یک سازندهٔ پشته‌ایِ مستقل مقایسه می‌شود. سپس همهٔ۴۵برگِ این نه درخت،proof تولیدشده را به verifier مستقل می‌دهند و قبول می‌شوند. این شمار،آزمایشِ محدودِ کدِ اصیل است؛ گواهی امنیتِ یک سرویس یا آزمونِ انطباقِ کاملِ CT نیست.

کد هیچ امضای دیجیتال،اعتبارِ گواهی،append-only consistency یا کیفیتِ برگ را بررسی نمی‌کند. اثباتِ حضور یعنی همین داده تحتِ همین قرارداد در درختِ دارای ریشهٔ مرجع قرار دارد. اعتماد به مرجع و درست‌بودنِ معنای داده،پرسش‌هایِ جدا باقی می‌مانند.

فرق با هشِ یک فایل و نمای JSON

مانفیستِ فایل‌های صوتی اقلامِ حاضر و گمشده را با مرجع می‌سنجد؛ هشِ نمای قراردادی JSON دربارهٔ تعریفِ بایت‌های برابر است. اینجا یک path کوتاه،حضورِ برگ را نسبت به ریشه بررسی می‌کند. ادامه در مبانی هوش مصنوعی؛ وجودِ امضای فایل یا Merkle در محصولات اپرا از این آموزش نتیجه نمی‌شود.

فایل تمرین و منبع

کد مستقلِ تمرین و کنترل‌ها؛ Python · ورودی‌ها و تمام خروجی واقعیِ همین تمرین؛ JSON

منابع در 2026-11-04 خوانده شدند؛ این تاریخ، تاریخ انتشار منبع نیست. مثال‌ها و فایل‌های این راهنما آموزشی و ساختهٔ تحریریه‌اند.

برای این نیاز، کدام خدمت مناسب‌تر است؟

تماس و منشی، چت سایت و تحلیل مکالمه سه مسیر متفاوت‌اند. ابتدا خدمت متناسب نیازتان را انتخاب کنید.

انتخاب میان سه خدمتراهنمای شروع با تیم اپرا

برآورد هزینه