این نوشته ترجمه ای از مقاله انگلیسی به همین عنوان هست که تو سایت مدیوم دیدم، دلیل اینکه این مقاله را برای ترجمه انتخاب کردم; سادگی بیان و مثال قابل درکی بود که در این مقاله استفاده شده است. لینک مقاله اصلی در سایت مدیوم :
کریپتوگرافی یا رمزنگاری یکی از موضوعاتی هست که درک کردن آن کمی مشکل میباشد. اثباتهای ریاضی فراوانی در کریپتوگرافی دیده میشود. اگر شما یک توسعه دهنده در زمینه رمزنگاری نیستید ضرورتی برای درک پیچیدگیهای سطح بالا ندارید و در درک این مقاله مشکلی نخواهید داشت.
آلیس ، باب و.... کبوتر؟
آلیس ، باب ، اوا ، مارولی و ... اسامی هستند که در اکثر کتاب ها و مقالات رمزنگاری و امنیت از آنها برای توضیح یک مثال استفاده میشود. شما میتوانید هر اسم دلخواهی جایگزین کنید.
هر فعالیتی که روی اینترنت انجام میدهید ( خواندن این مقاله، خریدکردن از آمازون ، آپلود تصاویر گربه ) از طریق ارسال و دریافت پیام روی سرور انجام میشود.
بیاید تصور کنیم که پیامها توسط کبوتر نامه بر تحویل داده میشوند. ممکنه براتون کمی متفاوت و عجیب باشه ولی به من اعتماد کنید و بدانید که HTTPS از روش مشابه استفاده میکند هرچند بسیار سریعتر.
در این مقاله به جای صحبت کردن درباره سرور ها، کلاینتها و هکرها، در مورد آلیس ، باب و مالوری صحبت خواهیم کرد. اگر این اولین تلاش شما برای فهم کریپتوگرافی نیست پس با این اسامی آشنایی دارید چراکه این اسامی به طور گسترده در مقالات علمی استفاده میشوند.
ارتباط اولیه و ساده
اگر آلیس بخواهد یک پیام به باب ارسال کند، پیام را به پای کبوتر نامه بر میبندد و سپس کبوتر را به باب رهسپار میکند. باب پیام را دریافت میکند و آن را می خواند و همه چیز به خوبی پیش میرود.
اما چه میشود اگر مالوری کبوتر نامه بر را بگیرد و پیام آن را دستکاری کند؟ وقتی باب پیام را دریافت میکند متوجه نخواهد شد که پیام ارسالی از طرف آلیس دستکاری شده است.
این همان روش کار HTTP است . کمی ترسناک هست درسته؟ من هیچوقت اطلاعات کارت بانکی را از طریق HTTP نمیفرستم و شما هم نباید این کار را بکنید.
یک کد مخفی
اگر باب و آلیس خیلی باهوش باشند میتوانند روشهای دیگری استفاده کنند. آنها توافق میکنند که پیامهایشان را با کد مخفی بنویسند. به جای نوشتن حروف اصلی یک پیام، تمام حروف را به سه حرف قلبلی به ترتیب حروف الفبا تغییر یا شیفت میدهند. برای مثال حرف D را به A یا حرف E را به حرف B تغییر میدهند. در نهایت این متن رمز شده "pbzobq jbppxdb" باید به این صورت رمز گشایی شود:
“secret message”
خوبه!
به این روش رمزنگاری کلید متقارن ( symmetric key cryptography ) گفته میشود، چرا که اگر شما بدانید یک متن با چه کلیدی رمزگذاری شده است روش رمزگشایی را نیز متوجه خواهید شد.
رمزگذاری که در بالا برای متن پیام توضیح دادم به نام رمز سزار ( Caesar cipher ) مشهور است. در زندگی واقعی، ما از روشهای خیالی و پیچیده تری استفاده میکنیم، اما ایده اصلی یکسان است.
چگونه در مورد رمز تصمیم بگیریم؟
رمزنگاری کلید متقارن تا زمانی که به جز گیرنده و فرستنده کسی از نحوه کدگذاری اطلاعی نداشته باشد بسیار امن است. در رمز سزار که استفاده کردیم، کدگزاری یک آفست از مقدار شیفتی هست که روی حروف میدهیم. در مثال ما از این آفست عدد 3 بود، میتوانستیم از 4 یا 12 نیز استفاده کنیم.
حال مشکل اینجاست که اگر باب و آلیس قبل از شروع پیامرسانی با استفاده از کبوتر، هیچ ملاقاتی نداشته باشند. پس آنها نمیتوانند در مورد کلید رمز به توافق برسند چرا که اگر کلید از طریق پیام ارسال شود مالوری خواهد توانست پیام را دریافت و از کلید رمز باخبر شود و نهایتا این کار به مالوری اجازه میدهد که پیام ها را بخواند و یا دستکاری کند.
این یک مثال عادی از حمله مرد میانی ( Man in the Middle Attack ) است و تنها راه جلوگیری از آن تغییر سیستم رمزگذاری میباشد.
کبوترهایی که بسته حمل میکنند.
آلیس و باب با یک سیستم بهتر آشنا میشوند. زمانیکه باب میخواهد به آلیس پیامی ارسال کند
از این مراحل پیروی میکند:
از این طریق مالوری با گرفتن آن کبوتر نمیتواند پیام آن را تغییر دهد چرا که کلید قفل جعبه را ندارد. همین مراحل زمانی که آلیس به باب پیام میفرستد تکرار میشود.
این روشی که آلیس و باب استفاده کردن، رمز نگاری کلید نامتقارن ( asymmetric key cryptography ) نامیده میشود. دلیل اینکه به این روش نامتقارن میگویند این هست که حتی اگر شما یک پیام را رمزگذاری کنید (جعبه را قفل کنید) شما دیگر نمیتوانید آنرا رمزگشایی کنید(قفل جعبه را باز کنید).
در مقالات علمی به جعبه کلید عمومی( public key ) و کلیدی که آنرا باز میکند کلید خصوصی ( private key ) گفته می شود.
چگونه به جعبه اطمینان کنیم؟
اگر به دقت توجه کرده باشید، میبینید که هنوز هم مشکلاتی داریم. زمانی که باب جعبه باز یا همان جعبه اولیه با قفل باز را دریافت میکند از کجا باید بداند که از طرف آلیس ارسال شده است؟ چون ممکن است در مسیر مالوری جعبه اولیه را گرفته و جعبه با قفل خود را جایگزین کرده باشد
آلیس تصمیم میگیرد جعبه را امضا کند، و زمانی که باب جعبه را دریافت کرد از روی امضا متوجه شود که آلیس آنرا ارسال کرده است. شاید براتون سوال پیش بیاد که در وحله اول باب از کجا امضای آلیس را بشناسد و آن را تشخیص دهد؟ سوال خوبیست، آلیس و باب به این مشکل برمیخورند، بنابراین آنها تصمیم گرفتند به جای اینکه آلیس جعبه را امضا کند شخص دیگر به نام تد جعبه را امضا کند.
تد کیست؟ تد یک آدم خیلی مشهور، خوش نام و قابل اعتماد است. تد امضایش را به همه میدهد و همه اعتماد دارند که او فقط جعبه ها را برای افراد احراز هویت شده یا مشروع امضا میکند.
تد زمانی جعبه آلیس را امضا خواهد کرد که مطمئن شود درخواست کننده امضا واقعا خود آلیس هست. بنابراین مالوری نمیتواند جعبه آلیس را که تد امضا کرده در دست بگیرد و خودش را به جای آلیس جا بزند و باب میداند جعبه ها زمانی از طرف تد امضا میشوند که شناسه آنها تائید شده باشد.
تد در اصطلاح علمی همان مرجع صدور گواهی ( Certification Authority ) می باشد. مرورگری که شما این مقاله را روی آن میخوانید با استفاده از گواهینامه های امنیتی مختلف امضا شده است.
بنابراین زمانی که شما برای بار اول به یک وبسایت متصل میشوید به جعبه آن اعتماد میکنید چرا که شما به تد اعتماد دارید و تد به شما میگوید که بسته قانونی و مشروع است.
جعبه ها سنگین هستند.
اکنون باب و آلیس یک سیستم قابل اعتماد برای ارتباط دارند، اما آنها متوجه میشوند کبوتری که پیامهایشان را در جعبه ارسال میکنند خیلی کند تر از کبوتری است که پیام خالی را ارسال میکند.
در نتیجه آنها تصمیم میگیرند که از روش جعبه (رمزگذاری نامتقارن) برای انتخاب کلید مخفی استفاده کنند و با استفاده از آن کلید پیامهایشان را رمزگذاری ( رمز سزار ) کرده و بدون جعبه ارسال کنند.
به این طریق به صورت بهینه از هر دو روش استفاده میکنند. قابلیت اعتماد و امنیت روش رمزگذاری نامتقارن و بهره وری یا بهینه بودن روش رمزگذاری متقارن.
در دنیای واقعی نیز از روش نامتقارن برای تبادل کلید رمز استفاده میکنیم.