严肃的安全:你不能在二十一点打败房子——或者你可以吗?

Cryptoguru Bruce Schneier(其中 加密 手段 加密技术,而不是其他东西!)刚刚在他的博客上发表了一篇有趣的笔记,题为 关于自动洗牌机的随机性.

如果你曾经去过赌场,至少在内华达州的一个赌场,你就会知道二十一点赌桌不会与业内知名的客户冒险 卡柜台.

该术语用于指那些已经训练他们的记忆力到可以密切跟踪手牌到目前为止所打出的牌的玩家,这使他们在预测是站立还是击球时具有理论上的优势进展。

即使他们所做的只是跟踪庄家牌盒中剩余的 10 张牌(十张、Jack、Queen 和 King)与非 10 张的比率,算牌员也可以获得优势。

例如,如果庄家拿着一张 A,但已用完高于平均水平的 10 点牌,则庄家获得二十一点的机会低于平均水平(两张牌为 21 点,即Ace 和 10-JQK 之一)并立即获胜,并且在达到 17 及以上的停止点之前破产的机会高于平均水平。

如果您可以实时平衡头脑中的概率,那么您可能能够相应地修改您的赌注并从长远来看领先。

实际上不要尝试这个,至少在内华达州:赌场可能很快就会抓住你,因为如果你不计算牌,你的游戏模式将与最明智的获胜选择明显不同。 你可能不会出庭,但几乎可以肯定你会被护送离开场地,并且永远不会再让你回来。

平衡赔率

为了减少算牌人(至少还没有被抓到的人)所享有的概率的平衡,赌场通常:

  • 从装有六包(一副)52 张牌的牌盒中发牌。 这意味着与使用单包相比,每手发牌对剩余纸牌分布的影响较小。
  • 在每手牌前洗牌整个 312 张牌(六包)。 为了节省时间并消除庄家的怀疑,一台伪随机机电机器在所有玩家面前将牌洗牌。

这立即提出了 Schneier 提出的问题:当纸牌从机器中出现时,它们的洗牌程度如何?

值得注意的是,对于以可预测的顺序到达的六张新牌(例如,A 到红桃 K、A 到梅花 K、K 到方块 A、K 到黑桃 A),在机器完成了它的工作?

你能比机会所暗示的更好地“猜测”出下一张牌吗?

全电子随机发生器的复杂性主要受其使用的 CPU 速度的限制,通常以每秒数亿或数十亿次算术运算来衡量。

但是机电洗牌机实际上必须在现实生活中移动纸牌。

在机制的速度开始损坏卡片之前,它执行包拆分、卡片交换和交错操作的速度显然是有限的,这意味着随机性的程度是有限的(或者,更准确地说, 伪随机性) 机器可以在玩下一手之前介绍。

洗牌时间太短,如果从一开始就存在已知的牌分配偏差,赌场实际上可能会让算牌员的事情变得更容易。

洗牌时间过长,玩的太慢,玩家会感到无聊而走神,这是赌场极力避免的事情。

Schneier 的博客文章链接到 令人着迷的作品 由 BBC 撰写,描述了斯坦福大学的一位名叫 Persi Diaconis 的数学家/魔术师如何与 Jason Fulman 和 Susan Holmes 在本世纪初对这个问题进行正式调查,在一篇题为简单的论文中: 赌场货架洗牌机分析.

复杂程度

显然,有一些洗牌技术根本不会混淆牌,比如简单地 切割 将包装分成两部分并将底部移动到顶部。

其他技术导致(或感觉好像它们应该导致)更好的混合,例如 浅滩洗牌,您将牌大致分成两半,每只手各拿一个,然后将两半“翻转”在一起,以伪随机方式将它们交错,交替从一侧拿几张牌,然后从另一侧拿几张牌.

这个想法是,如果你对包进行多次随机洗牌,每次在每个重复之前划分包时,你都会执行一个伪随机序列切割,并与涉及 N-from-the- 的伪随机交错操作的伪随机变量序列混合在一起从左到右的过程。

然而,有趣的是,当涉及到熟练的人类洗牌器时,这些不可预测性的假设都不是安全的。

灵巧的魔术师和狡猾的经销商(戴科尼斯本人是前者,但不是后者)可以执行所谓的 法鲁洗牌完美的洗牌,他们每次翻包时都会做以下两件事:

  • 将卡片精确地一分为二, 因此每手正好有 26 张牌。
  • 完美交错, 每次交替地从每手牌中倒出一张牌。

Diaconis 本人可以进行完美的洗牌(包括用一只手握住两半包的罕见技能!),据 BBC 报道:

[他] 喜欢通过拿一副新纸牌并在一侧用厚黑色记号笔写下 RANDOM 一词来展示完美的洗牌。 当他在纸牌上耍花招时,字母混在一起了,时不时地以幽灵般的形式出现,就像旧电视机上调整不完美的图像一样。 然后,在他进行第八次也是最后一次洗牌后,这个词在牌组的一侧重新出现。 这些牌完全按照原来的顺序排列,从黑桃 A 到红心 A。

两种完美

事实上,有两种完美的洗牌,取决于你在将牌分成两堆 26 张牌后从哪一手牌开始洗牌。

如果您向下翻转的第一张牌来自您持有的手牌,您可以将牌交错,使它们以 1-27-2-28-3-29-...-25-51-26-52 的顺序结束他是背包的下半部分。

但是,如果您翻转的第一张牌是之前上半部分的底牌,那么您最终会得到 27-1-28-2-29-3-...-51-25-52-26,所以刚过一半的卡片会在上面结束。

前一种类型称为 洗牌,并且每重复 52 次就对包重新排序,正如您在此处看到的那样(图像有 XNUMX 行像素,每行对应于一张卡片的边缘,上面用记号笔写着 RANDOM 字样):

严格的安全性:您无法在 Blackjack 中击败庄家 – 或者可以吗? Plato区块链数据智能。 垂直搜索。 人工智能。
每 8 次洗牌,图像中线条的原始顺序就会重复。

后一种类型是 随机播放, 令人惊讶的是,它在重复之前需要 52 次重新洗牌,尽管您可以在这里清楚地看到包从未真正显示出任何真正的随机性,甚至在中途通过了完美的反转:

严格的安全性:您无法在 Blackjack 中击败庄家 – 或者可以吗? Plato区块链数据智能。 垂直搜索。 人工智能。
随机播放每 52 次以一种迷人的方式重复。

数学家怎么说的?

所以,回到 2013 年,当 Diaconis el al. 应制造商的邀请研究了货架洗牌机,他们发现了什么?

正如论文所解释的那样,货架洗牌器是一种机电式尝试,旨在设计一种自动化的、随机的“多切多槽洗牌”,理想情况下,纸牌只需处理一次,以缩短洗牌时间。

洗牌器中的牌被快速伪随机地“分发”到设备内部的 N 个金属架之一(名称由此而来),并且每次将牌添加到架子上时,它要么滑入底部,或放在先前卡片的顶部。 (我们假设尝试将卡片插入已经在堆叠中的两张随机卡片之间会更慢并且容易损坏卡片。)

在所有卡片都被分配到一个架子上之后,每个架子上大约有 1/N 的卡片,这些卡片以伪随机顺序重新组合成一叠。

直观地说,考虑到所涉及的伪随机性,您会期望额外的重新洗牌会在一定程度上改善整体随机性……

......但在这种情况下,机器有 10 个架子,研究人员被特别要求, “机器的一次通过就足以产生足够的随机性吗?”

据推测,该公司希望避免让机器运行多个循环以保持玩家的快乐和游戏流畅,而设计该设备的工程师在他们自己的测试中没有发现任何明显可解释的统计异常。

但该公司希望确保它 没有通过自己的测试只是因为测试适合机器,这会给他们一种虚假的安全感。

最终,研究人员发现,不仅随机性相当差,而且他们能够准确量化随机性有多差,从而设计出令人信服地揭示缺乏随机性的替代测试。

特别是,他们表明,该设备仅通过一次就在洗牌输出中留下了足够多的短牌序列,以至于当一包 9 张洗牌后发牌时,他们可以可靠地预测平均有 10 到 52 张牌。

正如研究人员所写:

[U]sing 我们的理论,我们能够证明一个知识渊博的玩家可以在一次运行 9 张牌的牌组中正确猜出大约 52 张半的牌。 对于一副洗好的牌组,最佳策略大约是正确的 4 张半牌。 这个数据确实说服了公司。 该理论还提出了一种有用的补救措施。

[...]

公司总裁回应说:“我们对你的结论不满意,但我们相信他们,这就是我们聘请你的原因。” 我们提出了一个简单的替代方案:使用机器两次。 这会产生相当于 200 架机器的洗牌。 我们的数学分析和进一步的测试(未在此报告)表明这是足够随机的。

怎么办呢?

这个故事包含了几个“可教的时刻”,无论你是程序员或产品经理,还是专门与随机性搏斗的程序员或产品经理,还是参与网络安全保障的 SecOps/DevOps/IT/网络安全专业人士,你都应该向他们学习。一般的:

  • 通过自己的测试是不够的。 不通过自己的测试肯定很糟糕,但很容易得到你期望你的算法、产品或服务通过的测试,特别是如果你的更正或“错误修复”是通过它们是否让你通过测试来衡量的。 有时,您需要来自客观、独立来源的第二意见。 这种独立的概述可能来自加利福尼亚的一支精明的数学统计学家团队,就像这里一样; 来自外部的渗透测试人员“红队”; 或来自 MDR(管理检测和响应)团队,他们会亲自观察您的网络安全情况。
  • 听坏消息很重要。 本案洗牌机公司的总裁回答完美,他承认自己对结果不满意,但他付出的代价是为了揭露真相,而不是简单地听听他的希望。
  • 特别是密码学,以及一般的网络安全,都很难。 寻求帮助不是承认失败,而是承认成功需要什么。
  • 随机性太重要了,不能留给机会。 测量无序并不容易(阅读论文 了解原因),但可以而且应该这样做。

缺乏时间或专业知识来处理网络安全威胁响应? 担心网络安全最终会分散您对所有其他需要做的事情的注意力?

进一步了解 Sophos 托管检测和响应:
24/7 威胁追踪、检测和响应  ▶


时间戳记:

更多来自 裸体安全