با کمک صفا (@safasafari3 ) روی الگوریتمش فکر کردیم و از دفیهیلمن به هیبرید (RSA و AES) تغییرش دادیم. الان تقریبا شبیه TLS کار میکنه و سرور نمیتونه اتک MitM بزنه. مکانیزمش رو مینویسم لطفا اگه مشکلی داره بگید بهترش کنیم.
اول از همه برای هر کاربر یه جفت کلید RSA ساخته میشه و کلیدهای عمومی توی سرور ذخیره میشن. کاربر باب لینک خودش رو که شامل نامکاربری و هش کلیدعمومی خودش میشه رو به آلیس میده. آلیس لینک رو باز میکنه و کلیدعمومی باب رو از سرور میخونه. حالا میاد هش کلیدعمومی باب رو حساب میکنه و
با هشی که روی لینک باب بود مقایسه میکنه، اگه یکی باشن یعنی سرور کلید رو جعل نکرده و همهچی درسته. آلیس پیامش رو مینویسه و با یه کلید AES رندوم رمز میکنه، خود کلید رو هم سمت تلگرامش ذخیره می کنه. با کلید عمومی باب، کلید AES رو رمز میکنه و پیام رمزی رو با کلید AES رمزشده به
سرور میفرسته. باب میاد پیام آلیس رو از سرور میگیره، سرور کلید رمزشدهی AES رو بهش میده و از روی سرور هم پاکش میکنه. آلیس با کلید خصوصی خودش AES رو رمزگشایی میکنه و توی تلگرام خودش ذخیره میکنه. پیام رمزشده رو هم با کلید AES رمزگشایی میکنه و میخونه. برای ادامهی مکالمات هم
مجددا از همون AES مشترک که بین طرفین ذخیره شده استفاده میشه. البته اگه آلیس بخواد یه پیام جدید بفرسته (نه اینکه ریپلای کنه پیام قبلی رو) اینجا باز یه AES جدید ساخته میشه که هویتش فاش نشه.
توی این چارت سعی کردم به سادهترین شکل ممکن توضحش بدم. لینک ربات رو برای تست اینه:
t.me/E2EChatbot
Share this Scrolly Tale with your friends.
A Scrolly Tale is a new way to read Twitter threads with a more visually immersive experience.
Discover more beautiful Scrolly Tales like this.
