انتقل إلى المحتوى الرئيسي
TirageAuSort.io
فهم الصدفة

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

كيف صُمّمت عمليات السحب العشوائية على الإنترنت لتكون موثوقة: Math.random مقابل crypto، عدالة قابلة للتحقق وشيفرة شفافة، بشرح بسيط.

6 min Rédaction TirageAuSort.io

تحت غطاء TirageAuSort.io: كيف تكون عمليات السحب لدينا عادلة

تشغّل لعبة الكورة والكتابة على الموقع. تشاهد العملة تدور ثم تستقرّ، فتظهر كلمة كورة. لكن ما الذي حدث فعلاً بين نقرتك وهذه النتيجة؟ والأهم: لماذا ينبغي لك أن تثق بنا في سحب عشوائي عبر الإنترنت موثوق؟

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

كيف «يقترع» الحاسوب

نقطة صراحة أولى: لا يستطيع الحاسوب إنتاج عشوائية محضة. إنه ينتج عشوائية محسوبة. الفرق دقيق، لكنه مهمّ.

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

عملياً، يأتي متصفّحك (Chrome وFirefox وSafari وEdge) محمَّلاً بأداتين مختلفتين:

  • Math.random() — الدالة العامة الاستخدام. سريعة، توزيعها منتظم، وكافية تماماً لرمي عملة، أو رمي نرد، أو اختيار اسم من قائمة. تنفّذها المتصفحات الحديثة بخوارزمية تُسمّى xorshift128+، تُنتج متتاليات يستحيل تمييزها عن العشوائية الحقيقية بالعين المجرّدة.
  • crypto.getRandomValues() — النسخة التشفيرية. أبطأ، لكنها غير قابلة للتنبؤ حتى لمهاجم يراقب آلاف النتائج السابقة. وهذه هي الأداة المعيارية لتوليد كلمات المرور أو مفاتيح الأمان.

على TirageAuSort.io، نستخدم الأولى للأغلبية الساحقة من الألعاب (الكورة والكتابة، النرد الافتراضي، عجلة الحظ، عمليات سحب البطاقات)، ونستخدم الثانية للأدوات الحساسة: مولّد كلمات المرور، اللون العشوائي، التاريخ العشوائي. الأداة المناسبة في المكان المناسب. قرار تقني واعٍ، لا اختيار افتراضي.

ضمانات العدالة الأربع

اختيار المولّد المناسب لا يكفي. قد يبقى السحب منحازاً إذا أحاطت به شيفرة سيّئة. تؤطّر أربع قواعد كل لعبة على الموقع.

توزيع منتظم

في الكورة والكتابة، يجب أن تأتي الكورة في 50 ٪ من المرات والكتابة في 50 ٪ — لا 49/51. وعلى مولّد الأرقام بين 1 و100، يجب أن يحظى كل عدد صحيح باحتمال يساوي 1 ٪ بالضبط. يبدو ذلك بديهياً، لكن ثمّة خطأ كلاسيكي يتمثّل في تطبيق عامل الباقي (modulo) على المخرَج الخام للمولّد، ما يُدخل انحيازاً صغيراً ولكنه حقيقي على بعض النطاقات. نتجنّب هذا الفخّ بالطريقة المعيارية التي توصي بها التوثيقات الرسمية للويب: ضرب الناتج بالحدّ الأعلى ثم التقريب نحو الأسفل. النتيجة: على 10,000 سحب، يبقى الفارق بين القيم غير ذي دلالة إحصائية.

لا ذاكرة بين السحوبات

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

كل شيء يحدث في متصفّحك

ربما تكون هذه أهم نقطة. TirageAuSort.io موقع ساكن: لا يوجد خادم «يقرّر» نتيجتك. حين تنقر، يجري الحساب على جهازك أنت، داخل شيفرة الـJavaScript التي حمّلتها عند وصولك إلى الصفحة. هذا يجعل أيّ تلاعب من جانب الخادم مستحيلاً تقنياً — لا يوجد خادم أصلاً. كما يجعل الشيفرة قابلة للاطلاع، وهذا يقودنا إلى النقطة التالية.

الأداة المناسبة للاستخدام المناسب

لنعد إلى مثال كلمة المرور. لو استخدمنا Math.random() لتوليد مفتاح من 16 محرفاً، لربّما حصل شخصان يزوران الموقع في الميلي ثانية ذاتها، نظرياً، على كلمتَي مرور قابلتَين للتنبّؤ جزئياً. مع crypto.getRandomValues() يختفي هذا الخطر: يستمدّ المولّد طاقته مباشرةً من مصادر العشوائية في نظام التشغيل (حركات الفأرة، ضربات لوحة المفاتيح، أحداث الشبكة)، وفقاً لتوصيات NIST في الأمان. حيث تكون لجودة العشوائية عواقب، نرفع المستوى درجةً.

كيف تتحقّق بنفسك

هنا الجزء الذي يجعل هذا المقال مختلفاً: لست مضطراً إلى تصديقنا على كلمتنا.

الاختبار الأول — قراءة الشيفرة. على أيّ صفحة من الموقع، اضغط مفتاح F12. تنفتح نافذة: هذه أدوات المطوّر، المدمجة في متصفّحك منذ سنوات. ابحث عن لسان «المصادر» أو «المنقّح». ستجد فيه شيفرة الـJavaScript المنفَّذة على الصفحة، بنص واضح. ابحث عن Math.random أو crypto.getRandomValues: ستقرأ حرفياً السطر الذي ينتج نتيجتك. لا تشويش، ولا استدعاء خفيّاً لخدمة طرف ثالث.

الاختبار الثاني — التوزيع. شغّل الكورة والكتابة مئة مرة متتالية. دوّن النتائج. ينبغي أن تنتهي قرب 50/50، مع فارق محتمل بمقدار عشرة تقريباً. وإن أردت أن تكون أكثر صرامة، افتح وحدة تحكّم المتصفّح (دائماً من خلال F12، لسان «وحدة التحكّم») واكتب: let p = 0; for (let i = 0; i < 10000; i++) if (Math.random() < 0.5) p++; p — ستظهر لك قيمة بين 4,900 و5,100. تلك هي العشوائية الرياضية، بلا أيّ إخراج.

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

العشوائية مادة تسويقية رديئة

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

للتعمّق في الموضوع، يمكنك قراءة مقالاتنا عن لماذا أزلنا ألعاب الكازينو، وعن علامات لعب القمار الإشكالي، وعن الاحتمالات الحقيقية للكورة والكتابة — الاختبار العملي لهذه العدالة على 10,000 رمية، مع الانحراف المعياري وصيغة log₂(N) لفهم لماذا 13 كورة متتالية ليست أمراً استثنائياً. شفافية المحرّك هي الخطوة الأولى؛ وفهم ما يجري في رأسك هو الخطوة المنطقية التالية.

Questions fréquentes

هل نتائجي عشوائية فعلاً؟

نعم، بقدر ما يمكن للحاسوب أن يكون عشوائياً. بالنسبة لألعاب القرار (الكورة والكتابة، النرد، عجلة الحظ) نستخدم خوارزمية العشوائية المدمجة في المتصفح، التي تنتج توزيعاً منتظماً: في 10,000 رمية عملة ستحصل على ما بين 4,900 و5,100 وجه. أما للأدوات الحساسة كمولّد كلمات المرور فنستخدم مولّداً تشفيرياً أقوى. لا يوجد سحب موزون أو مخزّن أو معاد تشغيله: يُحسب الناتج محلياً في متصفحك، في اللحظة التي تنقر فيها.

هل تبيعون بياناتي الشخصية؟

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

لماذا لا يخرج رقمي المفضّل أبداً؟

لأن الذاكرة البشرية تتمسّك بالنتائج اللافتة وتنسى البقية. على مولّد الأرقام بين 1 و100، فرص ظهور رقمك المفضّل في كل سحب هي 1٪ بالضبط — لا أكثر ولا أقل. إذا شعرت بأنه «لا يخرج أبداً»، فذلك في الغالب أثر إدراكي: تلاحظ المرّات التي يغيب فيها ولا تلاحظ المرّات التي يظهر فيها. يُعرف هذا بانحياز التأكيد، وهو ابن عمّ قريب لمغالطة المقامر.

هل يمكن لأي شخص التحقّق من الشيفرة فعلاً؟

نعم. TirageAuSort.io موقع واجهة أمامية ساكن: كل سطر شيفرة يحسب سحباً يعمل داخل متصفحك، أي يُحمَّل بنص واضح إلى جهازك. يكفي النقر بالزر الأيمن واختيار «عرض مصدر الصفحة»، أو فتح أدوات المطوّر (مفتاح F12)، لرؤية الدوال وهي تعمل. يمكنك حرفياً قراءة السطر الذي يستدعي Math.random() أو crypto.getRandomValues(). لا يوجد جزء من السحب مخفي خلف صندوق أسود على جانب الخادم.

Pour essayer

Articles liés

— المصادر

  1. Math.random() — MDN Web Docs
  2. Crypto.getRandomValues() — MDN Web Docs
  3. There's Math.random(), and then there's Math.random() — V8 Engine Blog
  4. NIST SP 800-90A Rev. 1 — Recommendation for Random Number Generation Using Deterministic Random Bit Generators