بررسی عمیقِ مکانیسم، اهداف، ساختار پیامها، و چالشهای امنیتی
مقدمه: چرا «دستدادن چهارگانه» اساس امنیت وایفای است؟
در دنیای امروز، اتصال به یک شبکهٔ وایفای تنها با وارد کردن رمز عبور تمام نمیشود. آنچه پشت صحنه رخ میدهد—یک رقص دقیق، ریاضیاتی و زمانبندیشده بین دو دستگاه—4-Way Handshake نام دارد. این فرآیند، ستون فقرات امنیتی WPA2 (و بخشی از WPA3) است و مسئولیتهای حیاتی زیر را بر عهده دارد:
- ✅ احراز هویت متقابل (AP ↔ Client)
- ✅ تأیید دانش مشترکِ کلید رمز (PSK یا PMK) بدون انتقال آن از روی هوا
- ✅ تولید کلیدهای جلسهای موقت و منحصربهفرد (PTK, GTK)
- ✅ جلوگیری از حملات replay و man-in-the-middle
اگر این چهار مرحله حتی یک بیت خطا داشته باشد، تمام ساختار امنیتی شبکه فرو میریزد — همانطور که در حملهٔ KRACK (2017) اتفاق افتاد.
اما پیش از پرداختن به جزئیات، باید زیرساخت مفهومی را درک کنیم.
بخش اول: پیشزمینهٔ رمزنگاری — کلیدها از کجا میآیند؟
۱. PSK (Pre-Shared Key) — رمزی که شما مینویسید
در شبکههای خانگی (WPA2-Personal)، رمزی که در روتر وارد میکنید، یک PSK است. اما این رمز مستقیماً برای رمزنگاری داده استفاده نمیشود — چرا؟ چون ثابت است و قابلیت استفادهٔ مجدد دارد. بهجای آن، از آن برای تولید کلیدهای پویا استفاده میشود.
۲. PMK (Pairwise Master Key) — کلید اصلی جفتگیری
- در WPA2-Personal:
[
\text{PMK} = \text{PBKDF2}( \text{HMAC-SHA1}, \text{PSK}, \text{SSID}, 4096, 256\text{-bit} )
]
یعنی PSK با الگوریتم PBKDF2 و ۴۰۹۶ دور هشسازی، به یک کلید ۲۵۶ بیتی تبدیل میشود تا در برابر حملات brute-force مقاوم باشد. - در WPA2-Enterprise:
PMK از طریق پروتکل 802.1X/EAP (مثلاً EAP-TLS) و با مشارکت سرور RADIUS مبادله میشود — پس برای هر کاربر، PMK متفاوت است.
۳. PTK (Pairwise Transient Key) — کلید موقتِ ارتباط یکبهیک
این کلید فقط برای یک جلسه بین یک کلاینت و AP معتبر است و برای رمزنگاری دادههای unicast (مثل وبگردی شما) استفاده میشود.
[
\text{PTK} = \text{PRF-384}( \text{PMK}, “Pairwise key expansion”, \min(\text{AA},\text{SPA}) \, || \, \max(\text{AA},\text{SPA}) \, || \, \min(\text{ANonce},\text{SNonce}) \, || \, \max(\text{ANonce},\text{SNonce}) )
]
- AA: MAC آدرس نقطه دسترسی (AP)
- SPA: MAC آدرس کلاینت (Supplicant)
- ANonce: عدد تصادفی تولیدشده توسط AP
- SNonce: عدد تصادفی تولیدشده توسط کلاینت
- PRF-384: تابع مشتقکننده کلید (Key Derivation Function) مبتنی بر SHA1
نتیجهٔ PTK، یک کلید ۵۱۲ بیتی است که به چند زیرکلید تقسیم میشود:
- KCK (32 bit): برای تأیید صحت پیامهای handshake (MIC)
- KEK (128 bit): برای رمزنگاری کلیدهای دیگر (در صورت نیاز)
- TK (128 bit): کلید واقعی رمزنگاری داده (با الگوریتم CCMP/AES یا TKIP)
۴. GTK (Group Temporal Key) — کلید گروهی برای ترافیک broadcast/multicast
این کلید توسط AP تولید شده و به تمام کلاینتها داده میشود تا بتوانند پیامهای گروهی (مثل ARP broadcast) را رمزگشایی کنند.
بخش دوم: چهار مرحلهٔ دستدادن — هر پیام چه میگوید؟
فرآیند 4-Way Handshake یک پروتکل چالش-پاسخ (Challenge-Response) است که تنها با دانستن PMK قابل انجام است — اما PMK هرگز روی هوا ارسال نمیشود.
| مرحله | فرستنده | گیرنده | محتوای پیام | هدف اصلی |
|---|---|---|---|---|
| 1 | AP | کلاینت | ANonce (عدد تصادفی AP) | شروع handshake؛ چالش به کلاینت |
| 2 | کلاینت | AP | SNonce + MIC (با KCK) | پاسخ با عدد تصادفی خود + اثبات دانش PMK |
| 3 | AP | کلاینت | ANonce (دوباره) + MIC + GTK (رمزنگاریشده با KEK) | تأیید متقابل + تحویل کلید گروهی |
| 4 | کلاینت | AP | MIC (تأیید دریافت GTK) | تأیید نهایی — اکنون ارتباط امن آغاز میشود |
📌 نکتهٔ ظریف:
- پیامهای ۱ و ۲ بدون رمزنگاری ارسال میشوند — اما شامل اعداد تصادفی هستند که بدون PMK غیرقابل پیشبینیاند.
- پیام ۳، GTK را با KEK رمزنگاری میکند تا کلاینتهای دیگر نتوانند آن را بخوانند.
- تمام MICها (Message Integrity Code) با HMAC-SHA1 و کلید KCK محاسبه میشوند.
نمودار زمانی (Sequence Diagram):
AP (Authenticator) Supplicant (Client)
| |
|<--- EAPOL-Key(1/4) -----------| ANonce
| |
|--- EAPOL-Key(2/4) ----------->| SNonce + MIC
| |
|<--- EAPOL-Key(3/4) -----------| ANonce + MIC + Encrypted-GTK
| |
|--- EAPOL-Key(4/4) ----------->| MIC (ACK)
| |
|======== اتصال امن برقرار شد =========> دادهها با TK (AES-CCMP) رمزنگاری میشوند✅ تأکید: در هیچ مرحلهای PSK یا PMK روی هوا ارسال نمیشوند. تنها «اثبات دانش» آنها انجام میشود.
بخش سوم: چرا دقیقاً چهار مرحله؟ تحلیل منطقی ساختار
بسیاری میپرسند: چرا ۲ مرحله کافی نیست؟ چرا ۳ مرحله نمیشود؟ پاسخ در نیازهای امنیتی سهگانه نهفته است:
| نیاز امنیتی | چرا ۲ مرحله کافی نیست؟ | چرا ۳ مرحله خطرناک است؟ | چگونه ۴ مرحله حل میکند؟ |
|---|---|---|---|
| احراز هویت متقابل | فقط AP کلاینت را تأیید میکند؛ AP ممکن است جعلی باشد. | کلاینت AP را تأیید میکند، اما امکان حملهٔ downgrade وجود دارد. | هر دو طرف دوبار MIC ارسال/دریافت میکنند — اطمینان از هویت دوطرفه. |
| تأیید تولید PTK | PTK ممکن است بهدرستی ساخته نشده باشد (مثلاً به دلیل اختلاف در ANonce). | AP نمیداند کلاینت PTK را درست ساخته یا خیر. | پیام ۴، تأیید نهایی از سوی کلاینت برای «درست بودن PTK و دریافت GTK» است. |
| تحویل ایمن GTK | GTK روی هوا منتقل نمیشود. | اگر GTK در پیام ۲ بیاید، قبل از احراز هویت کلاینت ارسال شده — خطر فاش شدن. | GTK فقط در پیام ۳ (پس از تأیید کلاینت) و رمزنگاریشده ارسال میشود. |
به بیان دیگر:
مرحلهٔ چهارم (ACK نهایی) تنها مکانیسمی است که جلوی حملهٔ «قطع نیمهراهی» (Truncation Attack) را میگیرد.
بخش چهارم: آسیبپذیری KRACK — وقتی ۴-Way Handshake شکست خورد
در اکتبر ۲۰۱۷، محقق بلژیکی Mathy Vanhoef حملهٔ KRACK (Key Reinstallation Attack) را افشا کرد — یک شکاف فاجعهبار در پیادهسازی 4-Way Handshake که همهٔ دستگاههای WPA2 را تحت تأثیر قرار داد.
چگونه KRACK کار میکرد؟
- مهاجم (در محدودهٔ سیگنال) پیام سوم handshake (EAPOL-Key 3/4) را مسدود میکرد.
- AP، پس از time-out، همان پیام را دوباره ارسال میکرد (طبق استاندارد مجاز است).
- کلاینت، با دریافت پیام تکراری، PTK را دوباره نصب میکرد — اما بسیاری از پیادهسازیها، شمارندهٔ nonce را ریست میکردند.
- nonce تکراری + TK ثابت → شکست رمزنگاری AES-CCMP → امکان رمزگشایی دادهها، جعل پیام و حتی تزریق کد!
ریشهٔ مشکل:
- استاندارد 802.11-2016 بهطور صریح ممنوع نکرده بود که کلاینت nonce را ریست کند.
- پیادهسازیهای ضعیف (بهویژه در اندروید 6 و لینوکس wpa_supplicant) این خطا را داشتند.
راهحلها:
- پچهای امنیتی توسط تمام سازندگان (اپل، گوگل، مایکروسافت) در ۲۰۱۷–۲۰۱۸
- تغییر استاندارد: در IEEE 802.11-2020، دوبارهنصب کلید بهصورت صریح ممنوع شد.
- ظهور WPA3 با مکانیسمهای مقاومتر (مانند SAE و forward secrecy).
بخش پنجم: تکامل به WPA3 — آیا 4-Way Handshake دیگر کافی نیست؟
WPA3 (از ۲۰۱۸)، دو حالت دارد:
۱. WPA3-Personal (جایگزین WPA2-Personal)
- جایگزینی PSK با SAE (Simultaneous Authentication of Equals) — یک پروتکل مبتنی بر رمزنگاری منحنی بیضوی (ECC).
- 4-Way Handshake همچنان استفاده میشود — اما PMK دیگر از PSK ساخته نمیشود، بلکه از دستدادن SAE بهدست میآید.
- مزیت: مقاومت در برابر حملات offline dictionary (حتی با رمز ضعیف).
۲. WPA3-Enterprise
- حذف کامل 4-Way Handshake برای احراز هویت
- استفاده از EAP-TLS 1.3 با forward secrecy
- اما برای توزیع کلید (PTK/GTK)، یک handshake جدید مبتنی بر OWE (Opportunistic Wireless Encryption) استفاده میشود.
🔍 نکتهٔ فنی:
حتی در WPA3، یک فرآیند «چهارگانهمانند» برای تأیید و تحویل کلید وجود دارد — اما دیگر PMK مشترک نیست و nonceها غیرقابل پیشبینیتر هستند.
بخش ششم: موارد کاربردی — چه زمانی handshake شکست میخورد؟
در عمل، خطاهای رایج در 4-Way Handshake عبارتند از:
| علت خطا | علامت در کلاینت | راهحل |
|---|---|---|
| عدم تطابق PSK | “Authentication failed” | بررسی رمز (حساس به حروف بزرگ/کوچک و فاصله) |
| تفاوت در پشتیبانی رمزنگاری (مثلاً AP فقط CCMP، کلاینت فقط TKIP) | “4-way handshake timeout” | یکسانسازی تنظیمات روتر (ترجیحاً فقط AES-CCMP) |
| تداخل سیگنال یا فاصلهٔ زیاد | handshake در مرحله ۲ یا ۳ قطع میشود | کاهش فاصله، تغییر کانال، یا استفاده از 5GHz |
| تنظیمات اشتباه AP (مثلاً غیرفعال کردن 802.11r برای roaming) | اتصال موقت، سپس قطعی | فعالسازی FT (Fast Transition) در روتر پیشرفته |
| فایروال/آنتیویروس مسدودکنندهٔ EAPOL | کلاینت handshake را شروع نمیکند | غیرفعال کردن موقت نرمافزارهای امنیتی برای تست |
🛠 ابزارهای تشخیص:
Wireshark+ فیلترeapol— برای مشاهدهٔ دقیق پیامهای handshakeaircrack-ng— برای تست امنیت (فقط در شبکههای مجاز!)wpa_cli reconfigure— در لینوکس برای اجبار به handshake مجدد
جمعبندی: چرا 4-Way Handshake همچنان شگفتانگیز است؟
- 🌐 هوشمندی طراحی: بدون انتقال کلید، بدون رمزنگاری پیچیده، فقط با ریاضیات و زمانبندی.
- ⚖️ تعادل امنیت و کارایی: برای دستگاههای کممنبع (IoT) قابل اجراست.
- 🛡️ مقاومت در برابر زمان: از ۲۰۰۴ (انتشار WPA2) تا امروز، تنها یک شکاف جدی (KRACK) کشف شده — و آن هم به دلیل پیادهسازی، نه طراحی.
- 📈 پایهٔ آینده: حتی WPA3، بدون انکار، از ساختار منطقی آن الهام گرفته است.
در نهایت، 4-Way Handshake تنها یک «پروتکل» نیست — یک قرارداد رمزنگاری زیبا است: دو دستگاه غریبه، در کمتر از یک ثانیه، بدون اعتماد اولیه، یک کانال امن میسازند. این، جادوی مهندسی است — نه جادوی واقعی.
