抽奖平台说自己随机,我们凭什么相信?

你可能参加过很多线上抽奖。转发一条动态,评论区抽三个人送礼物;平台开一个预约活动,随机发放限量资格;游戏里掉落一个稀有道具,页面告诉你:“恭喜,你被随机选中了。”
这类事情看起来很轻松,但只要奖品稍微贵一点,或者名额稍微稀缺一点,问题马上就来了:平台说自己是随机抽的,我们凭什么相信?
如果抽奖过程完全由平台在后台完成,用户看到的往往只有一个结果。平台当然可以说:“我们用了随机数。”可这句话本身并不能排除暗箱操作。后台是不是反复抽了很多次,直到抽出一个“合适”的人?是不是先看了候选名单,再挑了一个对自己有利的随机种子?是不是结果不好看,就悄悄重来了一遍?
很多系统并不是真的缺少随机数,而是缺少“可验证的随机”。
这件事在区块链、线上抽签、游戏掉落、限量资格分配里尤其明显。系统既需要随机性,因为不能让参与者提前知道结果;又需要可验证性,因为事后不能只靠组织者一句“我很公平”。随机数如果只藏在后台,就像一场只有主持人看得见摇号机的摇号。观众听到了中奖号码,却不知道号码是怎么来的。

图1 随机结果最大的麻烦
最朴素的解决办法,是把随机种子公开。比如平台提前公布一个种子,大家都用同一套算法算出结果。这样看起来透明了,但又有新问题:如果种子提前公开,参与者可能提前算出结果,进而调整自己的行为;如果种子由平台自己选择,平台仍然可能试很多个种子,挑一个最满意的;如果候选名单在种子之后还能变化,平台还可以通过增删名单来影响结果。
承诺方案能往前推进一步。平台可以先把随机种子封起来,只公布它的哈希承诺。等报名截止后,再打开种子,让大家检查它确实是之前承诺过的那个值。这样至少能防止平台在报名结束后临时改种子。
但承诺方案解决的是“你有没有事后换牌”,不一定解决“这张牌是不是按规则抽出来的”。如果平台在承诺之前已经试了很多种子,最后只承诺那个对自己有利的种子,外界仍然很难知道。承诺像是给信封盖了时间戳,证明信封后来没换;但信封里最开始装的,是不是一张被精挑细选过的牌,仍然要看整个流程设计。
可验证随机函数(Verifiable Random Function,简称VRF)想解决的就是这个更细的问题:随机结果要看起来不可预测,生成之后又要能被别人验证它确实是按规则来的[1][2]。
可以先把VRF想成一枚“会吐随机数的签名章”。
普通数字签名是在说:这句话确实是我签的。VRF更进一步:对于某个公开输入,我用自己的私钥生成一个随机样子的输出,同时生成一份证明。别人拿着我的公钥、这个输入、这个输出和这份证明,就能检查:这个结果确实是我用对应私钥对这个输入算出来的[2]。
这里有几个关键角色。
生成者手里有一把私钥。它可以是抽奖平台、区块链节点、随机数服务,或者任何被要求公开证明自己按规则生成随机结果的一方。
验证者看到的是公钥、输入、随机输出和证明。验证者不需要知道私钥,也不需要相信生成者的口头解释,只要运行验证算法,就能判断这份随机结果是否合法。
输入则是这次随机事件的上下文。比如“某活动第20240604期抽奖”“某一轮区块链委员会选择”“某个游戏道具掉落请求”。同一把私钥面对同一个输入,只会对应一个合法输出。生成者不能对同一个输入随手换出另一个结果;如果换了,证明就过不了。

图2 VRF的基本流程
这就是VRF和普通随机数最不一样的地方。普通随机数通常只有结果,外界很难知道它是不是被挑过。VRF的结果旁边多了一张验票凭证。它不只是说“这是一个随机数”,而是在说:“这个随机数是某个已知公钥背后的私钥,针对这个公开输入,唯一能生成并通过验证的结果。”
这里的“唯一”很重要。
如果一个平台对同一场抽奖可以不断生成不同随机数,它就有机会挑结果。VRF把结果和输入、私钥绑定起来。输入一旦确定,私钥一旦确定,输出也就被固定了。平台不能先算出十个结果,再挑一个最顺眼的公布,因为其他结果没有办法都对应同一个输入并通过同一把公钥的验证。
同时,VRF输出在被公布前又应该难以预测。外界只知道公钥和输入,通常算不出真正输出。只有私钥持有者能算出来。等生成者把输出和证明公布出来,大家再一起验证。这就形成了一种很有用的节奏:结果出来之前,不容易提前猜;结果出来之后,不能只靠嘴说。
放到抽奖里,可以这样设计。平台先固定公钥和抽奖规则。报名截止后,把活动编号、候选名单摘要、开奖期次等信息组合成公开输入。平台用私钥对这个输入运行VRF,得到随机输出和证明。之后,任何人都可以用平台早已公布的公钥验证这份证明,再按公开规则把随机输出映射到中奖名单。
这样的流程并不要求用户信任平台“人品很好”。用户要信任的是更具体的东西:公钥是不是提前固定的,输入是不是按规则构造的,候选名单是不是没有被偷偷改动,VRF证明是不是验证通过。信任被拆成了一块一块可以检查的东西。

图3 用VRF做抽签
当然,VRF不是公平的万能封条。
第一,输入必须公平。如果平台可以操纵输入,比如偷偷修改候选名单、改变活动编号、选择有利的区块高度,那么VRF再正确,也只是把一个被操纵的输入变成了一个可验证输出。算法能证明“从这个输入到这个输出没作弊”,却不能自动证明“这个输入本身没作弊”。
第二,公钥必须提前固定。如果生成者可以临时换公钥,或者在活动开始前批量生成许多密钥,挑一把能导向有利结果的密钥,那么问题又会回来。VRF绑定的是“这把私钥和这个输入”,所以系统必须规定:谁有资格生成,公钥什么时候登记,能不能更换,换了以后如何审计。
第三,生成者可能拒绝公布。如果某次VRF输出对自己不利,它不一定能伪造另一个结果,但可能干脆不发。现实系统通常需要超时、惩罚、备用随机源、多人共同生成等规则配合。否则,“不能改结果”可能退化成“结果不好就沉默”。
第四,VRF证明的是随机生成过程,不证明整个业务流程公平。抽奖页面有没有把所有人都纳入候选?中奖后有没有人工审核把某些人剔除?游戏掉落概率是不是事前公开?这些问题在VRF之外。密码学能把一段流程变得可验证,但不能替产品和制度承担所有诚实义务。
所以,VRF真正有价值的地方,不是让随机数显得更玄,而是把“我随机抽的”这句话变成一件可检查的事。
普通后台随机像是主持人把手伸进箱子里,摸出一个号码,然后让大家相信他没有换。承诺方案像是主持人先把箱子封好,等到开奖时再打开。VRF则更像每次抽出来的号码都带着一枚公开可验的印记:它确实来自这次规则、这把钥匙、这个输入,而不是事后挑出来的另一个版本。
这和前面讲过的很多密码学工具是一脉相承的。盲签名是在说:我可以授权,但不必看见内容。OPRF是在说:我可以帮你打标,但不必看见输入。匿名凭证是在说:我可以证明资格,但不必交出完整身份。VRF则是在说:我可以给出随机结果,但不能只让你相信我心里有数,你应该能自己验证。
很多数字系统的问题,不是完全没有规则,而是规则藏在后台。用户只能看到结果,却看不到结果是怎么来的。VRF把一部分后台过程搬到了可验证的前台:随机性仍然存在,但它不再只是平台的一句声明。
真正可信的随机,不该只是“我说这是随机的”。它应该经得起旁观者检查:输入是什么,规则是什么,公钥是什么,证明能不能通过。随机数也需要一种体面。它可以不可预测,但不应该不可追问。
参考文献
[1] Micali S, Rabin M, Vadhan S. Verifiable Random Functions[C]//40th Annual Symposium on Foundations of Computer Science. IEEE, 1999: 120-130.
[2] Goldberg S, Reyzin L, Papadopoulos D, et al. Verifiable Random Functions (VRFs): RFC 9381[S/OL]. IETF, 2023. https://www.rfc-editor.org/rfc/rfc9381.html.
//关于我们//
杭州量安科技有限公司是由浙江大学和之江实验室联合孵化,核心创始团队汇聚中国工程院院士、国家特聘专家、国家重点研发计划首席科学家等多位顶尖人才。公司专注于人工智能赋能量子安全的研发,聚焦抗量子密码、高性能国密改造及智能安全三大核心领域,为电力、能源、政务、金融、军工、医疗等关键行业,提供新一代密码及安全产品与服务。公司发展势头强劲,已完成 B 轮融资,2024年入选杭州市准独角兽企业,2025年跻身浙江省未来独角兽企业 TOP 100,2026年入选中国未来独角兽企业。技术研发成果显著,牵头主持国家重点研发计划1项,获批浙江省领军型创新创业团队,深度参与国家重点研发计划、国家自然科学基金重点项目、浙江省尖兵领雁研发攻关计划等项目6项;核心知识产权成果丰硕,授权发明专利17项,受理发明专利42项,登记软件著作权40项;资质认证完备,获批国家高新技术企业、浙江省企业研究院、浙江省专精特新中小企业、浙江省科技型中小企业,担任华东江苏大数据交易中心理事长单位。公司产品竞争力突出,斩获多项重要荣誉:2025 年日内瓦国际发明展金奖、2025 中国科技产业化促进会科技创新一等奖、2022 年首届全球数字贸易博览会先锋奖年度最高奖、第三届中国数字经济科技大会年度最具竞争力产品创新奖及数据安全金盾奖等。相关产品已通过国家密码管理局商用密码产品认证、工信部信通院专业评测,具备成熟的市场化应用基础。
