به نام خدا؛
سلام دوستان امیدوارم حالتون خوب باشه...
تبادل کلید رمزنگاری (کلید خصوصی یا عمومی در رمـزنگاری نامتقارن و متقارن) در یک محیط (کانال) ناامن به صورت مطمئن و ایمن بدون شک اهمیت زیادی داره. برای تبادل ایمن کلید رمزنگاری رالف مرکل در سال 1976 راه کاری به نام دیفی هلمن (Diffie–Hellman) ارائه کرده که این روزها در بسیاری از پیام رسان ها مثل واتس اپ و تلگرام و ... از این الگوریتم (پروتکل) برای تبادل ایمن کلید رمزنگاری استفاده میشه.
شرح مفصل پروتکل دیفی هلمن:
فرض کنیم رضا و محمد قصد دارن از طریق یک چت روم با هم دیگه اطلاعاتی (شامل متن یا انواع فایلها) رو تبادل کنن. اطلاعات تبادل شده قراره با الگوریتم RSA رمزنگاری بشن. همینطور که آگاه هستین در رمزنگاری RSA یک کلید عمومی و یک کلید خصوصی داریم. در واقع کلید عمومی توسط هر دو طرف قابل استفاده هست و تنها برای رمزنگاری به کار میاد و فاقد هرگونه ارزشی برای رمزگشایی هست. چیزی که در واقع به ما در رمزگشایی کمک میکنه کلید خصوصی هست که باید به صورت بسیار ایمن اون رو نگهداری کنیم. حالا چطور طرفین (رضا و محمد) میتونن بر سر یک کلید خصوصی واحد اون هم در یک کانال (محیط) ارتباطی نه چندان ایمن توافق کنن؟
(دقت کنین که من در اینجا از محاسبات الگوریتم RSA صرف نظر کردم چرا که برای محاسبه کلید خصوصی باید وارون ضربی یکسری از پارامترها رو محاسبه کرد که باعث پیچیده شدن مطلب میشه و از بیانش صرف نظر میکنم)
فرض کنیم محمد دو عدد اول رو به این شکل انتخاب کنه و بعد برای رضا ارسال کنه:دقت کنین عملگر ^ به معنی توان و عملگر mod به معنی باقی مانده تقسیم هست.حالا اگر دقت کنین هر دو مقدار Z(a) و Z(b) با هم برابر هستن. تبریک میگم! رضا و محمد تونستن با موفقیت بر سر یک کلید واحد بدون اینکه کوچکترین اطلاعات حیاتی درز پیدا کنه توافق کنن.
امنیت پروتکل دیفی هلمن:
به طور کلی امنیت این پروتکل بر دو فاکتور مهم استواره:
امیدوارم این مطلب براتون مفید واقع شده باشه.
با آرزوی بهترین ها...
سلام دوستان امیدوارم حالتون خوب باشه...
تبادل کلید رمزنگاری (کلید خصوصی یا عمومی در رمـزنگاری نامتقارن و متقارن) در یک محیط (کانال) ناامن به صورت مطمئن و ایمن بدون شک اهمیت زیادی داره. برای تبادل ایمن کلید رمزنگاری رالف مرکل در سال 1976 راه کاری به نام دیفی هلمن (Diffie–Hellman) ارائه کرده که این روزها در بسیاری از پیام رسان ها مثل واتس اپ و تلگرام و ... از این الگوریتم (پروتکل) برای تبادل ایمن کلید رمزنگاری استفاده میشه.
شرح مفصل پروتکل دیفی هلمن:
فرض کنیم رضا و محمد قصد دارن از طریق یک چت روم با هم دیگه اطلاعاتی (شامل متن یا انواع فایلها) رو تبادل کنن. اطلاعات تبادل شده قراره با الگوریتم RSA رمزنگاری بشن. همینطور که آگاه هستین در رمزنگاری RSA یک کلید عمومی و یک کلید خصوصی داریم. در واقع کلید عمومی توسط هر دو طرف قابل استفاده هست و تنها برای رمزنگاری به کار میاد و فاقد هرگونه ارزشی برای رمزگشایی هست. چیزی که در واقع به ما در رمزگشایی کمک میکنه کلید خصوصی هست که باید به صورت بسیار ایمن اون رو نگهداری کنیم. حالا چطور طرفین (رضا و محمد) میتونن بر سر یک کلید خصوصی واحد اون هم در یک کانال (محیط) ارتباطی نه چندان ایمن توافق کنن؟
(دقت کنین که من در اینجا از محاسبات الگوریتم RSA صرف نظر کردم چرا که برای محاسبه کلید خصوصی باید وارون ضربی یکسری از پارامترها رو محاسبه کرد که باعث پیچیده شدن مطلب میشه و از بیانش صرف نظر میکنم)
- ابتدا طرفین (محمد و رضا) بر سر دو عدد اول p و g توافق میکنن. یعنی محمد یا رضا این دو عدد اول رو ایجاد می کنن و برای طرف مقابل خودشون در یک کانال ناامن ارسال میکنن. دقت کنین که اصلاً نیازی نیست که این دو عدد اول رمزنگاری بشن و همینطور که گفتم میتونیم اونها رو در یک محیط ناامن هم به راحتی تبادل کنیم.
فرض کنیم محمد دو عدد اول رو به این شکل انتخاب کنه و بعد برای رضا ارسال کنه:
کد:
p = 13
g = 11
- در مرحله بعد هم محمد و هم رضا یک عدد صحیح اول رو به صورت تصادفی انتخاب میکنن و اون عدد رو برای خودشون نگه میدارن و جایی ارسال نمیکنن. نکته ای که هست اینجاست که طرفین باید عدد صحیحی که به صورت تصادفی انتخاب می کنن رو کوچکتر از عدد p در نظر بگیرن. با این توضیحات اگر رضا عدد a رو انتخاب کرده باشه و محمد عدد b رو داریم:
کد:
a = 5
b = 7
- در مرحله بعد هر یک از طرفین کلید قابل ارسال خودشون رو براساس فرمول Y= (g^a یا b) mod p محاسبه و برای طرف مقابل در یک کانال ناامن ارسال میکنن. همونطور که در مرحله قبل گفتیم فرض کردیم رضا طرف a باشه و محمد طرف b. پس رضا و محمد هر کدوم کلیدی که براساس فرمول گفته شده به دست میارن به این شکل خواهد بود
کد:
Y(a)= (g^a) mod p = (11^5) mod 13 = 161051 mod 13 = 7 (کلید محاسبه شده توسط رضا)
Y(b)= (g^b) mod p = (11^7) mod 13 = 19417878 mod 13 = 2 (کلید محاسبه شده توسط محمد)
- اما حالا فصل میوه چینیه! این همه محاسبه و تلاش قراره توی این مرحله به ما نتیجه نهایی رو ارائه بده. توی این مرحله هر دو طرف میتونن با استفاده از فرمول Z= (Y(b) یا Y(a)^(a) یا (b)) mod p کلید نهایی رو استخراج کنن. از مراحل قبلی هم به یاد داریم که طرف a رضا و طرف b محمد هست.
کد:
Z(a) = (Y(b)^a) mod p = (2^5) mod 13 = 6 (کلید نهایی رمزنگاری که توسط رضا محاسبه شده)
Z(b) = (Y(a)^b) mod p = (7^5) mod 13 = 6 (کلید نهایی رمزنگاری که توسط محمد محاسبه شده)
امنیت پروتکل دیفی هلمن:
به طور کلی امنیت این پروتکل بر دو فاکتور مهم استواره:
- طویل بودن دو عدد p و g که در مرحله اول انتخاب میشن توسط یکی از طرفین و برای طرف مقابل ارسال میشه. همونطور که توضیح دادم برای اینکه حملات جامع آماری عملاً غیر ممکن بشن اعداد اول دست کم 200 رقمی رو باید متصور شد.
- در بین توضیحاتی که ارائه شد هیچ مکانیزمی برای شناسایی هویت کاربران تعیین نشده بود. پس با این توصیف یک مهاجم میتونه با حمله مرد میانی یا ژانوس (Middle-Man) خودش رو بین فرستنده یا گیرنده قرار بده و به راحتی از اتفاقاتی که میفته آگاه بشه و کلید رمزنگاری رو ایجاد کنه. پس بسیار مهم هست که علاوه بر مراحل اصلی پروتکل تبادل کلید دیفی هلمن طرحی هم برای شناسایی هویت طرفین اجرا کرد.
امیدوارم این مطلب براتون مفید واقع شده باشه.
با آرزوی بهترین ها...