پرش به محتویات

نحوه عملکرد

نحوه عملکرد

تبادل کلید (یک بار برای هر مخاطب)

  1. هر کاربر یک جفت کلید هویتی دائمی تولید می‌کند که به‌صورت محلی ذخیره می‌شود.
  2. کاربران کلیدهای عمومی خود را از طریق یک کانال مورد اعتماد با یکدیگر تبادل می‌کنند.
  3. کلیدهای عمومی می‌توانند پیش از ارسال به متن شاعرانه تبدیل شوند.

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

ارسال پیام (آلیس ← باب)

  1. یک راز مشترک از طریق ECDH و با استفاده از کلید خصوصی آلیس و کلید عمومی باب محاسبه می‌شود.
  2. با استفاده از HKDF-SHA256 و راز مشترک، یک کلید AES-256 مشتق می‌شود.
  3. متن پیام با استفاده از AES-256-GCM و یک Nonce تصادفی ۱۲ بایتی رمزنگاری می‌شود.
  4. یک بسته داده شامل nonce | ciphertext | auth tag ساخته می‌شود.
  5. بسته داده به بایت تبدیل شده و سپس به متن شاعرانه تبدیل می‌شود تا قابل ارسال باشد.

خواندن پیام

باب (دریافت‌کننده)

  1. متن شاعرانه به بسته داده اصلی تبدیل می‌شود.
  2. همان راز مشترک از طریق ECDH و با استفاده از کلید خصوصی باب و کلید عمومی آلیس محاسبه می‌شود.
  3. کلید رمزگشایی از طریق HKDF تولید می‌شود.
  4. پیام با استفاده از AES-GCM رمزگشایی می‌شود. در صورت تغییر یا دستکاری داده‌ها، بررسی صحت پیام ناموفق خواهد بود.

آلیس (بازخوانی پیام ارسالی)

آلیس نیز دقیقاً از همان مراحل استفاده می‌کند. نتیجه ECDH برای هر دو طرف یکسان است، بنابراین نیازی به بسته داده دوم یا لایه اضافی مدیریت کلید وجود ندارد.

ساختار بسته پیام (نسخه ۲)

فیلد اندازه توضیح
Version ۱ بایت شناسه قالب داده (v2)
Nonce ۱۲ بایت Salt برای HKDF و IV برای GCM
Ciphertext متغیر محتوای رمزنگاری‌شده
Auth Tag ۱۶ بایت بررسی صحت و یکپارچگی داده

هزینه ثابت هر پیام: ۳۳ بایت (به‌علاوه افزایش حجم ناشی از تبدیل به متن شاعرانه)

در مقایسه با طراحی قبلی که از کلیدهای موقت استفاده می‌کرد و بیش از ۴۰۰ بایت سربار رمزنگاری برای هر پیام داشت، ساختار جدید بسیار کوچک‌تر است و امکان ارسال متن بیشتری را در محدودیت طول پیام پیام‌رسان‌ها فراهم می‌کند.

اجزای رمزنگاری

مؤلفه انتخاب‌شده کاربرد
تبادل کلید ECDH (P-256) تولید راز مشترک بین دو کاربر
مشتق‌سازی کلید HKDF-SHA256 تولید کلید AES
رمزنگاری AES-256-GCM محرمانگی و صحت داده
احراز هویت کلید ECDSA (اختیاری) امضای کلیدهای عمومی

ویژگی‌های امنیتی

آنچه دریافت می‌کنید

  • پیام‌رسان‌ها و سرورهای آن‌ها بدون دسترسی به کلید خصوصی شما قادر به خواندن پیام‌ها نیستند.
  • برچسب‌های احراز هویت GCM هرگونه تغییر در داده رمزنگاری‌شده را تشخیص می‌دهند.
  • هر پیام از یک Nonce جدید استفاده می‌کند؛ بنابراین پیام‌های یکسان خروجی‌های رمزنگاری متفاوتی خواهند داشت.

آنچه دریافت نمی‌کنید

  • Perfect Forward Secrecy: در صورت افشای کلید خصوصی دائمی، پیام‌های گذشته نیز قابل رمزگشایی خواهند بود.
  • گفتگوهای گروهی: فقط ارتباط یک‌به‌یک پشتیبانی می‌شود.
  • محافظت در برابر MITM پس از تبادل کلید نامعتبر: کاربران باید کلیدهای عمومی را از یک کانال قابل اعتماد تأیید کنند.

تبدیل به متن شاعرانه

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

هدف این لایه تغییری نکرده است؛ تنها به دلیل کوچک‌تر شدن بسته‌های رمزنگاری، متن تولیدشده نیز کوتاه‌تر خواهد بود.

محدودیت‌ها

  • فقط از گفتگوهای یک‌به‌یک پشتیبانی می‌شود.
  • جایگزین کامل پروتکل‌های پیشرفته‌ای مانند Signal یا WhatsApp نیست.
  • امنیت سیستم به تبادل امن اولیه کلیدهای عمومی وابسته است.

خلاصه: چت‌گارد یک لایه سبک رمزنگاری مبتنی بر ECDH و AES-GCM به همراه تبدیل پیام به متن شاعرانه فراهم می‌کند تا بتوانید از طریق پیام‌رسان‌های موجود، بدون نیاز به زیرساخت اضافی، پیام‌های خصوصی ارسال کنید.