RAND_BYTES(3ssl)

الاسم
RAND_bytes, RAND_priv_bytes, RAND_bytes_ex, RAND_priv_bytes_ex, RAND_pseudo_bytes, RAND_set1_random_provider - توليد بيانات عشوائية

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

 int RAND_bytes(unsigned char *buf, int num);
 int RAND_priv_bytes(unsigned char *buf, int num);

 int RAND_bytes_ex(OSSL_LIB_CTX *ctx, unsigned char *buf, size_t num,
                   unsigned int strength);
 int RAND_priv_bytes_ex(OSSL_LIB_CTX *ctx, unsigned char *buf, size_t num,
                        unsigned int strength);

 int RAND_set1_random_provider(OSSL_LIB_CTX *ctx, OSSL_PROVIDER *p);

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

 int RAND_pseudo_bytes(unsigned char *buf, int num);

الوصف
RAND_bytes() يُولّد num بايت عشوائي باستخدام مولّد عشوائي زائف آمن تشفيريًا (CSPRNG) ويُخزّنها في buf. buf يجب ألا يكون NULL.

RAND_priv_bytes() له نفس الدلالات كـ RAND_bytes(). يُقصد به استخدامه لتوليد قيم يجب أن تبقى خاصة. إذا تم استخدام RAND_METHOD المبدئي، تستخدم هذه الدالة مثيل PRNG "خاص" منفصل بحيث لا يؤثر اختراق مثيل PRNG "العام" على سرية هذه القيم الخاصة، كما هو موصوف في RAND(7) و EVP_RAND(7).

RAND_bytes_ex() و RAND_priv_bytes_ex() هما نفس RAND_bytes() و RAND_priv_bytes() باستثناء أنهما يأخذان معاملين إضافيين strength و ctx. البايتات المُولّدة سيكون لها قوة أمان لا تقل عن strength بت. DRBG المستخدمة للعملية هي DRBG العامة أو الخاصة المرتبطة بـ ctx المحدد. يمكن أن يكون المعامل NULL، وفي هذه الحالة يُستخدم سياق المكتبة المبدئي (انظر OSSL_LIB_CTX(3). إذا تم تغيير RAND_METHOD المبدئي، فسيتم استخدام RAND_METHOD بالأولوية لأسباب التوافق وسيتم تجاهل DRBG لسياق المكتبة.

RAND_set1_random_provider() يُحدد مزودًا، prov، سيُستخدم بواسطة سياق المكتبة ctx لجميع استدعاءات التوليد أعلاه بدلاً من DRBGs المدمجة ومصدر الإنتروبيا. مرر NULL للمزود لتعطيل وظيفة المزود العشوائي. في هذه الحالة، ستُستخدم DRBGs المدمجة ومصدر الإنتروبيا. لا ينبغي اعتبار هذا الاستدعاء آمنًا للخيوط.

ملاحظات
مبدئيًا، يدعم OpenSSL CSPRNG مستوى أمان 256 بت، بشرط أن يكون قادرًا على بذر نفسه من مصدر إنتروبيا موثوق. على جميع المنصات الرئيسية المدعومة من OpenSSL (بما في ذلك المنصات الشبيهة بـ Unix و Windows)، تم تكوين OpenSSL لبذر CSPRNG آلي عند أول استخدام باستخدام مولّد عشوائي لنظام التشغيل.

إذا فشل مصدر الإنتروبيا أو لم يكن متاحًا، سيدخل CSPRNG في حالة خطأ ويرفض توليد بايتات عشوائية. لهذا السبب، من المهم دائمًا التحقق من قيمة إرجاع الخطأ لـ RAND_bytes() و RAND_priv_bytes() وعدم اعتبار العشوائية أمرًا مسلمًا به.

على المنصات الأخرى، قد لا يكون هناك مصدر إنتروبيا موثوق متاح أو قد تم تكوين OpenSSL صراحة لاستخدام مصادر إنتروبيا مختلفة. إذا كنت في شك حول جودة مصدر الإنتروبيا، لا تتردد في سؤال بائع نظام التشغيل الخاص بك أو نشر سؤال على GitHub أو القائمة البريدية لمستخدمي openssl.

القيم المُرجعة
RAND_bytes() و RAND_priv_bytes() يُرجعان 1 عند النجاح، -1 إذا لم تكن مدعومة بواسطة طريقة RAND الحالية، أو 0 عند فشل آخر. يمكن الحصول على رمز الخطأ بواسطة ERR_get_error(3).

RAND_set1_random_provider() يُرجع 1 عند النجاح و 0 عند الفشل.

انظر أيضًا
RAND_add(3), RAND_bytes(3), RAND_priv_bytes(3), ERR_get_error(3), RAND(7), EVP_RAND(7)

التاريخ

•   RAND_pseudo_bytes() أُهملت في OpenSSL 1.1.0؛ استخدم RAND_bytes() بدلاً من ذلك.

•   الدالة RAND_priv_bytes() أُضيفت في OpenSSL 1.1.1.

•   الدالتان RAND_bytes_ex() و RAND_priv_bytes_ex() أُضيفتا في OpenSSL 3.0

•   الدالة RAND_set1_random_provider() أُضيفت في OpenSSL 3.5

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