# /dev/random

في أنظمة التشغيل الشبيهة بـيونكس، يُعدّ /dev/random و/dev/urandom ملفات خاصة تعمل كـمولد أرقام زائفة عشوائية آمن تشفيريًا (CSPRNG). يتم تزويدها بـالإنتروبيا (قيم عشوائية) الناتجة عن الضوضاء البيئية، التي يتم جمعها من برامج تشغيل الأجهزة ومصادر أخرى.
عادةً ما يقوم /dev/random بالحظر إذا كانت كمية الإنتروبيا المتوفرة أقل من المطلوب؛ ولكن في الآونة الأخيرة (راجع الاختلافات بين أنظمة التشغيل أدناه)، أصبح يحظر فقط عند بدء التشغيل حتى يتم جمع كمية كافية من الإنتروبيا، ثم يصبح غير محظور بشكل دائم. أما جهاز /dev/urandom، فعادةً ما لم يكن جهازًا محظورًا، حتى إذا لم يتم تهيئة مولد الأرقام الزائفة العشوائية بالكامل بالإنتروبيا منذ الإقلاع. لا تطبق جميع أنظمة التشغيل نفس الأساليب لـ/dev/random و/dev/urandom.
ظهر هذا الملف الخاص لأول مرة في نظام لينكس في عام 1994م، وتم اعتماده سريعًا من قِبل أنظمة التشغيل الأخرى الشبيهة بيونكس.

## لنيكس

توفر نواة لينكس ملفات الأجهزة المنفصلة /dev/random و/dev/urandom. ومنذ إصدار النواة 5.6 في عام 2020م، أصبح /dev/random يحظر فقط إذا لم يتم تهيئة مولد الأرقام الآمن تشفيريًا (CSPRNG). وبمجرد التهيئة، يعمل كل من /dev/random و/dev/urandom بنفس الطريقة.
في أكتوبر 2016، مع إصدار نسخة نواة لينكس 4.8، تم تبديل تنفيذ /dev/urandom في النواة إلى استخدام مولد أرقام زائفة عشوائية آمن تشفيريًا (CPRNG) تعتمد على ChaCha20، المطور بواسطة ثيودور تسو، استنادًا إلى الشيفرة المتدفقة ChaCha20 التي طورها دانيال ج. بيرنشتاين.
ومنذ إصدار النواة 5.17، تم تغيير مولد الأرقام العشوائية في النواة من استخدام دالة التجزئة التشفيرية خوارزمية التلبيد الآمنة 1 $^{[لغاتأخرى]}$‏ في مجمع الإنتروبيا إلى استخدام BLAKE2s، وهي دالة أحدث وأسرع وأكثر أمانًا.

### الخوارزمية الأصلية

تم تنفيذ توليد الأرقام العشوائية في مساحة النواة للنظام لأول مرة لنظام لينكس في عام 1994 من قبل ثيودور تسو. استخدم التنفيذ الدوال التجزئة المشفرة بدلاً من الشفرات، لتجنب قيود تصدير التشفير التي كانت سارية عند تصميم المولد. تم تصميم التنفيذ أيضًا مع افتراض أن أي دالة تجزئة أو شفرة قد تُكتشف ضعيفة في النهاية، وبالتالي فإن التصميم متين في مواجهة أي من هذه نقاط الضعف. لا يُعتبر التعافي السريع من اختراق البركة مطلبًا، لأن متطلبات اختراق البركة كافية لهجمات أسهل وأكثر مباشرة على أجزاء أخرى غير مرتبطة بنظام التشغيل. في تنفيذ تسو، يحتفظ المولد بتقدير لعدد البتات من الضوضاء في بركة الانتروبيا. من هذه البركة يتم إنشاء الأرقام العشوائية. عند القراءة، سيعيد جهاز /dev/random فقط البايتات العشوائية ضمن عدد البتات المقدر من الضوضاء في بركة الانتروبيا. عندما تكون بركة الانتروبيا فارغة، ستتوقف القراءات من /dev/random حتى يتم جمع المزيد من الضوضاء البيئية. الهدف هو العمل كمولد أرقام عشوائية آمن تشفيرياً، مع تسليم مخرجات بأكبر قدر ممكن من الانتروبيا. يُقترح من قبل المؤلفين للاستخدام في إنشاء المفاتيح التشفيرية للحماية عالية القيمة أو طويلة المدى. الجهاز المقابل لـ /dev/random هو /dev/urandom ("غير محدود"/مصدر عشوائي غير محجب) والذي يعيد استخدام البركة الداخلية لإنتاج المزيد من البتات شبه العشوائية. هذا يعني أن الاستدعاء لن يتوقف، ولكن المخرجات قد تحتوي على انتروبيا أقل من القراءة المقابلة من /dev/random. بينما لا يزال /dev/urandom مصممًا كمولد أرقام عشوائية مناسب لمعظم الأغراض التشفيرية، يلاحظ مؤلفو صفحة المساعدة أنه من الناحية النظرية، قد يوجد هجوم غير منشور بعد على الخوارزمية المستخدمة بواسطة /dev/urandom، وأن المستخدمين المهتمين بمثل هذا الهجوم يجب أن يستخدموا /dev/random بدلاً من ذلك. ومع ذلك، من غير المرجح أن يظهر مثل هذا الهجوم، لأنه بمجرد أن تصبح بركة الانتروبيا غير قابلة للتوقع، فإنها لا تسرب الأمان بعدد أقل من البتات. من الممكن أيضًا الكتابة إلى /dev/random. هذا يسمح لأي مستخدم بدمج البيانات العشوائية في البركة. البيانات غير العشوائية غير ضارة، لأن المستخدم المميز فقط هو من يمكنه إصدار ioctl اللازم لزيادة تقدير الانتروبيا. الكمية الحالية من الانتروبيا وحجم بركة الانتروبيا في نواة لينكس، والتي تقاس بالبتات، متاحة في /proc/sys/kernel/random/ ويمكن عرضها بالأمر cat /proc/sys/kernel/random/entropy_avail وcat /proc/sys/kernel/random/poolsize على التوالي.

## مراجع

* بوابة تعمية
* بوابة تقانة المعلومات
* بوابة علم الحاسوب
* ↑ "random(7) - Linux manual page". 10 فبراير 2023. مؤرشف من الأصل في 2024-11-27. اطلع عليه بتاريخ 2023-11-24.
* 1 2 Lloyd، Jack (9 ديسمبر 2008). "On Syllable's /dev/random". مؤرشف من الأصل في 2024-09-26. اطلع عليه بتاريخ 2019-08-21.
* ↑ "/dev/random Is More Like /dev/urandom With Linux 5.6 - Phoronix". www.phoronix.com. مؤرشف من الأصل في 2022-01-25.
* ↑ "kernel/git/torvalds/linux.git - Linux kernel source tree". kernel.org. 27 يوليو 2016. اطلع عليه بتاريخ 2016-11-23.
* ↑ "Linux 5.17 Random Number Generator Seeing Speed-Ups, Switching From SHA1 To BLAKE2s - Phoronix". www.phoronix.com. مؤرشف من الأصل في 2024-12-03.
* ↑ "/dev/random". Everything2. 8 يونيو 2003. مؤرشف من الأصل في 2009-11-17. اطلع عليه بتاريخ 2013-07-03.
* 1 2 3 4 random(4) – Linux Programmer's Manual – Special Files
* ↑ "/dev/random and /dev/urandom implementation in Linux 1.3.39, function random_read_unlimited". 4 نوفمبر 1995. مؤرشف من الأصل في 2013-11-21. اطلع عليه بتاريخ 2013-11-21.
* ↑ Filippo Valsorda (29 ديسمبر 2015). The plain simple reality of entropy. مؤرشف من الأصل في 2024-11-21.