هل الألعاب نزيهة بشكل موثوق؟

ما هي العدالة القابلة للتحقق Provably Fair؟

"العدالة القابلة للتحقق" هي تقنية مستخدمة في ألعاب الإنترنت تتيح التحقق بشكل مستقل من عشوائية ونزاهة كل نتيجة.

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

هذا يضمن أن كل نتيجة تظل غير متوقعة قبل بدء الجولة، وقابلة للتحقق بعد انتهائها.

كيف نضمن نزاهة ألعابنا الأصلية بنظام Provably Fair؟

يتم إنشاء كل نتيجة باستخدام ثلاثة عناصر:

Server Seed

قيمة عشوائية سرية يتم إنشاؤها من قبل الخادم.

قبل بدء اللعب، يقوم الخادم بنشر تجزئة تشفيرية (hash) لـ Server Seed. تعمل هذه كالتزام يثبت أن Server Seed كان موجودًا قبل بدء الجولة دون الكشف عن قيمته.

بعد انتهاء الجولة، يتم الكشف عن Server Seed ويمكن التحقق منه مقارنةً بالتجزئة المنشورة مسبقًا.

Client Seed

قيمة يُدخلها اللاعب.

يمكن للاعبين اختيار Client Seed الخاص بهم أو استخدام قيمة يتم إنشاؤها من النظام. يدخل Client Seed في عملية توليد العشوائية ويمكن تغييره في أي وقت.

Nonce

عدّاد يزداد مع كل حدث عشوائي.

يضمن Nonce أن كل نتيجة عشوائية تظل فريدة، حتى عند استخدام نفس Server Seed وClient Seed.

Provably Fair — دليل التحقق

يوضح هذا الدليل كيفية قيام نظام "العدالة القابلة للتحقق" بتوليد العشوائية وكيف يمكنك التحقق بشكل مستقل من نتيجة أي جولة.

يعمل النظام وفق مبدأ بسيط:

التثبيت ← اللعب ← الكشف

يقوم الخادم أولاً بتثبيت بـ Server Seed عبر نشر تجزئته (hash). ثم تتم عملية اللعب باستخدام Server Seed وClient Seed وNonce. بعد انتهاء الجولة، يتم الكشف عن Server Seed ليتمكن أي شخص من التحقق بشكل مستقل من العملية بالكامل.

جدول المحتويات

  • نموذج الثقة
  • Seeds و Hashes و Nonces
  • توليد العشوائية
  • تحويل RNG
  • خلط الأوراق
  • الالتزام بمجموعة الأوراق
  • مطابقة النتائج
  • كيفية التحقق من النتيجة
  • أداة التحقق المرجعية
  • مثال عملي
  • ملاحظات

نموذج الثقة

قبل بدء الجولة، يقوم الخادم بإنشاء Server Seed سري وينشر:

serverSeedHash = SHA256(serverSeed)

بما أن التجزئات التشفيرية (hashes) تعمل بشكل أحادي الاتجاه، يبقى Server Seed مخفيًا بينما يظل الالتزام عامًا.

بعد انتهاء الجولة، يتم الكشف عن Server Seed.

يمكن للاعبين بعد ذلك التحقق من:

SHA256(serverSeed) == serverSeedHash

إذا تطابقت القيم، فهذا يثبت أن Server Seed لم يتم تغييره بعد الالتزام به.

Seeds و Hashes و Nonces

القيمة المصدر المعنى
serverSeed الخادم قيمة عشوائية سرية يتم الكشف عنها بعد الجولة
serverSeedHash مشتق SHA256 لـ Server Seed
clientSeed اللاعب مصدر العشوائية الذي يقدمه اللاعب
nonce عدّاد يزيد مع كل حدث عشوائي
initialShuffle الخادم الحالة الأولية للورق أو اللوحة (لألعاب الورق فقط)
initialShuffleHash مشتق التزام بالحالة الأولية
finalShuffle الخادم الحالة النهائية بعد الجولة

ما يتم نشره ومتى

القيمة قبل / أثناء الجولة بعد انتهاء الجولة
clientSeed
serverSeedHash
nonce
initialShuffleHash
serverSeed
initialShuffle
finalShuffle

توليد العشوائية

يتم توليد كل قيمة عشوائية من خلال دمج:

  • Server Seed
  • Client Seed
  • Nonce

يتم دمج المدخلات باستخدام HMAC-SHA256 لإنتاج قيمة تشفيرية حتمية.

من حيث المفهوم

Server Seed + Client Seed + Nonce
HMAC-SHA256
Cryptographic Value

تُستخدم هذه القيمة لتهيئة مولد أرقام عشوائية يعتمد على ChaCha20.

ChaCha20 هي خوارزمية تشفير مستخدمة على نطاق واسع لتوليد قيم عشوائية آمنة وموحدة إحصائيًا.

بما أن العملية حتمية، فإن نفس المدخلات ستنتج دائمًا نفس المخرجات. وهذا يسمح بإعادة إنتاج كل نتيجة والتحقق منها بعد الكشف عن Server Seed.

تحويل RNG

يتم تحويل القيم العشوائية التي ينتجها المولد إلى النطاقات العددية المطلوبة لكل لعبة.

أمثلة:

  • النرد (Dice): تحويل القيمة العشوائية إلى نتيجة رمية ضمن النطاق المحدد.
  • الروليت (Roulette): تحويل القيمة العشوائية إلى موضع على عجلة الروليت.
  • بلينكو (Plinko): تحويل القيمة العشوائية إلى موضع السقوط.
  • ألعاب الورق (Card Games): استخدام القيم العشوائية لتوليد خلط الورق.

عندما تتطلب اللعبة قيمة عشوائية ضمن نطاق محدد، يتم استخدام "أخذ العينات بالرفض" (rejection sampling) لضمان أن جميع النتائج الممكنة لها نفس الاحتمال ودون أي تحيز إحصائي.

خلط الأوراق

تعتمد ألعاب الورق والألعاب اللوحية على خوارزمية خلط الأوراق Fisher-Yates.

Fisher-Yates هي طريقة رياضية مثبتة لإنتاج تبديلات عشوائية غير متحيزة وتُستخدم على نطاق واسع في صناعة الألعاب.

من حيث المفهوم

Ordered Deck
Fisher-Yates Shuffle
Randomized Deck

يتم توليد عملية الخلط من نفس قيم Server Seed وClient Seed وNonce المستخدمة في نظام الـ provably fair.

لأن الخلط حتمي، يمكن لأي لاعب إعادة إنتاج ترتيب مجموعة الأوراق الدقيق بمجرد الكشف عن Server Seed.

الالتزام بمجموعة الأوراق

في ألعاب الورق، يتم الالتزام بالترتيب الأولي قبل توزيع أي أوراق.

يتم إنشاء الالتزام كالتالي:

initialShuffleHash = SHA256(initialShuffle + serverSeed)

يتم نشر رمز التجزئة (hash) قبل بدء اللعب، بينما تبقى مجموعة البطاقات نفسها مخفية.

بعد انتهاء الجولة، يتم الكشف عن الترتيب الأولي ويمكن التحقق منه مقابل الالتزام المنشور مسبقًا.

هذا يضمن أن ترتيب الورق لم يتم تغييره بعد الالتزام به.

مطابقة النتائج

تقوم كل لعبة بربط القيم العشوائية بنتيجة محددة.

النرد (Dice)

تحويل القيمة العشوائية إلى نتيجة رمية ضمن النطاق المحدد.

الروليت (Roulette)

تحويل القيمة العشوائية إلى موضع على عجلة الروليت.

بلينكو (Plinko)

تحويل القيمة العشوائية إلى موضع السقوط النهائي والمضاعف الناتج.

ألعاب الورق (Card Games)

في ألعاب البلاك جاك والبكرات وHi-Lo، يتم خلط الأوراق باستخدام Fisher-Yates، ثم يتم توزيعها وفقًا لقواعد اللعبة.

يمكن للاعبين إعادة إنتاج ترتيب الورق والتحقق من التسلسل الناتج.

كيفية التحقق من النتيجة

لجولة مكتملة، يتكون التحقق من ثلاث خطوات.

الخطوة 1 — التحقق من Server Seed

التأكد من أن Server Seed المُكشوف يطابق تجزئة Server Seed المنشورة سابقًا:

SHA256(serverSeed) == serverSeedHash

هذا يثبت أن Server Seed تم الالتزام به قبل بدء اللعب.

الخطوة 2 — إعادة إنتاج النتيجة

باستخدام Server Seed وClient Seed وNonce يتم إعادة إنتاج القيم العشوائية.

يجب أن تطابق النتائج المعاد إنتاجها نتيجة اللعبة المنشورة تمامًا.

الخطوة 3 — التحقق من الالتزام بمجموعة الأوراق

لألعاب الورق، تحقق من:

SHA256(initialShuffle + serverSeed) == initialShuffleHash

هذا يؤكد أن ترتيب الورق تم الالتزام به مسبقًا ولم يتم تعديله.

أداة التحقق المرجعية

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

تستخدم الأداة Server Seed وClient Seed وNonce لإعادة توليد القيم العشوائية المستخدمة أثناء اللعب.

إذا تطابقت القيم مع النتائج المنشورة، تعتبر الجولة موثقة بنجاح.

مثال عملي

قيم المثال:

serverSeed =
3e8f1c0b7a96d5e4f2c1b0a9d8e7f6c5b4a3928170615243f9e8d7c6b5a40312
clientSeed =
player-client-seed-001
serverSeedHash =
b1198418007c4216afd19221dc11274595663fc55219aaf85b6291e2d5bdebee

التحقق:

SHA256(serverSeed)
=
b1198418007c4216afd19221dc11274595663fc55219aaf85b6291e2d5bdebee

بما أن القيم متطابقة، فهذا يثبت أن Server Seed تم الالتزام به بشكل صحيح قبل بدء اللعب.

وباستخدام نفس Server Seed وClient Seed وNonce في أداة التحقق، سيتم دائمًا إعادة إنتاج نفس النتيجة.

ملاحظات

  • Server Seed وClient Seed وNonce يحددون جميع النتائج بالكامل.
  • نفس المدخلات تنتج دائمًا نفس النتيجة.
  • يتم استخدام HMAC-SHA256 لاشتقاق العشوائية التشفيرية.
  • يتم استخدام ChaCha20 كمولد أرقام عشوائية حتمي.
  • يتم استخدام Fisher-Yates لخلط أوراق اللعب في ألعاب الورق.
  • يتم استخدام rejection sampling عند الضرورة للحفاظ على التوزيعات المنتظمة.
  • أي تعديل على Server Seed بعد الالتزام سيؤدي إلى إبطال التجزئة المنشورة وسيكون قابلاً للاكتشاف على الفور.
  • يمكن التحقق من كل نتيجة بشكل مستقل بعد الكشف عن Server Seed.

طرق أخرى للمساعدة

الدردشة مباشرة

أرسل لنا

[email protected]