fair playengineeringprovably fair
שרת בעל סמכות פירושו שהשרת מחזיק את העותק היחיד של המשחק שנחשב. המכשיר שלכם שולח את המהלך שאתם רוצים לשחק, השרת בודק אותו מול הקוביות שלו והחוקים שלו, ורק אז הלוח משתנה. אפליקציה ששונתה יכולה לטעון מה שתרצה: האמת חיה במקום שאליו היא אינה מגיעה.
שש בש מרוויח את המשמעת הזאת. זה משחק קוביות עם סולם ועם קופה, ומכאן שיש שתי דרכים לרמות: לזייף את המהלכים שלכם, או לעקם את ההטלות. שרת הוגן חייב לסגור את שתי הדלתות. הדלת השנייה כוללת אותנו, ונגיע לזה.
מה בעצם אומר שרת בעל סמכות?
כל משחק חי באוריון קיים בדיוק במקום אחד: על השרת שלנו. הלוח בטלפון שלכם הוא חלון, לא המשחק. כשאתם גוררים אבן, האפליקציה אינה מזיזה אותה. היא שולחת הודעה קטנה שאומרת: הנה מה שאני רוצה לשחק. השרת משחזר את הכוונה הזאת מול הלוח שלו, עם מנוע החוקים שלו, בעזרת הקוביות שהטיל לאותו תור. מהלכים חוקיים מקדמים את המשחק, ושני השחקנים מקבלים את אותה עמדה חדשה. מהלכים לא חוקיים מעולם לא קרו.
זה שרת אחד לכולם. אפליקציית iOS היא SwiftUI מקורי, אפליקציית אנדרואיד היא Jetpack Compose מקורי, ושתיהן חלונות אל אותו שרת ואל אותו מאגר שחקנים. זכוכית אחרת, אותה אמת.
למה משחקים שנותנים אמון בלקוח נחשפים לרמאות?
כי המכשיר של היריב שייך ליריב. כל מה שרץ עליו ניתן לשינוי. לקוח שעבר טלאי יכול לשלוח מהלכים שמעולם לא היו חוקיים. עורך זיכרון יכול לשכתב מספר במקומו, והמסך יציג את השקר בנאמנות. שום דבר מזה אינו אקזוטי. הכלים חינמיים, מתועדים, וישנים יותר מסמארטפונים.
משחק שנותן אמון בלקוח מבקש מכל שחקן להבטיח שלא יציץ מתחת למכסה המנוע. חלק יציצו. לכן הפכנו את דעתו של הלקוח ללא רלוונטית. באוריון לאפליקציה יש בדיוק שלושה תפקידים:
- לצייר: את הלוח, האבנים, קוביית ההכפלה, השעון.
- לבקש: לבקש מהשרת לשחק מהלך, להציע הכפלה, לפרוש.
- לקבל: להציג את העמדה שהשרת אומר שהיא האמיתית.
הטלת קוביות, שיפוט חוקיות, והזזת אבן בודדת אינם ברשימה הזאת. שום דבר שמכריע תוצאה אינו נולד על מכשיר.
מה קורה כשאני משחק מהלך?
אתם משחקים.. האפליקציה שלכם שולחת את הכוונה: האבן הזאת, הנקודות האלה. שום דבר במכשיר שלכם אינו משנה את הלוח האמיתי.
השרת משחזר אותו.. מנוע החוקים שלנו מריץ את המהלך מול הלוח של השרת והקוביות של השרת. אם הוא חוקי, המשחק מתקדם. אם לא, הוא נדחה במקור, מאיזו אפליקציה שלא נשלח.
שני הצדדים מקבלים את אותה אמת.. העמדה החדשה יוצאת לשני השחקנים. אם החיבור שלכם נופל, חלון החסד לחיבור מחדש בשעון התור שומר את הכיסא שלכם, ואתם חוזרים ללוח כפי שהוא באמת, לא כפי שהטלפון שלכם זכר לאחרונה.
ההימורים פועלים לפי אותו כלל. כשמתחיל משחק עם דמי כניסה, השרת מפקיד בנאמנות את שני הסכומים הראשוניים. הקופה חיה בפנקס אחד, על השרת, ושם היא נסגרת כשהמשחק מסתיים. אף לקוח לא נשאל אי פעם מה הוא חושב שזכה בו. מטבעות ואבני חן הם וירטואליים, בלי ערך אמיתי ובלי משיכה לכסף, ואנחנו בכל זאת מנהלים את הפנקס הזה כאילו הוא מחזיק משהו יקר, כי הוא כן: את האמון שלכם בתוצאה.
מה מונע מהשרת עצמו לרמות?
זו השאלה הנכונה, ורוב המשחקים מקווים שלעולם לא תשאלו אותה. שרת שמטיל קוביות בסתר יכול להטיל אותן בנדיבות למי שהוא מעדיף, ולעולם לא תראו זאת. כל הטלה נראית סבירה. זה מה שקוביות עושות.
לכן לקחנו את הכוח הזה מעצמנו. לפני שמשחק מתחיל, השרת מייצר זרע סודי ומפרסם עליו התחייבות SHA-256. אחר כך כל הטלה נגזרת מאותו זרע ב-HMAC-SHA256, אחת בכל פעם, לפי הסדר. כשהמשחק מסתיים, השרת חושף את הזרע. כל אחד יכול לבדוק שהזרע תואם להתחייבות שניתנה לפני ההטלה הראשונה, ושכל הטלה במשחק נובעת ממנו. במובן הקריפטוגרפי, הקוביות שלכם נקבעו לפני ששחקן כלשהו נגע באבן. לא היינו יכולים לעקם את ההטלה השתים עשרה בלי לשבור את ההבטחה שפרסמנו בהטלה אפס.
אינכם צריכים להאמין לנו על אף אחד מהדברים האלה. המאמת ב-orion.arthea.ai/verify מחשב מחדש את כל השרשרת בדפדפן שלכם, עם Web Crypto, על המכונה שלכם, מתוך הרישום הציבורי של המשחק. בלי חשבון. בלי אפליקציה.
איך שני החצאים ננעלים זה בזה?
סמכות השרת וקוביות ההתחייבות והחשיפה הן שני חצאים של תכנון אחד, וכל אחת מכסה את הנקודה העיוורת של השנייה. שרת שמאמת מהלכים אך מטיל בסתר מבקש מכם לתת אמון בבית. קוביות שהתחייבו אליהן על שרת שנותן אמון מבקשות מכם לתת אמון באפליקציה של כל זר. יחד הן סוגרות את המעגל. הלקוח אינו יכול לזייף מהלך, כי השרת משחזר כל מהלך במקור. השרת אינו יכול לזייף הטלה, כי כל הטלה כבולה להתחייבות שפורסמה לפני המשחק. איש ליד השולחן, כולל אלה שבנו אותו, אינו מחזיק כוח בלתי מבוקר על התוצאה.
הלקוח אינו יכול לזייף מהלך. השרת אינו יכול לזייף הטלה. כל השאר הוא קישוט.
הדלת ב-orion.arthea.ai/go נושאת את הקישורים ל-App Store ול-Google Play ותמיד מראה מה זמין ברגע זה. המאמת בא ראשון, במכוון: ההוכחה להוגנות צריכה להתקיים לפני שהקופה האמיתית הראשונה תשוחק אי פעם.