شبکه های خصوصی مجازی مدرن نیازمند سادگی محاسباتی و مقاومت در برابر تحلیل ترافیک هستند. برای چندین دهه، پروتکل های پیشین نظیر IPsec و OpenVPN به ماشین های حالت مذاکره طولانی، زنجیره های گواهی دیجیتال X.509 و قابلیت انعطاف الگوریتم های رمزنگاری متکی بودند. این پیچیدگی ساختاری سبب نگارش صدها هزار خط کد، افزایش سطح حملات بالقوه و کندی برقراری اتصال به علت رفت و برگشت های متوالی در بستر شبکه می شد.

هنگام طراحی پروتکل WireGuard، طراح آن مذاکره پویا بر سر انتخاب الگوریتم های رمزنگاری را کنار گذاشت. به جای ابداع یک شیوه اثبات نشده، وایرگارد از چارچوب پروتکل Noise بهره گرفت که توسط ترور پرین تدوین شده است. وایرگارد الگوی مشخصی را تحت عنوان Noise_IKpsk2 پیاده سازی کرده است.

این دست دهی در یک رفت و برگشت واحد (1-RTT) انجام می پذیرد، هویت دستگاه را از دید ناظران شبکه پنهان می دارد، رازداری کامل رو به جلو (PFS) را تضمین می کند، در برابر حملات منع سرویس (DoS) مقاوم است و هیچ گونه حافظه ای برای بسته های نامعتبر تخصیص نمی دهد.

+-----------------------------------------------------------------------------+
|                جریان دست دهی تک مرحله ای NOISE_IKPSK2 در وایرگارد           |
|                                                                             |
|  آغازگر (کلاینت)                                       پاسخ دهنده (سرور)    |
|  کلید ایستا: s_i                                       کلید ایستا: s_r      |
|  کلید موقت: e_i                                        کلید موقت: e_r       |
|                                                                             |
|  [ پیام آغازین: آغاز دست دهی (148 بایت) ]                                  |
|  Type(0x01) + Sender Index + e_i + Enc(s_i) + Enc(Timestamp) + MAC1 + MAC2 |
|  --------------------------------------------------->                       |
|                                                     بررسی MAC1 و برچسب زمان |
|                                                     محاسبه کلیدهای مشترک DH  |
|                                                                             |
|  [ پیام دوم: پاسخ سرور (92 بایت) ]                                      |
|  Type(0x02) + Sender Index + Receiver Index + e_r + Enc(Empty) + MAC1 + MAC2|
|  <---------------------------------------------------                       |
|  محاسبه کلیدهای اشتراکی DH و ترکیب کلید پیش فرض PSK                         |
|  اشتقاق کلیدهای رمزگذاری داده ها (Split)                                    |
|                                                                             |
|  ==================== تبادل امن داده ها در شبکه (1-RTT) =================== |
|  Type(0x04) + Receiver Index + شمارنده + Enc(بسته داده)                     |
|  <--------------------------------------------------->                      |
+-----------------------------------------------------------------------------+

مبانی چارچوب پروتکل Noise: دلایل انتخاب الگوی Noise_IKpsk2 در وایرگارد

چارچوب پروتکل Noise ساختاری صریح برای توصیف الگوهای تبادل کلید دیفی-هلمن ارائه می دهد. این چارچوب به جای سر و کار داشتن با جریان های نامشخص داده، پروتکل ها را بر مبنای الگوهای ساختاریافته تعریف می کند. هر الگو مشخص می سازد که کلیدهای عمومی ایستا ($s$)، کلیدهای موقت ($e$) و کلیدهای متقارن پیش اشتراکی ($psk$) چگونه برای محاسبه اسرار مشترک تلفیق گردند.

وایرگارد از الگوی Noise_IKpsk2 با ویژگی های زیر بهره می برد:

  1. ارسال کلید ایستای آغازگر (I): کلاینت کلید عمومی ایستای خود ($s_i$) را در همان پیام نخست ارسال می کند، در حالی که این کلید با استفاده از خروجی محاسبات دیفی-هلمن میان کلید موقت و کلید سرور به صورت رمزنگاری شده منتقل می گردد.
  2. آگاهی پیشین از کلید سرور (K): کلاینت پیش از اتصال، کلید عمومی ایستای سرور ($s_r$) را در اختیار دارد. این موضوع دقیقا با ساختار مسیریابی کلید رمزنگاری همخوانی دارد که در آن کلیدهای عمومی همانند نشانی های شبکه عمل می کنند.
  3. ترکیب کلید پیش اشتراکی در پیام دوم (psk2): یک کلید متقارن 256 بیتی پیش اشتراکی ($PSK$) در پیام دوم به زنجیره کلید افزوده می شود. این فرایند یک لایه امنیتی ترکیبی برای محافظت در برابر رایانش کوانتومی آینده ایجاد می کند.
  4. منحنی Curve25519: تمامی تبادلات نامتقارن بر پایه این منحنی و ضرب اسکالر X25519 انجام می شوند که ضمن ارائه سطح امنیت 128 بیت، در برابر حملات مبتنی بر کانال های جانبی زمانی مصون است.
  5. ترکیب ChaCha20 و Poly1305: رمزنگاری متقارن ترافیک متکی بر الگوریتم ChaCha20 همراه با تایید اعتبار Poly1305 است که روی بلوک های 64 بایتی عمل کرده و برچسب احراز اصالت 128 بیتی تولید می نماید.
  6. تابع درهم سازی BLAKE2s: عملیات درهم سازی، کدهای احراز هویت پیام و توابع اشتقاق کلید HKDF همگی توسط BLAKE2s-256 اجرا می شوند که بازدهی بالایی روی پردازنده های مدرن دارد.

با تثبیت این مجموعه رمزنگاری، امکان حملات تنزل سطح امنیت (downgrade attacks) به طور کامل از بین می رود. هیچ گزینه اضافی برای مذاکره و هیچ کد قدیمی آسیب پذیری در سیستم وجود ندارد.

ماشین حالت رمزنگاری: سطوح HandshakeState و SymmetricState و CipherState

معماری پروتکل Noise مدیریت حالات رمزنگاری را در سه سطح منسجم طبقه بندی می کند:

1. سطح CipherState

این بخش وظیفه رمزگذاری و رمزگشایی متقارن را بر عهده دارد. این سطح یک کلید متقارن 256 بیتی $k$ و یک شمارنده 64 بیتی بدون علامت $n$ را نگهداری می کند. با هر فراخوانی، مقدار شمارنده یک واحد افزایش می یابد تا از تکرار بردار مقدار اولیه جلوگیری شود. در صورت رسیدن شمارنده به سقف مجاز، رمزگذاری متوقف شده و تجدید کلید الزامی می گردد.

2. سطح SymmetricState

این بخش پوشش دهنده سطح پیشین است و دو بافر داخلی را نگهداری می کند:

  • کلید زنجیره ای (Chaining Key): مخزن انباشت تصادفی که با ورود هر کلید جدید حاصل از محاسبات دیفی-هلمن به روز می شود.
  • مقدار درهم سازی دست دهی (Handshake Hash): خلاصه ساز رمزنگاری مستمر که تمامی داده های رد و بدل شده در دست دهی را ثبت می کند.

مقدار این درهم سازی به عنوان داده های وابسته برای تایید اصالت در Poly1305 استفاده می شود تا هرگونه تغییر یا دستکاری بسته ها بلافاصله موجب رد اعتبار پیام گردد.

3. سطح HandshakeState

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

کالبدشکافی پیام های دست دهی 1-RTT: تفکیک ساختار بسته ها و بایت ها

فرایند دست دهی وایرگارد تنها در قالب دو پیام UDP تکمیل می شود: پیام آغاز دست دهی و پیام پاسخ دست دهی.

پیام آغازین: آغاز دست دهی (148 بایت)
+-------------------+--------------------+--------------------------------+
| نوع: 0x01 (4 بایت)| شناسه کلاینت (4 بایت)| کلید موقت e (32 بایت)         |
+-------------------+--------------------+--------------------------------+
| کلید ایستای رمزگذاری شده (48 بایت)      | برچسب زمان رمزگذاری شده (28 بایت) |
+----------------------------------------+--------------------------------+
| فیلد MAC1 سرور (16 بایت)               | فیلد MAC2 کوکی (16 بایت)       |
+----------------------------------------+--------------------------------+

پیام دوم: پاسخ دست دهی (92 بایت)
+-------------------+--------------------+--------------------------------+
| نوع: 0x02 (4 بایت)| شناسه سرور (4 بایت)| شناسه گیرنده (4 بایت)          |
+-------------------+--------------------+--------------------------------+
| کلید موقت سرور e_r (32 بایت)           | داده خالی رمزگذاری شده (16 بایت)|
+----------------------------------------+--------------------------------+
| فیلد MAC1 سرور (16 بایت)               | فیلد MAC2 کوکی (16 بایت)       |
+----------------------------------------+--------------------------------+

گام نخست: پیام آغاز دست دهی (148 بایت)

  1. شناسه و سرآیند (8 بایت): فیلد عددی 0x01 نوع پیام را مشخص می سازد و به دنبال آن یک شناسه تصادفی 32 بیتی برای بازیابی نشست در حافظه قرار دارد.
  2. کلید عمومی موقت (32 بایت): کلاینت یک جفت کلید جدید مبتنی بر Curve25519 تولید کرده و بخش عمومی آن را ارسال می کند.
  3. محاسبه کلید اشتراکی: عملیات ضرب کلید موقت در کلید سرور انجام می شود و کلید میانی متقارن تولید می گردد.
  4. کلید ایستای رمزنگاری شده (48 بایت): کلید عمومی کلاینت همراه با برچسب اصالت 16 بایتی به صورت کاملا رمزگذاری شده منتقل می شود.
  5. محاسبه دیفی-هلمن ایستا: ضرب کلیدهای ایستای طرفین محاسبه شده و به زنجیره امنیتی اضافه می گردد.
  6. برچسب زمان رمزنگاری شده (28 بایت): زمان دقیق به فرمت TAI64N با دقت نانوثانیه رمزگذاری می شود. سرور این برچسب را بررسی کرده و بسته های با زمان نامعتبر را برای دفع حملات تکرار نادیده می گیرد.
  7. فیلدهای اعتبارسنجی MAC (32 بایت): شامل فیلد MAC1 بر مبنای درهم سازی بسته و فیلد MAC2 برای کنترل بار ترافیکی است.

گام دوم: پیام پاسخ سرور (92 بایت)

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

  1. سرآیند و شناسه ها (12 بایت): شناسه پیام 0x02 همراه با شاخص جلسه سرور و بازتاب شاخص کلاینت.
  2. کلید موقت سرور (32 بایت): کلید عمومی موقت تولید شده توسط سرور.
  3. محاسبات اشتراکی: ترکیب کلید موقت با کلیدهای کلاینت و تزریق کلید پیش اشتراکی PSK به زنجیره محاسباتی.
  4. داده خالی رمزگذاری شده (16 بایت): تاییدی بر اینکه سرور دارای کلیدهای صحیح و معتبر است.
  5. فیلدهای MAC (32 بایت): الصاق فیلدهای تایید اصالت به انتهای بسته.

پس از پایان این مراحل، هر دو طرف تابع Split را اجرا می کنند تا دو کلید متقارن 256 بیتی مستقل برای ارسال و دریافت داده ها به دست آید. تمامی مقادیر موقت بلافاصله از حافظه رم پاکسازی می شوند.

پنهان سازی هویت، راز داری رو به جلو و پاکسازی فوری کلیدها

نظارت شبکه معمولا به متاداده های متنی آشکار در پیام های اولیه تکیه می کند. الگوی به کار رفته در وایرگارد این مسئله را به خوبی مدیریت می نماید:

  • حفاظت در برابر شنود غیرفعال: کلید عمومی کلاینت هرگز به صورت متن آشکار منتقل نمی شود و پشت لایه رمزگذاری دیفی-هلمن قرار دارد. ناظر شبکه تنها بایت های تصادفی با آنتروپی بالا مشاهده می کند.
  • پایداری در برابر حملات فعال: مهاجمان واسط بدون داشتن کلید خصوصی سرور قادر به رمزگشایی هویت کلاینت نیستند و سرور در برابر بسته های نامعتبر پاسخی نمی دهد.
  • رازداری رو به جلو (PFS): کلیدهای موقت پس از استخراج کلیدهای داده نابود می شوند؛ بنابراین افشای کلیدهای ایستا در آینده سبب افشای ترافیک های ذخیره شده گذشته نخواهد شد.
  • چرخش مداوم کلیدها: کلیدهای تبادل ترافیک هر 120 ثانیه یا پس از ارسال حجم مشخصی از بسته ها به طور خودکار بازتولید می شوند.

مقاومت در برابر حملات منع سرویس: کوکی های بدون حالت و افت بی صدا

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

وایرگارد از سازوکار دوگانه بهره می گیرد:

  1. افت بی صدا (Silent Dropping): چنانچه بسته ای فاقد اعتبار ریاضی باشد، بدون ارسال هیچ گونه پیام خطا یا اخطار ICMP به طور خاموش دور ریخته می شود. در این حالت پورت سرور برای ابزارهای اسکن نامرئی به نظر می رسد.
  2. پاسخ کوکی بدون حالت: در صورت افزایش بیش از حد ترافیک، سرور از انجام محاسبات سنگین برای بسته های عادی خودداری کرده و یک پیام کوکی سبک 64 بایتی برمی گرداند. کلاینت با اثبات مالکیت نشانی IP خود از طریق فیلد MAC2، امکان برقراری ارتباط در شرایط پربار را فراهم می سازد.

معماری ارتباطی RiceGuard: دست دهی امن و حذف سطح حمله در شبکه

زیرساخت شبکه VPNRice ویژگی های استاندارد چارچوب Noise را در بستر پروتکل اختصاصی RiceGuard به کار گرفته است. با حذف مراحل اضافی و سنگین، اتصالی پایدار با حداقل مصرف انرژی برای دستگاه های کاربران فراهم شده است.

با اتکا به شبکه سرورهای Anycast، درخواست های اولیه به نزدیک ترین نقطه متصل شده و برقراری تونل امن در زمانی کمتر از 20 میلی ثانیه به سرانجام می رسد. موتور RiceGuard کلیدهای ارتباطی را در بخش های حفاظت شده حافظه نگهداری می کند تا از خطرات نرم افزاری جلوگیری شود.

افزون بر این، RiceGuard از توزیع خودکار کلیدهای پیش اشتراکی مقاوم در برابر رایانش کوانتومی پشتیبانی می کند تا کاربران با خیالی آسوده و سرعتی مناسب از بستری مطمئن بهره مند شوند. امنیت شبکه خود را با دریافت VPNRice.