Crash խաղի արդյունքի ստուգումը 'ալգորիթմ, անվտանգություն

1) Ստուգման նպատակը հետևյալն է

Անփոխարինելիությունը 'օպերատորը չէր կարող փոխել արդյունքը ձեր տոկոսադրույքից հետո (սերվերային սիդի հեշի պատճառով)։
Վերարտադրողականություն 'ունենալով մուտքային տվյալներ, դուք ստանում եք նույն բազմապատիկը, որը ցույց է տվել խաղը։
Ընթացակարգի ամբողջականությունը 'հաղորդագրության ձևաչափը, կոդավորումը' nonce ', կլորացման կանոնը և «house edge» -ը կիրառվել են խիստ ճշգրտությամբ։

2) Տվյալները, առանց որոնց ստուգումը անհնար է

1. Server Seed Hash (կոմունիտ) - հրապարակվում է մինչև համապատասխան «Server Seed» օգտագործելը։
2. Server Seed (բացահայտվում է ժամանակի վերջում)։
3. Client Seed (ձեր սիդը; դուք առաջադրանք եք տալիս, թե պլատֆորմը ստեղծում է)։
4. Nonce (ձեր մրցույթի հաշվիչը ընթացիկ «Server Seed»)։
5. Հեշինգի ալգորիթմը (սովորաբար «HMAC-SHA256» կամ «SHA-256»)։
6. Հաղորդագրության ձևաչափը (օրինակ ՝ <: >), ճշգրիտ բաժանիչներ/գրանցում/կոդավորում։
7. Մապինգի հեշի բանաձևը շատ է (և կլորացման կանոն/նվազագույն)։

💡Ամբողջ ճշգրտումը պետք է լինի օպերատորի Fairness/Provably Fox բաժնում։ Եթե ինչ-որ բան չկա, դա կարմիր դրոշն է (տե՛ ս թիվ 10)։

3) Ստուգման ալգորիթմ (7 քայլ)

1. Հաշվեք «SHA-256 (Windows Seed)» և համեմատեք հրատարակված «Windows SeedHash» -ի հետ։
2. Հավաքեք հաղորդագրություն 'խստորեն պլատֆորմի ձևաչափով (օրինակ ՝ «www.g = ClientSeed +»)։
3. Հաշեք տուրիստական հեշը

при `HMAC-SHA256`: `RoundHash = HMAC_SHA256(key=ServerSeed, msg=message)`;
«SHA-256»: «RoundHash = SHA256 (Windows Seed international)» կամ ինչպես նշված է ճշգրտության մեջ։
4. Վերցրեք պատահականությունը 'վերցրեք առաջին' k 'bit (հաճախ 52) - ամբողջ' r ', ապա' u = r/2 ^ k "։
5. Կիրառեք մապինգի բանաձևը 'փոխակերպեք «u» -ը բազմապատկիչի (house edge/հատուկ դեպքեր հաշվարկվում են խաղի փաստաթղթերով)։
6. Կլորացրեք խաղի կանոններով (օրինակ, մինչև 2 նշաններ առնվազն 1։ 00 ռուբլիներ և այլն)։
7. Համեմատեք պատմության մեջ մրցույթի արդյունքի հետ։ Զուգադիպություն = ճիշտ ազնվություն։

4) Կեղծ (կարող եք հարմարվել Python/JS)

```python
Տեղադրեք մապինգի ճշգրիտ բանաձևը ձեր պլատֆորմից 'stub _ mapping () փոխարեն։

import hmac, hashlib, math

def round_hash(server_seed: bytes, client_seed: str, nonce: int) -> bytes:
  • = f «+ client _ seed +: ww.nonce +» .encode («utf-8») ձևաչափը դիտեք ճշգրտության մեջ։
  • return hmac. new(server_seed, message, hashlib. sha256). digest () կամ hashlib. sha256(...)

def take_u_from_hash(h: bytes, k_bits=52) -> float:
  • Վերցրեք k մեծ բիթ որպես ամբողջ r
  • r = int. from_bytes(h, "big") >> (256 - k_bits)
  • return r / (1 << k_bits) u в [0, 1)

def stub_mapping(u: float) -> float:
  • ԽԵՂՃ. Փոխարինեք բանաձևին ձեր խաղի փաստաթղթերից
  • Օրինակ, երբեմն օգտագործում են տեսակների փոխակերպումը 'crash = floor (const/( r + 1))) 100 )/100
  • և/կամ «house edge» որպես հազվագյուտ հարկադիր 1։ 00×. Մի օգտագործեք այն իրական ստուգման մեջ։
  • return max(1. 00, round(1. 0 / max(1e-12, 1. 0 - u), 2))

def verify(server_seed_hex, server_seed_hash_hex, client_seed, nonce, shown_multiplier):
  • server_seed = bytes. fromhex(server_seed_hex)
  • 1) Կոմունիտ
  • assert hashlib. sha256(server_seed). hexdigest() == server_seed_hash_hex. lower()
  • 2-3) Հեշ
  • h = round_hash(server_seed, client_seed, nonce)
  • 4) u
  • u = take_u_from_hash(h)
  • 5-6) mapping + թաղամասը
  • calc_mult = stub_mapping(u)
  • 7) համեմատություն
  • return abs(calc_mult - shown_multiplier) < 1e-9
  • ```

Կարևոր է '«stub _ mapping» -ի փոխարեն կիրառեք ձեր պլատֆորմի Fairness-ից ճշգրիտ բանաձևը։ հակառակ դեպքում ստուգումը սխալ կլինի։

5) Մասնավոր դեպքեր և ստորջրյա քարեր

Երկու դրույքաչափը մեկ փուլում 'շատ պլատֆորմներ «nonce» ավելանում են ձեր յուրաքանչյուր տոկոսադրույքի վրա, նույնիսկ եթե դրանք պատրաստված են նույն փուլում (օրինակ ՝ A' nonce = 42 «, B-ը 'nonce = 43»)։ Ստուգեք պատմությունը։
Փոփոխությունը 'Client Seed': սիդը փոխելիս «nonce» սովորաբար նետվում է (կամ սկսում է նոր հոսքը)։ Ստուգեք ձեր պլատֆորմի կանոնները։
Batchi 'Server Seed': Մեկ 'Server Seed "-ը գործում է մի շարք փուլերի վրա, հետո հրապարակում է նոր կոմունիստ։ մի շփոթեք տարբեր ժամանակահատվածների սերմերը։
Կլորացումը/նվազագույն: Երկրորդ նշանի անհամապատասխանությունը 90% դեպքերում սխալ է կլորացման/նվազագույնի կանոններում (օրինակ, ֆիքսված 1։ 00 ռուբլիներ սպայական պայմանով)։
Կոդավորումը/կոդավորումը 'լրացուցիչ բացթողում/տողի թարգմանություն, սխալ գրանցում, ոչ-UTF-8 կոտրում են ստուգումը։

6) Արագ ստուգման թուղթ

1. Արդյո՞ ք «SHA-256 (Windows Seed)» -ը համընկնում է հրատարակված «Live SeedHash» -ի հետ։
2. Արդյո՞ ք ձևավորված է «nonce» և «nonce» ձևաչափը։
3. Ալգորիթմը («HMAC-SHA256 »/« SHA-256») և դաշտերի բանալին/կարգը կիրառվում են խիստ ճշգրտությամբ։
4. Mapping-ը և թաղամասը նույնական են փաստաթղթերում։
5. Արդյո՞ ք հատուկ դեպքերը հաշվի են առնվում (հազվադեպ «ակնթարթային փլուզում» առնվազն 1։ 00 ռուբլիներ, գլխարկներ)։
6. Արդյունքը համընկնում է խաղի պատմության հետ մինչև կոպեկ։

7) Կառավարման ավտոմատիզացիա (պրակտիկա)

Լոգներ 'պահպանեք ինքներդ ձեզ "client _ seed", հաջորդականությունը' nonce ", ժամանակի նշանը, վերջնական բազմապատիկը։
Սեմպլինգ '«Server Seed» -ից հետո մի ջութակահարեք պատահական 20-50 շրջան։ գրանցեք համընկնումների տոկոսը (պետք է լինի 100%)։
Ռեգրեսիա 'խաղի/պրովայդերի տարբերակները փոխելիս նույն հավաքածուն։
Էքսպորտը 'պահպանեք CSV/JSON արտադրողների հետ, ձեր «աուդիտի ուղին» է։

8) Անվտանգություն 'ինչպես սխալվել և խաբել ինքներդ ձեզ։

Ստուգեք տեղական/օֆլայնը, մի ապավինեք միայն օպերատորի վեբ վարորդին։ պահեք ձեր սեփական ջութակը։
Մի վստահեք շրջադարձերին առանց ամբողջական տվյալների. Չկա բանաձև/ձևաչափ, չկա ստուգում։
Ուժեղ «Client Seed» 'տվեք պատահական, պարբերաբար փոխեք (դա չի բարձրացնում RTP-ը, բայց բացառում է վերարտադրողականության հարցերը)։
TFC/նստաշրջաններ 'միայն HTTPS, 2FA, մուտքերի հետևում և պատմության բեռնումը։
Ոչ մեկին մի փոխանցեք «Server Seed», այն հրատարակվում է վիրահատից հետո։ Ձեր խնդիրն է տապալել, չստանալ այն նախօրոք։

9) Տիպիկ «նորեկների սխալները»

Դաշտերի կարգը շփոթված է («Nonce: ClientSeed» -ի փոխարեն 'ClientSeed: Nonce')։
«nonce» -ի հաշիվը մեկ միավորի փոխարեն (կամ հակառակը)։
Օգտագործվում է ամբողջ ռուսական պլատֆորմի հեշ (global nonce), իսկ ձեր անձնական «nonce» -ի կարիքը։
Կլորացման անտեսումը կանոններով (banker's rounding vs floor/ceil)։
Ակտիվ, ոչ թե արդեն բացահայտված «Server Seed» -ի հետ։

10) «Կարմիր դրոշները» օպերատորի մոտ

Չկա հանրային Server Seed Hash-ը մինչև ժամանակահատվածի սկիզբը։
Դուք չեք կարող տեղադրել ձեր Client Seed-ը կամ տեսնել nonce-ը։
Բացակայում է մապինգի հեշի հանրային բանաձևը։
Տուրերի պատմությունը նվազագույն տվյալներ չի տալիս։
Ձևաչափը և ալգորիթմը փոխվում էին առանց ծանուցման/հատուկ արխիվի։

11) Ավստրալական ենթատեքստը (AU)

Արժույթը 'սովորեցրեք շահել/մրցել AUD-ում, պահեք պատմություններ (աջակցություն, հակասական հարցեր)։
Պատասխանատու խաղը (RG) 'ավանդի/ժամանակի սահմանները, դադարը և ինքնազարգացումը հասանելի են բարեխիղճ ծրագրերում։ օգտագործեք դրանք։
Պլատֆորմային պրակտիկան 'բարեխիղճ օպերատորների մոտ «Fairness/Provably Fox» բլոկը պարունակում է ամբողջական նկարագրություն և ստուգման օրինակներ։ մանրամասների բացակայությունը մեկ այլ ծառայություն ընտրելու պատճառ է։

12) Արդյունքը

Crash խաղի արդյունքի ստուգումը պարզ ընթացակարգ է

«Server Seed Hash»,
«RoundHash» վերականգնումը '«Server Seed», «Client Seed», «nonce» և ալգորիթմ,
մապինգի և կլորացման կանոնների կիրառումը,
Ձեր ստուգման և խաղի պատմության մեջ նույնական մեծահասակ։

Պահեք ձեր սեփական ջութակը, տրամաբանեք մուտքային տվյալները և պարբերաբար ստուգեք պատահական փուլերը։ Այդպես դուք հաստատում եք ազնվությունը ոչ թե բառերով, այլ մաթեմատիկորեն։