تور و الگوریتم CGO


تور در خطر: رمزنگاری قدیمی آن، شما رو در معرض افشای هویت و خروج از حالت ناشناس قرار می‌دهد

پروژه تور اخیراً اعلام کرده است که قصد دارد الگوریتم رمزنگاری اصلی خود را تغییر دهد. در گذشته، تور از یک الگوریتم رمزنگاری به نام “تور1” استفاده می‌کرد که ضعف‌هایی داشت و ممکن بود به مهاجمان این امکان را بدهد که هویت کاربران را افشا کنند و آنان را از حالت ناشناسی خارج نمایند.

رمزنگاری تور: گذشته و مشکلات آن

الگوریتم رمزنگاری فعلی تور (که به آن تور1 گفته می‌شود) از روش AES-CTR (Advanced Encryption Standard in Counter mode) بهره می‌برد. این الگوریتم از یک تکنیک رمزنگاری به نام CTR استفاده می‌کند که به صورت بلوکی (block cipher) عمل می‌کند و از شمارش‌گرهای (counters) تصادفی برای تولید داده‌های رمزنگاری‌شده استفاده می‌کند. اما مشکلی که این الگوریتم دارد این است که هیچگونه احراز هویت (authentication) بین رله‌ها وجود ندارد. به عبارت ساده‌تر، این امکان فراهم است که ترافیک رمزنگاری‌شده تغییر یابد بدون آنکه کسی متوجه شود.

این نقص به مهاجمان این امکان را می‌دهد که به طور فعال ترافیک کاربران را دستکاری کرده و سپس در رله‌های دیگر، این تغییرات را شناسایی کرده و شواهدی از ارتباط بین هویت و فعالیت‌های کاربران پیدا کنند. به این نوع حمله، حمله برچسب‌گذاری (Tagging Attack) گفته می‌شود که در آن مهاجم از این تغییرات برای شناسایی ارتباط بین هویت کاربر و مقصدهای اینترنتی که بازدید می‌کند استفاده می‌کند.

نحوه عملکرد حمله برچسب‌گذاری

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

دیگر مشکلات الگوریتم رمزنگاری فعلی تور

علاوه بر مشکل دستکاری داده‌ها، رمزنگاری فعلی تور مسائل دیگری نیز دارد که باعث نگرانی می‌شود:

  1. عدم امنیت پیشرفته (Forward Secrecy):
    در سیستم فعلی، از کلیدهای یکسان برای رمزنگاری تمام جلسات استفاده می‌شود. این بدین معنی است که اگر کلیدهای رمزنگاری بعداً لو بروند یا به خطر بیافتند، تمامی ترافیک گذشته قابل رمزگشایی خواهد بود. این ضعف بسیار بزرگی است، زیرا امنیت هر جلسه به کلیدهایی وابسته است که می‌توانند در آینده آسیب‌پذیر شوند.
  2. احراز هویت ضعیف:
    سیستم فعلی از تنها ۴ بایت برای تأیید صحت پیام‌ها استفاده می‌کند که به معنای این است که شانس جعل یک پیام معتبر در حدود ۱ در ۴ میلیارد است. این احتمال، به ظاهر زیاد، اما در دنیای مدرن رمزنگاری به عنوان یک نقص جدی شناخته می‌شود و می‌تواند به راحتی مورد سوء استفاده قرار گیرد.

افشای هویت و خارج شدن از حالت ناشناس

چون بین رله‌ها احراز هویت وجود ندارد، مهاجم می‌تواند ترافیک رمزنگاری‌شده را دستکاری کند
(Tagging Attack).

  • مهاجم روی یک رله، در ترافیک رمزنگاری‌شده «برچسب» اضافه می‌کند.
  • در رله‌ی بعدی، همان برچسب را دوباره شناسایی می‌کند.
  • از روی این برچسب، ارتباط بین کاربر و مقصد نهایی را استنتاج می‌کند.

«این کاربر ← این مقصد نهایی»

👉 یعنی ارتباط IP واقعی کاربر با مقصد سایت لو می‌رود.

قابل‌رمزگشایی شدن ترافیک گذشته در آینده (نبود Forward Secrecy)

چون از کلیدهای یکسان برای تمام جلسات استفاده می‌شود، اگر این کلیدها بعداً لو بروند:

  • 👉 همه‌ی ترافیک قبلی کاربر هم قابل رمزگشایی می‌شود.
  • اگر کسی الان ترافیک تور را ضبط کند و چند سال بعد کلید را به دست آورد، می‌تواند ترافیک گذشته را بخواند.

احتمال جعل پیام و سوءاستفاده از احراز هویت ضعیف

تنها ۴ بایت برای تأیید صحت پیام‌ها استفاده می‌شود؛
این یعنی:

  • احتمال حدس‌زدن/جعل درست حدود ۱ در ۴ میلیارد است.
  • در مقیاس حملات مدرن، با تلاش‌های زیاد، این مقدار کافی امن محسوب نمی‌شود.
  • 👉 مهاجم می‌تواند پیام جعلی معتبر بسازد یا بخشی از ترافیک را طوری دستکاری کند که سیستم متوجه نشود.

امکان دستکاریِ بی‌صدا روی ترافیک رمزنگاری‌شده

چون رمزنگاری فعلی احراز هویت (authentication) ندارد:

  • ترافیک می‌تواند بدون تشخیص، تغییر داده شود.
  • این وضعیت هم برای حملات برچسب‌گذاری (Tagging) مفید است،
  • و هم برای انواع حملات فعال (Active Attacks).
  • خطر اصلی برای کاربر تور این است که یک مهاجمِ قدرتمند می‌تواند، با سوءاستفاده از ضعف‌های رمزنگاری فعلی،
    هم شما را از حالت ناشناس خارج کند (هویت + مقصد نهایی)،
    و هم در آینده ترافیک گذشته‌تان را رمزگشایی کند.

راه‌حل پیشنهادی: Counter Galois Onion (CGO)

برای مقابله با مشکلات موجود، تور به تازگی الگوریتم رمزنگاری جدیدی به نام Counter Galois Onion (CGO) را معرفی کرده است که به طور ویژه برای مقابله با این ضعف‌ها طراحی شده است. این تغییرات، امنیت بیشتری را فراهم می‌آورد و به طور خاص از حملات برچسب‌گذاری جلوگیری می‌کند. ویژگی‌های اصلی CGO عبارتند از:

  1. رمزنگاری مقاوم در برابر دستکاری:
    در سیستم جدید، هرگونه تغییر در داده‌های رمزنگاری‌شده باعث از بین رفتن کل پیام می‌شود. به این ترتیب، مهاجم قادر نخواهد بود که فقط بخشی از پیام را تغییر دهد، زیرا تغییرات حتی به اندازه یک بیت هم منجر به از دست رفتن تمام پیام می‌شود.
  2. تأیید زنجیره‌ای (Chained Verification):
    در این سیستم، هر پیام به پیام‌های قبلی وابسته است. این به این معنی است که اگر مهاجم بخواهد یکی از پیام‌ها را دستکاری کند، تمام پیام‌های بعدی غیرقابل خواندن خواهند شد. این ویژگی باعث می‌شود که امکان نفوذ به سیستم و تغییر داده‌ها به شدت محدود شود.
  3. امنیت پیشرفته فوری (Forward Secrecy):
    در این مدل، کلیدهای رمزنگاری پس از هر پیام تغییر می‌کنند. بنابراین، حتی اگر یک کلید رمزنگاری در آینده به خطر بیافتد، ترافیک قبلی همچنان ایمن و رمزنگاری‌شده باقی خواهد ماند.
  4. احراز هویت ۱۶ بایتی:
    این ویژگی جدید باعث می‌شود که سیستم چهار برابر ایمن‌تر از قبل باشد. با استفاده از ۱۶ بایت برای تأیید صحت پیام‌ها، شانس جعل یک پیام معتبر به شدت کاهش می‌یابد و امنیت بیشتری را برای کاربران فراهم می‌آورد.

وضعیت فعلی و آینده

این تغییرات در حال حاضر در نسخه‌های آزمایشی تور در حال پیاده‌سازی است. به طور خاص، در Arti (کلاینت جدید تور نوشته‌شده به زبان Rust) و کد بیس C تور این ویژگی‌ها گنجانده شده‌اند، اما هنوز فعال نشده‌اند. در واقع، تا زمانی که تعداد کافی از رله‌ها از CGO پشتیبانی نکنند، این الگوریتم جدید به طور رسمی در دسترس قرار نخواهد گرفت.

✍️ نویسنده: حسین سیلانی

🔗 درباره من: seilany.ir

📢 نویسندگی و مشارکت در وبلاگ: t.me/seilany