اپلیکیشن سیگنال داره برای امن نگه داشتن چتهای خصوصی در آینده کوانتومی آماده میشه. این شرکت یک لایه رمزنگاری جدید به اسم SPQR (کوتاهشده Sparse Post Quantum Ratchet) اضافه کرده که طراحی شده تا جلوی کامپیوترهای کوانتومی آینده رو برای شکستن امنیت امروزی بگیره.
پروتکل سیگنال همین الان هم از میلیاردها مکالمه در روز توی اپهایی مثل واتساپ، گوگل مسیجز و مسنجر محافظت میکنه. اما با اینکه توابع هش اون در برابر حملههای کوانتومی مقاوم هستن، وابستگیش به رمزنگاری منحنی بیضوی (elliptic curve cryptography) یه نقطه ضعف بالقوه ایجاد کرده. اگه یه روزی کامپیوترهای کوانتومی قدرتمند از راه برسن، چتهای ذخیره شده میتونن به راحتی رمزگشایی بشن.
معرفی Triple Ratchet: یک لایه دفاعی جدید
SPQR این وضعیت رو با اضافه کردن رمزنگاری مقاوم در برابر کوانتوم به فرایند کلیدسازی مداوم سیگنال، که بهش ratcheting میگن، تغییر میده. این بخش از پروتکل به طور مداوم کلیدها رو در طول یک مکالمه تازه میکنه. این سیستم جدید در کنار Double Ratchet قبلی، چیزی رو میسازه که سیگنال بهش میگه Triple Ratchet. حالا پیامها هم با ریاضیات کلاسیک منحنی بیضوی و هم با الگوریتمهای مقاوم در برابر کوانتوم رمزنگاری میشن. این کار مهاجمهای احتمالی رو مجبور میکنه که هر دو سیستم رو همزمان بشکنن.
بهترین قسمتش اینه که کاربرها لازم نیست هیچ کاری انجام بدن. این آپدیت به آرامی و در پسزمینه در حال انجامه و در نهایت تمام مکالمهها با SPQR محافظت میشن. این یعنی حتی اگه یک مهاجم امروز پیامهای رمزنگاری شده رو جمعآوری کنه، در آینده کوانتومی این پیامها براش بیفایده خواهند بود.
سیگنال برای طراحی این سیستم با محققهای دانشگاهی و متخصصهای رمزنگاری صنعتی همکاری کرده و اون رو با ابزارهای تایید رسمی و شبیهسازیهای دنیای واقعی آزمایش کرده. این پروتکل، تضمینهای اصلی خودش یعنی «رازداری پیشرو» (forward secrecy) و «امنیت پس از نفوذ» (post-compromise security) رو حفظ میکنه و همزمان مقاومت کوانتومی رو هم بهش اضافه میکنه.
چرا این تغییر لازمه؟ نگاهی به تهدید کوانتومی
سیگنال در یک پست وبلاگ اعلام کرد که این یک پیشرفت مهم در امنیت پروتکل سیگناله. این پروتکل که اولین بار در سال ۲۰۱۳ منتشر شد، به صورت متنباز در اختیار همه قرار گرفت و علاوه بر اپ سیگنال، توسط محصولات پیامرسان بزرگ دیگهای هم استفاده شد.
قبل از این، سیگنال با آپدتی به اسم PQXDH اولین قدم رو برای مقاومت کوانتومی برداشته بود. اون آپدیت، رمزهای مقاوم در برابر کوانتوم رو موقع شروع یک چت اضافه میکرد تا جلوی حملههای «الان برداشت کن، بعدا رمزگشایی کن» رو بگیره. اما پروتکل سیگنال فقط برای اول مکالمه طراحی نشده؛ بلکه هدفش اینه که در طول مکالمه، آسیب رو به حداقل برسونه و خودش رو ترمیم کنه. این اهداف امنیتی دو تا اسم دارن:
- Forward Secrecy (FS): از پیامهای گذشته در برابر نفوذهای آینده محافظت میکنه.
- Post-Compromise Security (PCS): از پیامهای آینده در برابر نفوذهای گذشته محافظت میکنه.
حالا بیاید یک مثال با کاربرهای معروفمون، آلیس و باب، بزنیم. اونها یک ارتباط طولانی برقرار میکنن و مرتب با هم چت میکنن. در طول این مکالمه، اونها به طور منظم روی کلیدهای جدید ECDH (مخفف elliptic-curve Diffie Hellman) به توافق میرسن و از اونها برای تازه کردن ارتباطشون استفاده میکنن. یک فرد بدجنس به اسم مالوری، کل ارتباط رمزنگاری شده رو ضبط میکنه تا بفهمه آلیس و باب در مورد چی حرف میزنن.
مفهوم «ratchet» یا چرخ ضامندار برای امنیت فعلی (غیر کوانتومی) خیلی مهمه. این مکانیزم مثل یک چرخدنده عمل میکنه که فقط به جلو میچرخه و اجازه چرخش به عقب رو نمیده. وقتی آلیس و باب ارتباطشون رو «ratchet» میکنن، کلیدهای قبلی رو با کلیدهای جدیدی که بر اساس رمزهای قدیمی و یک رمز جدید ساخته شده، جایگزین میکنن. با این کار، حتی با داشتن کلیدهای جدید، نمیشه کلیدهای قدیمی رو محاسبه کرد و اینطوری FS تامین میشه.
حالا فرض کنید مالوری به دستگاههای آلیس و باب نفوذ میکنه و به تمام کلیدهای فعلی اونها دسترسی پیدا میکنه. به لطف FS، پیامهای قبل از آخرین ratchet برای مالوری غیرقابل دسترسن. به لطف PCS هم، وقتی اونها دوباره ratchet کنن، کلیدهای جدیدی میسازن که مالوری نمیتونه بهشون دسترسی پیدا کنه و ارتباطشون دوباره امن میشه.
اما اگه مالوری یک کامپیوتر کوانتومی داشته باشه، اوضاع فرق میکنه. چون رمزنگاری منحنی بیضوی در برابر کوانتوم مقاوم نیست، مالوری میتونه فقط با نگاه کردن به ارتباط بین آلیس و باب، به کلید مشترک اونها دسترسی پیدا کنه. در این حالت، ارتباط اونها هیچوقت «ترمیم» نمیشه و مالوری میتونه تمام مکالمههای آینده رو هم رمزگشایی کنه.
راه حل فنی: چطور SPQR کار میکنه؟
برای اینکه تضمینهای امنیتی در برابر حملههای کوانتومی هم کار کنن، باید از الگوریتمهای مقاوم در برابر کوانتوم استفاده بشه. ابزاری که برای این کار طراحی شده، Key-Encapsulation Mechanism (KEM) نام داره. KEMها شبیه به مکانیزمهای Diffie-Hellman عمل میکنن اما یک تفاوت مهم دارن: KEMها به پیامهای نامتقارن و مرتب نیاز دارن.
در یک KEM استاندارد به اسم ML-KEM، طرف شروعکننده یک جفت کلید (EK و DK) تولید میکنه و EK رو میفرسته. طرف گیرنده یک کلید مخفی تولید میکنه و اون رو با EK در یک متن رمز شده (CT) بستهبندی میکنه و میفرسته. طرف اول با استفاده از DK خودش، کلید مخفی رو از CT استخراج میکنه. در نهایت هر دو طرف کلید مخفی جدید رو دارن.
مشکلات اولیه و راه حلها
یک رویکرد ساده این بود که آلیس با هر پیام یک EK بفرسته و باب در جواب یک CT. اما این روش چند تا مشکل داره:
- کلیدهای EK و CT خیلی بزرگ هستن (بیش از ۱۰۰۰ بایت برای ML-KEM 768 در مقایسه با ۳۲ بایت برای ECDH).
- اگه یکی از طرفین آفلاین باشه یا پیامها گم بشن چی؟
- اگه آلیس بخواد ۱۰ تا پیام بفرسته قبل از اینکه باب جواب بده چی؟
برای حل این مشکلات، سیگنال از چند تا راهکار استفاده کرده:
- ماشین حالت (State Machine): آلیس و باب هر دو وضعیت ارتباط رو دنبال میکنن (مثلا «در حال ارسال EK» یا «در حال ارسال CT») و بر اساس اون تصمیم میگیرن چی بفرستن.
- کدهای پاککننده (Erasure Codes): برای اینکه حجم بالای دادهها رو مدیریت کنن و در برابر گم شدن پیام مقاوم باشن، از این کدها استفاده شده. این روش یک پیام بزرگ رو به تکههای کوچیک تقسیم میکنه. نکته مهم اینه که گیرنده فقط با دریافت تعداد مشخصی از این تکهها (مثلا ۱۰ تکه از کل تکهها) میتونه پیام اصلی رو بازسازی کنه، حتی اگه بعضی تکهها گم بشن یا ترتیبشون به هم بریزه. این کار باعث میشه یک مهاجم نتونه با حذف چند پیام، کل فرایند تبادل کلید رو مختل کنه و مجبور بشه کل ارتباط رو قطع کنه که خیلی راحت قابل تشخیصه.
چرا سریعتر همیشه بهتر نیست؟
تیم سیگنال متوجه شد که تولید سریع کلیدهای جدید همیشه بهترین راه نیست. اونها مفهومی به اسم «epoch» یا دوره رو معرفی کردن. هر بار که یک کلید مشترک جدید تولید میشه، مکالمه وارد یک دوره جدید میشه. اگه آلیس کلیدهای دورههای آینده (مثلا EK#2 و EK#3) رو قبل از اینکه دوره اول (CT#1) تموم بشه تولید کنه، یک مشکل امنیتی ایجاد میشه. اگه در این لحظه دستگاه آلیس هک بشه، مهاجم نه تنها به کلیدهای دوره فعلی، بلکه به کلیدهای لازم برای بازسازی کلیدهای دورههای آینده هم دست پیدا میکنه. شبیهسازیهای متعدد نشون داد که این کار، پیامهای بیشتری رو در برابر یک نفوذ آسیبپذیر میکنه.
یک رویکرد بهینهتر: ML-KEM Braid
برای استفاده بهینه از پهنای باند بدون ایجاد آسیبپذیری، تیم سیگنال نگاه عمیقتری به الگوریتم ML-KEM انداخت. اونها متوجه شدن که بخش بزرگی از CT (حدود ۹۶۰ بایت از ۱۰۸۸ بایت) فقط با داشتن بخش کوچکی از EK (یک Seed سی و دو بایتی و هش EK) قابل تولیده.
این کشف به اونها اجازه داد یک پروتکل بهینهتر به اسم ML-KEM Braid طراحی کنن که در اون:
- آلیس اول بخش کوچک و ضروری EK رو میفرسته.
- باب با دریافت این بخش کوچک، بخش بزرگ CT رو تولید میکنه.
- بعد از این، آلیس بقیه EK رو میفرسته و همزمان باب بخش بزرگ CT رو میفرسته. این یعنی بخش زیادی از تبادل داده به صورت موازی انجام میشه.
- در نهایت بخشهای نهایی و کوچک داده به صورت جداگانه ارسال میشن.
این رویکرد که با کمک نویسندههای کتابخانه libcrux-ml-kem
در زبان Rust ممکن شد، باعث میشه از ظرفیت ارسال پیامها به بهترین شکل استفاده بشه.
نحوه عرضه و تایید نهایی پروتکل
این پروتکل جدید به تدریج برای همه کاربرها فعال میشه، اما طوری طراحی شده که مشکلی برای دستگاههای قدیمیتر پیش نیاد. اگه آلیس که آپدیت شده، به باب که هنوز آپدیت نشده پیام بده، پروتکل به صورت خودکار به حالت قبلی (بدون SPQR) برمیگرده تا مکالمه قطع نشه. این فرایند در برابر حملههای واسطهای هم امن شده. در نهایت، وقتی همه کاربرها آپدیت رو دریافت کردن، سیگنال یک تغییر دیگه اعمال میکنه که استفاده از SPQR رو برای همه اجباری و جلسههای قدیمی رو بایگانی میکنه.
برای اطمینان از درستی کار، سیگنال از «تایید رسمی» (Formal Verification) از همون ابتدای فرایند طراحی استفاده کرد. اونها با شرکت Cryspen همکاری کردن و پروتکل رو در ابزاری به اسم ProVerif مدلسازی کردن تا ثابت کنن ویژگیهای امنیتی مورد نظر رو داره. همچنین کد Rust نوشته شده با ابزاری به اسم hax به زبان F* ترجمه میشه تا درستی پیادهسازی هم به صورت ماشینی تایید بشه. این تاییدها به صورت مداوم در هر تغییر کد تکرار میشن.
دیدگاهتان را بنویسید