إنّ عنصر Authenticated Encryption with Associated Data (AEAD) هو العنصر الأكثر شيوعًا لتشفير البيانات، وهو مناسب لمعظم الاحتياجات.
تتضمّن AEAD الخصائص التالية:
- Secrecy: لا يُعرف أي شيء عن النص العادي باستثناء طوله.
- المصداقية: يستحيل تغيير النص العادي المشفّر الذي يستند إليه النص المشفّر بدون أن يتم اكتشاف ذلك.
- التشفير المتماثل: يتم تشفير النص العادي وفك تشفير النص المشفر باستخدام المفتاح نفسه.
- التوزيع العشوائي: يتم توزيع التشفير بشكل عشوائي. تؤدي رسالتان تتضمّنان النص العادي نفسه إلى إنشاء نصَّين مشفَّرَين مختلفَين. لا يمكن للمهاجمين معرفة النص المشفّر الذي يتوافق مع نص عادي معيّن. إذا أردت تجنُّب ذلك، استخدِم AEAD الحتمية بدلاً من ذلك.
البيانات المرتبطة
يمكن استخدام AEAD لربط النص المشفّر ببيانات مرتبطة معيّنة. لنفترض أنّ لديك قاعدة بيانات تتضمّن الحقلَين user-id وencrypted-medical-history. في هذا السيناريو، يمكن استخدام user-id كبيانات مرتبطة عند تشفير encrypted-medical-history. يمنع ذلك المهاجم من نقل السجلّ الطبي من مستخدم إلى آخر.
البيانات المرتبطة اختيارية. في حال تحديدها، لا ينجح فك التشفير إلا إذا تم تمرير البيانات المرتبطة نفسها إلى كل من طلبات التشفير وفك التشفير.
اختيار نوع المفتاح
مع أنّنا ننصح باستخدام AES128_GCM لمعظم الاستخدامات، تتوفّر أنواع مختلفة من المفاتيح لتلبية الاحتياجات المختلفة. يوفّر AES128 أمانًا بمقدار 128 بت، بينما يوفّر AES256 أمانًا بمقدار 256 بت.
في ما يلي قيدان مهمّان متعلّقان بالأمان عند اختيار وضع:
- QPS: كم عدد الرسائل التي يتم تشفيرها باستخدام المفتاح نفسه؟
- حجم الرسالة: ما هو حجم الرسائل؟
بشكل عام:
- يُعدّ AES-CTR-HMAC (AES128_CTR_HMAC_SHA256 وAES256_CTR_HMAC_SHA256) مع متّجه تهيئة (IV) يبلغ 16 بايت الوضع الأكثر أمانًا مع حدود جيدة.
- تكون خوارزمية AES-EAX (AES128_EAX وAES256_EAX) أقل تحفظًا وأسرع قليلاً من AES128_CTR_HMAC_SHA256.
- عادةً ما يكون AES-GCM (AES128_GCM وAES256_GCM) هو الوضع الأسرع مع فرض حدود صارمة على عدد الرسائل وحجمها. عند تجاوز هذه الحدود المفروضة على أطوال النص العادي والبيانات المرتبطة (الموضّحة أدناه)، يفشل AES-GCM بشكل كارثي ويؤدي إلى تسرُّب مواد المفاتيح.
- إنّ AES-GCM-SIV (AES128_GCM_SIV وAES256_GCM_SIV) أسرع من AES-GCM. ويفرض هذا الوضع القيود نفسها التي يفرضها وضع AES-GCM على عدد الرسائل وحجمها، ولكن عند تجاوز هذه القيود، يحدث الخطأ بطريقة أقل كارثية، إذ قد يتم الكشف فقط عن أنّ رسالتَين متساويتان. وهذا يجعلها أكثر أمانًا من AES-GCM، ولكنّها أقل استخدامًا في الواقع. لاستخدام هذه الميزة في Java، عليك تثبيت Conscrypt.
- يفرض XChaCha20-Poly1305 (XCHACHA20_POLY1305) حدًا أعلى بكثير على عدد الرسائل وحجمها مقارنةً بـ AES-GCM، ولكن في حال حدوث خطأ (وهو أمر غير محتمل)، يؤدي ذلك أيضًا إلى تسريب مواد المفتاح. لا يتم تسريعها باستخدام الأجهزة، لذا قد تكون أبطأ من أوضاع AES في الحالات التي يتوفّر فيها تسريع الأجهزة.
ضمانات الأمان
تقدّم عمليات تنفيذ AEAD ما يلي:
- أمان CCA2
- قوة مصادقة لا تقل عن 80 بت
- القدرة على تشفير 232 رسالة على الأقل بإجمالي حجم يبلغ 250 بايت لا يمكن تنفيذ أي هجوم باستخدام ما يصل إلى 232 من النصوص العادية أو النصوص المشفرة المحدّدة بنجاح باحتمالية أكبر من 2-32.
أمثلة على حالات الاستخدام
أريد تشفير البيانات وأريد ربط النص المشفّر بسياقه.