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

سند آغاز یک استدلال است، نه نتیجه‌گیری آن.

سند در واقع چه چیزی را مشخص می‌کند

برای WireGuard، توصیف پروتکل یک دست‌دادن Noise IK، مجموعهٔ ثابتی از ابتدایی‌ها، چیدمان پیام‌ها و قالب‌بندی انتقالی را تعریف می‌کند که سپس بسته‌ها را حمل می‌کند. برای IKEv2، سند قابل مقایسه RFC 7296 است که مبادله‌ها، بارهای مفید و مذاکرهٔ پیشنهادها را مشخص می‌کند. در هر دو حالت دامنه دقیق است: پیام‌ها، ماشین حالت و فرض‌هایی که اهداف امنیتی تحت آن‌ها برقرارند.

حالت‌های اختیاری خواندن را پیچیده می‌کنند. ویژگی‌ای که برای یک دست‌دادن برقرار است ممکن است برای استقراری با ترتیب احراز هویت متفاوت یا پیکربندی جایگزین اعمال نشود.

جایی که تضمین‌ها پایان می‌یابند

تحلیل رسمی به پرسشی دربارهٔ یک مدل پاسخ می‌دهد. کار راستی‌آزمایی WireGuard از مدل نمادین در اثبات‌گر Tamarin استفاده می‌کند که می‌تواند نشان دهد طراحی با فرض‌هایش در برابر حملات معینی مقاومت می‌کند؛ اما نشان نمی‌دهد پیاده‌سازی توزیع‌شده‌ای در فضای کاربر هیچ باگ امنیت حافظه ندارد. همین شکاف میان مدل و ماشین است که رخدادهای واقعی در آن زندگی می‌کنند. خواندن یک اثبات به‌عنوان گواهی پیاده‌سازی یک خطای مقوله‌ای است.

محرمانگی پیش‌رو همان مرز را نشان می‌دهد. این ویژگی به نابودی کلیدها آن‌گونه که پروتکل در نظر دارد وابسته است، و آن ویژگی پیاده‌سازی و محیط آن است نه قالب پیام. طراحی‌ای که پاک‌سازی را مقرر می‌کند نمی‌تواند آن را در سکوهایی که حافظه را به دیسک می‌فرستند الزام کند.

وابستگی‌های لایه‌ای شکاف را بیشتر می‌کنند: کتابخانهٔ TLS پشت تونلی مبتنی بر TLS، رابط هسته‌ای که تونل فضای کاربر از آن استفاده می‌کند، و مولد اعداد تصادفی همه بیرون از متن پروتکل قرار دارند.

بایت‌ها را تا درون ساخت دنبال کنید

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

openvpn --version | head -3
wg --version
dpkg -l | grep -E 'openvpn|wireguard|libssl'
ss -lunp | grep -E '1194|51820'
sha256sum ./wireguard-tools_1.0.20210914_amd64.deb

ساخت‌های تکرارپذیر و جمع‌های بازبینی منتشرشده امکان پیوند یک درخت منبع به یک فایل دودویی توزیع‌شده را فراهم می‌کنند. بدون این پیوند، منبع منتشرشده تنها اثبات می‌کند که بازرسی ممکن است، نه اینکه فایل در حال اجرا با آن مطابقت دارد.

پیکربندی به همان گام تعلق دارد. مجموعه‌های رمز، همتاهای مجاز و تنظیمات مسیریابی انتخاب‌های استقرارند، و ساخت منطبقی که با بی‌دقتی پیکربندی شده باشد باز هم تونلی ضعیف تولید می‌کند.

رویه‌های عملیاتی را جدا نگه دارید

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

نتیجه‌گیری دقیق انباشتی است: مشخصات طراحی را توضیح می‌دهد، ساخت و پیکربندی تونل را توضیح می‌دهند، و رویه‌های مستند اپراتور هر چیزی را که تونل هرگز نمی‌بیند توضیح می‌دهند. بگویید کدام‌یک از این‌ها را بررسی کرده‌اید و ادعا درست می‌ماند.

مقالات مرتبط