با کمک صفا (@safasafari3 ) روی الگوریتمش فکر کردیم و از دفیهیلمن به هیبرید (RSA و AES) تغییرش دادیم. الان تقریبا شبیه TLS کار میکنه و سرور نمیتونه اتک MitM بزنه. مکانیزمش رو مینویسم لطفا اگه مشکلی داره بگید بهترش کنیم.
اول از همه برای هر کاربر یه جفت کلید RSA ساخته میشه و کلیدهای عمومی توی سرور ذخیره میشن. کاربر باب لینک خودش رو که شامل نامکاربری و هش کلیدعمومی خودش میشه رو به آلیس میده. آلیس لینک رو باز میکنه و کلیدعمومی باب رو از سرور میخونه. حالا میاد هش کلیدعمومی باب رو حساب میکنه و
با هشی که روی لینک باب بود مقایسه میکنه، اگه یکی باشن یعنی سرور کلید رو جعل نکرده و همهچی درسته. آلیس پیامش رو مینویسه و با یه کلید AES رندوم رمز میکنه، خود کلید رو هم سمت تلگرامش ذخیره می کنه. با کلید عمومی باب، کلید AES رو رمز میکنه و پیام رمزی رو با کلید AES رمزشده به
سرور میفرسته. باب میاد پیام آلیس رو از سرور میگیره، سرور کلید رمزشدهی AES رو بهش میده و از روی سرور هم پاکش میکنه. آلیس با کلید خصوصی خودش AES رو رمزگشایی میکنه و توی تلگرام خودش ذخیره میکنه. پیام رمزشده رو هم با کلید AES رمزگشایی میکنه و میخونه. برای ادامهی مکالمات هم
مجددا از همون AES مشترک که بین طرفین ذخیره شده استفاده میشه. البته اگه آلیس بخواد یه پیام جدید بفرسته (نه اینکه ریپلای کنه پیام قبلی رو) اینجا باز یه AES جدید ساخته میشه که هویتش فاش نشه.
توی این چارت سعی کردم به سادهترین شکل ممکن توضحش بدم. لینک ربات رو برای تست اینه:
همیشه فکر میکردم وقتی ۵ سال برنامه نویسی کنم احتمالا بعدش یه برنامه نویس خفن میشم. اما نشدم. توی این رشته توییت خیلی صادقانه از اشتباهاتم توی این ۵ سال مینویسم.
#رشتو
۱- من الگوریتم و ساختمان داده رو دست کم گرفتم، این مبحث چون خیلی خشک بود همیشه پشت گوش انداختم. اگه زمان برگرده عقب روزانه یه ساعت مرتبا وقت میذارم واسه سوال الگوریتمی حل کردن و یاد گرفتن ساختمان دادهها. این کار مثل اینه که شمشیرت رو دائم تیز کنی.
۲- به من کسی نگفت که توی برنامه نویسی دونستن سیستم عامل چقدر مهمه...سیستم عامل یه غوله که سختافزار سیستم ما رو بلعیده و برنامهای که ما مینویسیم همیشه یه اینترفیسه که با سیستم عامل درحال تعامله. و تا نتونی خوب درکش کنی هیچوقت قرار نیست بفهمی کامپیوتر واقعا چطور کار میکنه.
الان که داشتم درباره تلگرام میخوندم متوجه یه چیز عجیبی شدم. تلگرام یه زیرساخت غیرمتمرکز خیلی جالبی داره، دیتاسنترهاش رو توی کشورهای مختلفی که قوانین قضایی متفاوتی داره پخش کرده. تمام دیتایی که نگهداری میکنه رمز میشن و کلیدهای رمزنگاری هم به بخشهای مختلفی تیکه تیکه شده
#رشتو
و توی دیتاسنترها پخش شده. تلگرام میگه هیچ کدوم از دیتاسنترها کلید رو به شکل کامل نداره و حالا یه تحت یه پروتکلی اینا دیتاسنترهای توزیعشده باهمدیگه کار میکنن. حالا چرا اینکار رو انجام داده؟ جالبیش اینجاست. این باعث میشه که یه کشور واحد نتونه به تنهایی تلگرام رو مجبور به دادن
دیتا کنه، یعنی فرانسه اگه چیزی رو از تلگرام بخواد باید هر کشوری که دیتاسنتر تلگرام داخلش هست هم بخواد و توافق جمعی و جهانی صورت بگیره که یه چیز خیلی سخت و نشدنیه درحال حاضر. این باعث میشه حتی دو یا سه تا کشور همپیمان (مثل ایران، روسیه، چین) هم باز نتونن از تلگرام دیتا بگیرن، چون