رمزنگاری چیست؟
رمزنگاری یا Cryptography ابزاری است که برای انتقال و نگهداری امن اطلاعات استفاده میشود. هدف رمزنگاری این است که با استفاده از ریاضیات، داده را به گونهای نگهداری یا ارسال کند که فقط کسانی که مجاز هستند، به اصل دادهها دسترسی داشته باشند و از دستیابی افراد دیگر و یا حملهکنندهها جلوگیری کند. در هر مرحله از فرآیند نگهداری یا انتقال اطلاعات، ممکن است افرادی به جز افراد مجاز، بستههای داده یا اطلاعات نگهداشته شده را در اختیار داشته باشند اما دسترسی به محتوای اصلی آنها، برای این افراد غیرممکن خواهد بود.
عملکرد رمزنگاری
فرض کنید که قرار است بستهای ارسال کنید و میخواهید محتوای بسته محرمانه باقی بماند. برای ارسال این بسته، میتوانید آن را درون جعبههایی قرار دهید که قفلهای متفاوتی دارند. بعضی از آنها، با کلید مخصوص به خود باز میشوند، بعضی نیاز به رمز دارند، قفل تعدادی با اثر انگشت باز میشود و … . در دنیای رمزنگاری، این جعبهها مانند الگوریتمهای رمزنگاری هستند که هر کسی که قرار است به اصل دادهها دسترسی داشته باشد، باید از آن آگاه باشد. بازکنندههای قفل، مانند کلیدها در رمزنگاری هستند و فقط کسانی که آنها را دارند به دادهها دسترسی خواهند داشت. البته در دنیای واقعی، ممکن است جعبهها امنیت کافی را نداشته باشند و الگوریتمهای رمزنگاری، بسیار امنتر از مثال بیان شده عمل میکنند.
دانش Cryptography، تضمین می کند که دادههای رمز شده، چندین ویژگی مشترک را خواهند داشت. اولین ویژگی، محرمانگی است. محرمانگی به این معنی است که تنها افرادی که مجاز هستند، به دادهها دسترسی داشته باشند. ویژگی دوم، صحت اطلاعات است. ممکن است مهاجم قصد داشته باشد بدون دسترسی به اصل داده، محتوای آن را تغییر دهد. رمز کردن یک متن، باعث میشود که طرفینی که اطلاعات را مبادله میکنند، اطمینان داشته باشند که محتوایی که دریافت کردهاند، تغییر نیافته است یا اگر تغییر کرده، آگاه میشوند و محتوای دریافتی را به عنوان محتوای درست نمیپذیرند.
ویژگی بعدی، این است که طرفین ارسال پیام میتوانند هویت خود را به دیگری اثبات کنند و از این طریق، دریافتکننده اطمینان داشته باشد که پیام را از فرد درستی دریافت کرده است یا ارسال کننده مطمین باشد که برای گیرندهی واقعی ارسال میکند. با استفاده از همین ویژگی، ارسال پیام بهوسیلهی یک نفر را میتوان اثبات کرد و بنابراین ارسال کننده مدتی بعد از ارسال پیام، نمیتواند منکر ارسال آن شود.
انواع روشهای رمزنگاری
هر پیام را میتوان به سه روش مختلف رمز کرد. در دو روش از این روش، دریافتکننده میتواند به شرط داشتن کلید به محتوای پیام دسترسی داشته باشد. در روش سوم، ارسال محتوای اصلی پیام مدنظر نیست و فقط برای تایید صحت دادههای ارسال شده استفاده میشود. در ادامه، به بررسی هر یک از روشها پرداخته شده است.
۱- رمزنگاری متقارن (symmetric encryption): در رمزنگاری متقارن، هر دو طرف ارتباط از کلید یکسانی استفاده میکنند و محتوای ارسال شده با همان کلیدی رمزگشایی میشود که رمز شده است. مهمترین نکته در این روش، شیوهی توافق دو طرف روی کلید مشترک است. در علم رمزنگاری، فرض میشود که همهی افراد، حتی مهاجم، به تمام دادههای ردوبدل شده دسترسی دارند و فقط کلیدها بهشکل خصوصی هستند. با این فرض، دو طرف باید به گونهای پیامهای اولیه برای رسیدن به کلید مشترک را مبادله کننده که مهاجم حتا با دانستن محتوای آنها، نتواند به کلید مشترک دست پیدا کند. یکی از الگوریتمهای معروف برای مبادله پیامهای اولیه و رسیدن به کلید مشترک، الگوریتم Diffie-Hellman است. عمومن رمزنگاری متقارن، سرعت بیشتری از رمزنگاری نامتقارن دارد و در انتقال پیامهایی با حجم بالاتر که رمزگشایی آنها به زمان بیشتری نیاز دارد، استفاده میشود.
۲- رمزنگاری نامتقارن (asymmetric encryption): در رمزنگاری نامتقارن، هر یک از دو طرف، از کلیدهای مخصوص به خود استفاده میکنند. در این روش، از دو نوع کلید به نامهای کلید عمومی (public key) و کلید خصوصی (private key) استفاده میشود. هر جفت کلید عمومی و خصوصی را مانند یک جفت قفل (کلید عمومی) و کلید مربوط به آن (کلید خصوصی) در نظر بگیرید. ارسال کننده متن را با استفاده از کلید عمومی دریافتکننده (که میتواند در اختیار همه قرار داشته باشد) رمز میکند و دریافتکننده با استفاده از کلید خصوصی خود، میتواند متن را رمزگشایی کند. این روش، تا زمانی که کلید خصوصی دو طرف محرمانه باشد و کسی به آن دسترسی نداشته باشد، امن محسوب میشود.
۳- توابع درهمساز (hash function): توابع درهمساز، به توابعی گفته میشوند که به ازای هر رشته از کاراکترها، عدد یکتایی ایجاد میکنند. این توابع یک به یک هستند، به این معنی که مقدار hash محاسبه شده برای دو رشتهی متفاوت، الزامن باید متفاوت باشد. ویژگی دیگر این توابع آن است که از روی مقدار hash، نمیتوان به اصل رشته دسترسی داشت ولی اگر کسی رشتهی اصلی، مقدار hash آن و تابع hash را داشته باشد، میتواند مقدار hash رشته را محاسبه کند و تایید کند hashای که از ابتدا وجود داشته، متعلق به این رشته بوده است یا نه. در بعضی از الگوریتمهای امنیت، ارسال کننده در کنار مقدار رمزشدهی یک رشته، مقدار hash رشته را هم ارسال میکند. بنابراین، دریافتکننده میتواند تشخیص دهد که پیام دریافت شده، در طول مسیر تغییر کرده یا پیام به درستی منتقل شده است. کاربرد دیگر توابع درهمساز، در نگهداری passwordها است. زمانی که یک کاربر در یک سایت ثبتنام میکند، یک نامکاربری و گذرواژه برای خود انتخاب میکند و این اطلاعات در یک پایگاه داده ذخیره میشوند. میتوان به جای اصل آنها، مقدار hash محاسبه شده را نگه داشت. به این ترتیب، زمانی که کاربر بخواهد دوباره وارد شود، مقدار hash اطلاعاتی که وارد کرده است، با hash ثبت شده در پایگاه داده مقایسه میشود و با توجه به یکبهیک بودن تابع hash، اگر این دومقدار یکسان باشند، اجازهی ورود به کاربر داده میشود.