首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果你掌握了这个,屠龙刀唾手可得-随机数原理解析

小白和小黑喜欢玩游戏,小黑通宵达旦打了很多次BOSS,结果爆了一堆垃圾装备。小白睡了一大觉,上线游戏第一次摸BOSS,铛铛铛,爆了一把屠龙刀。

小黑能咋办?只能骂小白狗屎运爆发。这里的屠龙刀爆率就是个随机数,而控制这个爆率的正是这个游戏的爆率设计机制,或者说随机数发生器。

随机数在游戏中的应用非常广泛,怪物的爆率、宝箱抽奖、武器伤害增幅和暴击...,太多了,那么到底随机数有多随机?

我们前面发过文章《

微信红包与随机数

》,大家可以翻阅一下,对随机数发展的历史做了一个了解,今天我们来聊聊随机数的原理。

真随机数和伪随机数

根据密码学原理,随机数的随机性检验可以分为三个标准:

统计学伪随机性。统计学伪随机性指的是在给定的随机比特流样本中,1的数量大致等于0的数量,同理,“10”“01”“00”“11”四者数量大致相等。类似的标准被称为统计学随机性。满足这类要求的数字在人类“一眼看上去”是随机的。

密码学安全伪随机性。其定义为,给定随机样本的一部分和随机算法,不能有效的演算出随机样本的剩余部分。

真随机性。其定义为随机样本不可重现。实际上只要给定边界条件,真随机数并不存在,可是如果产生一个真随机数样本的边界条件十分复杂且难以捕捉(比如计算机当地的本底辐射波动值),可以认为用这个方法演算出来了真随机数。

相应的,随机数也分为三类:

伪随机数:满足第一个条件的随机数。

密码学安全的伪随机数:同时满足前两个条件的随机数。可以通过密码学安全伪随机数生成器计算得出。

真随机数:同时满足三个条件的随机数。

产生随机数有多种不同的方法。这些方法被称为随机数发生器。

随机数最重要的特性是:它所产生的后面的那个数与前面的那个数毫无关系

伪随机数原理

伪随机数通常由可确定的函数(常用线性同余),通过一个种子(常用时钟)产生的。那么问题来了,如果知道了种子,或者已经产生的随机数,都可能获得接下来随机数序列的信息(可预测性)。

线性同余的弱点是具有周期性(算法循环长度),比如第一次产生了数据100,第二次产生210,那么多少个循环以后,会产生100,210这样的序列...,大部分的算法循环长度是2^32,而只要掌握了周期数据,就能预测出未来会产生什么样的随机数。

因而,这类伪随机数只能用在对安全性要求不高的场合。比如前文提到的游戏中怪物爆率等随机数,都是由计算机产生的伪随机数,在游戏策划中如果随机数被运用得当,也将极大提高了游戏的趣味性和玩家参与度。

但是在安全级别的随机数中,伪随机数就面临的极大的风险,比如使用随机数生成密钥对,如果采用伪随机数,就很有可能被破解。

真随机数产生的原理

真正的随机数是使用物理现象产生的:比如掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等等。这样的随机数发生器叫做物理性随机数发生器,它们的缺点是技术要求比较高。

上图是一个被广泛采用的硬件真随机数发生器工作原理,它是一个基于直接放大器结构的随机数发生器,通过收集外部噪音,再经过数字化处理得到随机数。相比通过数学模型生成随机数来说,随机数质量更为可靠。

姑且,我们认为通过物理现象产生的随机数是真随机,但在输出过程中,会否受到人为的控制?你们一定说我,这么抠有意思么?但对于安全级别很高或者牵涉到生命、财富等的场景,随机数真伪至关重要。

举个例子,某彩票开奖随机数,采用物理现象产生的真随机数来抽奖,相比那些由电脑程序开奖的游戏,已经非常非常公平了吧。但是,随机数的输出是由中心化服务器最后完成运算输出,谁能保证没有人为篡改的因素呢?

区块链的发展为真随机数的产生提供了想象空间,我们想一下,既然区块链去中心化去信任不可篡改,那么能否由区块链产生真随机数?也许,“自从有了XXX,地球上有了真正的随机数。”

本文普及了随机数的原理,对随机数的真伪做了分类,至于随机数的应用场景,则需要产品策划根据应用特征进行规划设计,不管真伪随机数,各有各的应用场景,这里不多描述。区块链真随机数,以后我们再继续探讨。

欢迎关注“Touchain”太初区块链,一起探讨。

随机数专题讨论链接:

《微信红包与随机数》

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180609G0PJA900?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券