توابع درهم ساز رمزنگاری (Cryptographic Hash Functions) و کدهای اصالت سنجی پیام (MAC) ستون فقرات ساختاری تونل های امن شبکه را تشکیل می دهند. در حالی که الگوریتم های رمزنگاری متقارن وظیفه حفاظت از محرمانگی بار داده ها را بر عهده دارند، توابع درهم ساز مسئول ایجاد اعتماد جلسه، پیوند دادن هویت های موقت، اعتبارسنجی یکپارچگی دست تکانی و بررسی مشروعیت بسته ها پیش از اجرای محاسبات سنگین نامتقارن هستند. برای سال های متمادی، پروتکل های سنتی مانند IPsec و OpenVPN به خانواده SHA-2 (شامل SHA-256 و SHA-512) مصوب استاندارد NIST FIPS 180-4 تکیه می کردند. با این حال، اجرای نرم افزاری SHA-256 بر روی مسیریاب های ۳۲ بیتی جاسازی شده و سخت افزارهای کم مصرف گلوگاه های پردازشی محسوسی ایجاد می کند.
پروتکل WireGuard ساختارهای سنتی درهم سازی را کنار گذاشته و از الگوریتم مدرن BLAKE2s تعریف شده در سند RFC 7693 استفاده می کند. این تابع در کنار Curve25519 و ChaCha20-Poly1305، امنیتی هم سطح SHA-256 و SHA-3 فراهم کرده و در عین حال مصرف چرخه های پردازنده را به حداقل می رساند. با ادغام حالت درهم سازی کلیددار بومی در چارچوب دست تکانی Noise_IKpsk2 و سازوکار دفاع بدون حالت در برابر حملات محروم سازی از سرویس (DoS)، پروتکل WireGuard به سادگی ساختاری و مصونیت در برابر تحلیل های کانال جانبی دست یافته است.
محدودیت های ساختاری SHA-256 و آسیب پذیری گسترش طول
برای درک ضرورت فنی به کارگیری BLAKE2s، باید محدودیت های ذاتی توابع درهم ساز کلاسیک مانند SHA-256 را ارزیابی کرد:
- ساختار مرکل-دامگارد (Merkle-Damgård): الگوریتم های سنتی داده های ورودی را به بلوک هایی با اندازه ثابت (۵۱۲ بیت در SHA-256) تقسیم کرده و آن ها را به صورت متوالی وارد یک تابع فشرده سازی می کنند. بردار وضعیت داخلی پس از پردازش آخرین بلوک پدینگ، مستقیماً به عنوان خروجی نهایی تابع منتشر می شود.
- حمله گسترش طول (Length Extension Attack): از آنجا که خروجی SHA-256 وضعیت کامل ثبت کننده های داخلی را نشان می دهد، مهاجمی که مقدار هش $H(M)$ و طول پیام $M$ را در اختیار دارد، می تواند داده های دلخواه $M'$ را به انتهای آن الحاق کرده و هش معتبر $H(M \mathbin{\Vert} \text{pad} \mathbin{\Vert} M')$ را بدون دانستن محتوای مخفی یا کلید اختصاصی پیام محاسبه کند. در نتیجه، طرح های اصالت سنجی ساده مبتنی بر پیشوند کلید $H(\text{Key} \mathbin{\Vert} \text{Message})$ از نظر امنیتی نامعتبر هستند.
- هزینه پردازشی ساختار HMAC: برای مقابله با خطرات گسترش طول، استاندارد HMAC (RFC 2104) تدوین شد که نیازمند دو مرحله درهم سازی تودرتو است:
$$\text{HMAC}(K, M) = H\big((K \oplus \text{opad}) \mathbin{\Vert} H((K \oplus \text{ipad}) \mathbin{\Vert} M)\big)$$
اگرچه HMAC تهدید گسترش طول را خنثی می کند، اما مستلزم پردازش دو بلوک پدینگ مجزا (ipad و opad) برای هر برچسب احراز اصالت است. این فرایند دومرحله ای در تبادل مکرر بسته های کوچک دست تکانی، بار پردازشی بالایی بر هسته سیستم عامل تحمیل می کند.
معماری BLAKE2s: طراحی ۳۲ بیتی ARX و چارچوب HAIFA
الگوریتم BLAKE2s که توسط ژان-فیلیپ اومسون، ساموئل نوس، زوکو ویلکاکس-اوهرن و کریستین وینرلین طراحی شده است، به طور خاص برای پردازنده های ۳۲ بیتی بهینه سازی شده و می تواند خروجی هایی تا ۲۵۶ بیت را از بلوک های ورودی ۵۱۲ بیتی تولید کند.
چارچوب HAIFA و مصونیت ریشه ای در برابر گسترش طول
تابع BLAKE2s به جای پیروی از مدل سنتی مرکل-دامگارد، از چارچوب تکرارشونده HAIFA (HAsh Iterative FrAmework) استفاده می کند. این سازوکار متادیتاهای زمینه ای مشخصی را به هر بلوک فشرده سازی تزریق می کند:
- شمارنده بایت (تغییر مکان $t_0, t_1$): یک عدد صحیح ۶۴ بیتی که تعداد بایت های پردازش شده تا بلوک جاری را ثبت می کند.
- پرچم بلوک پایانی ($f_0, f_1$): یک متغیر بولی ویژه که صرفاً در هنگام فشرده سازی آخرین بلوک پیام بر روی مقدار
0xFFFFFFFFتنظیم می شود.
تابع فشرده سازی چهار پارامتر مجزا دریافت می کند: بردار وضعیت ۲۵۶ بیتی $h$، بلوک داده ۵۱۲ بیتی $m$، شمارنده بایت $t$ و پرچم پایان $f$. از آنجا که بلوک پایانی یک ماسک بیت نات (Inversion) را به ماتریس فشرده سازی اعمال می کند، مقدار هش نهایی هرگز نمی تواند به عنوان وضعیت میانی برای الحاق داده های بعدی استفاده شود. این ویژگی حملات گسترش طول را به طور کامل غیرممکن می سازد و اجازه می دهد BLAKE2s مستقیماً به عنوان تابع شبه تصادفی (PRF) و کد MAC عمل کند.
ماتریس وضعیت ۴×۴ و تابع جابجایی Quarter-Round
وضعیت داخلی BLAKE2s در یک ماتریس کاری شامل ۱۶ کلمه ۳۲ بیتی ($v_0 \dots v_{15}$، مجموعاً ۵۱۲ بیت) سازمان دهی می شود. هشت کلمه بالایی مقادیر زنجیره ای فعلی $h_0 \dots h_7$ را دریافت کرده و هشت کلمه پایینی بردارهای مقداردهی اولیه استاندارد (IV) را همراه با شمارنده بایت و پرچم های پایانی در خود جای می دهند:
| شاخص سطر | ستون ۰ | ستون ۱ | ستون ۲ | ستون ۳ |
|---|---|---|---|---|
| سطر ۰ | $h_0$ | $h_1$ | $h_2$ | $h_3$ |
| سطر ۱ | $h_4$ | $h_5$ | $h_6$ | $h_7$ |
| سطر ۲ | $IV_0$ | $IV_1$ | $IV_2$ | $IV_3$ |
| سطر ۳ | $IV_4 \oplus t_0$ | $IV_5 \oplus t_1$ | $IV_6 \oplus f_0$ | $IV_7 \oplus f_1$ |
عملیات درهم آمیزی بر عهده تابع $G$ است که از هسته الگوریتم ChaCha الگوبرداری شده است. این تابع بر روی ۴ کلمه وضعیت و ۲ کلمه داده پیام عمل کرده و منحصراً از عملیات ARX (جمع به پیمانه $2^{32}$، چرخش بیتی به چپ و XOR) استفاده می کند:
$$a \leftarrow a + b + x; \quad d \leftarrow (d \oplus a) \lll 16;$$ $$c \leftarrow c + d; \quad b \leftarrow (b \oplus c) \lll 12;$$ $$a \leftarrow a + b + y; \quad d \leftarrow (d \oplus a) \lll 8;$$ $$c \leftarrow c + d; \quad b \leftarrow (b \oplus c) \lll 7;$$
این الگوریتم در ۱۰ دور متوالی اجرا می شود. در هر دور، ۴ تبدیل ستونی موازی و به دنبال آن ۴ تبدیل قطری انجام می گیرد و کلمات داده بر اساس جدول جایگشت ثابت $\sigma_0 \dots \sigma_9$ توزیع می شوند. تمام دستورات به طور مستقیم بر روی واحدهای محاسباتی پردازنده (ALU) در زمان ثابت اجرا می شوند و بدون نیاز به جداول حافظه، مصونیت کامل در برابر حملات مبتنی بر زمان بندی حافظه پنهان (cache-timing) را تضمین می کنند.
حالت کلیددار بومی: اصالت سنجی تک مرحله ای بدون نیاز به HMAC
یکی از نوآوری های برجسته BLAKE2s، حالت کلیددار بومی (Keyed Mode) است. هنگامی که یک کلید محرمانه (تا سقف ۳۲ بایت) به الگوریتم داده می شود، مشخصات کلید در بلوک اولیه ثبت شده و کلید مستقیماً در اولین بلوک ۵۱۲ بیتی پیام قرار گرفته و با صفر پر می شود.
بخش های بعدی پیام به صورت یکپارچه از بلوک های فشرده سازی بعدی عبور می کنند. این معماری تک مرحله ای (single-pass) مزایای متعددی به همراه دارد:
- تضمین امنیت ریاضی کامل: عملکردی کاملاً ایمن و معادل یک تابع PRF پایدار، بدون پیچیدگی های ساختار HMAC.
- عدم نیاز به تخصیص حافظه اضافی: مدیریت کلید در همان مسیر پردازش داده ها انجام می شود و نیازی به تغییر زمینه های حافظه نیست.
- کاهش بیش از ۵۰ درصدی چرخه های پردازش: برای پیام های کوتاه مانند هدر بسته ها و پاسخ های کوکی، بررسی اصالت در یک مرحله فشرده سازی منفرد تکمیل می شود.
نقش های حیاتی BLAKE2s در پروتکل WireGuard
پروتکل WireGuard در تمام مراحل کلیدی مذاکره اتصال و ایمن سازی سرور از BLAKE2s بهره می برد:
۱. پیوند داده های دست تکانی در چارچوب Noise_IKpsk2
در جریان تبادل کلید، طرفین ارتباط باید اطمینان یابند که هیچ شخص ثالثی قادر به دستکاری کلیدهای عمومی موقت، برچسب های زمانی یا کلید پیش اشتراکی (PSK) نیست. نرم افزار دو مقدار امنیتی را به صورت مستمر به روزرسانی می کند:
- کلید زنجیره ای ($ck$): پس از هر محاسبه ریاضی، توسط تابع مشتق سازی کلید مبتنی بر BLAKE2s به روزرسانی می شود.
- هش دست تکانی ($h$): یک هش تجمعی که با رابطه $h \leftarrow \text{BLAKE2s}(h \mathbin{\Vert} \text{داده ها})$ ثبت می شود. تمام پارامترهای رد و بدل شده در $h$ جذب می شوند تا هر دو طرف سابقه ای دقیق و غیرقابل دستکاری از مذاکرات داشته باشند.
۲. سامانه دفاعی بدون حالت در برابر حملات DoS (کدهای MAC1 و MAC2)
مسیریاب های مرزی شبکه همواره در معرض سیل بسته های جعلی با هدف اشغال حافظه و منابع پردازنده قرار دارند. پروتکل WireGuard با افزودن دو فیلد ۱۶ بایتی MAC به تمامی بسته های آغازین و پاسخی، از سرورها محافظت می کند:
- MAC1: یک کد اصالت سنجی ۱۲۸ بیتی با کلید است که با استفاده از کلید عمومی گیرنده روی هدر بسته محاسبه می شود:
$$\text{MAC1} = \text{BLAKE2s-128}\big(\text{هش}(\text{کلید عمومی گیرنده}), \text{msg}_{0..k}\big)$$
این فیلد تأیید می کند که بسته مشخصاً برای این سرور ارسال شده و به هسته اجازه می دهد پیش از تخصیص هرگونه حافظه، ترافیک نامعتبر را دور بریزد.
- MAC2: هنگامی که بار پردازشی سرور به اوج می رسد، از انجام محاسبات سنگین ضرب نقطه ای Curve25519 خودداری می کند مگر اینکه فرستنده یک کوکی معتبر ارائه دهد. سرور یک پیام حاوی کوکی رمزگذاری شده ارسال می کند. فرستنده درخواست خود را مجدداً همراه با
MAC2که روی کل بسته و با کلید کوکی محاسبه شده ارسال می نماید:
$$\text{MAC2} = \text{BLAKE2s-128}\big(\text{Cookie}, \text{msg}_{0..k+16}\big)$$
سرور به کمک سرعت فوق العاده محاسبه BLAKE2s، صحت پیام ها را بدون ذخیره وضعیت در حافظه اعتبارسنجی کرده و حملات عظیم DoS را دفع می کند.
شتاب بخشی با بردارسازی SIMD و پیاده سازی RiceGuard
آرایش ماتریسی BLAKE2s سازگاری بسیار بالایی با ساختارهای برداری پردازنده ها دارد. دستورات برداری مانند ARM NEON، Intel AVX2 و AVX-512 قادرند ۴ جابجایی Quarter-Round را در یک چرخه برداری محاسبه کنند. در پردازنده های سروری مدرن، سرعت BLAKE2s به کمتر از ۳ چرخه برای هر بایت می رسد.
در چارچوب شبکه RiceGuard، عملیات درهم سازی رمزنگاری بر اساس استانداردهای مهندسی دقیق انجام می گیرد:
- توزیع بار از طریق صف های هسته (padata): محاسبات تأیید اعتبار دست تکانی بدون برهم زدن ترتیب بسته ها، میان تمام هسته های پردازنده توزیع می شوند.
- مقایسه برچسب ها در زمان ثابت: اعتبارسنجی مقادیر
MAC1وMAC2با تابع سیستمیcrypto_memneqصورت می گیرد تا از نشت زمانی جلوگیری شود. - پاکسازی فوری حافظه حساس: متغیرهای زنجیره ای و توکن های موقت بلافاصله پس از اتمام محاسبه با تابع
memzero_explicitاز حافظه RAM پاک می شوند تا هیچ اثری از داده های حساس در حافظه پنهان پردازنده باقی نماند.
ترکیب عملیات ۳۲ بیتی ARX، مصونیت ذاتی در برابر گسترش طول و اعتبارسنجی تک مرحله ای، الگوریتم BLAKE2s را به شالوده ای استوار برای شبکه های امن و پرسرعت تبدیل کرده است.



