Skip to content

HPB硬件随机数服务

BlockGeek edited this page Aug 8, 2019 · 1 revision

1.背景

随机数的应用非常广泛,例如生成数据加密密钥,模拟复杂物理过程以及从大数据集中选取样本。随机数已经被广泛应用在游戏和博彩应用中。

随着计算机的出现,程序员们认为有必要在计算机程序中使用随机数。然而,计算机模拟随机事件的发生并没有它想象的那么容易。计算机执行既定的指令,该过程是完全可以被预测的。

计算机生成随机数有两种主要的方法:伪随机数生成方法和真随机数生成方法。

特性 伪随机数生成器 真随机数生成器
效率
确定性 确定 非确定
周期性 周期性 非周期性

由于复杂的物理数据处理过程,真随机数的效率并不高。

真随机数是非确定性的所以在随机数生成之前没有人知道结果是什么,而伪随机数的结果是预先确定的,这是因为伪随机数的种子是由数学公式生成的。

并且,伪随机数生成器的周期性是因为数学公式是规律的,而真随机数的非周期性是由于物理现象是不规律的。

由于伪随机数的确定性,它并不适合数据加密,游戏,博彩等应用。因此在这些场景下真随机数的重要性不言而喻。HPB致力于提供一种真随机数的生成方法,第二章中会详细介绍HPB随机数生成器的功能。

2.HPB硬件随机数服务

HPB硬件随机数服务是基于HPB软硬件架构的真随机数服务。HPB随机数由HPB高性能节点生成并且通过HPB共识算法确认。

HPB随机数服务包括三层,种子层,计算层,和接口层。

  1. 种子层生成硬件随机数种子,由HPB节点中的BOE板卡实现,第三章中会进一步解释相关的原理。
  2. 计算层读取种子层生成的随机数种子并且把它写入区块中。之前生成的区块中的种子也在该层中被收集并最终通过共识算法生成随机数。
  3. 接口层提供了用户使用接口

img

3. HPB随机数生成原理

3.1 随机数种子的生成

HPB采用的BOE硬件加速引擎集成多个FPGA芯片,通过VHDL语言实现具体功能。相比于仅能执行单一功能的芯片,这些功能异构芯片可起到更好的效果。

BOE硬件中的随机数通过FPGA芯片和传感体生成,这些芯片和传感体用以记录电压和温度差异。HPB的芯片能以极高的灵敏度持续对这些差异进行测量。例如,我们的板卡检测到0.00001伏的差异,在此基础上生成一个新的随机数。

种子的生成包含两个步骤

  1. BOE板卡中的数字模拟转换器记录电压的变化值
  2. 上一步中取值的LSB位会被记录并且系统周期性的执行shift操作直到收集到256个比特,一个种子就诞生了。

3.2 种子的提交

HPB高性能节点提交上一步产生的硬件种子到新生成的区块中。种子由全网节点共识后记录在区块链上。

img

3.3 随机数的生成

HPB随机数系统,使用了对随机数种子连续加密的算法。与共识算法一致,每200区块一个周期。

在每个周期的第一个区块,高性能节点从上一个周期的区块中随机选择一个随机数种子,使用私钥进行加密,产生本区块的随机数,并将其写入区块中。

在每个周期的其他区块,高性能节点选择上一个区块中的随机数,使用私钥进行加密,产生本区块的随机数,并将其写入区块中。

4. 应用场景

在线游戏

公平可能是玩家决定是否选择一款游戏最重要的因素。如果采用确定性随机数的话结果是可能被预知的。如果游戏的结果被第三方控制的话,对于玩家来说是不公平的。通过HPB的硬件随机数解决方案,随机数生成是非确定性的并且结果是可以被审计的。

传统方案:

img

HPB方案:

img

车牌摇号

抽签是政府分配公共资源的一种普遍的方式,比如美国绿卡抽签以及北京车牌摇号。摇号最重要的一个要求就是公平。通过HPB的解决方案,分配的过程是透明的并且结果是可审计的,使得公平性得到了保证。

体育竞技

体育比赛的分组很大程度决定了比赛的走向,比如足球世界杯每次小组分组都引人注目。传统的分组抽签方式既不透明也不可审计,所以很难让观众和参赛者信服。如果比赛被利益集团操控,对竞技体育是很大的冲击。HPB硬件随机数针对上述的困难提供了一种很好的解决方案。

5. 如何使用HPB硬件随机数服务

有两种使用HPB硬件随机数的方式

  1. 用户可以调用RPC(远程过程调用)接口来获取HPB区块中的随机数。HPB网络中的每个区块都被分配一个随机数
  2. 智能合约开发者可以增加一行代码“Block.Random”来在合约中使用随机数。

使用细节可以参考接口文档

https://github.com/hpb-project/wiki/wiki/%E8%8E%B7%E5%8F%96HPB%E9%9A%8F%E6%9C%BA%E6%95%B0%E7%9A%84%E6%8E%A5%E5%8F%A3%E6%96%87%E6%A1%A3

Clone this wiki locally