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

تتيح واجهات برمجة التطبيقات Standard Payments استخدام 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، أي 'توقيع' و 'إنشاء شهادة') ومفتاحًا فرعيًا (يُطلق عليه 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 Web Encryption (JWE) هو معيار محدّد بموجب rfc7516 لتشفير المحتوى على مستوى التطبيق. توقيع JSON على الويب (JWS) هو معيار محدّد في rfc7515 لتوقيع المحتوى على مستوى التطبيق.

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

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

عند استخدام JWE، على الشركاء توفير الخيارات التالية:

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

عند استخدام JWS، على الشركاء توفير الخيارات التالية:

  • Compact Serialization.
  • التحقّق من الحِملات من أحد مفاتيح 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. أثناء عملية التطوير، لن تحتاج إلا إلى تبادل مفاتيح وضع الحماية المستخدَمة في التطوير والاختبار خارج بيئة الإنتاج. قبل إجراء اختبارات الإنتاج والإطلاق، عليك إجراء عملية تبادل أخرى لمفاتيح الإنتاج.