استدعاءات النظام التي توفر الإنتروبيا
تُعدّ استدعاءات النظام المُزوِّدة للإنتروبيا استدعاءات نظام في نواة أنظمة التشغيل الشبيهة بنظام يونكس، والتي تُمكّن العمليات من الحصول على بيانات عشوائية أو ذات إنتروبيا. كان أولها استدعاء `sysctl` ، الذي أُضيف إلى نظام التشغيل OpenBSD في الإصدار 5.6 (نوفمبر 2014)، كإعادة هيكلة لنهج `sysctl(3) KERN_ARND` المُستخدم منذ عام 1997. [ 1 ] يُقدّم نظام لينكس استدعاء نظام مُشابهًا جدًا، `sysctl` ، والذي كان مُستندًا إلى `sysctl` . [ 2 ] كان مُتاحًا لأول مرة في لينكس 3.17، الذي صدر في أكتوبر 2014. [ 3 ] في يوليو 2015، قدّم نظام سولاريس إصدارات مُعدّلة قليلاً من ` sysctl` و`sysctl` . [ 4 ] في أغسطس 2015، قدّم نظام FreeBSD استدعاء النظام `sysctl` للحصول على بيانات عشوائية من النواة. [ 5 ]getentropygetrandomgetentropygetentropygetrandomread_random
تسمح استدعاءات النظام هذه للعمليات بالوصول إلى بيانات عشوائية عالية الجودة دون فتح وقراءة البيانات من أجهزة وهمية عشوائية .
تتشابه واجهات برمجة التطبيقات (API) الخاصة بنظامي التشغيل مايكروسوفت ويندوز وآبل CryptGenRandomiOS بشكل كبير. ومع ذلك، فهي لا تُنفذ كاستدعاءات نظام.SecRandom
تحفيز
تقليديًا، توفر أنظمة التشغيل الشبيهة بنظام يونكس بيانات عشوائية عبر جهازين وهميين : ` <file> /dev/random` و` /dev/urandom<file>`. مع ذلك، قد يكون قراءة البيانات العشوائية من هذين الجهازين بأمان وموثوقية أمرًا صعبًا ومعقدًا. على سبيل المثال، يمكن للمهاجم التدخل في وصول عملية ما إلى هذين الجهازين الوهميين عن طريق فتح جميع مُعرّفات الملفات المتاحة ، أو من خلال هجوم مشابه لاستنزاف الموارد . كما يؤثر استخدام هذين الجهازين على إلغاء الامتيازات . غالبًا ما تُحرم العمليات غير المُرخّصة من القدرة على فتح الملفات والأجهزة وقراءتها، ولا تكون أجهزة توليد البيانات العشوائية مرئية حتى للعمليات المُقيدة في بيئة معزولة (chroot) .
غالباً ما تدفع صعوبة استخدام أجهزة توليد العشوائية الزائفة المطورين إلى استخدام وظائف المكتبة القياسية بدلاً منها. بعض هذه الوظائف، مثل تلك الموجودة في لغة البرمجة Crand() ، و POSIX ، random()و drand48()، تُعدّ غير آمنة عند استخدامها في التشفير أو التطبيقات المشابهة، لأن هذه الخوارزميات حتمية في الواقع، وقد تم تقييدها عمداً لتلبية متطلبات إعادة استخدام البذور من خلال الواجهات srand()، srandom()و، و srand48().
يوجد فرق جوهري بين هذه الاستدعاءات: getentropy()يضمن الأول إرجاع أرقام عشوائية فورًا، دون أي تأخير. ويتطلب دعمًا من نظام التشغيل يضمن تهيئة تدفق البيانات العشوائية في أقرب فرصة ممكنة. ولتشجيع أنظمة التشغيل الأخرى على اتباع هذا النموذج، getentropy()لا يمكن الاستدعاء الثاني الإشارة إلى الأخطاء للتطبيق. قد تُرجع الاستدعاءات الأخرى المذكورة هنا أخطاءً بدلًا من ذلك، أو قد تُسبب تأخيرًا غير محدد. وقد ارتبطت دلالات التأخير هذه بمشاكل كبيرة. [ 6 ]
مع ازدياد أهمية الأمن في تطوير البرمجيات، يتزايد استخدام العشوائية عالية الجودة في سياقات متنوعة. ولهذا السبب، يُعتبر توفير هذه العشوائية مسؤولية أساسية لنواة النظام. تُعدّ استدعاءات النظام الواجهة التقليدية التي يستخدمها أي برنامج للوصول إلى خدمات النواة الأساسية ، وبالتالي تدعم النواة الوصول إلى العشوائية من خلال هذه الاستدعاءات.
الاستخدام
نظرًا لسرعته وإضافته طبقة أخرى من مزج العشوائية، يُنصح عادةً باستخدام بيانات استدعاءات النظام هذه عبر مولد أرقام عشوائية زائفة آمن تشفيريًا في مساحة المستخدم (CSPRNG) بدلاً من إسناد البيانات المسترجعة مباشرةً إلى المتغيرات. لهذا الغرض، تتضمن مكتبة C القياسية لنظام arc4randomOpenBSD الدالة ` fln ( ...getentropyarc4random
يُمكّن هذا الأسلوب البرنامج من جلب كمية أقل من العشوائية من النواة دون التأثير على قوة بياناته العشوائية. getentropyوقد صُمم استدعاء النظام بناءً على هذا الافتراض، بحيث لا يتجاوز حجم البيانات المُرسلة 256 بايت لكل استدعاء. [ 1 ] [ 7 ]
انظر أيضاً
مراجع
- 1 2 3 "getentropy(2) صفحة دليل OpenBSD" . صفحات دليل OpenBSD . OpenBSD . تم الاطلاع عليه بتاريخ 27 مايو 2016 .
- ↑ " [ PATCH, RFC ] random: إضافة استدعاء النظام getrandom(2)" . LKML . 17 يوليو 2014. تم الاطلاع عليه في 30 ديسمبر 2015 .
- ↑ "لينكس 3.17" . مبتدئو نواة لينكس . تم الاطلاع عليه بتاريخ 30 ديسمبر 2015 .
- ↑ دارين موفات. "استدعاءات النظام الجديدة في سولاريس: getentropy(2) و getrandom(2)" . /dev/urandom . أوراكل. مؤرشف من الأصل في 2 أغسطس 2017. تم الاطلاع عليه في 3 يناير 2016 .
- ↑ "المراجعة r286839" . svnweb.freebsd.org . FreeBSD . تم الاطلاع عليه بتاريخ 29 أغسطس 2017 .
- ↑ "توقف بايثون أثناء بدء التشغيل" . تم الاطلاع عليه بتاريخ 28 أبريل 2017 .
- ↑ "صفحة دليل arc4random(3) لنظام OpenBSD" . صفحات دليل OpenBSD . OpenBSD . تم الاطلاع عليه بتاريخ 27 مايو 2016 .
روابط خارجية
- استدعاء نظام للحصول على أرقام عشوائية: getrandom() ، LWN.net ، 23 يوليو 2014، بقلم جيك إيدج
- استدعاءات النظام
