رمزگذاری اصالت‌سنجی‌شده با داده‌های مرتبط (AEAD)

ابتدایی «رمزگذاری اصالت‌سنجی‌شده با داده‌های مرتبط» (AEAD) رایج‌ترین ابتدایی برای رمزگذاری داده‌ها است و برای اکثر نیازها مناسب است.

AEAD ویژگی‌های زیر را دارد:

  • Secrecy: هیچ‌چیز درباره متن ساده مشخص نیست، به‌جز طول آن.
  • اصالت: تغییر متن ساده رمزگذاری‌شده زیربنای متن رمزی بدون شناسایی شدن غیرممکن است.
  • متقارن: رمزگذاری متن ساده و رمزگشایی متن رمزشده با یک کلید انجام می‌شود.
  • تصادفی‌سازی: رمزگذاری تصادفی‌سازی شده است. دو پیام با متن ساده یکسان، متن‌های رمزی متفاوتی تولید می‌کنند. مهاجمان نمی‌توانند بدانند کدام نوشتار رمزی با نوشتار ساده‌ای معین مطابقت دارد. اگر می‌خواهید از این امر جلوگیری کنید، به‌جای آن از Deterministic AEAD استفاده کنید.

داده‌های مرتبط

از AEAD می‌توان برای مرتبط کردن متن رمزی به داده‌های مرتبط خاص استفاده کرد. فرض کنید پایگاه داده‌ای با فیلدهای user-id و encrypted-medical-history دارید. در این سناریو، هنگام رمزگذاری encrypted-medical-history می‌توان از user-id به‌عنوان داده‌های منسوب استفاده کرد. این کار مانع از آن می‌شود که مهاجم سابقه پزشکی را از کاربری به کاربر دیگر منتقل کند.

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

انتخاب نوع کلید

اگرچه AES128_GCM را برای اکثر موارد استفاده توصیه می‌کنیم، انواع مختلفی از کلیدها برای نیازهای مختلف وجود دارد. ‫AES128 امنیت ۱۲۸ بیتی و AES256 امنیت ۲۵۶ بیتی ارائه می‌دهد.

دو محدودیت امنیتی قابل‌توجه هنگام انتخاب حالت عبارتند از:

  1. پرسش در ثانیه: چند پیام با کلید یکسان رمزگذاری شده است؟
  2. اندازه پیام: پیام‌ها چقدر بزرگ هستند؟

انواع کلید پشتیبانی‌شده:

  • ‫AES-CTR-HMAC (AES128_CTR_HMAC_SHA256،‏ AES256_CTR_HMAC_SHA256) با «بردار مقدار اولیه» (IV) 16 بایتی محافظه‌کارانه‌ترین حالت با مرزهای خوب است.
    • کلید-تعهد.
  • ‫AES-EAX‏ (AES128_EAX،‏ AES256_EAX) کمی کمتر محافظه‌کارانه و کمی سریع‌تر از AES128_CTR_HMAC_SHA256 است.
    • MLGR بدون تعهد کلید.
  • AES-GCM (AES128_GCM, AES256_GCM) معمولاً سریع‌ترین حالت با سخت‌گیرانه‌ترین محدودیت‌ها در تعداد پیام‌ها (232) و اندازه پیام (~64 گیگابایت برای هر پیام) است. وقتی از این محدودیت‌ها فراتر برود، AES-GCM با نشت متن ساده و بخش اصالت‌سنجی کلید داخلی AES-GCM به‌طور فاجعه‌باری ازکار می‌افتد.
    • AES-GCM نه مقاوم است [ABN] و نه متعهد به کلید [GLR]. امکان تولید متن رمزی که با دو کلید متفاوت قابل‌رمزگشایی باشد وجود دارد. این امر می‌تواند به حملات عملی منجر شود [DGRW]. اگر کلید توسط حریف انتخاب شده است، مدل تهدید خود را به‌دقت مرور کنید.
  • ‫AES-GCM-SIV (AES128_GCM_SIV،‏ AES256_GCM_SIV) [RFC8452] دربرابر استفاده تصادفی از nonce مقاوم است و تقریباً به‌اندازه AES-GCM عملکرد دارد. محدودیت‌های مربوط به تعداد پیام‌ها و اندازه پیام برای AES-GCM-SIV با مقدار اولیه تصادفی بسیار بیشتر از محدودیت‌های AES-GCM است. وقتی از این محدودیت‌ها فراتر برود، AES-GCM-SIV با فاجعه کمتری مواجه می‌شود: فقط این را فاش می‌کند که دو پیام برابر هستند. استفاده از AES-GCM-SIV ایمن‌تر است، اما در عمل کمتر استفاده می‌شود.
    • محدوده‌های اعداد تصادفی یک‌بارمصرف:
      • ‫۲۳۲ پیام، که هر متن ساده حداکثر ۸ گیبی‌بایت است
      • ‫۲۴۸ پیام، که هر متن ساده حداکثر ۳۲ مگابایت است
      • ‫۲۶۴ پیام، که هر متن ساده حداکثر ۱۲۸ کیبی‌بایت است
    • برای استفاده در جاوا، Conscrypt را نصب کنید.
    • غیرمتعهد به کلید ADGKLS.
  • XChaCha20-Poly1305 (XCHACHA20_POLY1305)‎ حد بسیار بالاتری برای تعداد پیام‌ها و اندازه پیام نسبت‌به AES-GCM دارد، اما وقتی ناموفق باشد (که بسیار بعید است)، داده‌های کلید را نیز لو می‌دهد. این حالت شتاب سخت‌افزاری ندارد، بنابراین در شرایطی که شتاب سخت‌افزاری دردسترس باشد، می‌تواند کندتر از حالت‌های AES باشد.
    • LGR غیرمتعهد به کلید.

درباره قالب سیمی رمزنگاری AEAD بیشتر بدانید.

تضمین‌های امنیتی

پیاده‌سازی‌های AEAD این موارد را ارائه می‌دهند:

  • امنیت CCA2.
  • قدرت اصالت‌سنجی حداقل ۸۰ بیتی.
  • توانایی رمزگذاری حداقل ۲۳۲ پیام با مجموع ۲۵۰ بایت. هیچ حمله‌ای با حداکثر ۲۳۲ متن ساده انتخاب‌شده یا متن رمزنگاری‌شده انتخاب‌شده احتمال موفقیت بیشتر از ۲-۳۲ ندارد.

موارد استفاده نمونه

به بخش‌های می‌خواهم داده‌ها را رمزگذاری کنم و می‌خواهم متن رمزی را به بافت آن مقید کنم مراجعه کنید.