اول از همه بگم که رمزنگاری یه تخصصه و من به هیچ وجه متخصص رمزنگاری نیستم. برای کاری مجبور بودم کمی در باره رمزنگاری بخونم و این جمعبندی اون خونده هاست.
کلید
کلید یه رشته از دادههاست. یه الگوریتم رمزنگاری که با یه کلید کار میکنه، اطلاعاتی که میخواد رمز نگاری بکنه رو با توجه به کلید رمزنگاری تغییر میده تا ناخوانا بشه. الگورتمهای مبتنی بر کلیدی وجود دارند که به لحاظ ریاضی میشه ثابت کرد رمزش قابل باز شدن نیست. هنوز چینین اثباتی برای الگورتمهای دیگه وجود نداره. تو این متن وقتی میگیم به لحاظ ریاضی، معنیش اینه که به لحاظ ریاضی ثابت میشه که با روشهای تشخیص الگو و مانند اون نمیشه این رمز رو باز کرد و تنها راه چاره، چک کردن تک تک حالاته. این کار حتی با سوپر کامپیوترهای بزرگ، بسیار زمانگیره و در عمل برای یک الگوریتم خوب، فقط یه دولت امکانات سختافزاری و انگیزه لازم برای شکستن قفل رو داره. (توجه کنید اگه دولتی بخواد و تمرکز کنه میتونه یه رمز یا مجموعهای از رمزها رو بشکنه، اما کنترل اطلاعات رمزگذاریشده یه کشور، با امکانات سختافزاری موجود حتی از عهده دولتها هم خارجه.)
رمزنگاری متقارن
توی الگوریتمای رمزنگاری متقارن کلیدی که باهاش رمزگذاری میشه و کلیدی که باهاش رمز باز میشه یکسانن. فرض کنید یک فرستنده میخواد یه پیغام واسه یه گیرنده بفرسته. تو این حالت هر دو یه کلید مشترک دارن. فرستنده پیغامش رو با کلید مشترک رمز میکنه و میفرسته. گیرنده هم پیغام رو دریافت میکنه و با کلیدی که داره رمزش رو باز میکنه و پیغام رو میخونه.
مشکل این روش چیه؟ فرض کنید به علتی لازم دارید که کلیدتون رو داخل شبکه منتقل کنید. در این حالت اگر کلید به دست فرد ناجوری بیفته ممکنه که اولا بتونه تمام پیغامهای شما رو بخونه و ثانیا از طرف هر یک از طرفین پیغامهای غلط بفرسته.
رمزنگاری نامتقارن
در الگوریتمهای رمزنگاری نامتقارن، کلیدها به صورت جفت هستند. هر جفت کلید از یک کلید عمومی و یک کلید خصوصی تشکیل شده. به لحاظ ریاضی قابل اثباته که اگر دادهای با هر یک از این جفت کلید رمزنگاری بشه تنها و تنها با کلید نظیر دیگه قابل رمزگشاییه. این یعنی اگه دادهای مثلا به یه کلید عمومی رمزنگاری بشه، تنها و تنها با کلید خصوصی نظیرش قابل رمزگشاییه (و حتی با خود اون کلید عمومی هم نمیشه رمزش رو باز کرد.). به دلیل وجود همین جفت کلیدها هم هست که به این الگوریتمها نامتقارن میگن.
حالا بریم سر این که چه شکلی باید از رمزنگاری نامتقارن استفاده کرد. دو باره ما یه فرستنده داریم و یه گیرنده. تو این روش هر دو فرستنده و گیرنده یه جفت کلید دارن. و هردوشون کلید عمومیشون رو تو کل شبکه (بدون نگرانی) منتشر کردن. حالا فرض کنید فرستنده میخواد دادهای بفرسته.
فرستنده به ترتیب این کارا رو انجام میده:
۱- داده رو با کلید خصوصی خودش رمز میکنه.
۲- داده رو با کلید عمومی گیرنده (که همه دارن) رمز میکنه.
۳- داده رمزنگاری شده رو میفرسته.
و اون سر خط، گیرنده این کارا رو انجام میده:
۱- داده رمزنگاری شده رو دریافت میکنه.
۲- داده رو با کلید خصوصی خودش باز میکنه.
۳- داده رو با کلید عمومی فرستنده باز میکنه.
۴- اطلاعات به شکل اولیه در دسترسه.
خوبیای رمزنگاری نامتقارن
۱- فرستنده مطمئنه فقط گیرنده میتونه پیغامش رو بخونه. چون پیغام رو یه بار با کلید عمومی گیرنده رمز کرده، فقط گیرنده با کلید خصوصی خودش میتونه اون رو باز کنه.
۲- گیرنده مطمئنه اون فرستنده مشخص پیغام رو فرستاده. چون پیغام رو داره با کلید عمومی یه فرستنده مشخص باز میکنه، مطمئنه این داده با کلید خصوصی فرستنده مشخص رمزگذاری شده.
۳- و مهمتر از همه این که فرستنده و گیرنده تونستن کلیدشون مبادله کنند بدون این که امنیتشون آسیبی ببینه.
امضای دیجیتال
امضای دیجیتال در واقع ساده شده سناریوی بالاست. فرض کنید برای انجام کارهاتون تو شرکت باید هویتتون تایید بشه. مثلا میخواید وقتی نامهای بزنید یا یه تراکنش مالی انجام بدید. تو این حالت دیگه خیلی مهم نیست که کسی اطلاعاتی که میفرستید رو نبینه. مهم فقط اینه که مطمئن باشن که حتما این شمایید که دارید این اطلاعات رو میفرستید.
برای تهیه امضای دیجیتال به یه چکیده از دادهها احتیاجه. مثلا از یه سند چند مگابایتی، میان یه چکیده مثلا یک کیلوبایتی تهیه میشه. روش تهیه این چکیده طوریه که اگه حتی یه بایت تو سند اصلی جا به جا بشه، خلاصه یک کیلو بایتی ما کلا عوض میشه.
خوب. میرسیم به اصل قضیه.
فرستنده این کارا رو میکنه:
۱- از سندش چکیده تهیه میکنه.
۲- چکیده سند رو با کلید خصوصی خودش رمز میکنه. (به این چکیده رمز شده امضای دیجیتا میگن)
۳- اصل سند رو به همرای امضای دیجیتال سند میفرسته.
گیرنده هم متقابلا این کارا میکنه:
۱- از سند دریافت شده یه چکیده تهیه میکنه.
۲- امضای دیجیتال رو با کلید عمومی فرستنده رمزگشایی میکنه.
۳- کنترل میکنه که چکیدهای که خودش تهیه کرده با چکیده رمزگشایی شده برابر باشه. اگه برابر نبود یعنی سند دریافتیش دست خوردست.
واضحه که به این روش گیرنده میتونه از هویت فرستنده مطمئن بشه. سوالی که اینجا ممکنه پیش بیاد اینه که چرا فرستنده تمام اطلاعات رو رمزنگاری نکرد و فرستاد. جواب خیلی سادست: بحث هزینست. تهیه چکیده و بعد رمزنگاری اون خیلی سریعتر و بهینهتر از رمزنگاری کل سند اولیست.
مشکلات رمزنگاری نامتقارن
کیه که تو اینترنت بتونه اعتبار کلیدهای عمومی رو مشخص تایید بکنه؟ از کجا معلوم کلید عمومیای که به دست شما رسیده همونی باشه که من تو اینترنت گذاشتم؟ یه حمله معروفیه به اسم حمله Man in the Middle. تو این روش حمله کننده یه جفت کلید تولید میکنه و بعد کلید عمومی خودش را جای کلید بقیه افراد تو شبکه جا میزنه. اتفاقی که میافته اینه:
۱- فرستنده اطلاعات رو با کلید خصوصی خودش و کلید عمومی تقلبی حمله کننده رمز میکنه.
۲- حمله کننده اطلاعات فرستنده رو دریافت میکنه. اطلاعات رو با با کلید عمومی واقعی فرستنده و کلید خصوصی خودش رمزگشایی میکنه و میخونه.
۳- حمله کننده اطلاعات اولیه رو (یا اراجیفی که خودش میخواد جا بزنه) با کلید خصوصی خودش و کلید عمومی گیرنده واقعی رمز میکنه.
۴- گیرنده اطلاعات رو با کلید خصوصی خودش و کلید عمومی تقلبی حمله کننده باز میکنه.
تو این حالت نه گیرنده و فرستنده متوجه وجود فرد میانی نمیشن. تو فیلترنت اسلامی ایران یک بار این حمله به شکل دولتی انجام شد. اینجا رو ببینید (تحت عنوان دسته سوم- دزدی اطلاعات، جعل اساسال سایتهای معروف).
حمله Man in the Middle به خاطر این اتفاق افتاد که کلیدای عمومی تقلبی به دست کاربرا رسیده بود. اینجاست که بحث اعتبار سنجی کلیدهای عمومی تو سطح سیستم عامل و براوزرها پیش میاد. تو همه سیستم عاملها روشهایی برای اعتبار سنجی کلیدهای عمومی پیشبینی شده. این اعتبار سنجی خودش بر مبنای رمزنگاری نامتقارن کلیدهای صادر شده توسط موسسات معتبره که با خود سیستم عامل نصب میشه و کاملا مطمئنه. جالب اینه که تو بعضی کشورها، بعضی دولتهای اسلامی وجود دارن که کاربرا رو مجبور میکنن از کلیدای تقلبی استفاده کنن تا بتونن اطلاعاتشون رو بدزدن. دیگه دیگه.