CMS_DECRYPT(3SSL)

الاسم
CMS_decrypt, CMS_decrypt_set1_pkey_and_peer, CMS_decrypt_set1_pkey, CMS_decrypt_set1_password - فك تعمية المحتوى من بنية CMS envelopedData

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

 int CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pkey, X509 *cert,
                 BIO *dcont, BIO *out, unsigned int flags);
 int CMS_decrypt_set1_pkey_and_peer(CMS_ContentInfo *cms,
                 EVP_PKEY *pk, X509 *cert, X509 *peer);
 int CMS_decrypt_set1_pkey(CMS_ContentInfo *cms, EVP_PKEY *pk, X509 *cert);
 int CMS_decrypt_set1_password(CMS_ContentInfo *cms,
                               unsigned char *pass, ossl_ssize_t passlen);

الوصف
CMS_decrypt() تستخرج المحتوى المفكوك التعمية من بنية CMS EnvelopedData أو AuthEnvelopedData. تستخدم CMS_decrypt_set1_pkey() لفك تعمية المحتوى بالمفتاح الخاص للمستلم pkey إذا كان pkey ليس NULL. في هذه الحالة، يُوصى بتوفير الشهادة المرتبطة في cert - انظر الملاحظات أدناه. out هو BIO لكتابة المحتوى إليه وflags مجموعة اختيارية من الأعلام. إذا كان pkey هو NULL، تفترض الدالة أن فك التعمية قد أُنجز بالفعل (مثلاً باستخدام CMS_decrypt_set1_pkey() أو CMS_decrypt_set1_password()) وتوفر المحتوى فقط ما لم يكن cert وdcont وout NULL أيضًا. يُستخدم معامل dcont في الحالة النادرة حيث يكون المحتوى المعمى منفصلاً. سيُضبط عادةً على NULL.

CMS_decrypt_set1_pkey_and_peer() تفك تعمية بنية CMS_ContentInfo cms باستخدام المفتاح الخاص pkey، والشهادة المقابلة cert، التي يُوصى بها ولكن قد تكون NULL، وشهادة المنشئ (الاختيارية) peer. عند النجاح، تسجل أيضًا في cms مفتاح فك التعمية pkey، ثم يجب أن يتبعها "CMS_decrypt(cms, NULL, NULL, dcont, out, flags)". هذا الاستدعاء يحرر أي مفتاح فك تعمية مخزن في cms.

CMS_decrypt_set1_pkey() هي نفس CMS_decrypt_set1_pkey_and_peer() مع كون peer NULL.

CMS_decrypt_set1_password() تفك تعمية بنية CMS_ContentInfo cms باستخدام السر pass بطول passlen. عند النجاح، تسجل أيضًا في cms مفتاح فك التعمية المستخدم، ثم يجب أن يتبعها "CMS_decrypt(cms, NULL, NULL, dcont, out, flags)". هذا الاستدعاء يحرر أي مفتاح فك تعمية مخزن في cms.

ملاحظات
على الرغم من أن شهادة المستلم ليست مطلوبة لفك تعمية البيانات، إلا أنها مطلوبة لتحديد موقع المستلم المناسب (من بين عدة مستلمين محتملين) في بنية CMS.

إذا ضُبط cert إلى NULL، تُجرَب جميع المستلمين المحتملين. لكن هذه الحالة إشكالية. لإحباط هجوم MMA (هجوم Bleichenbacher على حشو PKCS #1 v1.5 RSA)، تُجرَب جميع المستلمين سواء نجحوا أم لا. إذا لم ينجح أي مستلم، يُستخدم مفتاح تناظري عشوائي لتعمية المحتوى: هذا سيُخرج عادةً بيانات غير صالحة وقد يُرجع (دون ضمان) خطأ حشو فقط. إذا أرجع CMS_decrypt() خطأً فقط عندما فشلت جميع مفاتيح المستلمين المعماة في فك التعمية، يمكن لمهاجم استخدام هذا في هجوم توقيت. إذا ضُبط العلم الخاص CMS_DEBUG_DECRYPT، يُعدَّل السلوك أعلاه ويُرجَع خطأ إذا تعذر فك تعمية أي مفتاح مستلم معمى دون توليد مفتاح تعمية محتوى عشوائي. يجب على التطبيقات استخدام هذا العلم بحذر شديد خاصةً في البوابات الآلية لأنه قد يتركها عرضة للهجوم.

من الممكن تحديد مفتاح المستلم الصحيح بوسائل أخرى (مثلاً البحث عنه في قاعدة بيانات) وضبطه في بنية CMS مسبقًا باستخدام دوال المساعدة CMS مثل CMS_set1_pkey()، أو استخدام CMS_decrypt_set1_password() إذا كان للمستلم مفتاح تناظري. في هذه الحالات، يجب ضبط كل من cert وpkey على NULL.

لمعالجة أنواع KEKRecipientInfo، يجب استدعاء CMS_set1_key() أو CMS_RecipientInfo_set0_key() وCMS_RecipientInfo_decrypt() قبل CMS_decrypt() وضبط cert وpkey على NULL.

يمكن تمرير الأعلام التالية في معامل flags.

إذا جرى ضبط علم CMS_TEXT، تُحذَف رؤوس MIME للنوع "text/plain" من المحتوى. إذا لم يكن المحتوى من النوع "text/plain" فسيُرجَع خطأ.

القيم المُرجعة
CMS_decrypt() وCMS_decrypt_set1_pkey_and_peer() وCMS_decrypt_set1_pkey() وCMS_decrypt_set1_password() تُرجع إما 1 للنجاح أو 0 للفشل. يمكن الحصول على الخطأ من ERR_get_error(3).

العلل
الجزء set1_ من أسماء هذه الدوال مضلل ويجب أن يُقرأ بشكل أفضل: with_.

نقص المعالجة بمرور واحد والحاجة إلى الاحتفاظ بجميع البيانات في الذاكرة كما ذُكر في CMS_verify() ينطبق أيضًا على CMS_decrypt().

انظر أيضًا
ERR_get_error(3), CMS_encrypt(3)

التاريخ
CMS_decrypt_set1_pkey_and_peer() وCMS_decrypt_set1_password() أُضيفتا في OpenSSL 3.0.

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