random(7)

الاسم
random - نظرة عامة على واجهات الحصول على العشوائية

الوصف
يعتمد مولد الأرقام العشوائية في النواة على الإنتروبيا المجمعة من برامج تشغيل الأجهزة ومصادر أخرى للضوضاء البيئية لتغذية مولد أرقام شبه عشوائي آمن تشفيريًا (CSPRNG). وهو مصمم للأمان، وليس للسرعة.

توفر الواجهات التالية الوصول إلى مخرجات CSPRNG للنواة:

•   جهازا /dev/urandom و /dev/random، وكلاهما موصوف في random(4). توجد هذه الأجهزة في لينكس منذ الأزمنة المبكرة، وهي متوفرة أيضًا على العديد من الأنظمة الأخرى.

•   استدعاء النظام الخاص بلينكس getrandom(2)، المتاح منذ لينكس 3.17. يوفر استدعاء النظام هذا الوصول إما إلى نفس مصدر /dev/urandom (المسمى مصدر urandom في هذه الصفحة) أو إلى نفس مصدر /dev/random (المسمى مصدر random في هذه الصفحة). المبدئي هو مصدر urandom؛ يتم تحديد مصدر random بتحديد العلم GRND_RANDOM لاستدعاء النظام. (توفر الدالة getentropy(3) واجهة أكثر قابلية للنقل قليلاً فوق getrandom(2).)

  تهيئة مجمع الإنتروبيا
تجمع النواة بتات الإنتروبيا من البيئة. عندما يتم جمع عدد كافٍ من البتات العشوائية، يعتبر مجمع الإنتروبيا قد تمت تهيئته.

  اختيار المصدر العشوائي
ما لم تكن تقوم بتوليد مفاتيح طويلة الأمد (وعلى الأرجح حتى في هذه الحالة)، ربما لا ينبغي لك القراءة من جهاز /dev/random أو استخدام getrandom(2) مع العلم GRND_RANDOM. بدلاً من ذلك، اقرأ إما من جهاز /dev/urandom أو استخدم getrandom(2) بدون العلم GRND_RANDOM. الخوارزميات التشفيرية المستخدمة لمصدر urandom متحفظة تمامًا، وبالتالي ينبغي أن تكون كافية لجميع الأغراض.

عيب GRND_RANDOM والقراءات من /dev/random هو أن العملية يمكن أن تمنع لفترة غير محددة من الزمن. علاوة على ذلك، التعامل مع الطلبات المنفذة جزئيًا التي يمكن أن تحدث عند استخدام GRND_RANDOM أو عند القراءة من /dev/random يزيد من تعقيد الكود.

  تطبيقات مونت كارلو وأخذ العينات الاحتمالية الأخرى
استخدام هذه الواجهات لتوفير كميات كبيرة من البيانات لمحاكاة مونت كارلو أو برامج/خوارزميات أخرى تقوم بأخذ عينات احتمالية سيكون بطيئًا. علاوة على ذلك، إنه غير ضروري، لأن مثل هذه التطبيقات لا تحتاج إلى أرقام عشوائية آمنة تشفيريًا. بدلاً من ذلك، استخدم الواجهات الموصوفة في هذه الصفحة للحصول على كمية صغيرة من البيانات لتغذية مولد أرقام شبه عشوائي في مساحة المستخدم لاستخدامه بواسطة هذه التطبيقات.

  مقارنة بين getrandom و /dev/urandom و /dev/random
يلخص الجدول التالي سلوك الواجهات المختلفة التي يمكن استخدامها للحصول على العشوائية. GRND_NONBLOCK هو علم يمكن استخدامه للتحكم في سلوك الحظر لـ getrandom(2). العمود الأخير من الجدول يأخذ في الاعتبار الحالة التي يمكن أن تحدث في وقت الإقلاع المبكر عندما لا يكون مجمع الإنتروبيا قد تمت تهيئته بعد.
الواجهة | المجمع | سلوك الحظر | السلوك عندما لا يكون المجمع جاهزًا بعد
/dev/random | مجمع الحظر | إذا كانت الإنتروبيا منخفضة جدًا، يمنع حتى تتوفر إنتروبيا كافية مرة أخرى | يمنع حتى يتم جمع إنتروبيا كافية
/dev/urandom | مخرجات CSPRNG | لا يمنع أبدًا | يعيد مخرجات من CSPRNG غير مهيأ (قد تكون إنتروبيا منخفضة وغير مناسبة للتشفير)
getrandom() | نفس /dev/urandom | لا يحجب بمجرد أن يصبح المجمع جاهزًا | يحجب حتى يصبح المجمع جاهزًا
getrandom() GRND_RANDOM | نفس /dev/random | إذا كانت الإنتروبيا منخفضة جدًا، يمنع حتى تتوفر إنتروبيا كافية مرة أخرى | يحجب حتى يصبح المجمع جاهزًا
getrandom() GRND_NONBLOCK | نفس /dev/urandom | لا يحجب بمجرد أن يصبح المجمع جاهزًا | EAGAIN
getrandom() GRND_RANDOM + GRND_NONBLOCK | نفس /dev/random | EAGAIN في حالة عدم توفر ما يكفي من الإنتروبيا | EAGAIN

  توليد مفاتيح تشفيرية
كمية مادة البذور المطلوبة لتوليد مفتاح تشفيري تساوي حجم المفتاح الفعال. على سبيل المثال، مفتاح خاص RSA أو Diffie-Hellman بحجم 3072 بت له حجم فعال يبلغ 128 بت (يتطلب حوالي 2^128 عملية لكسرها)، لذا يحتاج مولد المفاتيح فقط 128 بت (16 بايت) من مادة البذور من /dev/random.

بينما يعتبر هامش أمان فوق ذلك الحد الأدنى معقولًا، كحماية ضد عيوب في خوارزمية CSPRNG، لا يمكن لأي بدائية تشفيرية متاحة اليوم أن تعد بأكثر من 256 بت من الأمان، لذا إذا قرأ أي برنامج أكثر من 256 بت (32 بايت) من مجمع العشوائية للنواة لكل استدعاء، أو لكل فترة إعادة بذر معقولة (لا تقل عن دقيقة واحدة)، فيجب اعتبار ذلك علامة على أن تشفيره ليس منفذًا بمهارة.

انظر أيضًا
getrandom(2), getauxval(3), getentropy(3), random(4), urandom(4), signal(7)

http://www.2uo.de/myths-about-urandom/

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

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

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