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

تتوافق واجهات برمجة التطبيقات Payments API العادية مع PGP أو JWE لتشفير طبقة التطبيقات.

تشفير PGP

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

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

  • تشفير الحمولات وفك تشفيرها باستخدام مفاتيح PGP متعددة.
  • توقيع الحمولات باستخدام مفاتيح PGP متعددة.
  • التحقق من حمولة باستخدام توقيعات متعددة، يمكن أن يكون أي منها توقيعًا باستخدام المفتاح الذي تقدمه Google.
  • فك تشفير الحمولات الأساسية المشفرة باستخدام Web-safe64.

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

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

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

على افتراض أن لديك برنامجًا ثنائيًا لبرنامج GPG في مسار النظام، يمكنك استخدام أمر POSIX التالي لإنشاء زوج مفاتيح جديد.

$ gpg --full-generate-key

اختَر مفتاح RSA، إذا طُلب منك ذلك، يتضمّن 2048 بت على الأقل من القصور، وتنتهي صلاحيته لمدة تتراوح بين عام وعامين. من المفترض أن يُنشئ هذا الأمر مفتاحًا رئيسيًا (يحمل اسم SC، لـ S'igning و'C'ertificate generation) ومفتاح فرعي (يحمل اسم E, لـ 'E'ncryption).

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