تشفير طبقة التطبيقات

تتيح واجهات برمجة التطبيقات لنظام الدفعات العادي استخدام بروتوكول PGP أو JWE لتشفير طبقة التطبيق.

تشفير PGP

‫PGP هي مجموعة عادية من خوارزميات التشفير وفك التشفير والتوقيع التي توفّر الخصوصية والمصادقة التشفيرية.

عند استخدام بروتوكول PGP لتشفير الحمولات، يجب أن يتيح الشركاء ما يلي:

  • تشفير الحمولات وفك تشفيرها باستخدام مفاتيح PGP متعدّدة
  • توقيع الحِزم باستخدام مفاتيح PGP متعدّدة
  • إثبات صحة الحمولة باستخدام توقيعات متعددة، يمكن أن يكون أيّ منها هو التوقيع باستخدام المفتاح الذي تقدّمه Google
  • فك ترميز الحمولات المشفّرة بترميز base64 الآمن على الويب

يجب أن تحتوي مفاتيح PGP العامة المقدَّمة إلى Google على مفتاح فرعي يُستخدَم للتشفير. يتيح المفتاح الفرعي تغيير المفتاح الرئيسي بشكل مستقل. يُستخدَم المفتاح الرئيسي لإثبات الهوية. يجب أن تكون المفاتيح الخاصة مفاتيح RSA بسعة 2048 (أو أكثر) بت تنتهي صلاحيتها بعد عام واحد ومدة صلاحيتها القصوى عامان.

قبل بدء عملية التطوير، عليك تبادل مفاتيح PGP مع Google. في هذه الخطوة، عليك إنشاء مفتاحَي تشفير عام وخاص بتنسيق PGP، وتقديم المفتاح العام إلى Google، واستلام مفتاح عام من Google. أثناء التطوير، لن تحتاج إلا إلى تبادل مفاتيح وضع الحماية المستخدَمة للتطوير والاختبار خارج نطاق الإنتاج. قبل اختبار الإصدار العلني وإطلاقه، عليك إجراء عملية تبادل أخرى لمفاتيح الإصدار العلني.

إنشاء مفتاح PGP جديد

بافتراض أنّ لديك ملف GPG ثنائي في مسار النظام، يمكنك استخدام الأمر POSIX التالي لإنشاء مفتاحَي تشفير جديدَين.

$ gpg --full-generate-key

عندما يُطلب منك ذلك، اختَر مفتاح RSA بدرجة فوضى لا تقل عن 2048 بت وفترة انتهاء صلاحية تتراوح بين عام وعامَين. من المفترض أن يؤدي هذا الأمر إلى إنشاء مفتاح رئيسي (يُشار إليه بالرمز SC، أي "S" لتوقيع "C" لإنشاء الشهادة) ومفتاح فرعي (يُشار إليه بالرمز E، أي "E" لتشفير).

إعداد مكتبة PGP

إرسال الحمولات

  1. عند التوقيع، يجب استخدام SHA384 كخوارزمية الملخص، ولا تستخدِم SHA1أو MD5.
  2. عند التشفير، يجب استخدام AES256 كخوارزمية التشفير المتماثل، ولا تستخدِم CAST5 أو IDEA.
  3. عند تشفير الرسائل أو توقيعها، احرص على اختيار المفتاح الفرعي الذي يخدم الغرض المقابل. استخدِم مفتاح CAN_SIGN للتوقيع ومفتاح ENCRYPT_COMMS/ENCRYPT_STORAGE للتشفير.

استلام الحمولات

  1. عند التحقّق من الحمولة، تأكَّد من أنّ مكتبتك متوافقة مع خوارزميات التجزئة الحديثة مثل SHA384. ستبدأ Google في استخدامه على جميع المفاتيح الجديدة اعتبارًا من 14 أيار (مايو) 2023.
  2. عند فك تشفير الحمولة، تأكَّد من أنّ مكتبتك تتيح استخدام خوارزميات التشفير المتماثل الحديثة، مثل AES256. ستبدأ Google في استخدامه على جميع مفاتيح التشفير الجديدة اعتبارًا من 14 أيار (مايو) 2023.

مثال على تشفير حمولة GPG

يوضّح الأمر أدناه كيفية اختيار الخيارات الآمنة عند استخدام GPG. من المتوقّع أن يتم تنفيذ هذه العملية في بيئة موثوق بها لا يمكن فيها للمستخدمين الوصول إلى المفاتيح الخاصة أو ملفات الإدخال الحسّاسة.

gpg --output signed-and-encrypted.pgp \
  --sign --digest-algo SHA384 \
  --encrypt --cipher-algo AES256 \
  --armor \
  --recipient {key_id} \
  input.txt

سيختار GPG تلقائيًا المفتاح الصحيح من الحزمة لكل عملية تطلب منه تنفيذها.

تشفير JWE مع توقيع JWS

تشفير JSON للويب (JWE) هو معيار محدّد من خلال rfc7516 لتشفير المحتوى على مستوى التطبيق. توقيع JSON على الويب (JWS) هو معيار محدّد من قِبل rfc7515 لتوقيع المحتوى على مستوى التطبيق.

ستكون الطلبات والردود عبارة عن وحدات JWE مشفّرة باستخدام التشفير غير المتماثل (باستخدام مفتاح علني) مع خيار "التسلسل المكثّف". سيحتوي رمز JWE المميّز على حمولة موقَّعة كرمز JWS. يستخدم JWS أيضًا مفاتيح غير متماثلة، ويستخدم المفتاح الخاص للتوقيع والمفتاح العام للتحقّق.

عند إرسال حمولة، عليك توقيع الحمولة أولاً ثم تشفيرها. عند تلقّي حمولة، عليك فك تشفيرها أولاً ثم التحقّق من التوقيع.

عند استخدام JWE، يجب أن يتيح الشركاء الخيارات التالية:

  • التسلسل المكثّف
  • فك تشفير الحِزم من أحد مفاتيح JWE المتعددة
  • خوارزمية RSA-OAEP أو RSA-OAEP-256 أو ECDH-ES لإدارة المفاتيح
  • خوارزمية A256GCM أو A128GCM أو A128CBC-HS256 أو A256CBC-HS512 لتشفير المحتوى
    • يتمّ تعبئتها في عنوان enc.
  • kid لتحديد مفتاح التشفير العام.
  • يجب أن تستخدم حِزم بيانات الرسائل التي تستخدم تشفير JWE نوع المحتوى application/jose; charset=utf-8.

عند استخدام JWS، يجب أن يتيح الشركاء الخيارات التالية:

  • التسلسل المكثّف
  • التحقّق من الحِزم من أحد مفاتيح JWS المتعددة
  • خوارزمية HS256 أو HS384 أو HS512 أو RS256 أو RS384 أو RS512 أو ES256 أو PS256 أو PS384 أو PS512 لإنشاء التوقيع
  • عنوان kid لتحديد مفتاح التوقيع الخاص

سيتم ترميز سلاسل JWE/JWS كسلاسل UTF-8 وقد تكون حِزم البيانات فيها بايتات عشوائية.

يجب أن تكون المفاتيح الخاصة مفاتيح RSA/ECDH-ES تنتهي صلاحيتها بعد عام واحد مع مدة استخدام قصوى تبلغ عامين. يجب أن تبقى جميع هويات المفاتيح الخاصة على خادم الشريك في جميع الأوقات، وبناءً على ذلك، يجب احتساب جميع قيم التوقيع على خادم الشريك.

قبل بدء عملية التطوير، عليك تبادل مفاتيح JWE وJWS مع Google. يجب تبادل المفاتيح بتنسيق JWK، كما هو محدّد في rfc7517. في هذه الخطوة، يمكنك إنشاء مفتاحَي تشفير عام والخاص، وتقديم المفتاح العمومي إلى Google، واستلام مفتاح عام من Google. أثناء التطوير، لن تحتاج إلا إلى تبادل مفاتيح وضع الحماية المستخدَمة للتطوير والاختبار خارج نطاق الإنتاج. قبل اختبار الإصدار العلني وإطلاقه، عليك إجراء عملية تبادل أخرى لمفاتيح الإصدار العلني.