کمی در باره رمزنگاری

اول از همه بگم که رمزنگاری یه تخصصه و من به هیچ وجه متخصص رمزنگاری نیستم. برای کاری مجبور بودم کمی در باره رمزنگاری بخونم و این جمع‌بندی اون خونده هاست.

کلید
کلید یه رشته از داده‌هاست. یه الگوریتم رمزنگاری که با یه کلید کار می‌کنه، اطلاعاتی که می‌خواد رمز نگاری بکنه رو با توجه به کلید رمزنگاری تغییر می‌ده تا ناخوانا بشه. الگورتم‌های مبتنی بر کلیدی وجود دارند که به لحاظ ریاضی می‌شه ثابت کرد رمزش قابل باز شدن نیست. هنوز چینین اثباتی برای الگورتم‌های دیگه وجود نداره. تو این متن وقتی می‌گیم به لحاظ ریاضی، معنیش اینه که به لحاظ ریاضی ثابت می‌شه که با روش‌های تشخیص الگو و مانند اون نمی‌شه این رمز رو باز کرد و تنها راه چاره، چک کردن تک تک حالاته. این کار حتی با سوپر کامپیوترهای بزرگ، بسیار زمانگیره و در عمل برای یک الگوریتم خوب، فقط یه دولت امکانات سخت‌افزاری و انگیزه لازم برای شکستن قفل رو داره. (توجه کنید اگه دولتی بخواد و تمرکز کنه می‌تونه یه رمز یا مجموعه‌ای از رمزها رو بشکنه، اما کنترل اطلاعات رمزگذاری‌شده یه کشور، با امکانات سخت‌افزاری موجود حتی از عهده دولت‌ها هم خارجه.)

رمزنگاری متقارن
توی الگوریتمای رمزنگاری متقارن کلیدی که باهاش رمزگذاری می‌شه و کلیدی که باهاش رمز باز می‌شه یکسانن. فرض کنید یک فرستنده می‌خواد یه پیغام واسه یه گیرنده بفرسته. تو این حالت هر دو یه کلید مشترک دارن. فرستنده پیغامش رو با کلید مشترک رمز می‌کنه و می‌فرسته. گیرنده هم پیغام رو دریافت می‌کنه و با کلیدی که داره رمزش رو باز می‌کنه و پیغام رو می‌خونه.

مشکل این روش چیه؟ فرض کنید به علتی لازم دارید که کلیدتون رو داخل شبکه منتقل کنید. در این حالت اگر کلید به دست فرد ناجوری بیفته ممکنه که اولا بتونه تمام پیغام‌های شما رو بخونه و ثانیا از طرف هر یک از طرفین پیغام‌های غلط بفرسته.

رمزنگاری نامتقارن
در الگوریتم‌های رمزنگاری نامتقارن، کلید‌ها به صورت جفت هستند. هر جفت کلید از یک کلید عمومی و یک کلید خصوصی تشکیل شده. به لحاظ ریاضی قابل اثباته که اگر داده‌ای با هر یک از این جفت کلید رمزنگاری بشه تنها و تنها با کلید نظیر دیگه قابل رمزگشاییه. این یعنی اگه داده‌ای مثلا به یه کلید عمومی رمزنگاری بشه، تنها و تنها با کلید خصوصی نظیرش قابل رمزگشاییه (و حتی با خود اون کلید عمومی هم نمی‌شه رمزش رو باز کرد.). به دلیل وجود همین جفت کلیدها هم هست که به این الگوریتم‌ها نامتقارن می‌گن.

حالا بریم سر این که چه شکلی باید از رمزنگاری نامتقارن استفاده کرد. دو باره ما یه فرستنده داریم و یه گیرنده. تو این روش هر دو فرستنده و گیرنده یه جفت کلید دارن. و هردوشون کلید عمومی‌شون رو تو کل شبکه (بدون نگرانی) منتشر کردن. حالا فرض کنید فرستنده می‌خواد داده‌ای بفرسته.

فرستنده به ترتیب این کارا رو انجام می‌ده:
۱- داده رو با کلید خصوصی خودش رمز می‌کنه.
۲- داده رو با کلید عمومی گیرنده (که همه دارن) رمز می‌کنه.
۳- داده رمزنگاری شده رو می‌فرسته.

و اون سر خط، گیرنده این کارا رو انجام می‌ده:
۱- داده رمزنگاری شده رو دریافت می‌کنه.
۲- داده رو با کلید خصوصی خودش باز می‌کنه.
۳- داده رو با کلید عمومی فرستنده باز می‌کنه.
۴- اطلاعات به شکل اولیه در دسترسه.

خوبیای رمزنگاری نامتقارن
۱- فرستنده مطمئنه فقط گیرنده می‌تونه پیغامش رو بخونه. چون پیغام رو یه بار با کلید عمومی گیرنده رمز کرده، فقط گیرنده با کلید خصوصی خودش می‌تونه اون رو باز کنه.
۲- گیرنده مطمئنه اون فرستنده مشخص پیغام رو فرستاده. چون پیغام رو داره با کلید عمومی یه فرستنده مشخص باز می‌کنه، مطمئنه این داده با کلید خصوصی فرستنده مشخص رمزگذاری شده.
۳- و مهمتر از همه این که فرستنده و گیرنده تونستن کلیدشون مبادله کنند بدون این که امنیتشون آسیبی ببینه.

امضای دیجیتال
امضای دیجیتال در واقع ساده شده سناریوی بالاست. فرض کنید برای انجام کارهاتون تو شرکت باید هویتتون تایید بشه. مثلا می‌خواید وقتی نامه‌ای بزنید یا یه تراکنش مالی انجام بدید. تو این حالت دیگه خیلی مهم نیست که کسی اطلاعاتی که می‌فرستید رو نبینه. مهم فقط اینه که مطمئن باشن که حتما این شمایید که دارید این اطلاعات رو می‌فرستید.

برای تهیه امضای دیجیتال به یه چکیده از داده‌ها احتیاجه. مثلا از یه سند چند مگابایتی، میان یه چکیده مثلا یک کیلوبایتی تهیه می‌شه. روش تهیه این چکیده طوریه که اگه حتی یه بایت تو سند اصلی جا به جا بشه، خلاصه یک کیلو بایتی ما کلا عوض می‌شه.

خوب. می‌رسیم به اصل قضیه.

فرستنده این کارا رو می‌کنه:
۱- از سندش چکیده تهیه می‌کنه.
۲- چکیده سند رو با کلید خصوصی خودش رمز می‌کنه. (به این چکیده رمز شده امضای دیجیتا می‌گن)
۳- اصل سند رو به همرای امضای دیجیتال سند می‌فرسته.

گیرنده هم متقابلا این کارا می‌کنه:
۱- از سند دریافت شده یه چکیده تهیه می‌کنه.
۲- امضای دیجیتال رو با کلید عمومی فرستنده رمزگشایی می‌کنه.
۳- کنترل می‌کنه که چکیده‌ای که خودش تهیه کرده با چکیده رمزگشایی شده برابر باشه. اگه برابر نبود یعنی سند دریافتیش دست خوردست.

واضحه که به این روش گیرنده می‌تونه از هویت فرستنده مطمئن بشه. سوالی که اینجا ممکنه پیش بیاد اینه که چرا فرستنده تمام اطلاعات رو رمزنگاری نکرد و فرستاد. جواب خیلی سادست: بحث هزینست. تهیه چکیده و بعد رمزنگاری اون خیلی سریع‌تر و بهینه‌تر از رمزنگاری کل سند اولیست.

مشکلات رمزنگاری نامتقارن
کیه که تو اینترنت بتونه اعتبار کلیدهای عمومی رو مشخص تایید بکنه؟ از کجا معلوم کلید عمومی‌ای که به دست شما رسیده همونی باشه که من تو اینترنت گذاشتم؟ یه حمله معروفیه به اسم حمله Man in the Middle. تو این روش حمله کننده یه جفت کلید تولید می‌کنه و بعد کلید عمومی خودش را جای کلید بقیه افراد تو شبکه جا می‌زنه. اتفاقی که می‌افته اینه:

۱- فرستنده اطلاعات رو با کلید خصوصی خودش و کلید عمومی تقلبی حمله کننده رمز می‌کنه.
۲- حمله کننده اطلاعات فرستنده رو دریافت می‌کنه. اطلاعات رو با با کلید عمومی واقعی فرستنده و کلید خصوصی خودش رمزگشایی می‌کنه و می‌خونه.
۳- حمله کننده اطلاعات اولیه رو (یا اراجیفی که خودش می‌خواد جا بزنه) با کلید خصوصی خودش و کلید عمومی گیرنده واقعی رمز می‌کنه.
۴- گیرنده اطلاعات رو با کلید خصوصی خودش و کلید عمومی تقلبی حمله کننده باز می‌کنه.

تو این حالت نه گیرنده و فرستنده متوجه وجود فرد میانی نمی‌شن. تو فیلترنت اسلامی ایران یک بار این حمله به شکل دولتی انجام شد. اینجا رو ببینید (تحت عنوان دسته سوم- دزدی اطلاعات، جعل اس‌اس‌ال سایت‌های معروف).

حمله Man in the Middle به خاطر این اتفاق افتاد که کلیدای عمومی تقلبی به دست کاربرا رسیده بود. اینجاست که بحث اعتبار سنجی کلیدهای عمومی تو سطح سیستم عامل و براوزرها پیش میاد. تو همه سیستم عامل‌ها روش‌هایی برای اعتبار سنجی کلیدهای عمومی پیش‌بینی شده. این اعتبار سنجی خودش بر مبنای رمزنگاری نامتقارن کلیدهای صادر شده توسط موسسات معتبره که با خود سیستم عامل نصب می‌شه و کاملا مطمئنه. جالب اینه که تو بعضی کشورها، بعضی دولت‌های اسلامی وجود دارن که کاربرا رو مجبور می‌کنن از کلیدای تقلبی استفاده کنن تا بتونن اطلاعاتشون رو بدزدن. دیگه دیگه.

2 فکر می‌کنند “کمی در باره رمزنگاری

  1. سلام. ممنون از این پست خوب و توضیح کاملت (:
    من دوتا سوال داشتم.
    یکی اینکه «کلید خصوصی» چطور تولید میشه؟ فرستنده از کجا میدونه که گیرنده چه کلید خصوصی‌ای رو داره که با همون داده‌ها رو انکد کنه؟ آیا کلید خصوصی رشته ثابتی هست که سازنده نرم‌افزار اون رو در زمان تولید برای هر دو طرف گیرنده و فرستنده تعریف میکنه و دیگه قابل تغییر نیست؟ و اگر جواب منفیه و قابل تغییر هست، این تغییر چطور به دوطرف گیرنده و فرستنده اطلاع‌رسانی میشه؟ لطفاً نگید از طریق شبکه، چون اونوقت دیگه با «کلید عمومی» فرقی نداره!

    و سوال دوم: در حمله Man in the Middle سیستمی که در جایگاه واسط قرار گرفته با توجه به اینکه تنها به کلید عمومی دسترسی داشته، چطور از کلید خصوصی بین گیرنده و فرستنده هم خبر داشته که تونسته داده‌ها رو دیکد کنه و بعد اهداف ماجراجویانه خودش رو روش انجام بده؟

    کلاً این کلید خصوصی و ماهیتش برام یه مقدار جای ابهام داره.

    • فرستنده کاری به کلید خصوصی گیرنده نداره. فرستنده فقط به کلید عمومی گیرنده (که خود گیرنده منتشرش کرده) دسترسی داره و داده‌ها رو با اون کلید رمز می‌کنه.

      نکته کلیدی تو فهم رمزنگاری نامتقارن اینه که کلیدهای عمومی و خصوصی جفتن. یعنی هر کلید عمومی فقط و فقط یه کلید خصوصی متناظر داره و بالعکس. اینکه کلید عمومی و خصوصی چه شکلی تولید می‌شن یه بحث ریاضیه. اما نکته اینه که کلید عمومی و خصوصی به طور هم‌زمان و به صورت جفت تولید می‌شن. فرض کنید من می‌خوام یه جفت کلید داشه باشم. تو قدم اول تو کامپیوتر خودم یه جفت کلید عمومی و خصوصی تولید می‌کنم. اسمش رو میزاریم کلید عمومی محمد (ک.ع. محمد) و کلید خصوصی محمد (ک.خ.محمد). بعد من ک.ع. محمد رو تو شبکه منتشر می‌کنم. حالا شما که می‌خوای برای من پیغام بفرستی ک.ع. محمد رو از شبکه دانلود می‌کنی، باهاش پیغامت رو رمز می‌کنی و پیغامت رو برای من می‌فرستی. من که پیغام شما رو گرفتم میام با ک.خ.محمد (که رو دستگاه خودم دارمش و خودم تولیدش کردم) پیغام رو رمزگشایی می‌کنم. همین سناریو برای جفت ک.ع.فرشاد و ک.خ.فرشاد هست.

      اما حمله mim. دیدیم که وقتی فرشاد می‌خواد برای من پیغام امن بفرسته به ک.ع.محمد احتیاج داره. حالا فرض کنید به علت وجود یه واسط خطاکار تو شبکه، به جای ک.ع.محمد، یه کلید عمومی تقلبی دست شما رسیده. شما با اون کلید پیغامت رو رمز می‌کنی و می‌فرستی و دلت خوشه که همه چیز مرتبه. در صورتی که کلیدی که استفاده کردی ک.ع.خطاکار بوده. کامپیوتر خطاکار میاد با ک.خ.خطاکار پیغام شما رو باز می‌کنه، می‌خونه، تغییر می‌ده و بعد پیغام تغییر پیدا کرده رو با ک.ع.محمد واقعی دوباره رمز می‌کنه و می‌فرسته.

پاسخ دادن به فرشاد لغو پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *