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

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

این پروتکل، در سال ۱۹۷۶ توسط دو دانشمند
رمزشناس به نام‌های ویتفیلد دیفی و مارتین هلمن طراحی شده و در قالب یک مقالهٔ علمی منتشر گردیده‌است. مطرح شدن این پروتکل، گام مهمی در معرفی و توسعهٔ رمزنگاری کلید عمومی یا الگوریتم نامتقارن به حساب می‌آید.

## تاریخچه پروتکل دیفی-هلمن در رمزنگاری
تا قبل از انتشار این پروتکل، رمزنگاری بیشتر به صورت رمزنگاری کلید متقارن مورد استفاده قرار می‌گرفته‌است. در سال ۱۹۷۶، با انتشار این پروتکل، پایهٔ اولیهٔ رمزنگاری کلید نامتقارن بنا شد که بعداً با فعالیت‌های رالف مرکل تکمیل گردید. مدتی بعد نیز الگوریتم رمز مشهور آراس‌ای که از مبانی مشابهی برخوردار است مطرح گردید.

در سال ۱۹۹۷، یک مؤسسه تحقیقاتی جاسوسی در انگلستان ادعا کرد که پروتکل دیفی-هِلمن، قبل از سال ۱۹۷۶ توسط فردی به نام مالکولم ویلیامسون در آن مؤسسه اختراع شده و تنها به دلایل امنیتی از انتشار آن جلوگیری شده بوده‌است.

در سال ۲۰۰۲، مارتین هِلمن در کتابش خاطرنشان کرد که رالف مِرکل نیز به همان اندازهٔ دیفی و هِلمن در ایجاد و گسترش رمزنگاری کلید نامتقارن تأثیرگذار بوده‌است و پیشنهاد کرد که این پروتکل به نام دیفی-هِلمن-مِرکل شناخته شود.

در سال‌های بعد از ۱۹۷۶ و با گسترش تدریجی رمزنگاری کلید نامتقارن، پروتکل‌های تبادل کلید مختلفی با استفاده از پروتکل دیفی-هلمن و با قابلیت‌های بیشتری نسبت به آن طراحی شده‌است.

## جزئیات پروتکل دیفی-هلمن
در فرمول‌های پیشنهادی اولیه این پروتکل، از گروه همنهشتی اعداد صحیح با پیمانهٔ عدد اول *p* و عملگر ضرب اعداد صحیح استفاده شده‌است. در این گروه عددی، یک ریشهٔ اولیه محاسبه می‌شود که آن را با *g* نشان می‌دهند.
left|thumb|450px|ایجاد و تبادل کلید رمز با پروتکل دیفی-هلمن
سپس مراحل زیر که در شکل روبرو هم نشان داده شده‌است، انجام می‌شود:
# مقدار عدد اول دلخواه بزرگ p (پیمانهٔ عمل ضرب) و مقدار محاسبه شده برای g میان دو طرف رد و بدل می‌شود.
# هر یک از دو طرف یک عدد صحیح دلخواه (a و b) را به صورت پنهانی در نظر می‌گیرد.
# هر یک از دو طرف با استفاده از عمل به توان رسانی پیمانه ای و مقادیر قبلی (p و g و مقدار پنهانی)، یک مقدار جدید محاسبه کرده (A و B) و برای طرف مقابل ارسال می‌کند.
# طرف اول با استفاده از مقادیر p و g و a و B، و طرف دوم با استفاده از مقادیر p و g و b و A، و با همان عمل توان پیمانه‌ای مقدار جدیدی را محاسبه می‌کنند. مقدار جدید محاسبه شده -چنان‌که فرمول نشان می‌دهد- در دو طرف یکسان و همان کلید رمز مشترک است.
توجه به دو نکته دربارهٔ این پروتکل لازم است:
* مقادیر a و b و مقدار مشترک محاسبه شده، هرگز مستقیماً از کانال ارتباطی عبور نمی‌کنند. بقیهٔ مقادیر یعنی p و g و A و B از کانال ارتباطی عبور می‌کنند و برای دیگران قابل دسترسی هستند.
* دشواری حل مسئلهٔ لگاریتم گسسته تضمین می‌کند که مقادیر a و b و مقدار کلید رمز مشترک، با داشتن مقدار اعداد دیگر در عمل قابل محاسبه نباشد.

## مثال عددی
در اینجا برای سهولت در فهم مطلب یک مثال عددی از ایجاد و تبادل کلید با پروتکل دیفی-هلمن ارائه شده‌است. در عمل، اعدادی که مورد استفاده قرار می‌گیرند بسیار بزرگ هستند که ممکن است بیش از صد رقم داشته باشند.
* دو طرف روی مقدار عدد اول ۲۳ = *p* و مقدار اولیهٔ ۵ = *g* توافق می‌کنند.
* طرف اول مقدار پنهانی ۶ = *a* را انتخاب و (*g<sup>a</sup>* mod *p*) را برای طرف دوم ارسال می‌کند.
** ۸ = (۲۳ ۵۶mod)
* طرف دوم مقدار پنهانی ۱۵ = *b* را انتخاب و (*g<sup>b</sup>* mod *p*) را برای طرف اول ارسال می‌کند.
** ۱۹ = (۲۳ ۵۱۵mod)
* طرف اول مقدار *g<sup>b</sup>* mod *p*)*<sup>a</sup>* mod *p*) را محاسبه کرده و به عنوان کلید رمز مشترک در نظر می‌گیرد.
** ۲ = (۲۳ ۱۹۶mod)

* طرف دوم مقدار *g<sup>a</sup>* mod *p*)*<sup>b</sup>* mod *p*) را محاسبه کرده و به عنوان کلید رمز مشترک در نظر می‌گیرد.
** ۲ = (۲۳ ۸۱۵mod)

## امنیت پروتکل دیفی-هلمن
امنیت این پروتکل مبتنی بر دشواری حل مسئلهٔ لگاریتم گسسته است.

در حال حاضر مسائل زیر باید در ارتباط با امنیت پروتکل دیفی-هلمن لحاظ گردد:
* بر اساس قدرت محاسباتی رایانه‌های امروزی، استفاده از عدد اول p با حدود ۳۰۰ رقم و اعداد a و b با حدود ۱۰۰ رقم می‌تواند شکستن امنیت این پروتکل و یافتن کلید رمز مشترک را در عمل غیرممکن سازد.
* در عمل هر عدد اول بزرگی را نمی‌توان در این پروتکل به کار گرفت، بلکه لازم است عدد p مورد استفاده یک عدد اول امن باشد. در غیر این صورت شکستن امنیت این پروتکل و یافتن کلید رمز مشترک، با استفاده از الگوریتم‌هایی مانند الگوریتم پولیگ-هلمن، نسبتاً آسان و در زمان کمتری قابل انجام خواهد شد.
* اعداد پنهانی a و b باید به صورت عدد تصادفی تولید شوند و مولد عدد تصادفی مورد استفاده هم نباید تکرارپذیر و قابل پیش‌بینی باشد. در غیر این صورت، یافتن کلید رمز مشترک آسان‌تر و در زمان کمتری قابل انجام خواهد شد.

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

برای مقاوم کردن پروتکل دیفی-هلمن در مقابل این مشکل، لازم است که یک مکانیزم برای شناسایی دو طرف به مراحل این پروتکل اضافه شود. همین امر باعث شده‌است که پروتکل‌های مختلف شناسایی با استفاده از مکانیزم تبادل کلید دیفی-هلمن ارائه شود.

## جستارهای وابسته
* رمزشناس
* ویتفیلد دیفی
* مارتین هلمن
* رمزنگاری کلید نامتقارن
* آراس‌ای
* لگاریتم گسسته
* توان پیمانه‌ای

## منابع
* ویکی‌پدیای انگلیسی

## پیوند به بیرون
* نگاهی به Diffie–Hellman Key Exchange

رده:الگوریتم‌های رمزنگاری
رده:پروتکل‌های رمزنگاری
رده:رمزنگاری با کلید نامتقارن