ساختهای بازتولیدپذیر برای برنامههای VPN: تطابق چه چیزی را اثبات میکند
بازسازی منطبق، یک فایل دودویی توزیعشده را به کد منبع و ابزارهای اعلامشده پیوند میدهد. این کار چیزی درباره سرویس VPN پشت آن فایل یا گزارشهای آن نمیگوید.
بازتولیدپذیری ویژگی زنجیره تأمین است: همان ورودیهای اعلامشده باید همان مصنوع را تولید کنند. برای یک کلاینت VPN، این گزاره نصبکنندهای را که دانلود کردهاید به کد منبع و زنجیره ابزاری پیوند میدهد که هر کسی میتواند دوباره بسازد. درباره سرویسی که کلاینت به آن وصل میشود چیزی نمیگوید.
پس پرسش سودمند باریک و پاسخپذیر است. آیا پروژه رویهای منتشر میکند، و آیا مصنوع مشخص شما با آن مطابقت دارد؟
کجا ساخت دیگر قطعی نیست
کامپایلرها مُهرهای زمانی، مسیرهای مطلق و نام میزبانهای ساخت را جاسازی میکنند، مگر اینکه از آنها خواسته شود چنین نکنند. آرشیوها ترتیب فایلها و زمانهای تغییر را ثبت میکنند، پیونددهندهها خروجی خود را با نسخه زنجیره ابزار تغییر میدهند، و فشردهسازی موازی میتواند بلوکها را بازآرایی کند. هر یک از اینها باعث میشود دو ساخت از کد منبع یکسان در بایتها متفاوت شوند بیآنکه چیزی شوم رخ دهد. قطعیت در ساخت مهندسی میشود و هرگز بهطور پیشفرض ارث نمیرسد.
پروژهای که ادعای بازتولیدپذیری دارد باید عادیسازیای را که اعمال میکند نام ببرد: مُهرهای زمانی ثابت، مسیرهای نگاشتشده، ورودیهای آرشیو مرتبشده، نسخههای تثبیتشده کامپایلر و وابستگیها. بدون این فهرست، ناسازگاری قابل تفسیر نیست، زیرا دامنه تغییرات مشروع تعریفنشده است.
ورودیهای اعلامشده نیز باید کامل باشند. نشانی مخزن بدون برچسب یک بازبینی نیست، فایل قفل بدون هش یک مجموعه وابستگی نیست، و اسکریپت ساختی که ابزاری را در زمان اجرا دانلود میکند ورودیای دارد که هیچکس نمیتواند تثبیت کند. هر شکاف بعداً به تفاوتی تبدیل میشود. پیش از مقایسه هر چیز، فهرست را کامل کنید، زیرا فهرست ناقص نمیتواند به شکلی شکست بخورد که معنایی داشته باشد.
| Input | How it drifts | What pins it |
|---|---|---|
| Source | Branch moves after release | Commit hash in the build metadata |
| Toolchain | Compiler patch level differs | Container image digest |
| Packaging | Archive order and mtimes vary | Normalised archive settings |
مقایسه در واقع چه چیزی را بررسی میکند
طرفی مستقل در محیط اعلامشده دوباره میسازد و خروجی را با مصنوع منتشرشده مقایسه میکند. یکسان بودن بیتبهبیت شکل قوی است؛ یک گام عادیسازی مستند، که در آن تفاوت ثبتشده معکوس میشود و نتایج سپس مطابقت مییابند، شکل ضعیفتر اما همچنان سودمند است.
مقایسه درباره فایل دودویی است. امضا به پرسشی دیگر پاسخ میدهد: یک انتشار را به کلید و کلید را به هویت پیوند میدهد، و پروژه میتواند امضاهای معتبری روی مصنوعاتی داشته باشد که هیچکس دوباره نساخته است. دو بررسی روی هم جمع میشوند نه اینکه جای یکدیگر را بگیرند.
sha256sum wireguard-installer.msi gpg --verify wireguard-installer.msi.sig wireguard-installer.msi
پیش از نصب هر دو را اجرا کنید و هش را با هشی که برای همان انتشار و سکو منتشر شده مقایسه کنید. هشی که با صفحه فروشنده مطابقت دارد اثبات میکند دانلود سالم رسیده است؛ فایل دودویی بازسازیشدهای که با هش منتشرشده فروشنده مطابقت دارد چیزی قویتر درباره نحوه ساخت آن اثبات میکند.
چرا ناسازگاری اثبات دستکاری نیست
بیشتر ناسازگاریها از ورودیای میآیند که هیچکس آن را کنترل نکرده است. یک انتشار وصله متفاوت از کامپایلر، مسیر ساختی که به نمادهای اشکالزدایی نشت کرده، یک بومیسازی که ترتیب مرتبسازی را تغییر داده، یا گامی از بستهبندی که پس از مقایسه اعمال شده، همه هشی متفاوت از کار صادقانه تولید میکنند.
به همین دلیل ناسازگاری باید در برابر رویه مستند خوانده شود پیش از آنکه به داستان تبدیل شود. اگر رویه همه چیز را تثبیت کند و تفاوت توضیحنشده بماند، این یافتهای واقعی است که ارزش طرح با پروژه را دارد. اگر رویه درباره بستهبندی ساکت باشد، تفاوت ممکن است کاملاً مورد انتظار باشد.
تقارن هم اینجا اهمیت دارد: تطابق اثبات نمیکند که کد منبع خالی از نقص است، بلکه فقط نشان میدهد که فایل دودویی با آن مطابقت دارد. کد خوب ممیزیشده و کد بازتولیدپذیر ویژگیهای متفاوتی هستند، و یک پروژه میتواند یکی را بدون دیگری داشته باشد.
این ادعا درباره سرویس پشت برنامه چه میگوید
کلاینت برنامهای روی دستگاه شماست؛ سرویس اما سرورها، سامانههای حساب و سیاستهای نگهداری در جایی دیگر است. بازتولیدپذیری اولی را محدود میکند و درباره دومی چیزی نمیگوید، هر قدر هم که نصبکننده با دقت بررسی شود.
پیکربندی نقطه پایانی نیز میتواند پس از نصب تغییر کند، از طریق تنظیمات از راه دور یا نمایهای که ارائهدهنده کنترل میکند. این تغییرات از شبکه میرسند و تحت پوشش هیچ هشی که پیش از اتصال محاسبه کردهاید نیستند.
ادعا را در دامنه واقعیاش بخوانید، سپس پرسش مجاور را جداگانه بررسی کنید: ارائهدهنده چه چیزی ثبت میکند، و تحت کدام صلاحیت به درخواستها پاسخ میدهد. یک فایل دودویی تأییدشده و یک سرویس تأییدنشده میتوانند همزمان وجود داشته باشند، و این دقیقاً همان حالتی است که بررسی زنجیره تأمین برای آشکار کردن آن طراحی شده است، نه برای اصلاح آن.