تبادل ایمن کلید رمزنگاری به کمک پروتکل دیفی هلمن
#1
Lightbulb 
به نام خدا؛
سلام دوستان امیدوارم حالتون خوب باشه...
تبادل کلید رمزنگاری (کلید خصوصی یا عمومی در رمـزنگاری نامتقارن و متقارن) در یک محیط (کانال) ناامن به صورت مطمئن و ایمن بدون شک اهمیت زیادی داره. برای تبادل ایمن کلید رمزنگاری رالف مرکل در سال 1976 راه کاری به نام دیفی هلمن (Diffie–Hellman) ارائه کرده که این روزها در بسیاری از پیام رسان ها مثل واتس اپ و تلگرام و ... از این الگوریتم (پروتکل) برای تبادل ایمن کلید رمزنگاری استفاده میشه.
شرح مفصل پروتکل دیفی هلمن:
فرض کنیم رضا و محمد قصد دارن از طریق یک چت روم با هم دیگه اطلاعاتی (شامل متن یا انواع فایلها) رو تبادل کنن. اطلاعات تبادل شده قراره با الگوریتم RSA رمزنگاری بشن. همینطور که آگاه هستین در رمزنگاری RSA یک کلید عمومی و یک کلید خصوصی داریم. در واقع کلید عمومی توسط هر دو طرف قابل استفاده هست و تنها برای رمزنگاری به کار میاد و فاقد هرگونه ارزشی برای رمزگشایی هست. چیزی که در واقع به ما در رمزگشایی کمک میکنه کلید خصوصی هست که باید به صورت بسیار ایمن اون رو نگهداری کنیم. حالا چطور طرفین (رضا و محمد) میتونن بر سر یک کلید خصوصی واحد اون هم در یک کانال (محیط) ارتباطی نه چندان ایمن توافق کنن؟
(دقت کنین که من در اینجا از محاسبات الگوریتم RSA صرف نظر کردم چرا که برای محاسبه کلید خصوصی باید وارون ضربی یکسری از پارامترها رو محاسبه کرد که باعث پیچیده شدن مطلب میشه و از بیانش صرف نظر میکنم)
  • ابتدا طرفین (محمد و رضا) بر سر دو عدد اول p و g توافق میکنن. یعنی محمد یا رضا این دو عدد اول رو ایجاد می کنن و برای طرف مقابل خودشون در یک کانال ناامن ارسال میکنن. دقت کنین که اصلاً نیازی نیست که این دو عدد اول رمزنگاری بشن و همینطور که گفتم میتونیم اونها رو در یک محیط ناامن هم به راحتی تبادل کنیم.​
 دقت کنین که در استفاده کاربردی از این پروتکل دو عدد اولی که تصادفی ایجاد میشن برای اینکه مهاجم یا مهاجمین نتونن به راحتی اون رو با تکنیک های حملات جامع آماری حدس بزنن حداقل باید 200 رقم (یعنی 16072 بایت) داشته باشن. اینجا چون جنبه مثال و آموزش وجود داره من این اعداد رو خیلی کوچک در نظر می گیرم. اینکه چرا از اعداد اول توی رمزنگاری و به خصوص این پروتکل استفاده میشه دلیلش ساده است چون در حقیقت هیچ نظمی برای اعداد اول تا این لحظه که دارم این مطلب رو مینویسم کشف نشده!
فرض کنیم محمد دو عدد اول رو به این شکل انتخاب کنه و بعد برای رضا ارسال کنه:
کد:
p = 13
g = 11
  • در مرحله بعد هم محمد و هم رضا یک عدد صحیح اول رو به صورت تصادفی انتخاب میکنن و اون عدد رو برای خودشون نگه میدارن و جایی ارسال نمیکنن. نکته ای که هست اینجاست که طرفین باید عدد صحیحی که به صورت تصادفی انتخاب می کنن رو کوچکتر از عدد p در نظر بگیرن. با این توضیحات اگر رضا عدد رو انتخاب کرده باشه و محمد عدد رو داریم:
کد:
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 (کلید محاسبه شده توسط محمد)
دقت کنین عملگر به معنی توان و عملگر mod به معنی باقی مانده تقسیم هست.
  • اما حالا فصل میوه چینیه! این همه محاسبه و تلاش قراره توی این مرحله به ما نتیجه نهایی رو ارائه بده. توی این مرحله هر دو طرف میتونن با استفاده از فرمول Z= (Y(b) یا Y(a)^(a) یا (b)) mod p کلید نهایی رو استخراج کنن. از مراحل قبلی هم به یاد داریم که طرف رضا و طرف 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 (کلید نهایی رمزنگاری که توسط محمد محاسبه شده)
حالا اگر دقت کنین هر دو مقدار Z(a) و Z(b) با هم برابر هستن. تبریک میگم! رضا و محمد تونستن با موفقیت بر سر یک کلید واحد بدون اینکه کوچکترین اطلاعات حیاتی درز پیدا کنه توافق کنن.
امنیت پروتکل دیفی هلمن:
به طور کلی امنیت این پروتکل بر دو فاکتور مهم استواره:
  • طویل بودن دو عدد p و g که در مرحله اول انتخاب میشن توسط یکی از طرفین و برای طرف مقابل ارسال میشه. همونطور که توضیح دادم برای اینکه حملات جامع آماری عملاً غیر ممکن بشن اعداد اول دست کم 200 رقمی رو باید متصور شد.
  • در بین توضیحاتی که ارائه شد هیچ مکانیزمی برای شناسایی هویت کاربران تعیین نشده بود. پس با این توصیف یک مهاجم میتونه با حمله مرد میانی یا ژانوس (Middle-Man) خودش رو بین فرستنده یا گیرنده قرار بده و به راحتی از اتفاقاتی که میفته آگاه بشه و کلید رمزنگاری رو ایجاد کنه. پس بسیار مهم هست که علاوه بر مراحل اصلی پروتکل تبادل کلید دیفی هلمن طرحی هم برای شناسایی هویت طرفین اجرا کرد. 

امیدوارم این مطلب براتون مفید واقع شده باشه.
با آرزوی بهترین ها...
غایب
  پاسخ


 سپاس شده توسط: mostafanastary ، kakmamad ، [email protected] ، amin hosseini


موضوع‌های مشابه…
موضوع نویسنده پاسخ بازدید آخرین ارسال
Star مهم آموزش خروجی اندروید روی سیستم شخصی rezamms 127 76,509 1402/8/24، 09:00 عصر
آخرین ارسال: mehdiosw
  مهم آموزش تصویری خروجی مستقیم - یکبار برای همیشه! rezamms 33 17,755 1401/2/13، 09:39 عصر
آخرین ارسال: kamran_cn
  خروجی اندرید davinmstr1 2 2,163 1400/8/4، 10:23 عصر
آخرین ارسال: ᔕinaᗪehghani
  AAB (بسته برنامه اندروید) چيست؟ + نحوه خروجي گرفتن در كرودوا ᔕinaᗪehghani 15 7,032 1400/6/21، 01:55 صبح
آخرین ارسال: mehdi1100
  رفع مشکل خروجی فونگپ (: M.gh 11 7,343 1400/4/10، 02:17 صبح
آخرین ارسال: oak

پرش به انجمن: