جميع المقالات
التقنية

مولِّدات الأعداد العشوائية: الفرق بين العشوائية الحقيقية والشبه عشوائية

14 يناير 2026قراءة 6 دقائق

مولِّد الأعداد العشوائية على TheDailyUtils
أنشئ أعداداً عشوائية في أي نطاق باستخدام المولِّد المجاني.

ما هي العشوائية؟

في اللغة اليومية، «عشوائي» يعني غير متوقع. أما في الرياضيات والحوسبة، فللعشوائية معنى دقيق: يُعدّ التسلسل عشوائياً إذا كانت معرفة جميع القيم السابقة لا تمنح أي ميزة في التنبؤ بالقيمة التالية. تحقيق عشوائية حقيقية في آلة حتمية أمر بالغ الصعوبة — فالحواسيب تتبع تعليمات دقيقة، وهو نقيض عدم القدرة على التنبؤ. تنقسم الحلول لهذه المشكلة إلى فئتين: مولِّدات الأعداد الشبه عشوائية (PRNGs) ومولِّدات الأعداد العشوائية الحقيقية (TRNGs).

مولِّدات الأعداد الشبه عشوائية (PRNGs)

الـ PRNG هو خوارزمية حتمية تنتج سلسلة من الأعداد تبدو عشوائية، لكنها محددة بالكامل من قِبَل قيمة ابتدائية تُسمى البذرة. بنفس البذرة، يُنتج الـ PRNG دائماً نفس التسلسل. قد يبدو هذا عيباً، لكنه في الواقع خاصية مفيدة في كثير من السياقات.

أكثر الـ PRNGs استخداماً في العصر الحديث هو Mersenne Twister، الذي تبلغ دورته 2^19937 − 1 (أي يُنتج هذا العدد من القيم قبل التكرار). يجتاز كل اختبارات العشوائية الإحصائية تقريباً. معظم دوال العشوائية العامة في لغات البرمجة — وحدة random في Python، وjava.util.Random في Java، وMath.random() في JavaScript — تستخدم PRNG تحت الغطاء.

القيد الجوهري: الـ PRNGs غير آمنة تشفيرياً. إذا تمكّن المهاجم من رصد عدد كافٍ من المخرجات، يستطيع إعادة بناء الحالة الداخلية والتنبؤ بجميع المخرجات المستقبلية. لا يجب استخدام الـ PRNGs في أي شيء يمس الأمن.

مولِّدات الأعداد الشبه عشوائية المقاومة للتشفير (CSPRNGs)

الـ CSPRNG هو PRNG مصمم ليكون التنبؤ به مستحيلاً حسابياً، حتى مع معرفة المخرجات السابقة. يحقق ذلك عبر دوال تشفير أحادية الاتجاه، ويُغذَّى من مصدر إنتروبيا حقيقية. توفر أنظمة التشغيل CSPRNGs عبر واجهات مثل /dev/urandom على Linux/macOS وCryptGenRandom على Windows.

في كود التطبيقات:

  • Python: وحدة secrets (استخدمها، لا random، لكلمات المرور والرموز)
  • JavaScript (Node.js): crypto.randomBytes() وcrypto.randomUUID()
  • المتصفح: window.crypto.getRandomValues()
  • Java: java.security.SecureRandom

استخدم دائماً واجهة الـ API التشفيرية العشوائية للعمليات الحساسة أمنياً: توليد كلمات المرور، والرموز، ومعرِّفات الجلسة، ومفاتيح API، والمفاتيح التشفيرية، والقِيَم الفردية (nonces).

مولِّدات الأعداد العشوائية الحقيقية (TRNGs)

تستمد الـ TRNGs العشوائية من عمليات فيزيائية غير متوقعة بحق: الضوضاء الحرارية في المكونات الإلكترونية، والتحلل الإشعاعي، وضوضاء الغلاف الجوي، وأوقات وصول الفوتونات. تتضمن وحدات أمان الأجهزة (HSMs) المستخدمة في البنوك وجهات الشهادات TRNGs. تولِّد خدمات مثل random.org أعداداً عشوائية من ضوضاء الغلاف الجوي، وكثيراً ما تُستخدم كمصادر عشوائية موثوقة للقرعات والمسابقات.

عادةً ما تُغذِّي الـ CSPRNGs في أنظمة التشغيل نفسها من مصادر إنتروبيا عتادية (توقيتات لوحة المفاتيح، وإدخال/إخراج القرص، وشرائح RNG عتادية كـ RDRAND من Intel) ثم تستخدم خوارزمية CSPRNG لتوسيع تلك الإنتروبيا إلى تيار. يمنح هذا النهج الهجين عدم القدرة على التنبؤ من الإنتروبيا العتادية مع سرعة التوليد البرمجي.

حالات الاستخدام العملية حسب النوع

  • تطوير الألعاب والمحاكاة والتوليد الإجرائي — الـ PRNG مثالي. إمكانية الاستنساخ (عبر بذور ثابتة) ميزة لا عيب — تتيح للمطورين إعادة تشغيل سيناريوهات محددة وتصحيحها.
  • أخذ العينات الإحصائية وطرق مونتي كارلو — PRNG مع خوارزمية مُختبرة جيداً. Mersenne Twister هو المعيار.
  • كلمات المرور والرموز والمفاتيح التشفيرية و UUIDs — CSPRNG فقط. لا تستخدم Math.random() أو ما يعادله لهذه الأغراض.
  • القمار والقرعات والأنظمة القابلة للإثبات — TRNG أو CSPRNG، مع الشفافية حول المصدر.
  • اختبارات A/B والتجارب العشوائية — PRNG مُغذَّى لكل معرِّف مستخدم لضمان الاستنساخ؛ CSPRNG للبذرة نفسها إن كان التلاعب مصدر قلق.

البذر وقابلية الاستنساخ

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

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

ولِّد أعداداً عشوائية الآن

افتح مولِّد الأعداد العشوائية المجاني — ولِّد عدداً واحداً أو أكثر من الأعداد العشوائية ضمن أي نطاق، مع تكرار أو بدونه. يعمل في متصفحك.

random numberscryptographyRNGPRNGtechnology