Poradíte s implementací Provably Fair?

OliverGGGGGG

Poradíte s implementací Provably Fair?
« kdy: 25. 02. 2016, 18:53:58 »
Zdravim,

podme na problem:

Definicia:
PROVABLY FAIR je mechanizmus ktorym napriklad online kasina "dokazuju" ze nie su rigged. Funguje to pomerne jednoducho. Napriklad pri nejakej hre ma hrac typnut cislo od 1 - 100. System cislo 1-100 vygeneruje este predtym ako hrac typne a nejaku zakodovanu verziu (hash alebo nieco podobne) hracovi ukaze este pred jeho stavkou.

HRAC stavi, a bud vyhra alebo prehra a aby si bol isty moze si overit ze ten 'hash' ktory mu bol rpedom dany je naozaj z cisla ktore bolo neskor ukazane - teda ho nikto neoklamal a cele to bolo len o jeho tipe.

Ok PROBLEM:
Potreboval by som podobny mechanizmus implementovat do hry kde nie je znama vrchna hranica rolovania predom. Teda rolovane cislo je od 0 po X pricom X moze byt kludne 100 alebo 2313216548 ale napriklad nie viac ako 10 na 12tu.

Mate napad ako by to slo?

DOLEZITE: Musi to byt naozaj FER - tzn ziadne zaokruhlovania, alebo "priblizne" proste bud alebo. :-)

PRIKLAD:
Moj napad bol rolovat (X) 0 az Y (pricom Y je obrovske cislo omnohokrat vacsie ako je je pomyselny limit (Z), teda napriklad 0 az 10000000000000 potom urobit

X mod Z a to by bolo moje nahodne cislo z toho pola 0 az Y.

ALE: ukazalo sa ze to nie je vzdy fer a moze casto hracov znevyhodnovat (aj ked malo ale predsa).

Priklad:
3 hraci a roll 1-10
aby vyhral 1 staci rollnut: 1, 4, 7, 10
aby vyhral 2 : 2 5 8
a aby vyhral 3 : 3, 6, 9,

A teda ich sance nie su 33% ale 40, 30, 30 z dovodu ze sa rolovalo 0-10 a nie 0-9

takze riesenie nie je dokonale...

Napady ? :)

Dakujem
« Poslední změna: 25. 02. 2016, 22:40:42 od Petr Krčmář »


Jenda

Re:ZADANI: Provably Fair - poradite?
« Odpověď #1 kdy: 25. 02. 2016, 19:25:12 »
Co to neřešit a prohlásit, že 10^12 je o 140 řádů menší než výstup SHA512, kterou určitě používáš, a tudíž nerovnoměrnost vnesenou modulením nemá cenu řešit?

Další možnost je třeba:

Server vygeneruje náhodné číslo I a jeho hash pošle hráči.

Následně dojde k určení, že se bude rolovat do M (jestli jsem to dobře pochopil).

Server najde nejbližší mocninu dvojky >= M.

Serve pomocí I naseeduje CSPRNG.

Server počítá T ← M+1; while(T>M) { T ← vezmi M bitů z výstupu CSPRNG }; return T;

T je hodnota, kterou chceš.

Jenda

Re:ZADANI: Provably Fair - poradite?
« Odpověď #2 kdy: 25. 02. 2016, 19:27:20 »
ugh… Samozřejmě vezmi ceil(log2(M)) bitů z PRNG.

OliverGGGGG

Re:ZADANI: Provably Fair - poradite?
« Odpověď #3 kdy: 25. 02. 2016, 19:45:59 »
@Jenda diki za reakce :-)

Prvni cast: ee nemuzu :-( jak to neni 100% fer tak to nemuzu pouzit :-(

A to druhe... Uh kamo ja mam daleko od matematika :-( ale idem to skusit pochopit ako si to myslel popripade skus vysvetlit 'jednoduchsie' ? :-))

Dakujem

Jenda

Re:ZADANI: Provably Fair - poradite?
« Odpověď #4 kdy: 25. 02. 2016, 20:30:59 »
> Prvni cast: ee nemuzu :-( jak to neni 100% fer tak to nemuzu pouzit :-(

To musí být zajímavá aplikace, když řeší problém, který nastane s pravděpodobností mnohem nižší, než 1:počet_atomů_ve_vesmíru.

> A to druhe... Uh kamo ja mam daleko od matematika :-( ale idem to skusit pochopit ako si to myslel popripade skus vysvetlit 'jednoduchsie' ? :-))

No prostě tím naseeduješ náhodný generátor a budeš z něj číst čísla. Pokud bude přečtené číslo větší, než potřebuješ, tak ho zahodíš, pokud bude menší, tak ho použiješ. A protože generátor dává bity, budeš zahazovat maximálně polovinu čísel.


OliverGGGGG

Re:ZADANI: Provably Fair - poradite?
« Odpověď #5 kdy: 25. 02. 2016, 21:52:39 »
Ok myslim ze chapem co chces povedat, ale problem je stale v tom ze to nie je 'fer' teda ak to chapem spravne. Aj ked len o MINIMUM no nie je to dokonale.

Proste vygenerujem random velky pocet BITOV ano?

Napriklad
10110101010111110001010

Ok a rolujem
0 -> 14

Teda 0 -> 1110

A teraz budem postupne pridavat bity a ak bude vzniknute cislo vacsie pouzijem predchadzajuce?

1
10
1011
100110 -> !!! Beriem predchadzajuce

Takze 1011 je moje nahodne?

Chapem spravne?

Ale tam su dva problemy, jeden vacsi jeden mensi.

Mensi:
Co ak mi rolovanie zacina '0'?

Vacsi:
Problemom su parne a neparne 'limity' lebo pri jednom sa zahadzuju a pri jednom je to ok. Takze jedno bude mat 'vacsiu' sancu ako druhe nie?

Jenda

Re:Poradíte s implementací Provably Fair?
« Odpověď #6 kdy: 26. 02. 2016, 00:42:56 »
> A teraz budem postupne pridavat bity a ak bude vzniknute cislo vacsie pouzijem predchadzajuce?

Ne. Prostě zjistíš, že potřebuješ náhodné číslo od 0 do 93. Spočítáš, že na to je potřeba 7 bitů (horní celá část dvojkového logaritmu 93). A pak vždycky přečteš 7 bitů a podíváš se, jestli je to <= 93. Pokud ne, zahodíš, pokud ano, vracíš to jako výsledek.

OliverGGGGG

Re:Poradíte s implementací Provably Fair?
« Odpověď #7 kdy: 26. 02. 2016, 02:19:27 »
Chapu okej. Zahodim jako celek. Ok.

Ano to by slo, a myslim ze by to bylo taky fer. Proste Phil s velke - tak zahodit a dalsich 7 bitu. A znova a znova. Ok.

Pri dlouhem retezci 0 a 1 na tom opravdu jako laik nevidim chybu.

Hmmm :-) nice

Dekuju moc! :-)

OliverGGGGG

Re:Poradíte s implementací Provably Fair?
« Odpověď #8 kdy: 26. 02. 2016, 02:41:22 »
Len to musi mat fixnu dlzku aby napriklad zacinal ten string aj viacerymi 0.

Ine problemy ma fakt nenapadaju..

Re:Poradíte s implementací Provably Fair?
« Odpověď #9 kdy: 26. 02. 2016, 06:55:49 »
Řešení je jednoduché – nejprve si musíte pořádně ujasnit a popsat zadání. Generovaná náhodná čísla asi nebudou neomezeně velká, už jenom kvůli limitům paměti počítače nebo čase jejich generování. Hráč asi také bude chtít vědět, do jakého limitu se má vejít. Pak tam ale zase píšete, že horní hranice existuje, akorát není známá předem. Před čím? Před okamžikem, než bude hráč tipovat, asi známá být musí. Tak tu náhodnou hodnotu vygenerujte po té, když ta hranice známá je.

Zkrátka z toho vašeho zadání vůbec není jasné, o co se vlastně snažíte a v čem je problém. A je dost pravděpodobné, že až si to sám ujasníte a popíšete, uvidíte, že řešení je triviální.

OliverGGGGG

Re:Poradíte s implementací Provably Fair?
« Odpověď #10 kdy: 26. 02. 2016, 17:59:01 »
Vrchna hranica losovania zial naozaj nie je jasna az do uplneho konca.

Zadanie:
Sutazi sa o hlavnu cenu. Povedzme tombola. Kazdy si kupi 0 az N listkov. Niekto si kupi 1. Niekto 2 niekto 11252.

Nakoniec musim 'zlosovat' ktory listok vyhrava. A to tak ze random generatorom vygenerujem cislo 1 az P (pocet predanych liatkov v tombole).

Potom zakricim cialo listku a kto ho ma ten vyhrava.

A potrebujem tuto 'nahodou' vylosovat skor ako predam vsetky listky do tomboly aby si sutaziaci vedeli overit ze som im neklamal a od zaciatku bolo jasne ake cislo / cisla budu vylosovane.

Moze byt?

Re:Poradíte s implementací Provably Fair?
« Odpověď #11 kdy: 26. 02. 2016, 18:17:33 »
Může být. Pak musíte vygenerovat náhodná čísla pro všechny možné počty prodaných lístků. Takže nebude od začátku jasné, jaká čísla budou vylosovaná, ale bude od začátku jasné, že pokud se prodají 2 lístky, bude vylosován lístek A, pokud 3 lístky, bude vylosován lístek B atd.

Jenda

Re:Poradíte s implementací Provably Fair?
« Odpověď #12 kdy: 26. 02. 2016, 19:09:44 »
Ale pak může poskytovatel podvádět tak, že se před koncem prodeje podívá, kdo by vyhrál, a může kamarádovi říct "když si koupíš pět lístků, vyhraješ".

Re:Poradíte s implementací Provably Fair?
« Odpověď #13 kdy: 26. 02. 2016, 19:39:14 »
Ano, to může, ale to pokaždé, když je vylosované číslo známé předem, a teprve pak je možné kupovat další lístky.

OliverGGGGG

Re:Poradíte s implementací Provably Fair?
« Odpověď #14 kdy: 26. 02. 2016, 19:54:11 »
Tak tu hovorime realne o losovaniach

0 az kludne 10 miliard...

Takze hladam lepsie riesenie ako 10miliard nahodnych losovani a ukladania vysledkov do nejakej tabulky preboha ;-)

Tu to musime skalovat aby to fungovalo aj aj.

Tamto by bolo zverstvo :-)