קוביות שאפשר לבדוק
בדיקת הקוביות של משחק
כשהמשחק נגמר, לחצו על החותם בכרטיס הסיום, ואז על בדיקת הקוביות האלה. הדף הזה נפתח עם הכול ממולא, והדפדפן שלך מחשב מחדש את החותם ואת כל הזריקות, ולא שולח את נתוני המשחק לשום מקום.
איך מחושבת זריקה
אותו קוד רץ באפליקציה ובשרת; הדף הזה הוא עותק שלו. כל זריקה במשחק מגיעה מ-HMAC אחד:
mac = HMAC-SHA256(key = server seed bytes,
message = phoneSeed1 ":" phoneSeed2 ":" rollNumber)
byte = the first byte of mac that is below 252
v = byte mod 36
dice = (floor(v / 6) + 1, v mod 6 + 1)
במילים: המפתח (key) הוא הבייטים של הגרעין של השרת, וההודעה (message) היא הגרעינים של הטלפונים ומספר הזריקה, מופרדים בנקודתיים. לוקחים את הבייט הראשון של התוצאה שקטן מ-252, מחשבים את השארית שלו בחלוקה ב-36, ומקבלים את שתי הקוביות.
252 = 7 × 36, ולכן לכל אחת מ-36 הזריקות האפשריות (כשהסדר בין הקוביות נחשב) יש אותו סיכוי. בייטים 252 עד 255 מדולגים, כי אם היו נשארים, הם היו מעדיפים קצת את ארבע הזריקות הראשונות. אם אף אחד מ-32 הבייטים לא קטן מ-252 (סיכוי של בערך 2-192, נדיר מכדי לצפות לו), מוסיפים + לחלק של גרעיני הטלפונים ומחשבים את ה-MAC מחדש: phoneSeed1:phoneSeed2+:rollNumber, אחר כך ++, וכן הלאה.
החותם שמוצג לפני הזריקה הראשונה הוא SHA-256(server seed bytes), בכתיב הקסדצימלי. לגרעין של השרת יש 16 עד 64 בייטים; המשחק משתמש ב-32. גרעין של טלפון הוא 1 עד 128 תווים: אותיות, ספרות, _ ו--; האפליקציה יוצרת 32 תווים הקסדצימליים.
למה זה עובד
החותם נמצא על השולחן לפני הזריקה הראשונה, כך שהשרת לא יכול להחליף את הגרעין שלו אחרי שהוא רואה לאן המשחק הולך: גם החותם היה משתנה. הטלפון שלך מגריל את הגרעין שלו אחרי שהחותם מוצג, כך שהשרת לא יכול לבחור גרעין שמתאים לו. כל זריקה תלויה בשניהם, וכל מה שצריך כדי לחשב אותן מחדש נמצא אצלך.
אם הדף מציג זריקה שונה ממה שראית על הלוח, או חותם שלא תואם, שמרו את הקישור וכתבו אל [email protected]. אנחנו רוצים לדעת.
קישור לדף הזה
הכפתור בדיקת הקוביות האלה באפליקציה פותח את הדף הזה עם כל מה שבא אחרי ה-# בקישור, החלק שהדפדפן אף פעם לא שולח לשרת: /he/check/#v=1&s=…&c=…&p=a,b&r=6344…&g=52,48. s הוא הגרעין של השרת, c החותם, p הגרעינים של הטלפונים לפי סדר המושבים, r כל זריקה כשתי ספרות, לפי סדר הזריקות, ו-g, במשחק של כמה סיבובים, כמה זריקות היו בכל סיבוב.