Зарове, които можеш да провериш
Провери заровете на игра
Когато играта или мачът свърши, натисни печата на картата с резултата, после „Провери заровете“. Тази страница се отваря с всичко попълнено и твоят браузър изчислява наново печата и всяко хвърляне, без да изпраща никъде данните от играта.
Как се изчислява едно хвърляне
Един и същ код работи в приложението и на сървъра; тази страница е негово копие. Всяко хвърляне в мача идва от един HMAC:
mac = HMAC-SHA256(ключ = байтовете на семето на сървъра,
съобщение = семеТелефон1 ":" семеТелефон2 ":" номерХвърляне)
байт = първият байт на mac, по-малък от 252
v = байт mod 36
зарове = (floor(v / 6) + 1, v mod 6 + 1)
252 е 7 × 36, така че всяко от 36-те подредени хвърляния е еднакво вероятно. Байтовете от 252 до 255 се пропускат, защото иначе първите четири хвърляния биха се падали малко по-често. Ако нито един от 32-та байта не е по-малък от 252 (вероятност около 2-192: твърде рядко, за да се очаква), към частта със семената на телефоните се добавя + и MAC се изчислява отново: семеТелефон1:семеТелефон2+:номерХвърляне, после ++ и така нататък.
Печатът, показан преди първото хвърляне, е SHA-256(байтовете на семето на сървъра) в шестнайсетичен запис. Семето на сървъра е от 16 до 64 байта; играта използва 32. Семето на телефона е от 1 до 128 знака: букви, цифри, _ и -; приложението създава 32 шестнайсетични знака.
Защо това работи
Печатът е на масата преди първото хвърляне, така че сървърът не може да смени семето си, след като види как върви играта: печатът също би се сменил. Телефонът ти създава своето семе, след като печатът е показан, така че сървърът не може да избере семе, което да му пасва. Всяко хвърляне зависи и от двете, а у теб е всичко нужно, за да ги изчислиш наново.
Ако страницата покаже хвърляне, различно от това, което видя на дъската, или печат, който не съвпада, запази линка и пиши на [email protected]. Искаме да знаем.
Линк към тази страница
Бутонът „Провери заровете“ в приложението отваря тази страница с всичко, което стои след # в линка. Тази част браузърът ти никога не изпраща към сървър: /bg/check/#v=1&s=…&c=…&p=a,b&r=6344…&g=52,48. s е семето на сървъра, c е печатът, p са семената на телефоните по реда на местата, r е всяко хвърляне като две цифри по реда на хвърлянията, а g, при мач от няколко игри, е колко хвърляния е имала всяка игра.