رمز نگاری چیست؟ – جلسه ششم (+ویدئو)
تاریخچه رمزنگاری (Cryptography)
رمزنگاری چیست؟ احتمالا این کلمه را شنیدهاید.
امروزه رمزنگاری برای هر بخش از امنیت سایبری ضروری است.
اما جالب است بدانید که رمزنگاری از مدتها پیش وجود داشته است. رمزنگاری یونانی یا همان «دستنوشته به سبک مخفی» از قدیمیترین دستنوشتههایی است که از کدها و رمزها استفاده کرده است. این رمزنگاری توسط جولیوس سزار برای حفظ حریم خصوصی ارتباطات نظامی استفاده میشد. او هر حرف را با سومین حرف بعدی آن در حروف الفبا جایگزین میکرد.
ایده اصلی در اینجا درهم سازی پیامها قبل از ارسال است به طوری که اگر کسی به جز گیرنده اصلی آن را دریافت کند، متن بیمعنی خواهد نمود و تنها کسانی قادر به خواندن و فهمیدن آن هستند که یا الگوریتم رمزنگاری را با آنها به اشتراک گذاشته باشیم و یا خودشان الگوریتم را تشخیص دهند.
رمز سزار به وسیله استانداردهای مدرن به راحتی شکسته میشود.
رمزنگاری (Cryptography) دیجیتال
ما امروزه پیامها را از طریق اینترنت به صورت دیجیتال ارسال میکنیم.
فرض کنید آلیس میخواهد پیامی را برای باب بفرستد، مشکل اینجاست که ما در دنیای شبکههای رمزنگاری نشده زندگی میکنیم. در اینترنت همیشه شخص ثالثی هست که ارتباطات ما را مدیریت میکند.
برقراری ارتباط روی یک شبکه عمومی رمزنگاری نشده به معنی آن است که هر کسی در مسیر ترافیک اینترنت از نقطه A به نقطه B، میتواند پیام را رهگیری کرده و بخواند.
این عمل شبیه ارسال یک پیغام با کارت پستال (البته به شرطی که داخل پاکت نامه گذاشته نشده باشد) توسط پست است. واضح است که هرکسی از جمله راننده کامیون حمل نامهها و یا افراد واقع در مرکز پردازش پست میتوانند آن نامه را بخوانند.
اما اگر آلیس چیز مهمی مثلا اطلاعات بانکی خود را ارسال کند، نمیخواهد کسی قادر به خواندن آن باشد. در اینجا سوالی پیش میآید: «آیا راهی وجود دارد که آلیس از طریق شبکه عمومی رمزنگاری نشده، پیامی را برای باب بفرستد و مطمئن باشد که به جز باب کسی نمیتواند پیام مذکور را بخواند؟»
خوشبختانه پاسخ این سوال «مثبت» است. راه حل این مشکل، استفاده از رمزنگاری «کلید عمومی» است.
مفاهیم رمزنگاری (Cryptography) با کلیدهای عمومی و خصوصی
باب برای دریافت پیامهای رمز شده به دو کلید مرتبط به هم نیاز دارد: یکی «کلید عمومی» که آن را با دیگران به اشتراک میگذارد تا از طریق آن برای باب پیام بفرستند و دیگری «کلید خصوصی» که آن را نزد خود محفوظ نگه میدارد. به این دو کلید به ترتیب کلید عمومی و کلید خصوصی گفته میشود، این دو کلید مانند قفل و کلید بوده و یک جفت منطبق با هم هستند. کمی پیچیده است که برای هر دو مفهوم از لفظ «کلید» استفاده کنیم زیرا کلید عمومی تا حدودی شبیه به مفهوم قفل عمل میکند!
کلید عمومی A برای رمزنگاری یا همان قفل کردن پیامها و کلید خصوصی A برای رمزگشایی پیامهایی استفاده میشود که دقیقا با کلید عمومی A رمز شده باشند. چون افراد، کلید عمومی را آشکارا با همه به اشتراک میگذارند به آن کلید عمومی میگویند. فرض کنید کلید عمومی برای آلیس در یک شبکه باز فرستاده شود، این کلید به تنهایی نمیتواند پیامی را رمزگشایی کند.
کلید عمومی A فقط میتواند پیامها را رمزنگاری کند و هرگز نمیتواند پیامهایی را که رمزنگاری کرده، رمزگشایی کند. بنابراین اصلاً مهم نیست که چه کسانی در شبکه، کلید عمومی ما را دارا هستند.
کلید خصوصی A، کلیدی است که باید به صورت محرمانه حفظ شود چون هم قادر به رمزگشایی بوده و هم میتواند پیغامهای کدگذاری شده با کلید عمومی A را باز کند. پس به همین دلیل است که باب باید کلید خصوصی را به صورت محرمانه نگهداری کند! آلیس از کلید عمومی باب به عنوان تابع رمزکننده استفاده کرده و پیام خود را به متنی بیمعنی تبدیل میکند که به آن، متن رمز شده میگویند.
این متن رمز شده را میتوان به صورت عمومی بر روی هر شبکهای که به حالت باز (Open) کار میکند ارسال کرد. شخص سوم ممکن است ارتباط آلیس و باب را ببیند ولی نمیتواند بفهمد آن دو چه میگویند. از آنجا که آلیس پیامها را با کلید عمومی باب رمز کرده است تنها کلیدی که میتواند این پیامها را رمزگشایی کند، کلید خصوصی باب است و چون تنها کسی که کلید خصوصی باب را در اختیار دارد فقط خود باب است بنابراین آلیس مطمئن میشود که به جز او هیچ شخص دیگری نمیتواند پیامها را بخواند!
این اصل را به عنوان یک فرایند یک طرفه ریاضی در نظر بگیرید: اگر پیامی با کلید عمومی شخص خاصی رمزنگاری شود آنگاه تنها کلیدی که میتواند آن پیام را از رمز خارج کند، کلید خصوصی همان شخص است. رمز گشایی یا هک پیام بدون داشتن این کلید خصوصی غیرممکن است!
ارتباط رمزنگاری و بلاکچین
حال ممکن است برایتان این سوال پیش بیاید که ارتباط دو مفهوم رمزنگاری و بلاکچین با یکدیگر چیست؟ رمز نگاری کلید عمومی برای ایجاد امنیت در بلاکها استفاده میشود. این رمز نگاری پایه و اساس کیف پول دیجیتال (Digital Wallet)، معاملات توکن (Token Trading) و تائید هویت است. در مورد این مسائل، در درسهای بعدی صحبت خواهیم کرد.
کاربرد اصلی «رمزنگاری با کلید عمومی» ایجاد یک تاریخچه قابل راستیآزمایی (Verification) از رکوردها و دادههای مرتبط با تراکنشها است. این رمزنگاری ما را قادر خواهد ساخت سیستمهای غیرمتمرکزی ایجاد کنیم که توسط جامعه جهانی، قابل اجرا و اداره باشند.