ГСЧ 随机实验室

技术

生成器,
经得起展示

大多数网站写 Math.random() 然后称之为随机。我们通过 SHA-256 混合三个独立的熵源,并展示如何验证。

SHA-256 混合器 3 个来源 实时测试
浏览器的 CSPRNG crypto.getRandomValues
您的动作 坐标、时序、点击
公共信标 LavaRand
SHA-256 混合器 seed = H(CSRNG ∥ 熵池 ∥ 信标)
数字流 CSPRNG ⊕ SHA-256 keystream
全部工具 数字、硬币、骰子、选择

如果外部信标不可用,网站不会崩溃:仍有两个独立来源——加密级生成器和您操作产生的熵。

三层

为什么这比单一来源更好

每一层都弥补另一层的弱点。它们合在一起提供了任何单一生成器都无法提供的东西:不可预测性、物理属性和可验证性。

01

加密级 CSPRNG

crypto.getRandomValues() ——与保护 TLS 连接和密钥生成相同的来源。它保证不可预测性:即使知道其他所有层,结果仍然无法计算。

不可预测性
02

您操作产生的熵

每一次鼠标移动、点击和按键,都是微米级精度的坐标和纳秒级波动的时序。我们把它们哈希进一个 256 比特的池中,每个事件都会更新。数据不会离开浏览器。

物理属性
03

公共随机信标

drand 是一个由独立组织(Cloudflare、EPFL、Protocol Labs 等)组成的分布式网络,每隔几秒发布一个签名的随机数据块。任何人都能验证签名,确认数值没有被替换。

可验证性
信标状态 LavaRand
当前轮次的随机性 8cf8de2e637e10fc85dcc6aa3fa1bdc18c15d861a2377789822f059aee69686f
— drand 轮次
10:55:02 发布时间
32 字节熵

可以在信标服务器上验证: https://csprng.xyz/。BLS 签名由分布式委员会签发——无法单独伪造。

实时熵采集 30 %

正在请求公共随机信标……

CSPRNG 您的动作 信标

检验

亲自验证:基于 65 536 个数字的检验

我们用工具实际使用的同一生成器生成一个大样本,并用统计准则检验:字节均匀性(卡方)、比特平衡、序列相关性。

验证结果 尚未运行检验
— 个值
— 卡方(255 自由度)
— p-value
— 比特平衡
— 序列相关性

卡方检验生成数字的字节分布是否均匀。对于 255 自由度,正常值约为 255;p 值大于 0.05 表示统计上未发现偏离随机性的迹象。

与“普通”生成器的对比

如果不局限于 Math.random(),究竟会有什么变化。

特性Math.random()我们的生成器
来源伪随机,仅初始化一次CSPRNG + 物理熵 + 公共信标
可预测性根据若干值即可还原无法还原
可验证性否drand 签名轮次
离线时的来源有保留 CSPRNG + 动作
质量控制否公开的统计检验
需要了解的重点
鼠标移动在本地处理:浏览器中只保留熵池的哈希。坐标和历史都不会发往服务器。
混合方式使得即使完全掌握公共信标也无法预测结果:它还会与 CSPRNG 的秘密混合。
生成器是用于公平选择和娱乐的工具。这不是赌博,也不是彩票:不接受投注,不派发奖金。
法律信息
↑↓ 导航 Enter 打开 Esc 关闭