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