LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 行情分析 > 为何不推荐用摄像头生成随机数

为何不推荐用摄像头生成随机数

2020-03-15 Cobo钱包 来源:区块链网络

撰文 |Cobo金库大掌柜

今天,掌柜来好好给各位分析一下“随机数”

首先,掌柜再简要说一下真随机数伪随机数的区别。

真随机数之所以称之为真随机数,在于他的不可预测性。再讲具体一点,就是说,下一个比特的随机数在生成的时候,与前一个比特的随机数是相互独立的,不可预测的。

安全芯片的真随机数用物理震荡环生成,可以保证上一个比特的随机熵值,跟下一个比特的随机熵值没有关联性,从而实现“真随机数”。

伪随机数,我们先来举个例子,看一下 Linux 的伪随机数是如何生成的(从 Linux 的底层代码就能看到这些实现):

第一步:从三个来源采集原始数据:

鼠标和键盘的最近输入

中断请求时序( interrupt request (IRQ) timings)

磁盘读写时序(disk read/write timings)

第二步:三个数据采集完成以后,经过几道算法混淆,生成最后的随机数。

那这里为什么称之为“伪随机数”呢???

因为当三个数据的来源确定了,最后的随机数也就可以确定了。换句话说,最后的随机数的比特和比特之间,不是完全独立的。所以,Linux的随机数不是“不可预测的”。所以我们称之为“伪随机数”。伪随机数只有统计学上的随机性,其随机性没有真随机数高。

关于真随机数和伪随机数的更多分析,可以看这篇文章:硬件钱包的安全芯片有什么作用?(上)

结论再说一遍:安全芯片用物理震荡环生成的真随机数,其随机性优于算法生成的伪随机数。

除了真随机数和伪随机数,行业里也有一种做法是使用手机摄像头的手机传感器来搜集熵值生成随机数。

其实,在学术界,这里是三个概念。

真随机数,True Random Number Generator,简称 TRNG。

伪随机数,Pseudo Random Number Generator。简称 PRNG。

用手机摄像头生成随机数,叫作“传感器随机”,Sensor Random Number?Generator。简称 SensoRNG。

Cobo 金库在研发的早期,掌柜就研究过是否要使用手机摄像头等传感器随机来生成随机数。最终没有采取这种方法,是因为在调研阶段我们找到了这样一篇论文:

https://ieeexplore.ieee.org/document/7477997

论文于 2016 年发表在美国 IEEE,权威性大家就不用质疑了。

论文的五位作者(其中两位是华裔,鼓掌?),在研究了 6.5 个G的各种手机传感器采集的随机数据之后,得到了以下结论:

结论一:麦克风,XYZ 三个方向的加速度计能够提供比较好的随机性。XYZ 方向的陀螺仪,还有 WiFi/Radios 能提供中等的随机性。(具体看下面这张实验数据图)

请特别注意上图右下角的一行小字:地磁计,GPS,手机摄像头的随机性太差,不纳入本表格。这里有一点反直觉,但的确科学实验的结论就是:手机摄像头生成的随机数随机性非常差。

结论二:传感器随机(SensoRNG)提供的随机性,比安卓手机的伪随机数“好一些”(论文的作者没有拿 SensoRNG 的随机性跟真随机数相比较,只是跟安卓手机的伪随机数做了比较)。文章结论处的原文原句是:“compares favorably against the current Android PRNG”。

顺便再提一下的bitaddress(bitaddress是传感器随机数的“鼻祖”,它让用户通过甩鼠标敲键盘获取随机熵值从而得到随机数),这种获取随机熵值的方式远弱于前面论文中提到的获取方法。去 G**gle 上面搜索“bitaddress random”,能够搜索到一堆 Reddit 和 stackexchange 上面,质疑、吐槽和讨论 bitaddress 随机性不足的帖子。

再分享给大家一个行业小知识

大家知道,银行使用的工业级移动加密设备(比如智能 POS 机等),对随机性的要求是最高的。所有的银行加密设备,都有一颗安全芯片,它的随机数都是由安全芯片生成的真随机数。这些随机数不是打开摄像头甩一甩得到的(虽然智能 POS 机也都配备了摄像头)。

Cobo 金库使用的安全芯片目前也被应用到银行业以及航天业的工业级加密设备中。

最后,我们再聊个更有意思的话题:用骰子生成随机数/助记词/私钥

请大家注意,如果你用掷骰子的方式生成随机数,一定要记得使用赌chang级骰子(Casino-Grade Dice)。它长这个样子:

大家日常能接触到的普通骰子,一般来讲,数字1的那一面最重,有最大的概率朝下。这样,数字6就有最大的概率朝上。这样得到的随机数,随机性严重不足。可能还不如伪随机数(视骰子的质量和生产工艺控制而定)。

赌chang级骰子最大的特点是——六个面的重量几乎完全一样。所以六个面朝上的概率是几乎完全一样的。只有这样,你生成的随机数才足够具有随机性,资产才足够安全。

—-

编译者/作者:Cobo钱包

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...