Schema dvs. funcționează, dar nu este nevoie să aveți $r_p$.
Dacă eliminați $r_p$, atunci este important să conveniți în avans care este lungimea de biți a factorului dvs. de orbire $r_s$ va fi, astfel încât angajamentul să nu fie maleabil prin decizia de a elimina sau adăuga biți la începutul $T$ în timp ce adăugați sau eliminați biți la ceea ce pretindeți mai târziu a fi valoarea factorului orbitor $r_s$.
Alice trimite apoi $hash(r_s \mathbin\| T)$ (Unde $\mathbin\|$ înseamnă concatenare), iar mai târziu dezvăluie $r_s$ și $T$. Utilizați doar orice hash sigur din punct de vedere criptografic care are un nivel de securitate de cel puțin 128 de biți, cum ar fi SHA256. Utilizați cel puțin 128 de biți pentru $r_s$ și asigurați-vă că este uniform aleatoriu, pentru a-l împiedica pe Bob să forțeze valorile brute ale $r_s$ pentru a-ți descoperi predicția în avans.
S-ar putea să fiți îngrijorat în plus de faptul că Bob poate face derivate din angajamentul lui Alice, ceea ce este posibil dacă hash-ul este vulnerabil la atacurile cu extensie de lungime.
Scenariul este: Alice se angajează la o predicție și anunță angajamentul, apoi Bob anunță imediat un angajament bazat pe lungimi de extindere-atac în care ceva este atașat la predicția lui Alice. Bob nu își poate deschide angajamentul până când Alice îl deschide pe al ei dezvăluind factorul orbitor. Apariția unui factor orbitor duplicat va fi suspectă, dar numai dacă cineva este atent.
Puteți evita atât această amenințare, cât și necesitatea de a conveni în avans asupra lungimii biților a factorului orbitor, utilizând una dintre următoarele metode:
Calculați angajamentul ca hash(hash(factorul orb) $\mathbin\|$ hash (predicție)).
După cum subliniază @kelalaka, utilizați HMAC, cu factorul orbitor ca cheie. Prin urmare, angajament = HMAC-SHA256(factorul orb, predicție).