توليد الأرقام العشوائية في أنظمة الحاسوب

توليد الأرقام العشوائية في أنظمة الحاسوب

إعداد م. الحسن ابو عبيد

مقدمة

تُستخدم الأرقام العشوائية لأغراض وأهداف متعددة، كتوليد مفاتيح تشفير البيانات، وفي برامج النمذجة، واختيار عينات البيانات، بالإضافة إلى استخدامها في الألعاب عبر الانترنت أيضاً كاليانصيب وألعاب الحظ. فالرقم العشوائي هو أحد الأرقام التي يُحصَل عليها من مجموعة من القيم الممكنة. مولد الأرقام العشوائية (RNG) هو جهاز حسابي أو مادي مصمم لإنشاء تسلسل من الأرقام أو الرموز التي تفتقر إلى أي نمط، أي تظهر بشكل عشوائي. يعد إنشاء البيانات العشوائية أمراً مهماً للعديد من التطبيقات مثل إنشاء مفاتيح التشفير (على سبيل المثال لتشفير القرص)، ومسح الأقراص بأمان.

هناك نوعان من الطرق لتوليد الأرقام العشوائية باستخدام الحاسوب.

  • مولدات أرقام شبه عشوائية (PRNGs – Pseudo Random Numbers Generators).
  • مولدات أرقام عشوائية حقيقية (TRNGs – True Random Numbers Generators).

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

“الإنتروبيا (entropy): هو كمية الطاقة غير المتاحة للقيام بعمل في نظام فيزيائي، وقد أطلق عليه كلاوزيوس مصطلح الإنتروبي ملهماً بكلمة tropi التي تعني التحول، واختيرت لتكون أقرب ما يُمكن من كلمة الطاقة (energy)، ويقول أشهر قوانين الطبيعة المعروف بالقانون الثاني في الترموديناميك “لا يُمكن لانتروبي نظام فيزيائي مغلق أن يتناقص أبداً”.

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

تولد العواصف الرعدية ضوضاء جوية

المولد العشوائي المدمج في نواة لينكس built-in RNG

يحظى المولد العشوائي المدمج dev/{u}random/ بأهمية كبيرة لإنتاج بيانات عشوائية موثوقة توفر نفس مستوى الأمان المستخدم لإنشاء مفاتيح التشفير. يقوم مولد الأرقام العشوائية بتجميع الضوضاء البيئية من برامج تشغيل الجهاز ومصادر أخرى في مجمع انتروبيا entropy pool.

/dev/random

إن الأمر man random سيوجهك إلى وظيفة المكتبة random 3 بينما للحصول على معلومات حول /dev/random يجب تنفيذ الأمر man 4 random لقراءة صفحة معلومات random 4

يستخدم /dev/random مجمع إنتروبيا بحجم 4096 بت (512 بايت) لتوليد بيانات عشوائية ويتوقف عند نفاد المجمع حتى تتم تعبئته (ببطء). تم تصميم /dev/random لتوليد مفاتيح التشفير (مثل SSL و SSH و dm-crypt’s LUKS) ولكن من غير العملي استخدامه لمسح سعات محركات الأقراص الثابتة الحالية، ما يجعل مسح القرص يستغرق وقتًا طويلاً ينتظر النظام لجمع ما يكفي من الانتروبيا.

يمكنك مقارنة /proc/sys/kernel/random/entropy_avail مع /proc/sys/kernel/random/poolsize لمراقبة تجمع إنتروبيا النظام.

/dev/urandom

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

مولد PRNG القائم على العتاد

مولد الاعداد العشوائية في لينكس
مولد الاعداد العشوائية في لينكس

يعد Intel Digital Random Number Generator عبارة عن مولد عشوائي للأجهزة تم تقديمه في وحدات المعالجة المركزية Intel في عام 2012 كجزء من المعمارية الدقيقة Intel Ivy Bridge. توفر Intel تعليمات تجميع RDRAND التي يمكن استخدامها للوصول إلى هذا المولد وهي أسرع بكثير من أي برامج PRNG. لدى RDRAND مصدر إنتروبيا واحد ويوفر دفقًا من بيانات الانتروبيا مثل الأصفار والواحدات. وهي في الأساس دائرة عتادية تقفز بين 0 و1 بناءً على تقلبات الضوضاء الحرارية داخل وحدة المعالجة المركزية.

خدمة Random.org للأرقام العشوائية

تقدم RANDOM.ORG أرقام عشوائية حقيقية لأي شخص على الإنترنت. تأتي العشوائية من الضوضاء الجوية، والتي تعد لأغراض عديدة أفضل من خوارزميات الأرقام العشوائية الزائفة المستخدمة عادة في برامج الكمبيوتر. يُستخدم RANDOM.ORG لألعاب اليانصيب، ألعاب الحظ عبر الإنترنت، والتطبيقات العلمية والفن والموسيقى. الخدمة موجودة منذ عام 1998 وتم بناؤها من قبل الدكتورة Mads Haahr من كلية علوم الحاسب والإحصاء في كلية Trinity في أيرلندا.

يبين الشكل التالي أرقام مولدة باستخدام تابع Rand (الجهة اليمنى) بإحدى لغات البرمجة في حين توضح الصورة اليسرى أرقام مولدة باستخدام موقع random.org بشكل حقيقي.

مقارنة بين PRNGs و TRNGs

يلخص الجدول أدناه خصائص نوعي مولدات الأرقام العشوائية.

تجعل هذه الخصائص TRNGs مناسبة تقريبًا لمجموعة التطبيقات التي تكون PRNGs غير مناسبة لها ، مثل تشفير البيانات والألعاب كألعاب الحظ. على العكس من ذلك فإن الكفاءة الضعيفة والطبيعة غير المحددة لـ TRNGs تجعلها أقل ملاءمة لتطبيقات المحاكاة والنمذجة ، والتي تتطلب في الغالب بيانات أكثر مما يمكن إنشاؤها باستخدام TRNG. يحتوي الجدول التالي على ملخص عن أفضل التطبيقات التي يتم تقديمها حسب نوع المولد:

المراجع:

[1]. https://software.intel.com/en-us/articles/intel-digital-random-number-generator-drng-software-implementation-guide

[2]. https://www.random.org/

[3]. https://linux.die.net/man/