تشفير 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 نشطة متعددة لكل من الشركاء وGoogle.
يمكنك توقيع الحمولات باستخدام المفاتيح القديمة والجديدة أثناء تدويرها. ستتحقّق Google من التوقيع مقابل أي مفتاح عام نشط لدى Google في ملفاتها.
عندما تحتاج إلى تدوير مفاتيح Google العامة، يمكنك تشفير الحمولات باستخدام مفاتيح Google العامة القديمة والجديدة. يمكن لـ Google فك التشفير باستخدام أي من المفتاحَين.
تتيح معرّفات مفاتيح PGP ضِمن الرسالة نفسها تحديد المفتاح تلقائيًا، ما يزيل الحاجة إلى حقول إصدار الحمولة أو أوقات التبديل المنسّقة.
إعداد مكتبة PGP
إرسال الحمولات
- عند التوقيع، عليك استخدام
SHA384كخوارزمية الملخّص، ولا تستخدمSHA1أوMD5. - عند التشفير، عليك استخدام
AES256كخوارزمية التشفير المتماثل، ولا تستخدمCAST5أوIDEA. - عند تشفير الرسائل أو توقيعها، احرص على اختيار المفتاح الفرعي الذي يتضمّن الغرض المقابل، واستخدِم المفتاح
CAN_SIGNللتوقيع والمفتاحENCRYPT_COMMS/ENCRYPT_STORAGEللتشفير.
استلام الحمولات
- عند التحقّق من حمولة، تأكَّد من أنّ مكتبتك تتيح خوارزميات التجزئة الحديثة، مثل
SHA384. ستبدأ Google في استخدامها على جميع المفاتيح الجديدة اعتبارًا من 14 مايو 2023. - عند فك تشفير حمولة، تأكَّد من أنّ مكتبتك تتيح خوارزميات التشفير المتماثل الحديثة، مثل
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 Web Signature (JWS) هو معيار محدّد في rfc7515 لتوقيع المحتوى على مستوى الـ تطبيق.
ستكون الطلبات والردود عبارة عن رموز JWE المميّزة المشفّرة باستخدام التشفير غير المتماثل (المفتاح العام) مع خيار "التسلسل المضغوط". سيحتوي رمز JWE المميّز على الحمولة المُوقَّعة كرمز JWS المميّز. يستخدم JWS أيضًا مفاتيح غير متماثلة، أي مفتاح خاص للتوقيع ومفتاح عام للتحقّق.
عند إرسال حمولة، عليك توقيعها أولاً ثم تشفيرها. عند استلام حمولة، عليك فك تشفيرها أولاً ثم التحقّق من التوقيع.
عند استخدام JWE، على الشركاء توفير الخيارات التالية:
- التسلسل المضغوط
- فك تشفير الحمولات من أحد مفاتيح JWE المتعددة
- خوارزمية RSA-OAEP أو RSA-OAEP-256 أو ECDH-ES لإدارة المفاتيح
- يتم ملء ترويسة
alg(القسم 4.1 من rfc7518).
- يتم ملء ترويسة
- خوارزمية 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 لإنشاء التوقيع
- يتم ملء ترويسة
alg(القسم 3.1 من rfc 7518).
- يتم ملء ترويسة
- ترويسة
kidلتحديد مفتاح التوقيع الخاص
سيتم ترميز سلاسل JWE/JWS كسلاسل UTF-8 وقد تكون حمولاتها عبارة عن بايتات عشوائية.
يجب أن تكون المفاتيح الخاصة مفاتيح RSA/ECDH-ES تنتهي صلاحيتها بعد عام واحد مع عمر أقصى يبلغ عامَين. يجب أن تبقى جميع هويات المفاتيح الخاصة دائمًا على خادم الشريك، وبناءً على ذلك، يجب حساب جميع قيم التوقيع على خادم الشريك.
قبل البدء في التطوير، عليك تبادل مفاتيح JWE وJWS مع Google. يجب تبادل المفاتيح بتنسيق JWK، كما هو محدّد في rfc7517. في هذه الخطوة، يمكنك إنشاء زوج من المفاتيح العامة والخاصة، وتزويد Google بالمفتاح العام، وتلقّي مفتاح عام من Google. أثناء التطوير، لن تحتاج إلا إلى تبادل مفاتيح وضع الحماية المستخدَمة للتطوير والاختبار خارج بيئة الإنتاج. قبل اختبار بيئة الإنتاج وإطلاقها، عليك إجراء عملية تبادل أخرى لمفاتيح بيئة الإنتاج.