تشفير 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
إرسال الحمولات
- عند التوقيع، يجب استخدام
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 على الويب (JWE) هو معيار تم تحديده من خلال rfc7516 لتشفير المحتوى على مستوى التطبيق. توقيع الويب JSON (JWS) هو معيار يتم تحديده بواسطة rfc7515 لتوقيع المحتوى على مستوى التطبيق.
سيتم تشفير الطلبات والردود برموز JWE المميزة باستخدام التشفير غير المتماثل (المفتاح العام) مع خيار "التسلسل المكثف". سيحتوي رمز JWE على حمولة البيانات الموقَّعة كرمز JWS. يستخدم JWS أيضًا مفاتيح غير المتماثلة؛ المفتاح الخاص للتوقيع والمفتاح العام للتحقق.
عند إرسال حمولة، يجب التوقيع على الحمولة أولاً ثم تشفيرها. عند استلام حمولة بيانات، يجب فك تشفيرها أولاً ثم التحقق من التوقيع.
عند استخدام JWE، يجب أن يوفّر الشركاء الخيارات التالية:
- التسلسل المكثّف:
- فك تشفير الحمولات من أحد مفاتيح JWE المتعددة.
- خوارزمية RSA-OAEP أو RSA-OAEP-256 أو ECDH-ES لإدارة المفاتيح.
- وتتم تعبئة هذا الحقل في عنوان
alg
(rfc7518 القسم 4.1).
- وتتم تعبئة هذا الحقل في عنوان
- خوارزمية 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. أثناء التطوير، ستحتاج فقط إلى تبادل مفاتيح وضع الحماية المستخدمة في التطوير والاختبار خارج الإنتاج. قبل اختبار الإنتاج والإطلاق، ستحتاج إلى إجراء تبادل آخر لمفاتيح الإنتاج.