۱۳۹۲ خرداد ۱۸, شنبه

امنیت در اینترنت به زبان ساده (قسمت دوم - رمزنگاری)


مرور گذشته و برنامه‌ی این قسمت

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


مبنای روش‌های رمزنگاری «کلید عمومی»

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

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

تصویر زیر یک شهود ساده نسبت به این روش‌ها به‌دست می‌دهد، بدون این‌که وارد بحث ریاضی آن شود:

شهودی ساده از رمزنگاری با کلید عمومی. در این تصویر قفل‌های باز با نام بهروز «کلید عمومی» اویند و به تعداد زیاد در دسترس همه قرار دارند. کلید همه‌ی این قفل‌ها یکی‌ست و تنها یک نمونه از آن وجود دارد که پیش بهروز است، این همان «کلید خصوصی» اوست. (برای ساخت این تصویر از تصویر‌های وب‌گاه www.clker.com استفاده شده است.)
در این‌جا کلید عمومی هر شخص به شکل قفل‌های باز نشان داده شده که نام آن شخص روی آن نوشته و از این نوع قفل به وفور در دسترس همه است، البته در تصویر برای سادگی فقط قفل‌های بهروز نشان داده شده. همه‌ی قفل‌های بهروز با یک کلید باز می‌شود که تنها یک نمونه از آن وجود دارد و آن هم نزد بهروز است. این کلید، همان کلید خصوصی بهروز است. وقتی احمد (یا هر کس دیگری) بخواهد پیامی خصوصی (رمز شده) برای بهروز بفرستد، متن پیامش را داخل جعبه‌ای می‌گذارد و با استفاده از یکی از قفل‌های روی میز که نام بهروز را دارد، آن را قفل می‌کند. هیچ‌کسی جز بهروز نمی‌تواند جعبه را باز کند، بنابراین با این روش، بدون نیاز به صحبت خصوصی بین بهروز و احمد، احمد می‌تواند پیامی خصوصی برای بهروز بفرستد.



بررسی روش آر‌اس ای

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

برای توضیح روش آر‌اس‌ای با استفاده از مثال بالا (ارسال عدد ۱۲۱ توسط احمد برای بهروز):
  1. بهروز دو عدد اول بزرگ انتخاب می‌کند به نام‌های p و q سپس حاصل‌ضرب n=pq را به‌طور عمومی به همه اعلام می‌کند.
  2. بهروز هم‌چنین حاصل‌ضرب f=(p-1)(q-1) را هم حساب می‌کند ولی آن را برای خودش نگه‌می‌دارد.
  3. مرحله‌ی بعدی، انتخاب عدد اول دیگری به اسم e است به شکلی که بزرگ‌ترین مقسوم‌علیه مشترک f و e مساوی یک باشد (لازم نیست e خیلی بزرگ باشد). بهروز این عدد را نیز به‌شکل عمومی به همه اعلام می‌کند. ولی در عین‌حال عدد دیگری به اسم ‌d انتخاب می‌کند به‌شکلی که حاصل‌ضرب de در تقسیم بر f باقیمانده‌اش برابر یک باشد. دقت کنید که اعداد p, q, f, d را تنها بهروز می‌داند ولی n, e را همه می‌دانند.
  4. حالا برای این‌که احمد عدد خودش (یا همان ۱۲۱) را به شکل رمزشده برای بهروز بفرستد آن را به‌توان e می‌رساند و باقی‌مانده‌ی این عدد بر n را به شکل عمومی اعلام می‌کند يعنی باقیمانده‌ی ۱۲۱e در تقسیم بر n .
  5. در بین کل جمع، تنها بهروز می‌تواند به‌سرعت به عدد رمز شده، یعنی ۱۲۱ پی ببرد! برای این‌کار بهروز باقی‌مانده‌ی فرستاده شده توسط احمد را به توان d می‌رساند و مجددا باقی‌مانده تقسیم این عدد بر n را حساب می‌کند. این باقیمانده برابر ۱۲۱ خواهد بود!
بررسی این‌که چرا باقیمانده‌ی نهایی برابر عدد رمزشده‌ی اولیه است خارج از حوصله‌ی این نوشته است. به علاوه نکته‌ی کلیدی این روش این است که بدون داشتن p و q محاسبه‌ی d از نظر پیچیدگی محاسبات، کاری بسیار دشوار است و اگر p و q به اندازه‌ی کافی بزرگ باشند تقریبا غیر ممکن. ولی همین محاسبه اگر p و q مشخص باشند خیلی ساده است. بنابراین کسی جز بهروز نمی‌تواند d را حساب کند و بدون آن رمزگشایی پیام ممکن نیست. نهایتا دقت کنید که n برای همه مشخص است و همه می‌دانند که این عدد حاصل‌ضرب دو عدد اول است ولی مسئله‌ی «تجزیه‌ی یک عدد به عوامل اول» در زمان کوتاه «احتمالا» با کامپیوتر‌های امروزی غیرممکن است. برای مسئله‌ی تجزیه اعداد صحیح یا Integer Factorization الگوریتم سریعی پیدا نشده است. به عبارت ساده منظور از این گزاره این است که برای تجزیه‌ی عددی با b بیت زمانی معادل ab لازم است که در آن a یک عدد بزرگ‌تر از یک است، مثلا ۲b. چون در روش آراس‌ای در استفاده‌های واقعی p, q اعداد اول با ۱۰۲۴ یا ۲۰۴۸ بیت‌اند، عملا زمان لازم برای تجزیه‌ی n=pq آن‌قدر زیاد است که بدون داشتن p یا q تجزیه‌ی n غیر ممکن می‌شود. اگر علاقمندید یک مثال عددی از این روش را ببینید به پاورقی مراجعه کنید. بیایید در یک مثال ساده روش آراس‌ای را تحقیق کنیم. همان‌طور که گفته شد p، q، و n اعداد بزرگی‌اند ولی ما برای سادگی یک مثال کوچک را بررسی می‌کنیم:
  1. p=۱۷‌، q=۳۱، n=۱۷×۳۱=۵۲۷
  2. f=(p-1)(q-1)=۱۶×۳۰=۴۸۰
  3. e=۱۳ و d=۳۷ توجه کنید که باقی‌مانده‌ی ۱۳×۳۷ بر ۴۸۰ برابر یک است. بهروز n=۵۲۷ و e=۱۳ را به شکل ‌«عمومی» به همه اعلام می‌کند ولی d=۳۷ را به‌شکل «خصوصی» نگه می‌دارد.
  4. احمد باقیمانده‌ی ۱۲۱۱۳ را بر ۵۲۷ حساب می‌کند و حاصل، یعنی ۱۰۰ را اعلام می‌کند.
  5. بهروز باقی‌مانده‌ی ۱۰۰۳۷ بر ۵۲۷ را حساب می‌کند. اگر این محاسبه را انجام دهید خواهید دید که حاصل ۱۲۱ است.


استفاده از رمزنگاری بر روی اینترنت

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


توضیح ساده‌ی امنیت بر روی اینترنت، با اشاره‌ی غیر مستقیم به رمزنگاری با کلید عمومی. برای مشاهده‌ی فیلم با زیر‌نویس فارسی اینجا را ببینید و از فهرست ترجمه‌های زیر فیلم (Select Language)، فارسی (Persian) را انتخاب کنید، توجه کنید که عبارت‌های داخل پرانتز در متن اصلی نیست. ترجمه‌ی فارسی فیلم در پانوشت‌های همین نوشته هم موجود است.
نیمه‌ی دوم این فیلم، یعنی ارسال کلید با استفاده از جعبه و قفل فروشگاه، مثالی از استفاده از رمزنگاری با کلید عمومی است. در این‌جا قفل ارسالی، کلید عمومی فروشگاه است و کلید این قفل، همان کلید خصوصی فروشگاه است.
قطعه فیلم کوتاه رو‌به‌رو شهود خوبی از رمزنگاری بر روی اینترنت می‌دهد. اگر مایلید ترجمه‌ی فارسی این قطعه فیلم را به شکل زیرنویس بر روی فیلم تماشا کنید به این برگه مراجعه کنید. متن ترجمه در پانوشت هم موجود است. اگر مایلید ترجمه‌ی فارسی این قطعه فیلم را به شکل زیرنویس بر روی فیلم تماشا کنید به این برگه مراجعه کنید. متن زیر همان زیرنویس‌ها با ذکر زمان شروع هر قسمت است (توجه کنید که عبارت‌های داخل پرانتز در متن اصلی نیست و برای توضیح بیش‌تر در زمان ترجمه اضافه شده است).
  • 0:00 – 0:03
    امنیت اینترنتی چگونه کار می‌کند.
  • 0:04 – 0:12
    ما امروزه بیش‌تر و بیش‌تر خرید اینترنتی انجام می‌دهیم و این به این معنی است که باید اطلاعات حساس کارت اعتباری‌مان را بر روی وب بفرستیم.
  • 0:12 – 0:19
    ولی نمی‌توانیم این جزییات را بدون تغییر بفرستیم زیرا هیچ وقت نمی‌دانید چه کسی ممکن است به اطلاعات ارسالی شما گوش دهد.
  • 0:20 – 0:24
    بنابراین کاری که انجام می‌دهیم، ارسال اطلاعات به شکل رمز شده است.
  • 0:24 – 0:30
    می‌توانید به این شکل به آن فکر کنید: این قفل، یک قطعه برنامه‌ی کامپیوتریست که اطلاعات را رمز می‌کند
  • 0:30 – 0:35
    این کلید یک برنامه‌ی دیگر است که آن را در سوی دیگر رمزگشایی می‌کند.
  • 0:36 – 0:46
    کاری که ما باید بکنیم، اگر بخواهم اطلاعات کارت اعتباری‌‌ام را بر روی شبکه بفرستم، این است که آن را درون جعبه‌ای قرار دهم،‌ قفلش کنم، و کلید را پیش خودم نگه دارم.
  • 0:46 – 0:50
    بعد از آن می‌توانم آن را برای هرکس بخواهم بفرستم.
  • 0:50 – 0:57
    اهمیتی ندارد اگر در طول مسیر کس دیگری آن را دریافت کند، به‌خاطر این‌که رمز شده است و هیچ‌کس دیگری بدون داشتن کلید من نمی‌تواند آن را باز کند.
  • 0:58 – 1:03
    نهایتا، اطلاعات کارت اعتباری من با امنیت کامل به فروشگاه اینترنتی خواهد رسید.
  • 1:04 – 1:12
    حالا یک کار دیگر باقی می‌ماند: من باید کلیدم رابه فروشگاه اینترنتی بفرستم بدون این‌که کسی در بین راه بتواند صاحب آن شود. این‌کار به این شکل انجام می‌شود:
  • 1:12 – 1:21
    فروشگاه اینترنتی برای من یک جعبه می‌فرستد، به‌همراه یک قفل باز بدون کلید (این قفل همان «کلید عمومی» فروشگاه است).
  • 1:21 – 1:29
    حالا من کلیدم را داخل جعبه‌ی آن‌ها قرار می‌دهم و با قفل فروشگاه آن را قفل می‌کنم.
  • 1:31 – 1:35
    نه من و نه هیچ کس دیگری قادر به باز کردن آن نخواهد بود، فقط فروشگاه اینترنتی کلید قفل را دارد (این کلید، همان «کلید خصوصی» فروشگاه است).
  • 1:35 – 1:39
    حالا من می‌توانم کلیدم را با امنیت کامل برای فروشگاه بفرستم.
  • 1:39 – 1:45
    در این‌جا هم اهمیتی ندارد که چه کسی در بین راه جعبه را دریافت کند، چون قفل است و فقط فروشگاه اینترنتی می‌تواند آن را باز کند.
  • 1:45 – 1:55
    نهایتا جعبه به فروشگاه اینترنتی می‌رسد. در آن‌جا با استفاده از کلید فروشگاه، جعبه را باز می‌کنند و کلید من را از آن خارج کرده، جعبه اول را با استفاده از این کلید باز می‌کنند.
  • 1:55 – 2:00
    به این شکل، اطلاعات کارت اعتباری من، با امنیت کامل به دست فروشگاه اینترنتی می‌رسد.
توجه کنید که در هیچ‌کجای این فیلم اشاره‌ای به رمزنگاری با کلید عمومی نمی‌شود، ولی شما قاعدتا بعد از مشاهده‌ی فیلم متوجه استفاده از این روش شده‌اید. به‌طور مشخص، در نیمه‌ی دوم فیلم، آنجا که فروشگاه اینترنتی جعبه و قفل باز را برای خریدار می‌فرستد، این قفل باز در واقع کلید عمومی فروشگاه است، همان‌طور که در مثال احمد و بهروز هم اشاره شد . کلید خصوصی فروشگاه هم همان کلید این قفل باز است. تصویر و مثال شهودی قفل‌ها که در انتهای بخش توصیف رمزنگاری با کلید عمومی ذکر شد، از همین قطعه فیلم اقتباس شده است. دقت کنید که کلیدی که خریدار داخل جعبه‌ی قفل شده قرار می‌دهد، کلید عمومی یا خصوصی کسی نیست و می‌تواند هر پیام رمز شده‌ای باشد. این کلید در واقع همان رمز مشترکی است که فروشگاه و خریدار با استفاده از آن می‌توانند یک صحبت خصوصی انجام دهند و در مثال‌های واقعی طول عمر این رمز مشترک، معمولا به اندازه‌ی تنها یک خرید است و بعد از دور انداخته می‌شود.


مشکل «جاسوس بین راه» کماکان باقیست!

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


پانوشت‌ها

هیچ نظری موجود نیست: