Saber mazooji
Saber mazooji
خواندن ۱۰ دقیقه·۵ سال پیش

پروتکل امنیتی تلگرام mtproto

سلام :)
دومین پست ویرگولی من و باز هم در تخصص خودم نیست (متخصص HTML) :|

خب این تحقیق و پژوهش سال 97 من برای دانشگاهه شاید بروز نباشه اما دوست داشتم منتشر کنم!


مقدمه

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

حفظ حریم خصوصی در فضای مجازی همیشه یکی از مهمترین موضوعاتی بوده که به آن توجه داشته ام. همیشه رفتارهای سایت ها یا سرویس های اینترنتی را که حریم خصوصی کاربران را نقض می کردند مورد انتقاد من بوده.

امروزه تلگرام در ایران پر طرفدارترین سرویس پیام رسانی می باشد که اخیرا در مورد آن اخبار ضد و نقیضی شنیده ایم. اینکه آیا تلگرام امنیت پایینی دارد؟ یا داده های ما می تواند کاملا شفاف در اختیار شخص ثالث و افراد سودجو قرار بگیرد.

من در این مقاله نتیجه تحقیقاتم در زمینه امنیت و حریم خصوصی سرویس تلگرام را با شما به اشتراک می گذارم.


پروتکل mtproto

تلگرام برای ایجاد یک ارتباط ایمن و سریع از پروتکل قدرتمند MTProto استفاده می کند. پروتکلی که امنیت را با سرعت بالا تظمین می کند که حتی در ضعیف ترین ارتباطات اینترنت نیز بخوبی کار می کند. این پروتکل توسط نیکلای دورف بر مبنای رمزنگاری ای‌ئی‌اس ۲۵۶ بیتی متقارن، رمزنگاری آراس‌ای ۲۰۴۸ و پروتکل تبادل کلید دیفی-هلمن است ابداع گردید.

این پروتکل برای نرم افزاهای موبایلی طراحی شده است که از طریق api به سرور متصل می شوند و باید به این نکته هم توجه کرد که یک مرورگر به عنوان اپلیکیشن موبایل قلمداد نمی شود.

تاکید تلگرام بر امنیت این پروتکل

سازندگان تلگرام بر امنیت برنامه های خود تأکید بسیاری دارند. به تازگی جایزه سیصد هزار دلاری برای یافتن باگ بر روی تلگرام اعلام شده است که خود نشان دهنده اطمینان برنامه نویسان تلگرام دارد. در بلاگ تلگرام برندگان این جایزه اعلام می‌شوند. در سال ۲۰۱۵ شرکت امنیتی غیرانتفاعی Electronic Frontier Foundation رتبه ۴ از ۷ را به بخش پیام رسان و رتبه ۷ از ۷ را به بخش secure chat این نرم‌افزار داد.

این پروتکل در واقع به سه بخش مستقل تقسیم بندی می شود:

  • · :API query language روشی است که ب موجب آن درخواست های api و پاسخ های سرور به پیام های باینری تبدیل می شوند.
  • · :Cryptographic (authorization) layerروشی است که در آن پیام ها قبل از اینکه وارد پروتوکل انتقال داده ها شوند رمزنگاری می شوند.
  • · : Transport componentپروتوکل حمل و نقل داده ها از طریق یکی از پروتکل های شبکه مانندhttp, https, tcp ,udp:

رمزنگاری پیام encryption


encryption  رمزنگاری پیام
encryption رمزنگاری پیام

هر پیامی که از طریق این پروتکل رمزنگاری می شود همیشه شامل داده های زیر برای رمزگشایی به منظور ایجاد سیستم مقاوم در برابر مشکلات شناخته شده می باشد:

  • server salt – 64bit
  • session id
  • شماره ترتیبی پیام
  • طول پیام
  • زمان ارسال

البته تلگرام متذکر شده است که در وضعیت چت امن (secure chat) چندین لایه رمزنگاری دیگر قبل از موارد بالا به پیام ها اضافه می کند که در به end-to-end encryption معروف می باشد.


secure chat یا چت ایمن

اگر به دنبال امنیت بیشتری هستید تلگرام این روش ارتباطی را به کاربران خود پیشنهاد می کند. تلگرام در قابلیت چت ایمن خود از تکنولوژی end-to-end encryption استفاده می کند. یعنی تنها کسی که قادر به خواندن پیام های دریافتی است خود شما هستید. تیم تلگرام مدعی است که حتی آنها نیز نمی توانند پیام های شما را رمزگشایی کنند. کسی نمی تواند پیام دریافتی از شما را به کس دیگری ارسال کند. وقتی شما پیامی را حذف می کنید در طرف دیگر نیز حذف خواهد شد. پیام ها می توانند بصورت خودکار از هر دو طرف حذف شوند. پیام هایی که از این طریق رد و بدل می شوند در سرورهای کلاد تلگرام ذخیره نمی شوند، به این معنی است که پیام ها فقط در موبایل یا کامپیوتری که از آن طریق ارسال و دریافت شده اند وجود دارد.


اما secure chat چگونه کار می کند؟

وقتی یک چت ایمن ایجاد می شود، ابزارهای شرکت کننده در چت یک کلید مخصوص رمزنگاری را بوسیله روش پروتکل تبادل کلید دیفی-هلمن مبادله می کنند. بعد از اینکه اتصال امن end-to-end ایجاد شد تلگرام یک تصویر برای شبیه سازی کلید رمزنگاری تولید می کند. سپس دو طرف چت می توانند تصویر بوجود آمده را باهم مقایسه کنند. اگر دو تصویر طرفین برابر با هم باشند می توان اطمینان داشت که یک ارتباط امن بوجود آمده است و هیچ واسطه ای (man in the middle) دسترسی به اطلاعات مراوده شده را ندارد.

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

پس به گفته تلگرام چت ایمن بخاطر استفاده از شیوه رمزنگاریclient-client امنیت بالاتری نسبت به چت معمولی خواهد داشت چون در حالت چت معمولی یک طرف کلید رمزنگاری در سرورهای تلگرام ذخیره می گردد.


پروتکل تبادل کلید دیفی-هلمن چیست؟

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

این پروتکل، در سال ۱۹۷۶ توسط دو دانشمند رمزشناس به نام‌های ویتفیلد دیفی و مارتین هلمن طراحی شده و در قالب یک مقاله علمی منتشر گردیده است. مطرح شدن این پروتکل، گام مهمی در معرفی و توسعه رمزنگاری کلید نامتقارن به حساب می‌آید.

جزئیات پروتکل دیفی-هلمن

در فرمول‌های پیشنهادی اولیه این پروتکل، از گروه همنهشتی اعداد صحیح با پیمانه عدد اول p و عملگر ضرب اعداد صحیح استفاده شده است. در این گروه عددی، یک ریشه اولیه محاسبه می‌شود که آن را با g نشان می‌دهند

سپس مراحل زیر که در شکل بالا هم نشان داده شده است، انجام می‌شود:
سپس مراحل زیر که در شکل بالا هم نشان داده شده است، انجام می‌شود:

1) مقدار عدد اول دلخواه بزرگ p (پیمانه عمل ضرب) و مقدار محاسبه شده برای g میان دو طرف رد و بدل می‌شود.

2) هر یک از دو طرف یک عدد صحیح دلخواه a) و (b را به صورت پنهانی در نظر می‌گیرد.

3) هر یک از دو طرف با استفاده از عمل توان پیمانه‌ای و مقادیر قبلی p) و g و مقدار پنهانی)، یک مقدار جدید محاسبه کرده A) و (B و برای طرف مقابل ارسال می‌کند.

4) طرف اول با استفاده از مقادیر p و g و a و B، و طرف دوم با استفاده از مقادیر p و g و b و A، و با همان عمل توان پیمانه‌ای مقدار جدیدی را محاسبه می‌کنند. مقدار جدید محاسبه شده -چنانکه فرمول نشان می‌دهد- در دو طرف یکسان و همان کلید رمز مشترک است.


توجه به دو نکته درباره این پروتکل لازم است:

  • مقادیر a و b و مقدار مشترک محاسبه شده، هرگز مستقیماً از کانال ارتباطی عبور نمی‌کنند. بقیهٔ مقادیر یعنی p و g و A و B از کانال ارتباطی عبور می‌کنند و برای دیگران قابل دسترسی هستند.
  • دشواری حل مسألهٔ لگاریتم گسسته تضمین می‌کند که مقادیر a و b و مقدار کلید رمز مشترک، با داشتن مقدار اعداد دیگر در عمل قابل محاسبه نباشد.

امنیت پروتکل دیفی-هلمن

اصلا چرا امنیت داره؟؟؟؟؟؟

امنیت این پروتکل مبتنی بر دشواری حل مسألهٔ لگاریتم گسسته است.

در حال حاضر مسائل زیر باید در ارتباط با امنیت پروتکل دیفی-هلمن لحاظ گردد:

  • بر اساس قدرت محاسباتی رایانه‌های امروزی، استفاده از عدد اول p با حدود ۳۰۰ رقم و اعداد a و b با حدود ۱۰۰ رقم می‌تواند شکستن امنیت این پروتکل و یافتن کلید رمز مشترک را در عمل غیر ممکن سازد.
  • در عمل هر عدد اول بزرگی را نمی‌توان در این پروتکل به کار گرفت، بلکه لازم است عدد p مورد استفاده یک عدد اول امن باشد. در غیر این صورت شکستن امنیت این پروتکل و یافتن کلید رمز مشترک، با استفاده از الگوریتم‌هایی مانند الگوریتم پولیگ-هلمن، نسبتاً آسان و در زمان کمتری قابل انجام خواهد شد.
  • اعداد پنهانی a و b باید به صورت عدد تصادفی تولید شوند و مولد عدد تصادفی مورد استفاده هم نباید تکرارپذیر و قابل پیش‌بینی باشد. در غیر این صورت، یافتن کلید رمز مشترک آسان‌تر و در زمان کمتری قابل انجام خواهد شد.

مشکل شناسایی دو طرف در پروتکل دیفی-هلمن

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

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


سخن پایانی من در این نوشته :D

متن بالا بخش هایی از مقاله ی دانشگاهیم بود که اون زمان منابع کمی به زبان فارسی وجود داشت و مجبور شدم بخش هایی رو دست و پا شکسته ترجمه کنم ....

و قبول دارم که روند رمزنگاری هر پیام در تلگرام تغییر کرده و شاید متن بالا کامل نباشه

چون زمانی که این رو می نوشتم mtproto ورژن 1 بود الان ورژن 2 هستش

انتقاد پیشنهادی بود خوش حال میشم باهام در میون بزارید :)

تلگرامامنیترمزنگاریmtprotoپروتکل تلگرام
یه برنامه نویس ? عاشق فرانت وب
شاید از این پست‌ها خوشتان بیاید