RSA_PADDING_ADD_PKCS1_TYPE_1(3SSL)

الاسم
RSA_padding_add_PKCS1_type_1, RSA_padding_check_PKCS1_type_1, RSA_padding_add_PKCS1_type_2, RSA_padding_check_PKCS1_type_2, RSA_padding_add_PKCS1_OAEP, RSA_padding_check_PKCS1_OAEP, RSA_padding_add_PKCS1_OAEP_mgf1, RSA_padding_check_PKCS1_OAEP_mgf1, RSA_padding_add_none, RSA_padding_check_none - حشو التعمية غير المتناظر

موجز
 #include <openssl/rsa.h>

الدوال التالية أصبحت مهجورة منذ OpenSSL 3.0، ويمكن إخفاؤها تماماً عن طريق تعريف OPENSSL_API_COMPAT بقيمة إصدار مناسبة، انظر openssl_user_macros(7):

 int RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen,
                                  const unsigned char *f, int fl);

 int RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen,
                                    const unsigned char *f, int fl, int rsa_len);

 int RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen,
                                  const unsigned char *f, int fl);

 int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen,
                                    const unsigned char *f, int fl, int rsa_len);

 int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen,
                                const unsigned char *f, int fl,
                                const unsigned char *p, int pl);

 int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen,
                                  const unsigned char *f, int fl, int rsa_len,
                                  const unsigned char *p, int pl);

 int RSA_padding_add_PKCS1_OAEP_mgf1(unsigned char *to, int tlen,
                                     const unsigned char *f, int fl,
                                     const unsigned char *p, int pl,
                                     const EVP_MD *md, const EVP_MD *mgf1md);

 int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen,
                                       const unsigned char *f, int fl, int rsa_len,
                                       const unsigned char *p, int pl,
                                       const EVP_MD *md, const EVP_MD *mgf1md);

 int RSA_padding_add_none(unsigned char *to, int tlen,
                          const unsigned char *f, int fl);

 int RSA_padding_check_none(unsigned char *to, int tlen,
                            const unsigned char *f, int fl, int rsa_len);

الوصف
جميع الدوال الموصوفة في هذه الصفحة مهملة. يجب على التطبيقات بدلاً من ذلك استخدام واجهات برمجة التطبيقات EVP PKEY.

تُستدعى دوال RSA_padding_xxx_xxx() من دوال تعمية RSA وفك التعمية والتوقيع والتحقق. عادةً لا ينبغي استدعاؤها من برامج التطبيقات.

ومع ذلك، يمكن استدعاؤها مباشرةً لتنفيذ الحشو لمعميات غير متماثلة أخرى. يمكن استخدام RSA_padding_add_PKCS1_OAEP() و RSA_padding_check_PKCS1_OAEP() في تطبيق مقترن بـ RSA_NO_PADDING لتنفيذ OAEP مع معامل ترميز.

ترمز RSA_padding_add_xxx() fl بايت من f لتناسب tlen بايت وتخزّن النتيجة في to. يحدث خطأ إذا لم يستوفِ fl متطلبات الحجم لطريقة الترميز.

طُبّقت طرق الترميز التالية:

PKCS1_type_1
    PKCS #1 v2.0 EMSA-PKCS1-v1_5 (نوع الكتلة PKCS #1 v1.5 1)؛ يُستخدم للتوقيعات

PKCS1_type_2
    PKCS #1 v2.0 EME-PKCS1-v1_5 (نوع الكتلة PKCS #1 v1.5 2)

PKCS1_OAEP
    PKCS #1 v2.0 EME-OAEP

none
    انسخ البيانات ببساطة

يجب بذر مولد الأعداد العشوائية قبل استدعاء RSA_padding_add_xxx(). إذا فشل البذر الآلي أو إعادة البذر لـ OpenSSL CSPRNG بسبب ظروف خارجية (انظر RAND(7))، ستفشل العملية.

تتحقق RSA_padding_check_xxx() من أن fl بايت في f تحتوي على ترميز صالح لمفتاح RSA بطول rsa_len بايت في طريقة الترميز المعنية وتخزّن البيانات المستردة على الأكثر tlen بايت (لـ RSA_NO_PADDING: بحجم tlen) في to.

لـ RSA_padding_xxx_OAEP()، يشير p إلى معامل الترميز بطول pl. يمكن أن يكون p NULL إذا كان pl يساوي 0.

بالنسبة لـ RSA_padding_xxx_OAEP_mgf1()، يشير md إلى تجزئة md، إذا كان md هو NULL فهذا يعني md=sha1، ويشير mgf1md إلى تجزئة mgf1، إذا كان mgf1md هو NULL فهذا يعني mgf1md=md.

القيم المُرجعة
تُرجع دوال RSA_padding_add_xxx() القيمة 1 عند النجاح، و0 عند الخطأ. تُرجع دوال RSA_padding_check_xxx() طول البيانات المستعادة، و-1 عند الخطأ. يمكن الحصول على رموز الخطأ باستدعاء ERR_get_error(3).

تحذيرات
نتيجة RSA_padding_check_PKCS1_type_2() هي بالضبط المعلومات المستخدمة لشن هجوم وسيط حشو Bleichenbacher الكلاسيكي. هذا ضعف متأصل في تصميم حشو PKCS #1 v1.5. يُفضل استخدام حشو PKCS1_OAEP. إذا لم يكن ذلك ممكنًا، يجب فحص نتيجة RSA_padding_check_PKCS1_type_2() في وقت ثابت لمعرفة ما إذا كانت تطابق الطول المتوقع للنص العادي، بالإضافة إلى إجراء بعض فحوصات الاتساق الخاصة بالتطبيق على النص العادي في وقت ثابت. إذا تم رفض النص العادي، يجب إبقاء أي من الفحوصات تسبب في رفض التطبيق للرسالة سرًا. لا تقم بإزالة الحشو الصفري من بيانات RSA الأولية المفكوكة التي حُسبت بواسطة RSA_private_decrypt() مع RSA_NO_PADDING، لأن هذا سيخلق قناة جانبية زمنية صغيرة يمكن استخدامها لشن هجوم Bleichenbacher ضد أي وضع حشو بما في ذلك PKCS1_OAEP.

يجب تفضيل استخدام واجهات برمجة تطبيقات EVP PKEY لفك تشفير PKCS#1 v1.5 لأنها تنفذ الحلول البديلة الضرورية داخليًا.

انظر أيضًا
RSA_public_encrypt(3), RSA_private_decrypt(3), RSA_sign(3), RSA_verify(3), RAND(7)

التاريخ
كل هذه الدوال أصبحت مهجورة في OpenSSL 3.0.

حقوق النسخ
حقوق النشر 2000-2021 لمؤلفي مشروع OpenSSL. جميع الحقوق محفوظة.

مرخص بموجب رخصة Apache 2.0 (المشار إليها فيما يلي بـ ”الرخصة“). لا يجوز لك استخدام هذا الملف إلا وفقًا لشروط الرخصة. يمكنك الحصول على نسخة منها في الملف LICENSE الموجود في حزمة التوزيع المصدرية أو على الرابط <https://www.openssl.org/source/license.html>.

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.