ГСЧ 随机实验室

抽奖

公平的奖品抽奖

抽奖前公布秘密和公开哈希——结果无法被悄悄重抽。

即时 本地计算 commit-reveal 最多 20 位获奖者
第 1 步 · 公布哈希 秘密未创建

网站生成 16 字节(32 个 hex 字符)的随机秘密,并展示其 SHA-256。哈希是一个承诺:秘密已无法被悄悄替换。请在开始接受报名前公布哈希——在频道、聊天或帖子中。

commit
秘密的 SHA-256——开始前公布 —
哈希尚未创建:请点击“创建秘密并公布哈希”。
秘密仅保存在您的浏览器(localStorage)中。可以关闭页面稍后回来:哈希和秘密仍会保留。
第 2 步 · 抽奖与 reveal 熵源——
填写参与者名单并点击“举办抽奖”
如何验证 commit → 名单 → reveal
  1. 1
    Commit——开始前的哈希

    主办方公布秘密的 SHA-256。在秘密隐藏期间,无法按所需哈希反推出它:SHA-256 不可逆。

  2. 2
    参与者名单

    名单以公开方式固定,每行一个名字。行号参与公式,因此验证时的顺序必须相同。

  3. 3
    Reveal——之后的秘密

    报名结束后秘密公开。任何参与者都能在“抽奖验证”页面核验其哈希并重新计算获奖者。

公式 h = SHA-256(secret + ":" + (index + 1) + ":" + name)
不会向服务器发送任何内容:秘密、名单和哈希都在浏览器中通过 WebCrypto 本地计算。 生成器如何工作.

为什么抽奖是公平的

普通随机数生成器缺少最重要的东西——证明。结果只有在按下按钮后才可见,没人能确认它没有被重算。commit-reveal 方案通过两次公布解决这个问题:抽奖前公布哈希,之后公布秘密。

只要哈希已公布而秘密仍隐藏,主办方就受承诺约束:无法找出具有相同 SHA-256 的另一个秘密。秘密公开后,任何参与者都能按公开公式重新计算获奖者,并确认结果一致。

什么是 commit-reveal

Commit ——承诺。随机秘密被转换为 SHA-256 哈希,并在开始前公布。 Reveal ——公开:抽奖后秘密向所有人展示,可用普通的 SHA-256 计算器验证哈希。

哈希是数据的“指纹”:同一字符串总是得到相同结果,而任何改动,哪怕一个字符,都会完全改变它。因此替换秘密立刻可见:新秘密的 SHA-256 不再与公布的哈希一致。

如何在一分钟内验证结果

  1. 从抽奖记录中复制秘密。
  2. 打开 抽奖验证页面.
  3. 按记录中的相同顺序粘贴秘密和参与者名单。
  4. 指定获奖人数并点击“验证”。
  5. 将获奖者和秘密哈希与公布的进行比对。

该方案不保证什么

  • 它不能防止参与者名单被替换:名单必须在秘密公开之前公布。
  • 它不固定哈希的公布时间——为此需要独立痕迹:频道帖子、截图、存档副本。
  • 它不会让抽奖变成彩票:不售票,奖池也不是由会费形成。
常见问题
结果可以伪造吗?
如果哈希在抽奖前已公布,则不能。要“重抽”结果需要另一个秘密,而它的 SHA-256 不会与公布的哈希一致。按已知哈希反推秘密在计算上是不可能的。
为什么要公布哈希而不是秘密?
哈希是不泄露内容的承诺。如果提前公布秘密,就可以先算出获奖者再调整参与者名单。哈希排除了这种可能。
支持多少位参与者?
名单最多 2000 行,一次抽奖最多 20 位获奖者。每行一位参与者;空行会被忽略。
如果参与者少于奖品会怎样?
获奖人数会自动限制为参与者人数,多余的奖品名称将不被使用。
可以稍后再抽奖吗?
可以。秘密和哈希保存在浏览器的 localStorage 中。如果回到页面,哈希保持不变——可以在另一天抽奖,而不违反承诺。
需要注册吗?数据会发送到服务器吗?
不需要。一切都在本地计算:秘密由浏览器的 CSPRNG 生成,SHA-256 由 WebCrypto 计算。名单和秘密都不会发往服务器。
这是彩票吗?
不是。这是一个随机选出获奖者的工具。主办方自行负责遵守第 138-ФЗ 号《彩票法》和第 38-ФЗ 号《广告法》;网站不举办彩票、不接受投注、不派发奖品。
哈希只有在抽奖前被看到时才有效。请保存公布链接:没有它就无法验证承诺的时间。
↑↓ 导航 Enter 打开 Esc 关闭