抽奖
公平的奖品抽奖
抽奖前公布秘密和公开哈希——结果无法被悄悄重抽。
网站生成 16 字节(32 个 hex 字符)的随机秘密,并展示其 SHA-256。哈希是一个承诺:秘密已无法被悄悄替换。请在开始接受报名前公布哈希——在频道、聊天或帖子中。
-
1
Commit——开始前的哈希
主办方公布秘密的 SHA-256。在秘密隐藏期间,无法按所需哈希反推出它:SHA-256 不可逆。
-
2
参与者名单
名单以公开方式固定,每行一个名字。行号参与公式,因此验证时的顺序必须相同。
-
3
Reveal——之后的秘密
报名结束后秘密公开。任何参与者都能在“抽奖验证”页面核验其哈希并重新计算获奖者。
h = SHA-256(secret + ":" + (index + 1) + ":" + name)
为什么抽奖是公平的
普通随机数生成器缺少最重要的东西——证明。结果只有在按下按钮后才可见,没人能确认它没有被重算。commit-reveal 方案通过两次公布解决这个问题:抽奖前公布哈希,之后公布秘密。
只要哈希已公布而秘密仍隐藏,主办方就受承诺约束:无法找出具有相同 SHA-256 的另一个秘密。秘密公开后,任何参与者都能按公开公式重新计算获奖者,并确认结果一致。
什么是 commit-reveal
Commit ——承诺。随机秘密被转换为 SHA-256 哈希,并在开始前公布。 Reveal ——公开:抽奖后秘密向所有人展示,可用普通的 SHA-256 计算器验证哈希。
哈希是数据的“指纹”:同一字符串总是得到相同结果,而任何改动,哪怕一个字符,都会完全改变它。因此替换秘密立刻可见:新秘密的 SHA-256 不再与公布的哈希一致。
如何在一分钟内验证结果
- 从抽奖记录中复制秘密。
- 打开 抽奖验证页面.
- 按记录中的相同顺序粘贴秘密和参与者名单。
- 指定获奖人数并点击“验证”。
- 将获奖者和秘密哈希与公布的进行比对。
该方案不保证什么
- 它不能防止参与者名单被替换:名单必须在秘密公开之前公布。
- 它不固定哈希的公布时间——为此需要独立痕迹:频道帖子、截图、存档副本。
- 它不会让抽奖变成彩票:不售票,奖池也不是由会费形成。