Puncte:3

Cum se creează hashuri recreabile?

drapel lk

Recent, am dat peste un videoclip YouTube care explica un joc de cazinou. Cu cuvinte simple, ele generează aleatoriu un multiplicator pentru investiția ta inițială. Acest multiplicator ar trebui să fie susținut de o valoare hash. Cazinoul oferă, de asemenea, clientului valoarea hash inițială a primului joc și valoarea hash a fiecărei rulări ulterioare a multiplicatorului. Clientul ar trebui să valideze hash-ul generat aleatoriu aplicându-l la următoarea funcție Python:

def get_prev_game(hash_code):
    m = hashlib.sha256()
    m.update(hash_code.encode("utf-8"))
    returnează m.hexdigest()

Punerea hash-ului rezultat în această funcție din nou și din nou ar trebui, desigur, să rezulte în hash-ul inițial al jocului dat.

Acum întrebarea mea: De când asta get_prev_game Funcția practic este hash valoarea hash din nou și din nou până când ajunge la prima valoare hash, chiar mă întreb cum este creată următoarea valoare hash de pe partea cazinoului? Nu ar însemna asta că ar trebui să creeze un nou hash care să se potrivească cu hashul anterior? Am crezut că aceasta ar trebui să fie foarte greu de rezolvat. Poate imi scapa ceva. Multumesc anticipat pentru orice explicatie!

PS: Nu știu dacă am voie să postez videoclipul de pe YouTube, dar este /watch?v=F1HA7e3acSI

Editați | ×: Adaug funcția pentru calcularea multiplicatorului. Este evident statistic că acest joc nu poate fi câștigat. Sunt mai interesat de modul în care generează noi hashe-uri și cum funcționează backtracking-urile anterioare.

def get_result(game_hash):
    hm = hmac.new(str.encode(game_hash), b'', hashlib.sha256)
    hm.update(salt.encode("utf-8"))
    h = hm.hexdigest()
    dacă (int(h, 16) % 33 == 0):
        întoarce 1
    h = int(h[:13], 16)
    e = 2**52
    return (((100 * e - h) / (e-h)) // 1) / 100,0
Zac67 avatar
drapel vu
Ce ar trebui să demonstreze schema aia de hashing?
FabZbi avatar
drapel lk
Multiplicatorul este calculat din hash. Deci încearcă să demonstreze integritatea alegerii acelor multiplicatori astfel încât să nu fie aleși favorabil de și pentru cazinou.
Zac67 avatar
drapel vu
Dacă cazinoul poate alege „aleatoriu” o valoare de pornire, o poate face astfel încât lanțul de hash să se potrivească în mod convenabil nevoilor lor.
FabZbi avatar
drapel lk
@Zac67 Am adăugat funcția de calcul multiplicator. Este fără îndoială că acest joc nu va fi niciodată favorabil pentru client prin calcularea valorii așteptate, așa cum se explică în videoclip, dar mă interesează mai mult generarea de hash și backtracking.
Puncte:4
drapel in

Acesta este pur și simplu un angajament hash din partea Cazinoului și aceasta nu este o problemă de pre-imagine.

Înainte de a începe toate jocurile, cazinoul alege a $sămânță$ și hash it 2 milioane USD ori. lăsa $H^{s}(m)$ reprezintă hashing $m$ $s$-timp în cascadă

$$H^{s}(m) = \underbrace{H(H(\ldots (H(m) ))}_{s-time}$$

Primul joc începe cu $H^{2000000}(sămânță)$

Când începe al 2-lea joc cu $H^{1999999}(sămânță)$ și ei spun asta;

  • uite că nu folosim un joc random seed, ne respectăm angajamentul. Verificați acest lucru prin hash-ul acestui joc și văzând că rezultatul este hash-ul jocului anterior.

$$H^{2000000}(sămânță) = H(H^{1999999}(sămânță))$$ sau generic pentru $i$jocul (omitând 2000000 USD-i+1 USD pentru claritate);

$$H^{i}(sămânță) = H(H^{i-1}(sămânță))$$

Prin urmare, ei pot convinge unii jucători, dar nu și criptografii adevărați, deoarece selecția inițială a semințelor nu se bazează pe adevărata aleatorie sub un notar.

Ei pot căuta pur și simplu o sămânță care favorizează întotdeauna cazinoul, în loc să se bazeze pe aleatorietatea uniformă așteptată a hashurilor criptografice. Aleatoritatea uniformă ne spune pur și simplu că există 2M de hashe-uri în cascadă pe care cazinoul le va pierde întotdeauna. Pur și simplu vor elimina acele cazuri.

Utilizatorii nu pot găsi hash-urile jocurilor nejucate, deoarece SHA-256 are o rezistență de cost înainte de imagine. $2^{256}$. Ei pot verifica doar dacă angajamentul este în curs de desfășurare.

Principalul motiv pentru care cazinourile folosesc aceste angajamente hash este acela de a asigura jucătorul că atunci când joacă, acțiunile lor nu au niciun impact asupra probabilității lor de câștig. În special variația mizei. Ei vă asigură că, atunci când deschideți jocul, vi se atribuie o secvență de 2M de multiplicatori și că computerul dumneavoastră verifică după fiecare rotire pentru a vă asigura că încă își respectă angajamentul.

În acest fel, dacă după 100 de pariuri la 5 dolari decizi să scazi pariul la 25 de cenți, iar la prima încercare obții un multiplicator uriaș, măcar știi că nu au făcut-o intenționat!

FabZbi avatar
drapel lk
Aceasta este perfect! Văd.. singurul scop pe care îl are acest mecanism este să arate clientului că nu aleg multiplicatorul la întâmplare, ci urmărește angajamentul primei sămânțe, care este verificabil. Dar sămânța de start ar putea fi totuși în favoarea cazinoului.Dar cu funcția lor `get_result` toată lumea poate calcula valoarea așteptată ca fiind o pierdere, fără a ține cont de întrebarea aleatoriei adevărate a primei sămânțe. Dar asta răspunde la întrebarea mea, mulțumesc!
kodlu avatar
drapel sa
da. și asta nu este practic *schema lui Lampport*?
kelalaka avatar
drapel in
@kodlu Lamport este mai mult [decat asta](https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fmedia.geeksforgeeks.org%2Fwp-content%2Fuploads%2F20200602205839%2FLamport1.png&f =1&nofb=1), acolo, avem multe angajamente de biți. Am pierdut ceva?
kodlu avatar
drapel sa
nu, nu ești, ai dreptate, îmi lipsea ceva.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.