浏览器扑克的 Web Crypto 随机数:它能证明什么,不能证明什么
很多人看到“浏览器里打扑克”,第一反应是:网页里的随机数靠谱吗?简单说,现代浏览器有 Web Crypto API,其中 crypto.getRandomValues() 是专门用于生成密码学强随机值的方法。
但这只解决了一部分问题。安全的扑克洗牌不只是“有随机数”就够了,还需要在开局前有难以预测的输入、清楚的洗牌算法,以及牌局结束后能让玩家复查的证据。
Web Crypto 到底给扑克带来什么
浏览器的 Crypto 接口提供基础密码学能力,其中包括强随机数生成器。MDN 文档说明,crypto.getRandomValues() 可以把密码学意义上的强随机值填入数组:MDN getRandomValues。
对扑克来说,这一点很重要。普通的随机函数可能适合动画、颜色、小游戏效果,但不适合决定牌局公平。洗牌种子必须在牌局开始前很难被其他玩家、服务器或恶意脚本猜到。
这和 扑克洗牌里的密码学熵 是同一件事。熵就是新鲜的不确定性。Web Crypto 是浏览器环境里获得这种不确定性的一种现实方式。
为什么它比普通随机数更适合安全场景
W3C 的 Web Cryptography 规范说明,getRandomValues 用来生成密码学强随机值:W3C Web Cryptography。换成白话,就是它面向安全用途,而不是只让结果“看起来乱”。
扑克即使用娱乐筹码,也属于安全敏感场景。因为如果有人能猜到种子,就可能缩小牌序范围;如果服务器能在看到其他输入后再偷偷选择种子,洗牌就可能被操控;如果玩家无法重放计算过程,平台仍然是在要求玩家相信它。
所以 洗牌到底有多随机 不是单纯数学问题。一副牌的排列数量很大,但公平性还取决于牌序怎么产生、有没有人能影响它。
随机数不能单独证明公平
强随机数不能证明平台一定诚实使用了它。它不能证明牌局开始前牌序已经固定,也不能证明没人看过暗牌,更不能解决合谋、账号被盗或实时辅助这类问题。
NIST 的随机比特生成资料会把熵来源、确定性生成器和测试分开讨论,因为安全随机输出本来就依赖多层机制:NIST 随机比特生成资料。扑克系统还多一层:公开验证。
随机数像原材料,验证记录像收据。玩家需要两者一起看,才能知道牌序不是“看起来随机”,而是按承诺的流程生成。
这就是 一步步验证洗牌 的意义。可验证系统应该留下足够的输入、承诺和最终结果,让玩家或研究者独立重放。
选择浏览器扑克时可以问什么
普通玩家不需要先学会密码学,也能问几个有用问题:
- 是否使用 Web Crypto 或其他密码学随机源,而不是普通随机函数?
- 是否解释随机字节如何变成一副牌的顺序?
- 是否在公开敏感输入前先做承诺?
- 牌局结束后,玩家能不能重放洗牌?
- 平台是否承认洗牌公平和合谋、账号安全是不同问题?
Fair Poker 关注的是可验证的娱乐筹码扑克,所以关键不是说“浏览器天然可信”。更准确的说法是:浏览器可以提供强随机输入,而严谨协议可以把这些输入变成玩家能检查的洗牌结果。
最后一句
Web Crypto 是浏览器扑克随机数的重要基础。它帮助回答“种子能不能被猜到”这个问题。但它不能单独回答所有公平问题。可信的在线扑克,还需要承诺、可重放记录,以及对技术边界的诚实说明。