ستاره های آسمان

ریاضی ابزار شناخت جهان هستی

ستاره های آسمان

ریاضی ابزار شناخت جهان هستی

ستاره های آسمان
مطالب پربحث‌تر

مبانی پروتوکلهای تبادل کلید

چهارشنبه, ۳ مهر ۱۳۹۲، ۰۹:۵۱ ق.ظ

سلام

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

\[ K_{AS} \]

برای رمزنگاری مبادله شده است)

1. علی به سرور میگویدA, Z (یعنی علی هستم و میخوام با زهرا نشست برقرار کنم)

2. سرور یک کلید K تولید میکند و به حسن میگوید:

\[ \{ K \}_{AS} , \{ K \}_{ZS} \]

(یعنی کلید K را با کلیدهای بین خودش و اعضای A و Z رمز میکند تا شنودگر نتواند آنها را تشخیص دهد)

3. علی به زهرا میگوید:

\[A , {K}_{ZS} \]

یعنی علی هستم و با این کلید می‌خواهم با تو نشستی برقرار کنم.

اکنون می‌توان یک نشست بین علی و زهرا برقرار شود و علی و زهرا مطالب بین خود را با کلید K رمز خواهند کرد تا مهاجم از مطالب در حال تبادل چیزی نفهمد.

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

مهاجم: فردی است که می‌داند اعضای شبکه متنهای خود را چگونه رمز می‌کنند -ولی از کلید رمز اطلاعی ندارد-، می‌تواند جعل هویت کند، به اطلاعات در حال تبادل دسترسی کامل دارد و همه آنها را می‌بیند. می‌تواند بخشی یا همه اطلاعات در حال مبادله را تغییر دهد. مهاجم حافظه دارد و می‌تواند اطلاعات قبلی را ذخیره کند (تا از آنها برای حملات آتی استفاده کند)، هوشمند است (می‌تواند خلاقیت به خرج دهد). هویت همه اعضای شبکه را می‌داند، در کل هر قدرتی دارد مگر دو محدودیت:  وی تنها و تنها به کلید رمزنگاری و رمزگشایی دسترسی ندارد و قدرت محاسباتی وی محدود به قویترین سیستمهای رایانه‌ای جهان است.

برخلاف تصور اولیه با این مفروضات مهاجم، بزرگنمایی نشده است. مثلا نه فقط یک مهندس شبکه بلکه حتی خیل عظیمی از علاقه‌مندان به کامپیوتر با پروتکلهای مختلف VPN آشنایی دارند و جزئیات PP2P و L2TP را میدانند، با یک دستگاه ساده چندصدهزارتومانی به آنتن وایرلس شما دسترسی دارند تا قادر باشند متنهایی رمز شده‌ای که نامه شما از سایتهای سرویس دهنده پست الکترونیکی مثل چاپار یا رایانامه را ببینند -البته به متن رمزنگاری شده دسترسی خواهد داشت نه متن اولیه- حتی سیستم رمزنگاری اکثر سایتهای پست الکترونیکی مثل gmail و yahoo پروتکل httpsی است که به راحتی میتوانید با یک جست و جو در اینترنت به جزئیات آن دست پیدا کند. پس برای مهاجم تنها چیزی که باقی‌می‌ماند کلیدی است که به طور خودکار بین سیستم شما و سایت چاپار به اشتراک گذاشته شده تا ایمیل شما رمزنگاری شود و به سایت سرویس‌دهنده ارسال گردد.

حداقل چیزهایی که در امنیت یک سیستم میخواهیم این است که:

1. کسی نتواند با هویتی جعلی وارد نشست شود.

2. در صورت لو رفتن کلید نشستهای مختلف حداقل اطلاعات نشت کند (کلید نشست، کلیدی است که اطلاعات رد و بدل شده با آن رمز شده‌اند.)

3. فرد مهاجم نتواند خودش برای نشستها کلید تعریف کند.

4. مهاجم نتواند هیچ عملیات مخربی که موجب نشت نامه‌های قبلی، فعلی یا آتی مبادل شده بین طرفین نشست شود را انجام دهد.

صداقت:

1.  اگر کسی اطلاعاتی دریافت کرد مطمئن باشد که این اطلاعات از طرف کیست و مطمئن باشد که ارسال کننده نامه نمی‌تواند منکر ارسال این اطلاعات شود.

خاطرجمعی:

1. افراد از ارسال درست نامه‌ها مطمئن باشند. یعنی در پایان نشست هر کس مطمئن باشد هر نامه‌ای فرستاده به دست طرف مقابل رسیده و طرف مقابل هم میداند که این نامه از طرف اوست.

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

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

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

امکان انکار ارسال درخواست نشست توسط علی:

برای اینکه علی مطمئن شود که زهرا کلید را دریاف کرده است: زهرا یک عدد تصادفی بزرگ که احتمال انتخاب آن نزدیک به صفر است را برای علی ارسال میکند به این عدد nonce میگویند و در واقع به این معناست که پیام شما دریافت شد. البته از nonce برای احراز تازگی پیام نیز می‌توان استفاده کرد. مثلا علی کنار پیام خود یک

\[ N_A \]

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

1. علی به سرور:

\[ A, Z]

2. سرور به علی:

\[ \{ K \}_{AS} , \{ K \}_{ZS} \]

3. علی به زهرا:

\[ \{ K \}_{ZS} , N_A \]

4. زهرا به علی:

\[ N_A \]

البته هنوز بسیاری از نقصها باقیست که هیچ یک نقص دیگر هم اضافه شد! در گام ۴ مهاجم به جای زهرا می‌تواند پاسخ دهد. هرچند امکان دسترسی به K را ندارد ولی می‌تواند علی را فریب دهد تا نامه‌های ارسالی به دست زهرا نرسد. برای حل این مشکل و رفع مشکل هویت زهرا، علی

\[ N_A ]\

را با کلید K رمز می‌کند تا زهرا پس از باز کردن بسته حاوی کلید بتواند nonce علی را برگرداند

1. علی به سرور:

\[ A, Z ]\

2. سرور به علی:

\[ \{K\}_{AS} , \{K\}_{ZS} \]

3. علی به زهرا:

\[ \{ K \}_{ZS} , \{N_A \}_K

4. زهرا به علی:

\[ \{N_A-1 \}_K \]

پرسش: چرا در  گام چهار زهرا

\[ \{N_A-1 \}_K \]

را برگرداند؟ میتوانست از کلید استفاده نکند؟ یا تفریق انجام شده برای چه بود؟ آیا الآن علی می‌تواند مطمئن باشد که زهرا کلید را دریافت کرده و نه اینکه مهاجمی قصد فریب وی را دارد؟

دقت کنید که پروتکلهای عمدتا کوتاه و حداکثر در حالات استثناء به ۸ یا ۹ گام می‌رسند و پروتکلهای طولانی پروتکلهای مناسبی نیستند. هر چه تعداد خطوط یک پروتکل بیشتر امکان وجود یک نقص در آن نیز بیشتر خواهد بود.

سعی کنید پروتکلهایی طراحی کنید که همه مشکلات پروتکل ما را مرتفع سازند و سپس سعی کنید به پروتکل خودتان حمله کنید!غیر از nonce برخی ابزارآلاتی که در پروتکل‌سازی استفاده می‌شوند استفاده از امضای دیجیتال، توابع hash -اثرانگشتی-، MAC و... است می‌توانید از چنین ابزارهایی هم استفاده کنید.

  • محمد اسماعیل حسنی

نظرات  (۱)

سلام ،وتشکرازبابت همچن لینکهاواطلاعاتی که دراختیارمامی گذاریدامیدوارم برای بقیه مفیدباشه ونهایت استفاده روکرده باشند.

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی