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

هنگامی که یک سرور راه‌اندازی مجدد می‌شود، وضعیت ذخیره‌شده در حافظه موقت آن ناپدید می‌گردد و اتصالات فعال کلاینت‌ها به «اتصالات شبح» یا سرگردان تبدیل می‌شوند. کلاینت همچنان به ارسال بسته‌های داده ادامه می‌دهد، اما سرور به دلیل فقدان کلیدهای نشست، قادر به رمزگشایی یا ارسال فریم بسته شدن نشست CONNECTION_CLOSE نیست. پروتکل QUIC در استاندارد RFC 9000 (بخش ۱۰.۳) برای عبور از این بن‌بست سازوکاری کارآمد به نام «بازنشانی بدون حالت» (Stateless Reset) تعریف کرده است.

چالش از دست رفتن وضعیت ارتباط پس از راه‌اندازی مجدد سرور

در معماری‌های مبتنی بر UDP، حافظه سرور جدول نگاشت میان شناسه اتصال مقصد (DCID) و کلیدهای متقارن رمزگذاری مشتق‌شده از دست‌تکانی TLS 1.3 را نگهداری می‌کند.

با ری‌استارت سرور، این جدول ناپدید می‌شود:

کلاینت (در وضعیت متصل)                             سرور (پس از راه‌اندازی مجدد)
  |                                                               |
  |--- بسته رمزگذاری‌شده 1-RTT (DCID: 0x8a3f...) ----------------->|
  |    کلیدها: [AES-GCM / ChaCha20-Poly1305]                      | (شناسه DCID ناشناخته!)
  |                                                               | (کلیدهای رمزگشایی از دست رفته!)
  |    [توقف: کلاینت منتظر تاییدیه ACK می‌ماند]                  |
  |    [تایمر: ارسال مکرر بسته‌های کاوشگر PTO]                   | (ارسال CONNECTION_CLOSE ناممکن است)
  |                                                               |

بدون یک پیام صریح، کلاینت در وضعیت انتظار طولانی باقی می‌ماند و با ارسال مکرر بسته‌های کاوشگر تا زمان سرآمدن مهلت بی‌باری (بین ۳۰ تا ۱۲۰ ثانیه) متوقف می‌شود. در تونل‌های ارتباطی حساس، این امر به قطعی چند ده ثانیه‌ای ارتباط کاربر می‌انجامد.

ناکارآمدی مکانیزم سنتی TCP RST در ارتباطات امن مبتنی بر UDP

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

بعد طراحی مکانیزم سنتی TCP RST بازنشانی بدون حالت QUIC (RFC 9000)
احراز اصالت فرستنده فاقد احراز اصالت (بسیار آسیب‌پذیر) نشانه رمزنگاری‌شده اختصاصی ۱۶ بایتی
مقاومت در برابر جعل ارسال بسته جعلی اتصال را قطع می‌کند غیرقابل حدس زدن برای مهاجمان بیرونی ($2^{-128}$)
تحلیل و ردیابی ترافیک پرچم متنی آشکار نوع پیام را فاش می‌سازد ظاهری کاملاً مشابه با بسته‌های رمزگذاری‌شده عادی
خطر حملات انعکاسی پتانسیل بالا برای سوءاستفاده ترافیکی ابعاد مقید، اندازه بسته حتماً کوچک‌تر از بسته ورودی
نیاز به نگهداری کلید بدون نیاز به کلید تولید ریاضی از طریق HMAC/HKDF از کلید ثابت سرور

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

معماری و نحوه استخراج ریاضی نشانه‌های بازنشانی بدون حالت

پروتکل QUIC این چالش را با توافق بر سر یک نشانه ۱۶ بایتی موسوم به Stateless Reset Token در حین دست‌تکانی اولیه برطرف می‌کند.

در زمان آغاز اتصال، سرور یک نشانه یکتا برای هر شناسه اتصال تولید کرده و در اختیار کلاینت قرار می‌دهد. این نشانه با استفاده از تابع HMAC بر روی یک کلید محرمانه ریشه‌ای محاسبه می‌شود:

$$\text{ResetToken} = \text{HMAC-SHA256}(K_{server_secret}, \text{ConnectionID})[0..15]$$

از آنجا که $K_{server_secret}$ در حافظه امن ذخیره شده و پس از راه‌اندازی مجدد پایدار می‌ماند، سرور جدید پس از دریافت بسته ناشناس می‌تواند نشانه معتبر را بدون نیاز به اطلاعات ذخیره‌شده کلاینت بلافاصله بازتولید کند.

سرور شناسه DCID را از بسته ورودی استخراج کرده و با اعمال تابع ریاضی، دقیقاً همان ۱۶ بایت مورد انتظار کلاینت را تولید می‌نماید.

ساختار بسته‌ها و عدم امکان شناسایی توسط تجهیزات DPI

یکی از اهداف اصلی در طراحی QUIC، جلوگیری از مسدودسازی و شناسایی الگو توسط تجهیزات بازرسی عمیق بسته‌ها (DPI) است. این تجهیزات نباید قادر به تفکیک بسته‌های بازنشانی از بسته‌های داده معمولی باشند.

بسته بازنشانی بدون حالت دارای پیکربندی ساختاری دقیقی است:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0|1|P|R|R|         بایت‌های تصادفی با آنتروپی بالا              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+               Stateless Reset Token (۱۶ بایت ثابت)             +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1. بایت سرآیند: اولین بایت با مقادیر 01 تنظیم می‌شود تا کاملاً ساختار سرآیند کوتاه 1-RTT را شبیه‌سازی کند.
  2. بدنه تصادفی: به دنبال بایت اول، رشته‌ای از بایت‌های تصادفی با آنتروپی بالا درج می‌شود.
  3. پایان اختصاصی: دقیقاً ۱۶ بایت انتهای بسته شامل نشانه تاییدشده بازنشانی بدون حالت است.

وقتی کلاینت بسته‌ای با سرآیند کوتاه دریافت می‌کند که احراز اصالت AEAD آن ناموفق است، بسته را فوراً دور نمی‌اندازد؛ بلکه ۱۶ بایت پایانی را استخراج کرده و با فهرست نشانه‌های خود در زمان ثابت مقایسه می‌کند. در صورت تطابق، کلاینت از قطع ارتباط آگاه شده و بلافاصله نشست را پایان می‌دهد.

برای تجهیزات نظارتی، این داده‌ها مانند جریان عادی داده‌های غیرقابل رمزگشایی به نظر می‌رسند.

سازوکارهای امنیتی در برابر حملات تقویت ترافیک و حلقه‌های بازتابی

به دلیل ماهیت بدون حالت این پاسخ‌ها، استاندارد RFC 9000 الزامات سخت‌گیرانه‌ای برای جلوگیری از حملات منع سرویس تعیین کرده است:

دریافت بسته محرک (اندازه: S_in)
         |
         v
بررسی اندازه: S_in >= S_min؟
         |--- خیر ---> دور انداختن بسته (جلوگیری از تقویت بسته‌های ریز)
         v
قاعده کاهش اندازه: S_out <= S_in - 1 بایت
         |
         v
ارسال بسته Stateless Reset (اندازه: S_out) ---> غیرممکن شدن حلقه‌های بازتابی
  • قاعده کوچک‌تر بودن بسته: بسته بازنشانی باید حتماً حداقل ۱ بایت کوچک‌تر از بسته محرک دریافتی باشد. اگر دو گره از کار افتاده به یکدیگر بسته‌های هم‌اندازه یا بزرگ‌تر بفرستند، یک حلقه بی‌پایان ارسال شکل می‌گیرد که موجب انسداد کل پهنای باند شبکه می‌شود.
  • حداقل اندازه ورودی: بسته‌های بسیار کوچک (کمتر از ۴۳ بایت) نادیده گرفته می‌شوند تا سرور به عنوان تقویت‌کننده ترافیک در حملات DDoS استفاده نشود.
  • محدودسازی نرخ ارسال: سرور از الگوریتم‌های سطل نشانه برای کنترل نرخ ارسال بسته‌های بازنشانی در ثانیه استفاده می‌کند.

بازیابی آنی مسیرهای ارتباطی در ساختار اختصاصی RiceGuard

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

سامانه VPNRice مکانیزم بهینه‌سازی‌شده‌ای را برای پردازش نشانه‌های بازنشانی در هسته RiceGuard پیاده کرده است:

  • تشخیص اختلال در یک رفت و برگشت: کلاینت به جای انتظار طولانی، نشانه ۱۶ بایتی را در یک چرخه RTT شناسایی می‌کند.
  • بازسازی بدون وقفه تونل: پس از تایید نشانه، ترافیک بلافاصله به یک دست‌تکانی 0-RTT هدایت شده و تونل ارتباطی ظرف کمتر از ۱۵ میلی‌ثانیه بازیابی می‌شود.
  • مقایسه حافظه در زمان ثابت: مقایسه نشانه‌ها با توابع زمان ثابت انجام می‌گیرد تا امکان سوءاستفاده از تحلیل تاخیرهای زمانی مسدود گردد.

پایبندی به استانداردهای RFC 9000 در پروتکل RiceGuard سبب می‌شود که بازنشانی سرورها کمترین اثری بر پیوستگی ارتباط کاربران بر جای نگذارد.

دریافت VPNRice.