التشفير المصدق عليه مع البيانات المرتبطة (AEAD)

إنّ عنصر Authenticated Encryption with Associated Data (AEAD) الأساسي هو العنصر الأساسي الأكثر شيوعًا لتشفير البيانات، وهو مناسب لمعظم الاحتياجات.

تتضمّن AEAD الخصائص التالية:

  • Secrecy: لا يُعرف أي شيء عن النص العادي باستثناء طوله.
  • المصداقية: يستحيل تغيير النص العادي المشفّر الذي يستند إليه النص المشفّر بدون أن يتم اكتشاف ذلك.
  • التشفير المتماثل: يتم تشفير النص العادي وفك تشفير النص المشفر باستخدام المفتاح نفسه.
  • التوزيع العشوائي: يتم توزيع التشفير بشكل عشوائي. تؤدي رسالتان تتضمّنان النص العادي نفسه إلى إنشاء نصَّين مشفَّرَين مختلفَين. لا يمكن للمهاجمين معرفة النص المشفّر الذي يتوافق مع نص عادي معيّن. إذا أردت تجنُّب ذلك، استخدِم AEAD الحتمية بدلاً من ذلك.

البيانات المرتبطة

يمكن استخدام AEAD لربط النص المشفّر ببيانات مرتبطة معيّنة. لنفترض أنّ لديك قاعدة بيانات تتضمّن الحقلَين user-id وencrypted-medical-history. في هذا السيناريو، يمكن استخدام user-id كبيانات مرتبطة عند تشفير encrypted-medical-history. يمنع ذلك المهاجم من نقل السجلّ الطبي من مستخدم إلى آخر.

البيانات المرتبطة اختيارية. في حال تحديدها، لا ينجح فك التشفير إلا إذا تم تمرير البيانات المرتبطة نفسها إلى كل من طلبات التشفير وفك التشفير.

اختيار نوع المفتاح

على الرغم من أنّنا ننصح باستخدام AES128_GCM في معظم الحالات، تتوفّر أنواع مختلفة من المفاتيح لتلبية الاحتياجات المختلفة (للحصول على أمان 256 بت، استبدِل AES128 بـ AES256 أدناه). بشكل عام:

  • إنّ وضع AES128_CTR_HMAC_SHA256 مع متّجه تهيئة (IV) بحجم 16 بايت هو الوضع الأكثر تحفظًا مع حدود جيدة.
  • تكون AES128_EAX أقل تحفظًا وأسرع قليلاً من AES128_CTR_HMAC_SHA256.
  • عادةً ما يكون AES128_GCM هو الوضع الأسرع، مع فرض قيود صارمة على عدد الرسائل وحجمها. عند تجاوز هذه الحدود المفروضة على طول النص العادي وطول البيانات المرتبطة (الموضّحة أدناه)، يتعذّر تنفيذ AES128_GCM ويتم تسريب مواد المفاتيح.
  • تكون AES128_GCM_SIV أسرع من AES128_GCM. ويفرض هذا الوضع القيود نفسها التي يفرضها وضع AES128_GCM على عدد الرسائل وحجمها، ولكن عند تجاوز هذه القيود، يحدث الخطأ بطريقة أقل ضررًا، إذ قد يتم فقط تسريب حقيقة تساوي رسالتين. وهذا يجعلها أكثر أمانًا من AES128_GCM، ولكنها أقل استخدامًا في الواقع. لاستخدام هذه الميزة في Java، عليك تثبيت Conscrypt.
  • يفرض XChaCha20Poly1305 حدًا أقصى أكبر بكثير على عدد الرسائل وحجمها مقارنةً بـ AES128_GCM، ولكن في حال حدوث خطأ (وهو أمر غير محتمل)، يؤدي ذلك أيضًا إلى تسريب مواد المفاتيح. لا يتم تسريعها باستخدام الأجهزة، لذا قد تكون أبطأ من أوضاع AES في الحالات التي تتوفّر فيها ميزة تسريع الأجهزة.

ضمانات الأمان

تقدّم عمليات تنفيذ AEAD ما يلي:

  • أمان CCA2
  • قوة مصادقة تبلغ 80 بت على الأقل
  • القدرة على تشفير 232 رسالة على الأقل بإجمالي حجم يبلغ 250 بايت لا يوجد هجوم باستخدام ما يصل إلى 232 من النصوص العادية أو النصوص المشفرة المختارة لديه احتمال نجاح أكبر من 2-32.

أمثلة على حالات الاستخدام

أريد تشفير البيانات وأريد ربط النص المشفّر بسياقه.