1. כל תוצאה מגיעה ממחולל אקראיות קריפטוגרפי
Spinvolta מגריל תוצאות עם crypto.getRandomValues(), מחולל המספרים האקראיים המאובטח קריפטוגרפית שמובנה בכל דפדפן ומערכת הפעלה מודרניים — אותו מקור שמשמש ליצירת מפתחות הצפנה. אנחנו אף פעם לא משתמשים ב-Math.random() כדי להכריע משהו. (דברים קישוטיים בלבד, כמו לאן עפה פיסת קונפטי, יכולים להשתמש בו.)
2. בלי הטיית מודולו
מספר אקראי של 32 סיביות לא תמיד מתחלק שווה ל-7 אפשרויות, למשל: 4,294,967,296 אינו כפולה של 7, ולכן החישוב התמים number % 7 נותן לחלק מהאפשרויות סיכוי גבוה במעט. Spinvolta משתמש בדגימת דחייה: אם מספר נופל בשארית הלא שווה בראש הטווח, הוא נזרק ומוגרל מספר חדש. כך לכל אפשרות בדיוק אותו סיכוי, בכל מספר אפשרויות.
3. המשקלים מדויקים
במצב משוקלל, משקלים כמו 1, 2.5 או 0.125 מומרים למספרים שלמים בסקאלה משותפת ומחוברים במדויק. הגרלה אחידה אחת על הסכום בוחרת את הזוכה, כך שאפשרות במשקל 2 סבירה בדיוק פי שניים מאפשרות במשקל 1 — וגודל הפלחים בגלגל מציג את הסיכויים המדויקים האלה.
4. כמה זוכים בלי חזרות
כמה זוכים, קבוצות, סדר אקראי, ערבוב קלפים והגרלות משתמשים בערבוב Fisher–Yates לא מוטה (עם אותה דגימת דחייה), כך שלכל סדר או קבוצת זוכים אפשרית אותו סיכוי.
5. קודם התוצאה, אחר כך האנימציה
כשלוחצים סובבו, הזוכה נקבע לפני שהגלגל זז. אחר כך פותר מחשב תנועה — מתיחה לאחור, מהירות, כמה סיבובים, הנדנוד העדין בסוף — שנוחתת בדיוק בתוך הפלח הזוכה, בנקודה אקראית רחוק מהקצוות. הנפה חזקה יותר, סיבוב ארוך יותר או עצירה ידנית משנים רק את המראה. הבדיקות האוטומטיות שלנו בודקות אלפי סיבובים אקראיים כדי לוודא שהאנימציה תמיד נוחתת על התוצאה שהוגרלה מראש ולא גולשת לפלח השכן.
6. הגרלות שאפשר להוכיח, להגרלות ולחדרים
בהגרלות (ובכל הגרלה שבה האמון חשוב), Spinvolta הולך רחוק יותר כדי שלא תצטרכו לסמוך עלינו או על המארח:
- לפני ההגרלה, הדפדפן נועל את רשימת המשתתפים וההגדרות ומפרסם טביעת אצבע — גיבוב SHA-256 של הרשימה, ההגדרות וזרע סודי. השרת שלנו מתעד מתי היא התקבלה.
- טביעת האצבע מציינת סבב עתידי של משואת האקראיות drand League of Entropy — ערך פומבי שמופק כל 3 שניות על ידי ארגונים עצמאיים ברחבי העולם, ושאף אחד לא יכול לחזות או לבחור.
- כשהסבב מתפרסם, הזוכים מחושבים מטביעת האצבע, מערך המשואה ומהזרע.
- דף ההוכחה מציג הכול. כל אחד יכול ללחוץ אימות כדי לחשב מחדש בדפדפן שלו, כולל בדיקת החתימה הקריפטוגרפית של המשואה.
המארח לא יכול לבחור את הזוכה כי ערך המשואה עוד לא היה קיים כשהרשימה ננעלה. גם אנחנו לא, כי אנחנו לא רואים את הזרע לפני שטביעת האצבע ננעלת ואיננו שולטים ב-drand. אם אין גישה למשואה, ההגרלה עוברת להגרלת התחייבות־וחשיפה שמסומנת בבירור.
7. נבדק סטטיסטית
חבילת הבדיקות שלנו מריצה מבחני חי בריבוע על מאות אלפי הגרלות מדומות בכל שינוי, ועל יותר ממיליון הגרלות בחבילה המלאה: בחירות אחידות, בחירות משוקללות, ערבובים ומיקומים בכמה זוכים. אפשר להריץ גרסה משלכם בדף בדיקת ההוגנות.
מה שאנחנו לא יכולים להוכיח
בסיבוב יומיומי, אתם סומכים על כך שהקוד שרץ בדפדפן הוא הקוד שאנחנו מתארים. הוא רץ כולו במכשיר שלכם, ואפשר לבדוק אותו בכלי המפתחים של הדפדפן. כשההימור גבוה יותר — פרסים, הגרלות פומביות — השתמשו בהגרלה הוגנת שאפשר להוכיח, שלא דורשת לסמוך על אף אחד.
שאלות נפוצות
אפשר לסדר את הגלגל?
לא דרך האנימציה: התוצאה מוגרלת קודם בהוגנות והתנועה מחושבת כדי להציג אותה. הדרך היחידה לשנות סיכויים היא מצב משוקלל, שמציג תג „גלגל משוקלל” ומצייר פלחים בגודל המתאים.
למה אותו שם יצא פעמיים ברצף?
כי לאקראיות אמיתית יש רצפים. עם 10 אפשרויות, אותה אפשרות יוצאת פעמיים ברצף ב-10% מהמקרים. השתמשו במצב הדחה אם אתם רוצים כל אפשרות פעם אחת בלבד.
מה זה drand?
drand היא משואת אקראיות מבוזרת שמפעיל League of Entropy, קבוצה של אוניברסיטאות, חברות וארגונים עצמאיים. היא מפרסמת ערך אקראי חדש שאפשר לאמת כל כמה שניות.