Így ellenőrizhető minden nyereményjáték-sorsolás
Egy nyereményjáték csak akkor tisztességes, ha senki, sem a szervező, sem mi, nem választhatja ki és nem jósolhatja meg a nyertest. Itt pontosan leírjuk, hogyan sorsolja ki a GetSocialExport a nyerteseket, és hogyan ellenőrizheti bárki a sorsolást a tanúsítványa alapján.
A sorsolás négy lépése
- A résztvevők listája zárolódik. A szervező bővítménye összegyűjti a kommenteket, alkalmazza a nyereményjáték szabályait, és elküldi a jogosult résztvevők listáját a szerverünkre. A lista rögzített sorrendbe kerül, SHA-256 ujjlenyomatát pedig az időponttal együtt eltároljuk. Ettől kezdve akár egyetlen név megváltoztatása is megváltoztatná az ujjlenyomatot.
- Egy jövőbeli véletlenszámot választunk ki. Ebben a pillanatban a szerver kiválaszt egy drand kört, amelyet csak körülbelül 30 másodperccel később tesznek közzé. A drand egy nyilvános véletlenszám-forrás, amelyet a League of Entropy (Cloudflare, Protocol Labs, egyetemek és mások) üzemeltet: számait nem lehet megjósolni vagy befolyásolni, és mindegyikhez olyan aláírás tartozik, amelyet bárki ellenőrizhet.
- A nyertesek kiszámítása. Amint a kört közzéteszik, a nyereményjáték kódjából, a sorsolás sorszámából, a lista ujjlenyomatából és a véletlenszámból egy kiindulóérték (seed) készül. A nyerteseket ebből SHA-256-tal, torzítás nélkül választjuk ki, extra súlyt csak azok a résztvevők kapnak, akiknek a szabályok szerint bónuszjegyük van.
- Minden nyilvános lesz. A tanúsítvány mutatja a nyerteseket, az ujjlenyomatot, a kört, a seedet, a lista zárolásának időpontját, minden újrasorsolást az okával együtt, és (hacsak a szervező nem tette privátra) a résztvevők teljes listáját.
Mit ellenőrizhetsz egy tanúsítványon
Nyiss meg bármely tanúsítványt (olvasd be a QR-kódját), és a böngésződ magától ellenőrzi, anélkül hogy nekünk kellene hinned:
- a közzétett résztvevőlista egyezik a sorsolás előtt rögzített ujjlenyomattal;
- a véletlenszám a drandtől származik, a League of Entropy érvényes BLS-aláírásával;
- a listát azelőtt zárolták, hogy ez a véletlenszám létezett volna;
- a sorsolás újraszámolása pontosan ugyanazokat a nyerteseket adja.
A Részt vettél? mezőbe beírhatod a nevedet is, hogy megerősítsd, benne voltál a sorsolásban, akkor is, ha a szervező privátként kezeli a listát.
Mit nem bizonyít a tanúsítvány
Maga a sorsolás bizonyíthatóan tisztességes. A tanúsítvány nem tudja bizonyítani, hogy a szervező észszerű szabályokat alkalmazott, vagy hogy átadta a nyereményt. A résztvevők listája a szervező saját bővítményéből származik, ezért tesszük közzé, hogy a résztvevők ellenőrizhessék, és ezért látszik minden újrasorsolás az okával együtt.
Technikai részletek
- Algoritmus:
socialexport-draw-v1. Kanonikus lista: résztvevőnként egy sor,id⇥name⇥tickets, id szerint rendezve, soremelésekkel összefűzve; ujjlenyomat = e szöveg SHA-256 értéke. - Véletlenszám: drand-hálózat:
quicknet, lánc:52db9ba70e0cc0f6…, 3 másodpercenként egy kör, BLS-aláírások a G1 csoporton (RFC 9380). - Seed: az algoritmus nevének, a nyereményjáték kódjának, a sorsolás sorszámának, a lista ujjlenyomatának, a körnek és a véletlenszámnak soremelésekkel összefűzött SHA-256 értéke.
- Kiválasztás: a SHA-256(seed ‖ counter) 64 bites számokat ad; a tartomány legnagyobb többszörösénél nagyobb értékeket elvetjük (nincs modulo-torzítás); minden húzás kiveszi a nyertest és a jegyeit.
- A tanúsítványokat a szerverünk aláírja (ECDSA P-256), hogy bizonyítsa, mikor rögzítettük az egyes listákat. Nyilvános kulcs:
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEQdshCP/QsGG2k29W80CHSmWbwYpBNgrrIjTf0qPyQuB8cXXLxsCRaty97SO44XaM3aYr6PMwI4dYc/MnSQ3/aw==
