گواهینامه الکترونیک یا Digital Certificate در دنیای کامپیوتر نوعی مدرک الکترونیک برای تضمین هویت سیستم است که از آن استفاده میکند. به عنوان مثال، گواهینامه یک مدرک است که اگر توسط راهنمایی و رانندگی تایید شود، اعتبار مییابد.
Digital Certificate توسط نهادهای معتبر در شبکههای کامپیوتری صادر میشود که به آن Certificate Authorities (CAs) گفته میشود. در دنیای واقعی وقتی فردی درخواست گواهی نامه رانندگی میدهد، ابتدا فرد مسئول پس از احراز مواردی اعم از، هویت شخص درخواست دهنده، اطمینان از صلاحیتهای مورد نیاز، پاس کردن امتحانها، مدرک مورد نظر را صادر میکند. در دنیای شبکههای کامپیوتری نیز چنین است و CA ها نقش نهاد معتبر را بازی میکنند.
موارد مورد استفادهCertificate ها:
- Authentication
- Encryption
- Data Integrity
Digital Signature
برای درک بهتر Digital Certificate، باید در ابتدا Digital Signature را بدانیم. هر مدرک دیجیتال، برای اعتبار داشتن، نیاز به یک امضاء دیجیتال دارد. این امضا دیجیتال در دنیای واقعی مانند امضا شخص ذیصلاح برای ارسال نامه از طریق یک سازمان یا نهاد است. امضا نوعی اعتبار بخشیدن به متنی نامهای است که از سمت شما ارسال شده است و باید تایید شود. در نامه ارسالی به امضا رسیده، عدم خط خوردگی بودن نامه مشخص کننده این است که متن نامه کم و زیاد نشده و اصالت نامه حفظ شده است.
تفاوت امضاهای دنیای واقعی با دنیای دیجیتال در این است که امضاهای دستی (دنیای واقعی) ثابتاند و شکل آنها نباید تغییر کند در حالی که امضاهای دیجیتالی ماهیتاً وابسته به پیاماند و به ازای هر پیام تغییر میکنند. برای digital signature نیاز به کلید داریم و کار کلید رمزنگاری داده است.
رمزنگاری و کلیدها
رمزنگاری داده به دو صورت متقارن و نامتقارن انجام میشود.
در رمزنگاری نا متقارن، دو کلید وجود دارد. کلید عمومی (public key) و کلید خصوصی (private key). در رمزنگاری نامتقارن داده با کلید عمومی رمزنگاری یا hash میشود و فقط با کلید خصوصی قابل بازگشت به حالت عادی است. کلید خصوصی در اختیار صاحب آن به صورت سری و محرمانه نگهداری میشود. در این صورت، همه میتوانند داده را رمزنگاری کنند، اما فقط صاحب کلید خصوصی میتواند آنها را از حالت رمزنگاری خارج کند. از معروف ترین رمزنگاری های نامتقارن میتوان به RSA اشاره نمود. از موارد رمرزنگاری دانشگاهی میتوان به سالسا اشاره نمود که اجرایی نشده است.
در رمزنگاری متقارن داده با هر کلیدی رمزنگاری شود با همان باز میشود.
فرآیند ایجاد امضا دیجیتال
برای ایجاد امضا دیجیتال در یک متن، در ابتدا باید پیغام را با الگوریتمهایی مانند MD5 رمزنگاری یا hash نمود. خروجی رمزنگاری انجام شده اصطلاحا یک digest یا چکیده میشود. خروجی MD5 یا الگوریتمهای one-way hash همیشه ثابت است. یعنی هر چقدر طول پیغام باشد، خروجی اش 128 بیت میشود. الگوریتم های one-way hash، الگوریتم هایی اند که برگشت پذیر نیستند مانند الگوریتم تقسیم، باقیمانده تقسیم بر 3.
در سیستم A، پیغام در ابتدا هش یا digest شده و سپس digest با کلید خصوصی رمز میشود. حاصل رمز شدن digest توسط کلید خصوصی digital signature است. امضاء کنار پیغام اضافه میشود و به مقصد می رسد.
در سیستم مقابل پس از دریافت پیغام، برای بررسی محتوی پیام، آنرا با الگوریتم MD5 (الگوریتم مشابهی که در سمت مقابل استفاده شده) رمزنگاری کرده و خروجی مختصر شده یا digest را بدست میآورد. از آنجایی که امضا دیجیتال اضافه شده به پیام، حاصل رمزنگاری با کلید خصوصی در سمت مقابل است، پس در این سمت با کلید عمومی میتوان آنرا از حالت رمزنگاری خارج کرد. مقدار بدست آمده باید با مقدار هش شده متن اصلی برابر باشد. در صورتیکه این مقدار برابر باشد، یعنی، محتوای متن اصلی (integrity) تغییر نکرده است.
شاید سوال مطرح شود که کسی که متن را تغییر میدهد، میتواند امضا دیجیتال را نیز تغییر دهد. باید به این نکته توجه کنید، که امضا دیجیتال بایستی با کلید خصوصی ای که فقط در اختیار نهاد معتبر است ایجاد گردد و کسی که فقط کلید عمومی را دارد نمیتواند این کار را انجام دهد.
علت اعتبار داشتن کلید عمومی ارائه شدن توسط نهادهای معتبر در شبکه (یا اینترنت) است. این نهادهای معتبر به صورت پیش فرض در محلهای خاص خود در سیستمعامل تعریف شدهاند. کلید عمومی یا Public key در قالب یک گواهی تایید شده توسط CA server از سیستم مورد نظر دریافت میشود. این گواهی برای تایید معتبر بودن خود یک digital signature دارد که از سروری است که مورد تایید سیستم شماست.
گواهی یا certificate یک فایل از CA server که public key مقصد را در خود دارد میباشد. این کلید به خاطر اضافه شدن digital signature سرور CA به آن (که سرور CA مورد تایید است) جعل نشدنی است.
برای دیدن CA ها از طریق مسیر زیر میتوان اقدام نمود.
یا به عنوان مثال زمانی که به سایت هایی مانند google می روید certificate اش به رنگ سبز است چون گواهی اش توسط CA server های مورد تایید سیستم شده تایید شده است.
سایت google را Google Internet Authority G2 تایید کرده که خودش توسط GeoTrust تایید شده است. تایید کننده نهایی یعنی همان GeoTrust را از آنجایی قبول داریم که در سیستممان در قسمت گواهی ها نگاه کنیم
GeoTrust را در سیستم عامل داریم.
که یکی از مواردی که در این گواهی وجود دارد public key است.
برای ایجاد کلیدهای معتبر، این گواهیها باید از مراجع معتبر دریافت شود که بروی سیستم عامل ها معرفی شده باشند.
زمانی که بخواهید برای وب سایت خود SSL تهیه نمایید، درخواست خود را به شرکت های معتبر و مورد تایید جهانی ارائه میکنید. پس از بررسی برای شما فایل یا فایلهایی ارسال میشود که از آنها میتوان public key و private key را ایجاد نمود. Private key در سرور سرویس دهنده نصب میشود و public key در قالب گواهی همراه سرویس وب دریافتی توسط کاربر به کاربر ارائه می گردد. این گواهی همانند نمونه گواهی گوگل که در بالا دیدید، به دلیل تایید توسط CA های مورد تایید سیستم شما، مورد تایید قرار میگیرد.
جلوگیری از man in the middle در ارتباط امن
برای ایجاد یک ارتباط امن براساس digital certificate، مقصد public key اش را برایمان ارسال میکند. سیستم ما با کلید دریافت شده، شروع به رمزنگاری داده میکند. حال اگر هنگام دریافت public key، سیستم مهاجم public key خود را (به جای public key اصلی) برایمان ارسال کند، از آنجایی که کلید ها را حفط نیستیم آنرا قبول میکنیم. در این حالت، زمانی که ترافیک به دست مهاجم برسد میتواند آن را باز کند. برای جلوگیری از این اتفاق، public key دریافتی از سیستم مقصد با سرور CA داخل شبکه چک میشود. حال باید اعتبار CA نیز بررسی شود. از قبل سرور های CA در سیستم اضافه شده اند و سرور دیگری نمیتواند به عنوان سرور معتبر CA خود را معرفی کند. البته امکان اضافه کردن دستی CA ها وجود دارد.