شبکه‌های خصوصی مجازی معمولاً در مدیریت وضعیت‌های پیچیده ارتباطی با چالش‌های فنی متعددی مواجه می‌شوند. پروتکل‌های سنتی مانند IPsec با IKEv2 یا OpenVPN مبتنی بر TLS نیازمند نگهداری صدها متغیر وابسته، دیمن‌های مجزای پایش اتصال، رشته‌های مذاکره مجدد و پارامترهای پویا هستند. هنگام بروز اختلالات موقت در شبکه‌های سلولی یا تغییر دکل‌های مخابراتی، این ماشین‌های حالت سنگین متوقف شده و باعث افزایش محسوس تأخیر، انباشت بافر و قطعی سشن‌های کاربری می‌شوند.

پروتکل WireGuard رویکرد مهندسی کاملاً نوینی در پیش گرفته است. این پروتکل که توسط جیسون دوننفلد طراحی شده، یک معماری تایمر قطعی و بدون حالت را مستقیماً در فضای هسته سیستم‌عامل پیاده‌سازی می‌کند. با اتصال امنیت به مجموعه‌ای فشرده از تایمرهای ریاضی و چارچوب رمزنگاری Noise، وایرگارد چرخش روان کلیدها، رازداری رو به جلو کامل (PFS) و پایداری در برابر تایم‌اوت‌های سخت‌گیرانه Carrier-Grade NAT را بدون نیاز به حفظ سشن‌های لایه انتقال فراهم می‌سازد.

معماری ماشین حالت قطعی تایمرها در وایرگارد

نرم‌افزارهای سنتی VPN ارتباط را به عنوان یک گفتگوی پیوسته با وضعیت‌های باز، برقرار و بسته در نظر می‌گیرند. در نقطه مقابل، WireGuard تعامل با هر گره را از طریق جدول مسیریابی کلید رمزنگاری (cryptokey routing) بدون حالت مدیریت می‌کند. در این ساختار هیچ ماشین حالت سنتی برای انتقال داده‌ها وجود ندارد. در عوض، رابط شبکه برای هر نقطه پایانی دقیقاً چهار شیء رمزنگاری را ردیابی می‌کند: جفت‌کلید سشن فعلی، جفت‌کلید سشن قبلی، جفت‌کلید بعدی در حال مذاکره، و یک شیء دست‌تصافح فعال.

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

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

چرخه بازتولید کلید: REKEY_AFTER_TIME و رازداری رو به جلو کامل

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

WireGuard رازداری رو به جلو کامل را از طریق یک چرخه منظم و خودکار بازتولید کلید تضمین می‌کند. تایمر عملیاتی اصلی REKEY_AFTER_TIME است که دقیقاً روی ۱۲۰ ثانیه تنظیم شده است. هنگامی که یک نقطه پایانی داده‌ها را روی جفت‌کلیدی ارسال می‌کند که ۱۲۰ ثانیه از عمر آن گذشته، هسته سیستم‌عامل به صورت خودکار یک دست‌تصافح یک‌طرفه Noise_IK 1-RTT جدید را آغاز می‌کند. در طول این مدت، بسته‌های داده کاربران بدون کوچک‌ترین وقفه از طریق کلید قبلی ارسال می‌شوند تا تبادل کلید جدید در پس‌زمینه کامل شود.

برای جلوگیری از باقی ماندن کلیدهای قدیمی، WireGuard این سازوکار را با تایمر REJECT_AFTER_TIME تنظیم‌شده روی ۱۸۰ ثانیه همراه کرده است. اگر عمر یک جفت‌کلید به ۱۸۰ ثانیه برسد، هسته بلافاصله آن را باطل می‌کند. هر بسته‌ای که پس از آن با شناسه منقضی دریافت شود، بی‌درنگ دور ریخته می‌شود. این پنجره همپوشانی ۶۰ ثانیه‌ای تضمین می‌کند که جابه‌جایی طبیعی بسته‌ها در شبکه اختلالی در ارتباط کاربر ایجاد نکند، در حالی که سقف نهایی عمر کلیدها به طور قطعی حفظ می‌شود.

محافظت در برابر سرریز شمارنده: REKEY_AFTER_MESSAGES و REJECT_AFTER_MESSAGES

پروتکل WireGuard از ساختار رمزنگاری احراز هویت‌شده ChaCha20-Poly1305 بهره می‌برد که نیازمند یک شمارنده ۶۴ بیتی یکتا (nonce) برای هر بسته ارسالی است. تکرار شمارنده تحت یک کلید متقارن واحد، اعتبار برچسب احراز هویت Poly1305 را از بین برده و امکان بازیابی متن اصلی را فراهم می‌آورد؛ بنابراین کنترل شمارنده‌ها با نهایت دقت انجام می‌شود.

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

پارامتر عملیاتی مقدار آستانه دقیق اقدام هسته سیستم‌عامل و هدف رمزنگاری
REKEY_AFTER_MESSAGES $2^{64} - 2^{13} - 1$ آغاز دست‌تصافح پس‌زمینه Noise برای استقرار کلید جدید پیش از اتمام شمارنده‌ها
REJECT_AFTER_MESSAGES $2^{64} - 1$ توقف قطعی ارسال؛ متوقف کردن ارسال داده تحت کلید فعلی جهت جلوگیری از سرریز عدد ۶۴ بیتی
REKEY_AFTER_TIME ۱۲۰ ثانیه شروع چرخه تمدید کلید بر اساس زمان در حین تبادل داده‌های فعال
REJECT_AFTER_TIME ۱۸۰ ثانیه زمان انقضای قطعی؛ حذف کامل کلیدهای منسوخ از حافظه موقت هسته

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

عقب‌نشینی دست‌تصافح و سکوت غیرفعال در برابر اسکن پورت‌ها

یکی از پایه‌ای‌ترین اصول امنیتی WireGuard، سکوت مطلق غیرفعال است. سرورهای سنتی VPN حضور خود را در شبکه با پاسخ دادن به درخواست‌های غیرمجاز از طریق خطاهای رمزنگاری، بسته‌های ریست یا پیام‌های ICMP نشان می‌دهند. ابزارهای پویش شبکه مانند ZMap یا Shodan دقیقاً از این پاسخ‌های تشخیصی برای شناسایی زیرساخت‌های سرور بهره می‌گیرند.

رابط WireGuard تا زمانی که نقطه پایانی مقابل مالکیت کلید عمومی معتبر را از طریق پیام احراز هویت شده Noise اثبات نکند، حتی یک بایت داده ارسال نمی‌کند. بسته‌های حاوی کدهای احراز هویت نادرست بدون مصرف پردازش در هسته دور ریخته می‌شوند. برای یک ناظر خارجی، یک سرور فعال وایرگارد کاملاً مانند یک سیستم خاموش و غیرقابل دسترسی به نظر می‌رسد.

هنگام ارسال درخواست به نقطه‌ای که موقتاً در دسترس نیست، WireGuard با استفاده از تایمر REKEY_TIMEOUT تنظیم‌شده روی ۵ ثانیه از ارسال بیش از حد بسته‌ها جلوگیری می‌کند. در صورت عدم دریافت پاسخ در مدت ۵ ثانیه، سیستم با عقب‌نشینی نمایی و انحراف تصادفی (jitter) تلاش مجدد را انجام می‌دهد که سقف آن با REKEY_ATTEMPT_TIME روی ۹۰ ثانیه محدود شده است. این سازوکار مصرف باتری گوشی‌ها را کاهش داده و الگوهای تکراری قابل تشخیص توسط سامانه‌های بازرسی ترافیک را حذف می‌کند.

قابلیت PersistentKeepalive و نگه‌داشت ارتباط در شبکه‌های CGNAT

تجهیزات Carrier-Grade NAT (CGNAT) و دیواره‌های آتش خانگی، نگاشت‌های UDP را در جدول‌های موقت داخلی ذخیره می‌کنند. هنگامی که یک کلاینت بسته‌ای به سمت سرور خارجی می‌فرستد، دروازه میانی یک آدرس و پورت عمومی را به همراه یک تایمر انقضا اختصاص می‌دهد.

بر اساس توصیه استاندارد RFC 4787، زمان حفظ نگاشت UDP در NAT باید حداقل ۱۲۰ ثانیه باشد. با این حال در عمل، اپراتورهای شبکه تلفن همراه برای صرفه‌جویی در منابع، نگاشت‌های غیرفعال را پس از ۳۰ ثانیه می‌بندند. اگر کلاینت ارسال داده را متوقف کند، مسیر برگشت بسته می‌شود و بسته‌های دریافتی از سرور به مقصد نرسیده و تونل معلق می‌ماند.

WireGuard با استفاده از گزینه PersistentKeepalive این مشکل را برطرف می‌کند. با تنظیم این مقدار روی ۲۵ ثانیه، سیستم زمان سپری‌شده از آخرین ارسال را رصد می‌کند:

  1. تشخیص ترافیک: اگر داده‌های واقعی در حال عبور از تونل باشند، تایمر بازنشانی شده و هیچ بسته اضافه‌ای ارسال نمی‌شود.
  2. ارسال بسته خالی: در صورت عدم ارسال داده به مدت ۲۵ ثانیه، وایرگارد یک بسته داده رمزنگاری‌شده خالی ۳۲ بایتی ارسال می‌کند.
  3. تمدید نگاشت NAT: دروازه شبکه اپراتور با مشاهده این بسته، زمان نگاشت جدول را تمدید کرده و مسیر ورودی را باز نگه می‌دارد.
  4. بهینه‌سازی مصرف داده: این بسته ۳۲ بایتی کمتر از یک کیلوبایت در دقیقه مصرف می‌کند و بدون آسیب به باتری، اتصال پایدار را حفظ می‌نماید.

پیاده‌سازی معماری در هسته پروتکل VPNRice RiceGuard

در معماری زیرساختی VPNRice، ما اصول اساسی تایمرهای WireGuard را مستقیماً در موتور اختصاصی RiceGuard در سطح هسته ادغام کرده‌ایم. در حالی که پیاده‌سازی‌های عادی از فواصل زمانی ثابت استفاده می‌کنند، RiceGuard از پایش هوشمند شرایط شبکه بهره می‌برد.

موتور RiceGuard وضعیت مصرف توان امواج رادیویی و مسیرهای شبکه محلی را به طور مداوم تحلیل می‌کند. در شبکه‌های پرسرعت خانگی با نگاشت‌های پایدار NAT، فرکانس ارسال بسته‌های پایش کاهش می‌یابد تا مصرف پردازنده به حداقل برسد؛ در مقابل هنگام جابه‌جایی میان دکل‌های 5G یا اتصال به شبکه‌های متغیر، دقت تایمرها به صورت پویا تنظیم می‌شود تا از قطعی داده‌ها جلوگیری گردد.

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