تاکنون مکانیزمهای زیادی به منظور مبادله کلید بین موجودیتها پیشنهاد شدهاند. این مکانیزمها به مرور و با توجه به حملات مطرح شده به آنها ارتقا یافتهاند. در ادامه تنها چند روش مبادله کلید از بین روشهای مختلف موجود انتخاب شده و بیان میشوند:
1) مبادله کلید با استفاده از رمز متقارن
در این پروتکل فرض میشود یک مرکز توزیع کلید KDC وجود دارد که همه کاربران دارای یک کلید مشترک با آن هستند. حال اگر دو طرف A و B بخواهند یک کلید مشترک با یکدیگر داشته باشند تا با استفاده از آن بتوانند با هم ارتباط امن برقرار کنند، مراحل زیر باید انجام پذیرد:
- A با برقراری ارتباط با مرکز KDC تقاضای ارتباط با B میکند.
- مرکز KDC یک کلید جلسه تصادفی تولید میکند. سپس این کلید را با کلید مشترک بین مرکز و A و همچنین کلید مشترک بین مرکز با B رمز کرده و هر دو را برای A ارسال میکند.
- A کلید جلسه رمز شده با کلید مشترک بین مرکز و A را رمزگشایی میکند و به کلید جلسه دست می یابد.
- A کلید جلسه رمز شده با کلید مشترک بین مرکز و B را برای B ارسال میکند.
- B کلید جلسه رمز شده دریافتی را با کلید مشترک بین مرکز و B رمزگشایی کرده و به کلید جلسه دست مییابد.
- A و B با استفاده از کلید جلسه مشترک ارتباط امن برقرار میکنند.
پروتکل مذکور بر پایه امنیت مرکز KDC استوار است و اگر امنیت آن به خطر بیفتد، کل امنیت سامانه در معرض خطر خواهد بود. به علاوه مرکز قادر است کلیه ارتباطات بین کاربران سامانه را شنود کند.
2) مبادله کلید با استفاده از رمز کلید عمومی
در این پروتکل فرض بر آنست که کلید عمومی کاربران در پایگاه داده مرکزی ذخیره شده و بدین وسیله کاربران میتوانند به کلید عمومی یکدیگر دسترسی داشته باشند. در این صورت A و B به صورت زیر یک کلید مشترک با هم تولید میکنند.
- A کلید عمومی B را از پایگاه داده مرکزی به دست میآورد.
- A کلید جلسه تصادفی را تولید کرده و آن را توسط کلید عمومی B رمز نموده و حاصل را برای B ارسال میکند.
- B کلید رمز شده دریافتی را توسط کلید خصوصی خود رمزگشایی کرده و به این ترتیب به کلید جسه دست مییابد.
- از این به بعد کلیه ارتباطات بین A و B با کلید جلسه مشترک رمز میگردد.
روشی که به وسیله آن میتوان به کلید عمومی دیگران دسترسی پیدا نمود و از طرف دیگر از پیوند بین کلید عمومی و هویت موجودیت مطمئن شد، این است که در سامانه از گواهی کلید عمومی استفاده شود. به این ترتیب مرکز KDC مبادرت به امضای گواهی کلید عمومی موجودیتها میکند. در این راهکار به خطر افتادن امنیت مرکز مشکلات کمتری نسبت به راهکار مذکور در بخش 1 ایجاد میکند زیرا با رخداد مشکل امنیتی در مرکز آنچه حمله کننده به آن دست مییابد کلید خصوصی مرکز است که توسط آن میتواند گواهیهای جعلی ایجاد کند، ولی قادر نخواهد بود تا به کلیدهایی که به کمک گواهیهای صادر شده قبلی مبادله شدهاند، دست یابد.
3) مبادله پیام و کلید
در پروتکلی که در ادامه ذکر خواهد شد نیازی نیست تا موجودیتهای A و B ابتدا کلید جلسه را مبادله کنند تا سپس بتوانند به مبادله امن پیام اقدام کنند. بلکه A میتواند قبل از این که کلید مبادله کند برای B پیام ارسال کند. پروتکل به صورت زیر است:
- A کلید جلسه تصادفی K را تولید کرده و پیام M را توسط آن رمز میکند تا (EK(M به دست آید.
- A کلید عمومی B را از پایگاه داده به دست میآورد.
- A کلید K را توسط کلید عمومی B رمز میکند تا (EB(K به دست آید.
- A پیام رمز شده (EK(M و کلید رمز شده (EB(K را برای B ارسال میکند. برای اطمینان از این که واقعا موجودیت A ارسالکننده است، میتوان امضای A روی کل داده ارسالشده را اضافه نمود.
- B با استفاده از کلید خصوصی خود، کلید جلسه رمز شده را رمزگشایی میکند.
- B پیام رمز شده را با استفاده از کلید جلسه به دست آمده رمزگشایی میکند.
4) پخش پیام و کلید
در پروتکل زیر A میتواند پیام M را برای موجودیتهای B، C و D ارسال کند.
- A کلید جلسه تصادفی K را تولید کرده و پیام M را توسط آن رمز میکند تا (EK(M به دست آید.
- A کلید عمومی B، C و D را از پایگاه داده به دست میآورد.
- A کلید K را توسط کلید عمومی B رمز میکند تا (EB(K به دست آید. A کلید K را توسط کلید عمومی C رمز میکند تا (EC(K به دست آید. A کلید K را توسط کلید عمومی D رمز میکند تا (ED(K به دست آید.
- A پیام رمز شده (EK(M و کلیدهای رمز شده را برای همه ارسال میکند.
- تنها B، C و D میتوانند با استفاده از کلید خصوصی خود، کلید جلسه رمز شده را رمزگشایی کنند.
- تنها B، C و D میتوانند پیام رمز شده را با استفاده از کلید جلسه به دست آمده رمزگشایی کنند.
این پروتکل را میتوان در شبکهای به کار برد که یک سرور مرکزی کل پیامهای دریافتی را از A دریافت کرده و پیام هر موجودیت را برای همان موجودیت ارسال میکند. سرور مرکزی از آنجا که کلید خصوصی موجودیتها را نمیداند قادر به رمزگشایی پیام نخواهد بود.
5) مبادله کلید دیفی-هلمن
پروتکل مبادله کلید دیفی-هلمن پایه روش مبادله کلید در بسیاری از پروتکلهای مطرح از جمله IKE میباشد. در این پروتکل نیازی نیست تا دو طرف هیچ کلید مشترکی از قبل توافق کرده باشند. حتی در پروتکل مبادله کلید دیفی-هلمن نیاز نیست تا دو طرف کلید عمومی یکدیگر را بدانند. امنیت این روش بر سختی محاسبه لگاریتم گسسته در میدان محدود استوار میباشد. ابتدا دو طرف بر سر یک عدد اول بزرگ n و مولد g در پیمانه g ) n در پیمانه n مولد است اگر توانهای آن همه اعداد غیر صفر در پیمانه n را تولید کنند) توافق میکنند. این دو پارامتر نیازی به محرمانگی ندارند و میتوانند در یک کانال به صورت فاش ردوبدل شوند. همچنین n و g میتوانند بین گروهی از کاربران مشترک باشند. این پروتکل به صورت زیر میباشد:
- A یک عدد تصادفی بزرگ x را انتخاب کرده و X=gx mod n را محاسبه کرده و برای B ارسال میکند.
- B یک عدد تصادفی بزرگ y را انتخاب کرده و Y=gy mod n را محاسبه کرده و برای A ارسال میکند.
- A کلید K=Yx mod n را محاسبه میکند.
- B کلید K’=Xy mod n را محاسبه میکند.
K و K’ با هم برابر میباشند و به این ترتیب A و B بر سر یک کلید محرمانه توافق کردهاند. محاسبه کلید با دانستن X و Y عملی نیست. انتخاب g و n تاثیر زیادی در امنیت پروتکل دارد. n باید به گونهای انتخاب شود که n-1)/2) نیز اول باشد. n باید بزرگ باشد زیرا امنیت پروتکل، معادل با سختی فاکتورگیری اعدادی به بزرگی n میباشد.
6) پروتکل ایستگاه به ایستگاه
اشکال پروتکل مبادله کلید دیفی-هلمن این است که A و B راهی برای شناسایی هویت واقعی طرف مقابل ندارند. از این روی این پروتکل اغلب با یک روش احراز اصالت همراه میشود. پروتکلی که در ادامه ذکر خواهد شد با استفاده از امضای دیجیتال و گواهی کلید عمومی احراز اصالت را انجام میدهد:
- A عدد تصادفی بزرگ x را انتخاب کرده و X=gx mod n را محاسبه کرده و برای B ارسال میکند.
- B یک عدد تصادفی بزرگ y را انتخاب کرده و Y=gy mod n را محاسبه کرده و با استفاده از X و y کلید K را به صورت K=Xy mod n محاسبه میکند. سپس X و Y را با استفاده از کلید خصوصی خود امضا کرده و حاصل را توسط کلید K رمز نموده و به همراه Y برای A ارسال میکند. یعنی پیام ارسالی به صورت ((Y,EK(SB(X,Y میباشد.
- A کلید K را به صورت K=Yx mod n محاسبه کرده و پیام رمز شده دریافتی را رمزگشایی کرده و سپس امضا را مورد وارسی قرار میدهد. سپس امضای X و Y را با استفاده از کلید خصوصی خود محاسبه کرده، حاصل را با کلید K رمز کرده و برای A ارسال میکند. یعنی پیام ارسالی به صورت ((EK(SA(X,Y میباشد.
- B پیام دریافتی را رمزگشایی کرده و صحت امضا را مورد وارسی قرار میدهد.