الاسم
- Provided by: manpages-ar (Version: 4.31.0-1)
- Source: manpages-l10n
- Report a bug
#include <linux/random.h>
int ioctl(fd, RNDrequest, param);
توفر ملفات المحارف الخاصة /dev/random و /dev/urandom (الموجودة منذ لينكس 1.3.30) واجهة لمولد الأرقام العشوائية في النواة. يحمل الملف /dev/random رقم الجهاز الرئيس 1 ورقم الجهاز الفرعي 8. ويحمل الملف /dev/urandom رقم الجهاز الرئيس 1 ورقم الجهاز الفرعي 9.
يجمع مولد الأرقام العشوائية الضجيج البيئي من وسائط الأجهزة والمصادر الأخرى في مجمع اعتلاج (entropy pool). ويحتفظ المولد أيضًا بتقدير لعدد بتات الضجيج في مجمع الاعتلاج. ومن مجمع الاعتلاج هذا، تُنشأ الأرقام العشوائية.
يوفر لينكس 3.17 وما يليه واجهة getrandom(2) الأبسط والأكثر أماناً والتي لا تتطلب ملفات خاصة؛ انظر صفحة دليل getrandom(2) للتفاصيل.
عند القراءة منه، يعيد الجهاز /dev/urandom بايتات عشوائية باستخدام مولد أرقام عشوائية زائفة يُبذر من مجمع الاعتلاج. القراءات من هذا الجهاز لا تُعطّل (أي لا يُتخلى عن المعالج)، ولكنها قد تسبب تأخيراً ملحوظاً عند طلب كميات كبيرة من البيانات.
عند القراءة منه أثناء وقت الإقلاع المبكر، قد يعيد /dev/urandom بيانات قبل تهيئة مجمع الاعتلاج. إذا كان هذا الأمر يهم تطبيقك، فاستخدم getrandom(2) أو /dev/random بدلاً منه.
جهاز /dev/random هو واجهة موروثة تعود إلى وقت لم تكن فيه البدائيات التعموية المستخدمة في تنفيذ /dev/urandom موثوقة على نطاق واسع. سيعيد بايتات عشوائية فقط ضمن العدد المقدر لبتات الضجيج الحديثة في مجمع الاعتلاج، مع التعطيل إذا لزم الأمر. يعد /dev/random مناسباً للتطبيقات التي تحتاج إلى عشوائية عالية الجودة، ويمكنها تحمل تأخيرات غير محددة.
عندما يكون مجمع الاعتلاج فارغاً، ستُعطل القراءات من /dev/random حتى يُجمع ضجيج بيئي إضافي. منذ لينكس 5.6، يُتجاهل علم O_NONBLOCK حيث لن يُعطل /dev/random بعد الآن إلا أثناء عملية الإقلاع المبكر. في الإصدارات السابقة، إذا استُدعي open(2) لـ /dev/random مع علم O_NONBLOCK، فإن read(2) اللاحق لن يُعطل إذا لم يكن عدد البايتات المطلوب متاحاً. وبدلاً من ذلك، تُعاد البايتات المتاحة. إذا لم يتوفر أي بايت، سيعيد read(2) القيمة -1 ويُضبط errno إلى EAGAIN.
ليس لعلم O_NONBLOCK أي تأثير عند فتح /dev/urandom. عند استدعاء read(2) للجهاز /dev/urandom، ستعيد القراءات التي تصل إلى 256 بايت نفس عدد البايتات المطلوبة ولن يُقاطعها معالج إشارات. قد تعيد القراءات بمخزن مؤقت يتجاوز هذا الحد عدداً أقل من البايتات المطلوبة أو تفشل بالخطأ EINTR، إذا قاطعها معالج إشارات.
منذ لينكس 3.16، سيعيد read(2) من /dev/urandom في أقصى حد 32 ميجابايت. سيعيد read(2) من /dev/random في أقصى حد 512 بايت (340 بايت قبل لينكس 2.6.12).
ستحدث الكتابة إلى /dev/random أو /dev/urandom مجمع الاعتلاج بالبيانات المكتوبة، لكن هذا لن يؤدي إلى تعداد اعتلاج أعلى. هذا يعني أنها ستؤثر على المحتويات المقروءة من كلا الملفين، لكنها لن تجعل القراءات من /dev/random أسرع.
تُعد واجهة /dev/random واجهة موروثة، ويُفضل /dev/urandom وهو كافٍ في جميع حالات الاستخدام، باستثناء التطبيقات التي تتطلب عشوائية أثناء وقت الإقلاع المبكر؛ لهذه التطبيقات، يجب استخدام getrandom(2) بدلاً من ذلك، لأنه سيُعطل حتى يُهيأ مجمع الاعتلاج.
إذا حُفظ ملف البذرة عبر عمليات إعادة التشغيل كما هو موصى به أدناه، فسيكون الناتج آمناً تعموياً ضد المهاجمين الذين لا يملكون وصول جذر محلي بمجرد إعادة تحميله في تسلسل الإقلاع، وهو مناسب تماماً لمفاتيح جلسات تعمية الشبكة. (قامت جميع توزيعات لينكس الرئيسة بحفظ ملف البذرة عبر عمليات إعادة التشغيل منذ عام 2000 على الأقل.) نظراً لأن القراءات من /dev/random قد تُعطل، سيرغب المستخدمون عادةً في فتحه في وضع عدم التعطيل (أو إجراء قراءة بمهلة زمنية)، وتقديم نوع من إشعار للمستخدم إذا لم يكن الاعتلاج المطلوب متاحاً على الفور.
إذا لم يكن نظامك يحتوي على /dev/random و /dev/urandom منشأين بالفعل، فيمكن إنشاؤهما بالأوامر التالية:
mknod -m 666 /dev/random c 1 8 mknod -m 666 /dev/urandom c 1 9 chown root:root /dev/random /dev/urandom
عندما يبدأ نظام لينكس دون الكثير من تفاعل المشغل، قد يكون مجمع الاعتلاج في حالة يمكن التنبؤ بها إلى حد كبير. يقلل هذا من الكمية الفعلية للضجيج في مجمع الاعتلاج عن التقدير. ومن أجل مواجهة هذا التأثير، يساعد حمل معلومات مجمع الاعتلاج عبر عمليات الإغلاق وبدء التشغيل. للقيام بذلك، أضف السطور إلى نص برمجي مناسب يُشغل أثناء تسلسل بدء تشغيل نظام لينكس:
echo "جاري تهيئة مولد الأرقام العشوائية..."
random_seed=/var/run/random-seed
# حمل بذرة عشوائية من بدء تشغيل لآخر
# حمل ثم احفظ مجمع الاعتلاج بالكامل
if [ -f $random_seed ]; then
cat $random_seed >/dev/urandom
else
touch $random_seed
fi
chmod 600 $random_seed
poolfile=/proc/sys/kernel/random/poolsize
[ -r $poolfile ] && bits=$(cat $poolfile) || bits=4096
bytes=$(expr $bits / 8)
dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
أيضًا، أضف السطور التالية في نص برمجي مناسب يُشغل أثناء إغلاق نظام لينكس:
# حمل بذرة عشوائية من الإغلاق إلى بدء التشغيل # احفظ مجمع الاعتلاج بالكامل echo "جاري حفظ البذرة العشوائية..." random_seed=/var/run/random-seed touch $random_seed chmod 600 $random_seed poolfile=/proc/sys/kernel/random/poolsize [ -r $poolfile ] && bits=$(cat $poolfile) || bits=4096 bytes=$(expr $bits / 8) dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
نفترض في الأمثلة أعلاه وجود لينكس 2.6.0 أو أحدث، حيث يعيد /proc/sys/kernel/random/poolsize حجم مجمع الاعتلاج بالبتات (انظر أدناه).
توفر الملفات في الدليل /proc/sys/kernel/random (الموجودة منذ لينكس 2.3.16) معلومات إضافية حول جهاز /dev/random:
طلبات ioctl(2) التالية معرفة على واصفات الملفات المتصلة بـ /dev/random أو /dev/urandom. ستتفاعل جميع الطلبات المنفذة مع مجمع اعتلاج المدخلات مما يؤثر على كل من /dev/random و /dev/urandom. مطلوب قدرة CAP_SYS_ADMIN لجميع الطلبات باستثناء RNDGETENTCNT.
struct rand_pool_info {
int entropy_count;
int buf_size;
__u32 buf[0];
};
/dev/random
/dev/urandom
للحصول على نظرة عامة ومقارنة للواجهات المختلفة التي يمكن استخدامها للحصول على العشوائية، راجع random(7).
أثناء وقت الإقلاع المبكر، قد تعيد القراءات من /dev/urandom بيانات قبل تهيئة مجمع الاعتلاج.
mknod(1), getrandom(2), random(7)
RFC 1750, "Randomness Recommendations for Security"
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.