تقنية

علم الحاسوب: والأرقام العشوائية

علم الحاسوب والأرقام العشوائية

This post is also available in: English (الإنجليزية)

شارك هذا

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

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

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

الطريقة الأولى: خوارزميات حسابية يمكن أن تنتج سلاسل طويلة من النتائج العشوائية، والتي يتم تحديدها بالكامل في الواقع من خلال قيمة أولية، تعرف باسم قيمة أو مفتاح أولي. ونتيجة لذلك، يمكن إعادة إنتاج التسلسل العشوائي بأكمله إذا كانت القيمة الأولية معروفة. لا يعتمد هذا النوع من المولدات عادةً على مصادر الإنتروبيا التي تحدث بشكل طبيعي. هذا النوع من المولدات غير محدود، ولكنه قابل للتنبؤ ولا يعتمد على حدث خارجي. ومن الطرائق الجيدة لتوليد أرقام شبه عشوائية هي طريقة المطابقة الخطية، وهي تمثل واحدة من أقدم وأفضل الخوارزميات لتوليد مثل هذه الأعداد العشوائية، وقد أُجريَت بحوث كثيرة في نظرية توليد الأرقام شبه العشوائية، حتى أن الخوارزميات الحديثة لتوليد الأرقام شبه العشوائية الجيدة تكون الأرقام المولدة بها تبدو تماما وكأنها عشوائية.[2]https://www.fiverr.com/tomwidman/provide-you-with-a-random-number-generator

الإنتروبيا (entropy): هو كمية الطاقة غير المتاحة للقيام بعمل في نظام فيزيائي، وقد أطلق عليه كلاوزيوس مصطلح الإنتروبي ملهماً بكلمة tropi التي تعني التحول، واختيرت لتكون أقرب ما يُمكن من كلمة الطاقة (energy)، ويقول أشهر قوانين الطبيعة المعروف بالقانون الثاني في الترموديناميك “لا يُمكن لانتروبي نظام فيزيائي مغلق أن يتناقص أبداً.[3]https://ar.wikipedia.org/wiki/%D8%A5%D9%86%D8%AA%D8%B1%D9%88%D8%A8%D9%8A%D8%A7

أمّا الطريقة الثانية:  فيتم توليد أرقام عشوائية، بناء على ظواهر فيزيائية، مثل الضوضاء او الحرارة او التأثير الكهروضوئي وقد تستخدم الظواهر الكمومية. هذه العمليات، من الناحية النظرية لا يمكن التنبؤ بها تماما وهي غير حتمية أي لها سلوك غير متوقع ولا تتكرر بشكل دوري. يمكن أيضًا استخدام ضجيج الخلفية من أحد المكاتب أو المختبرات ، ولكن سيتعين عليك مراقبة الأنماط. قد تساهم المروحة من جهاز الكمبيوتر الخاص بك في ضجيج الخلفية ، وبما أن المروحة عبارة عن جهاز دوار ، فمن المرجح أن الضوضاء التي تنتجها لن تكون عشوائية مثل الضوضاء الجوية. [4]https://software.intel.com/en-us/articles/intel-digital-random-number-generator-drng-software-implementation-guide

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

built-in RNG
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 القائم على العتاد

مولد PRNG
مولد PRNG

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

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

Random.org
Random.org

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

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

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

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

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

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

PRNGs - TRNGs
PRNGs – TRNGs
المراجع    [ + ]
السابق
معلومات عن “تطبيق فوتوشوب كاميرا” Photoshop Camera الجديد من أدوبي
التالي
محادثات الفيديو عن بعد: فيسبوك أم زووم