RSA_PUBLIC_ENCRYPT(3SSL)

الاسم
RSA_public_encrypt, RSA_private_decrypt - تعمية المفتاح العام RSA

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

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

 int RSA_public_encrypt(int flen, const unsigned char *from,
                        unsigned char *to, RSA *rsa, int padding);

 int RSA_private_decrypt(int flen, const unsigned char *from,
                         unsigned char *to, RSA *rsa, int padding);

الوصف
كِلتا الدالتين الموصوفتين في هذه الصفحة مهملتان. يجب على التطبيقات بدلاً من ذلك استخدام EVP_PKEY_encrypt_init_ex(3)، EVP_PKEY_encrypt(3)، EVP_PKEY_decrypt_init_ex(3) و EVP_PKEY_decrypt(3).

RSA_public_encrypt() تُعمي البايتات flen عند from (عادةً مفتاح جلسة) باستخدام المفتاح العام rsa وتخزن النص المُعمى في to. يجب أن يشير to إلى RSA_size(rsa) بايت من الذاكرة.

padding يشير إلى أحد الأوضاع التالية:

RSA_PKCS1_PADDING
    حشو PKCS #1 v1.5. هذا حاليًا أكثر الأنماط استخدامًا. ومع ذلك، يُوصى بشدة باستخدام RSA_PKCS1_OAEP_PADDING في التطبيقات الجديدة. انظر التحذير أدناه.

RSA_PKCS1_OAEP_PADDING
    EME-OAEP كما هو مُعرّف في PKCS #1 v2.0 مع SHA-1 و MGF1 ومعامل ترميز فارغ. هذا النمط موصى به لجميع التطبيقات الجديدة.

RSA_NO_PADDING
    تعمية RSA خام. يجب فقط استخدام هذا النمط لتنفيذ أنماط حشو سليمة تعميًا في كود التطبيق. تعمية بيانات المستخدم مباشرةً مع RSA غير آمنة.

عند التعمية، يجب ألا يزيد flen عن RSA_size(rsa) - 11 لأنماط الحشو المستندة إلى PKCS #1 v1.5، ولا يزيد عن RSA_size(rsa) - 42 لـ RSA_PKCS1_OAEP_PADDING، ويكون مساويًا تمامًا لـ RSA_size(rsa) لـ RSA_NO_PADDING. عند استخدام نمط حشو غير RSA_NO_PADDING، فإن RSA_public_encrypt() ستُدرج بعض البايتات العشوائية في النص المُعمى، وبالتالي سيختلف النص المُعمى في كل مرة، حتى لو كان النص الصريح والمفتاح العام متطابقين تمامًا. النص المُعمى المُعاد في to سيكون دائمًا مُحشوًا بالأصفار إلى RSA_size(rsa) بايت بالضبط. قد يتداخل to و from.

RSA_private_decrypt() تفك تعمية البايتات flen عند from باستخدام المفتاح الخاص rsa وتخزن النص الصريح في to. يجب أن يكون flen مساويًا لـ RSA_size(rsa) ولكنه قد يكون أصغر، عندما تكون هناك بايتات صفرية رائدة في النص المُعمى. هذه البايتات ليست مهمة ويمكن إزالتها، لكن RSA_public_encrypt() لا تفعل ذلك. يجب أن يشير to إلى قسم ذاكرة كبير بما يكفي لاستيعاب أقصى بيانات ممكنة مفكوكة التعمية (وهي مساوية لـ RSA_size(rsa) لـ RSA_NO_PADDING، و RSA_size(rsa) - 11 لأنماط الحشو المستندة إلى PKCS #1 v1.5، و RSA_size(rsa) - 42 لـ RSA_PKCS1_OAEP_PADDING). padding هو نمط الحشو الذي استُخدم لتعمية البيانات. قد يتداخل to و from.

القيم المُرجعة
RSA_public_encrypt() تُعيد حجم البيانات المُعمّاة (أي RSA_size(rsa)). RSA_private_decrypt() تُعيد حجم النص الصريح المُستعاد. قيمة الإرجاع 0 ليست خطأ وتعني فقط أن النص الصريح كان فارغًا.

عند حدوث خطأ، يُعاد -1؛ ويمكن الحصول على رموز الخطأ من خلال ERR_get_error(3).

تحذيرات
إخفاقات فك التعمية في نمط RSA_PKCS1_PADDING تُسرب معلومات يمكن استخدامها لشن هجوم وسيط حشو Bleichenbacher. هذا ضعف متأصل في تصميم حشو PKCS #1 v1.5. يُفضل استخدام RSA_PKCS1_OAEP_PADDING.

في OpenSSL قبل الإصدار 3.2.0، يمكن استخدام كل من قيمة الإرجاع وطول القيمة المُعادة لشن هجوم Bleichenbacher. منذ الإصدار 3.2.0، لا يُعيد المزوّد المبدئي في OpenSSL خطأً عند فشل فحوصات الحشو. بدلاً من ذلك، يُولّد رسالة عشوائية بناءً على المفتاح الخاص المستخدم والنص المُعمى المُقدم، بحيث لا يضطر كود التطبيق إلى تنفيذ معالجة أخطاء آمنة من القنوات الجانبية. التطبيقات التي تريد أن تكون آمنة ضد هجمات القنوات الجانبية مع مزوّدين لا يُنفذون الرفض الضمني، لا تزال بحاجة إلى معالجة القيم المُعادة باستخدام كود خالٍ من القنوات الجانبية. يمكن إجراء معالجة خالية من القنوات الجانبية لمكدس الأخطاء باستخدام إما زوج من استدعاءات ERR_set_mark(3) و ERR_pop_to_mark(3) غير المشروطة أو باستخدام استدعاء ERR_clear_error(3).

متوافق مع
SSL, PKCS #1 v2.0

انظر أيضًا
ERR_get_error(3), RAND_bytes(3), RSA_size(3), EVP_PKEY_decrypt(3), EVP_PKEY_encrypt(3)

التاريخ
كلا الدالتين مهجورتان في OpenSSL 3.0.

حقوق النسخ
حقوق النشر 2000-2024 لمؤلفي مشروع 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.