جریان رمزگذاری احراز هویت شده با داده های مرتبط (Streaming AEAD)

Streaming AEAD primitive رمزگذاری احراز هویت شده را برای جریان داده ها فراهم می کند. زمانی مفید است که داده‌هایی که باید رمزگذاری شوند بزرگتر از آن هستند که در یک مرحله پردازش شوند. موارد استفاده معمولی شامل رمزگذاری فایل های بزرگ یا جریان داده های زنده است.

رمزگذاری در بخش‌هایی انجام می‌شود که به مکان خود در یک متن رمزی محدود شده‌اند و نمی‌توانند حذف یا مرتب شوند. بخش هایی از یک متن رمزی را نمی توان در متن رمزی دیگر درج کرد. برای اصلاح یک متن رمزی موجود، کل جریان داده باید دوباره رمزگذاری شود. 1

رمزگشایی سریع است، زیرا تنها بخشی از متن رمزگذاری شده رمزگشایی و احراز هویت می شود. متن های ساده جزئی بدون پردازش کل متن رمزی قابل دستیابی هستند.

اجرای جریانی AEAD تعریف AEAD را برآورده می‌کند و از نظر امنیت سازمانی امن نیست. آنها دارای خواص زیر هستند:

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

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

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

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

ما AES128_GCM_HKDF_1MB را برای بیشتر استفاده ها توصیه می کنیم. به طور کلی:

  • AES128_GCM_HKDF_1MB (یا AES256_GCM_HKDF_1MB) سریع‌ترین گزینه است. این می تواند 264 فایل را با حداکثر 264 بایت رمزگذاری کند. ~ 1 مگابایت حافظه در طول فرآیند رمزگذاری و رمزگشایی مصرف می شود.
  • AES128_GCM_HKDF_4KB حدود 4 کیلوبایت حافظه مصرف می کند و اگر سیستم شما حافظه زیادی ندارد، انتخاب خوبی است.
  • AES128_CTR_HMAC_SHA256_1MB (یا AES256_CTR_HMAC_SHA256_1MB) گزینه محافظه کارانه تری است.

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

اجرای جریانی AEAD ارائه می دهد:

  • امنیت CCA2
  • حداقل قدرت احراز هویت 80 بیتی.
  • امکان رمزگذاری حداقل 2 64 پیام 3 با مجموع 2 51 بایت 2 . هیچ حمله ای با حداکثر 2 32 متن ساده یا متن رمزی انتخاب شده احتمال موفقیت بزرگتر از 2 -32 ندارد.

مثال استفاده

ببینید می‌خواهم فایل‌های بزرگ یا جریان‌های داده را رمزگذاری کنم .


  1. دلیل این محدودیت استفاده از رمز AES-GCM است. رمزگذاری یک بخش متن ساده متفاوت در یک مکان معادل استفاده مجدد از IV است که ضمانت‌های امنیتی AES-GCM را نقض می‌کند. دلیل دیگر این است که از حملات برگشتی جلوگیری می کند، جایی که مهاجم ممکن است سعی کند نسخه قبلی فایل را بدون شناسایی بازیابی کند.

  2. 2 32 بخش پشتیبانی می شود که هر بخش حاوی بایت های segment_size - tag_size از متن ساده است. برای بخش های 1 مگابایتی، کل اندازه متن ساده 2 32 * (2 20 -16) ~ = 2 51 بایت است.

  3. هنگامی که یک کلید مشتق شده (128 بیتی) و پیشوند nonce (مقدار تصادفی مستقل 7 بایتی) تکرار می شود، پخش جریانی AEAD ناامن می شود. ما مقاومت برخورد 184 بیتی داریم که اگر بخواهیم احتمال موفقیت کمتر از 2 -32 باشد، تقریباً به 264 پیام ترجمه می شود.