抽奖
抽奖公平性验证
根据公布的秘密和参与者名单重新计算结果。
| 名次 | 参与者 | SHA-256(秘密 : 序号 : 姓名) |
|---|
-
1
秘密的哈希
先计算 SHA-256(秘密) 并与抽奖前公布的哈希比较。值不同意味着秘密被替换了。
-
2
每一行的哈希
对编号为 i 的参与者计算 h = SHA-256(秘密 + “:” + i + “:” + 姓名)。编号是行在列表中的位置,从 1 开始。
-
3
排序与获奖者
所有 h 按升序排序(相同时按行号)。前 N 位参与者即为获奖者。
h = SHA-256(secret + ":" + (index + 1) + ":" + name)
如何验证抽奖
验证只需一分钟,也无需信任主办方:只需要秘密、按原顺序排列的参与者名单和获奖人数。
- 从抽奖记录中取出秘密——它是“REVEAL”一词旁的 32 个 hex 字符。
- 按行粘贴参与者名单,顺序与抽奖时相同。
- 指定获奖人数 N 并点击“验证”。
- 将秘密哈希与公布的 commit 比对,将获奖者名单与公布的比对。
哈希意味着什么
哈希是固定长度的数据指纹。同一字符串总是得到相同的 SHA-256,而哪怕改动一个字符都会完全改变结果。因此主办方无法“改写”秘密:新秘密会得到不同的哈希。
Commit 在抽奖前公布,并以承诺约束主办方, reveal 之后公开秘密。如果公开秘密的 SHA-256 与公布的哈希一致——承诺就已履行。
结果可以伪造吗
无法在不改变结果的情况替换获奖者:姓名或行序的任何改动都会改变所有哈希。找出具有相同 SHA-256 的另一个秘密在计算上是不可能的——这是加密哈希函数的性质,而不是网站的承诺。
唯一需要单独验证的是,哈希确实在 转动 开始前公布过。为此请保存公布链接:频道帖子、截图或存档副本。没有这个证据,方案就只是口头承诺。
为什么参与者的顺序很重要
行号参与公式,因此同一个人在不同位置会得到不同的哈希。验证时必须按相同顺序、相同成员粘贴名单:否则结果自然会不一致——这不是错误,而是另一个题目条件。