赢了3美元,然后又看了一眼
Mohan Srivastava靠估算黄金为生。他是一名地质统计学家——应用地质统计学标准教科书的合著者——他的工作是从一把岩芯样本中判断整个矿床含有多少金属。2003年,在等文件下载的时候,他刮开了别人开玩笑送给他的一张井字棋刮刮乐彩票,赢了3美元。在去领奖的路上,他开始思考这张彩票是怎么制作出来的。
刮刮乐彩票不可能是真正的抽奖。它的奖项在任何人购买之前就已经印好了,印刷商必须按照固定的中奖结构交付——每包多少张3美元的中奖票,每百万张多少张100美元的中奖票——所以计算机要逐张决定哪些中奖。Srivastava的问题正是地质统计学家对任何抽样过程都会问的问题:如果结果是被设计好的,那么这个设计会不会在表面留下痕迹?
在这张井字棋彩票上,确实留下了痕迹。这款游戏在每张彩票的正面印了八个小井字棋棋盘,72个格子里每个都显示一个1到39之间的数字。玩家刮开乳胶涂层,露出自己的一组数字,如果这些数字能在任意一个棋盘上连成一条线就算赢。表面可见的数字本应只是装饰——随机填充,恰好与隐藏的数字相符。但事实并非如此。
单重数字规则
Srivastava统计了每个可见数字在72个格子中出现的频率。大多数数字会重复出现——同一张彩票上某个数字可能出现三四次。有少数数字恰好只出现一次。他把这些称为“单重数字”,当他刮开彩票进行比对时,发现这些单重数字几乎总是出现在乳胶涂层下的隐藏数字之中。重复出现的数字是填充物,而那些单独出现的数字才是生成器刻意放置的。
- 数一遍所有可见的数字。在八个棋盘中,标出每个在该彩票上只出现一次的数字。
- 寻找连成一条线的三个单重数字。在任意一个棋盘上,若有一行、一列或一条对角线全是单重数字,那就是一条尚未揭晓的中奖线。
- 买下那张彩票。在他的测试中,用这种方法挑选的彩票大约有90%的概率中奖。根本不需要刮开就能知道结果。
他坦率地指出了这个方法的局限性。它只适用于“延展玩法”的彩票,这种彩票在刮开之前表面就会显示一些信息。它无法说明中奖者能拿到多少奖金,而且大多数中奖者赢得的都是小奖。而且必须要拿到实物彩票:买家必须在付款之前看到彩票正面,这在柜台购买时可行,但自动售票机上不可能做到。
这些数字本身毫无意义。但它们是否重复出现,几乎告诉了我所需要知道的一切。Mohan Srivastava,引自《连线》杂志《破解刮刮乐密码》,2011年
他算了一笔账,发现不值得
这个故事不同寻常之处在于他对这个技巧的处理方式,原因在于算术。读一张彩票大约要花他45秒。把中奖率乘以奖金大小,再乘以一个人在工作日里能在商店柜台合理检查的彩票数量,按他的估算,这个方法每天大约能赚600美元。对大多数人来说这是不错的一天收入,但对一名咨询地质统计学家来说却很寒酸,他也直言不讳地说:他算过账,破解这个游戏不值得花他的时间。
于是他打电话给安大略省彩票博彩公司。在与一些不相信刮刮乐彩票能被读出来的官员几番电话周旋之后,他做了一件能终结这种争论的事:他买了20张未刮开的彩票,仅凭票面上的数字将它们分类为预测的中奖票和未中奖票,然后把这一叠彩票连同他的预测结果一起寄给了彩票公司的安全部门。短短几天内,这款游戏就在安大略省的所有零售点下架了。彩票公司将这个问题描述为该款游戏的设计缺陷。
| 项目 | 数值 |
|---|---|
| 每张彩票的棋盘数 | 8个井字棋网格 |
| 可见数字 | 72个,每个都在1到39之间 |
| 破绽 | 同一张彩票上一行里出现三个单次数字 |
| 用这种方法挑选的彩票中奖率 | 约90% |
| 每张彩票花费的时间 | 约45秒 |
| 如果全职干预估的收入 | 每天约600美元 |
| 寄给彩票公司的彩票,已预先分类 | 20 |
| 从举报到该游戏被下架的时间 | 天 |
数据引自《连线》杂志(Jonah Lehrer,2011年)以及NPR对Srivastava的采访(2011年2月)。
他并没有止步于一款游戏。单次数字计数法的一种变体,至少使他在其他几款类似彩票上挑中中奖彩票的几率翻倍,其中包括其他彩票公司寄给他测试的游戏。印刷商对这一风险心知肚明:其中一家最大彩票印刷商的高管曾告诉《连线》杂志,“可破解性”——即彩票在刮开之前是否可被读出——是他们最担心的主要问题之一。
为什么固定的奖项数量会泄露信息
更深层的教训在于随机性究竟存在于何处。一张表面真正随机的彩票本不应显示出任何有用的单次数字。从1到39中独立抽取72个数字,重复是不可避免的:每个数字恰好出现一次的概率约为15.8%,因此一张随机彩票大约会带有11个毫无结构、散乱分布的单次数字,而它们是否与隐藏数字匹配,完全是玩家无法改善的掷硬币概率。但这张井字棋彩票并非如此。它表面上可见的数字,是由放置奖项的同一个程序写入的,而一个必须在这张彩票上放中奖线、却不能在下一张上放的程序,就必须协调表面与乳胶层之间的关系。协调本身就是信息。
本文的计算:在39个数值中独立抽取72次,某个可见数字恰好出现一次的概率为(38÷39)⁷¹≈0.158,因此一张随机彩票平均约有11.4个单次数字。而真实的彩票并非随机抽取——这正是问题的关键所在。
这与Phil Ivey的边缘分类扑克牌,或者能看到底牌的“超级用户”账号,本质上是同一种缺陷:游戏宣称的不确定性来源,实际运行的却是另一套机制,而这个漏洞任何细心观察的人都能看出来。对于印刷彩票而言,这个漏洞是结构性的。运营方同时想要两件事——每百万张彩票中保证固定数量的中奖者,以及看起来随机的彩票外观——而第一个要求会破坏第二个要求,除非表面图案的生成完全独立于奖项的放置。现代彩票正是按这种方式设计的;而那款2003年的游戏完全没有做到这一点。
一张表面空无一物的刮刮乐彩票
Betkyo的omikuji也是一种刮刮卡——九个格子,每个格子里有一个运势符号,三个相同就中奖——所以问它是否有迹可循是合理的问题。答案是没有,原因恰恰与彩票相反:没有预先设定的中奖数量。每张卡都是独立抽取的。等级是在回合创建的那一刻,根据已承诺的服务器种子、玩家客户端种子和nonce,通过一次对固定权重的掷骰决定的,然后才把符号绘制到格子里。这里没有卡包,没有每千张卡的中奖配额,也没有试图让这张卡和下一张卡凑出某种总和的生成器。
引擎已验证OmikujiEngine.kt,等级:大吉 权重1,000(×100),中吉 6,000(×20),小吉 20,000(×8),吉 45,000(×4),半吉 100,000(×2),末吉 137,000(×1.5)——权重以百万分之一为单位,总和为309,000,因此30.9%的卡会中某种运势,而大吉恰好是千分之一,且每张卡都是独立计算。derive():等级掷骰是种子流扫描对照累积权重的第一次抽取;绘制规则随后将中奖符号放入三个均匀选取的格子中,并填充其余格子。浏览器验证器(omikuji/derive.ts)会在回合结束后重新计算相同的流程。
由此可以得出两点。第一,前一张卡不会告诉你下一张卡的任何信息:连续一千张输卡并不意味着大吉“快到了”,因为没有任何倒计数机制。第二,这张卡可以反过来被审计。Srivastava必须购买并刮开彩票才能证明其规律;而在一张可证明公平的卡上,玩家可以在回合结束后根据已揭示的种子重新计算整张卡,确认等级掷骰确实是权重所规定的那一个。验证器逐步检查的内容对每一张原始卡都是相同的。
有必要诚实地说明这种设计没有改变什么。我们的卡有自己的“差一点”结构——46%的输卡会显示两个大吉,这是由九个格子和七种符号的鸽笼原理所决定的——并且有3.45%的house edge,无论怎么读都不会改善。Srivastava的技巧让一张有缺陷的彩票变得可读;而已承诺的种子让一张公平的卡变得不可读。两者都不会让卡支付超过其权重所规定的数额。
遊九个格子,一次掷骰,没有卡包
每张卡都是独立的,每个等级都可以根据已承诺的种子重新计算Omikuji →
常见问题
Mohan Srivastava是谁?
一位常驻多伦多的地质统计学家,一本应用地质统计学标准教材的合著者,他在2003年发现安大略省的井字游戏刮刮票可以在刮开之前就被破解。他的故事由Jonah Lehrer在2011年的《连线》杂志上讲述。
刮刮票的单例法是什么?
在票面印有数字的彩票上,统计每个可见数字出现的次数。恰好出现一次的数字——单例——在那张有缺陷的2003年彩票中,几乎总是乳胶下隐藏的数字。一张卡上一行出现三个单例,大约90%的概率意味着中奖。
他本可以赚多少钱?
据他自己估计,每天约600美元,每张票大约45秒,大多数中奖都是小奖。他认为这低于他的咨询收入,因此选择报告这个漏洞。
安大略彩票公司做了什么?
在他寄出20张未刮开、按预测中奖与未中奖分类的彩票后,安大略彩票及博彩公司在几天内将井字游戏从零售商处下架,并将问题描述为该游戏的设计缺陷。
单例技巧能用在可证明公平的刮刮卡上吗?
不能。omikuji卡的等级是根据已承诺的种子对和nonce进行的一次抽取,没有固定的中奖配额,也没有协调前后卡之间关系的生成器,因此卡上没有任何东西可以预测结果。相反,这张卡可以在回合结束后重新计算以确认抽取结果。
来源与参考资料
- 《连线》杂志——Jonah Lehrer,《破解刮刮乐彩票密码》(2011年1月31日):2003年的发现、八张卡和72个数字、单例规则、约90%的命中率、每天600美元的估计、20张分类彩票以及该游戏被下架的事件
- NPR——《彩票密码破解者分享刮刮乐秘密》,Mohan Srivastava访谈(2011年2月19日)
- Betkyo引擎来源:OmikujiEngine.kt(TIERS权重、derive()等级掷骰和绘制规则)以及omikuji/derive.ts(浏览器验证器)
- 本文计算说明:从39个数值中进行72次独立抽取的单例期望值,(38 ÷ 39)⁷¹ ≈ 0.158
本文涉及的游戏