REM:对区块链的节约型挖掘

更新时间:2017-10-17 09:40:11点击次数:266次

摘要:本文介绍了一种新型的基于可信任硬件的区块链挖掘框架:节约型挖掘(REM)。以下是译文。

论文原文:REM:对区块链的节约型挖掘,作者:Zhang等人,发布于USENIX Security 2017

大多数区块链中所使用的工作量证明(proof-of-work, PoW)很容易就会被认为是能源浪费证明。除了选择链中的下一个区块之外,所有的散列并没有任何用处。综合的能源浪费实际上相当惊人:

大家一致认为,PoW毫无用处,只会产生巨大的金钱和环境成本。今天,比特币网络使用的电力比核反应堆生产的还要多,预计到2020年,它的电力消耗将赶上整个丹麦所消耗的。

因此,专家们研究了其他的共识方案,包括基于BFT的权益证明( Proof of Stake),但这些“要么限制了共识分享,要么有明显的安全限制”。在这篇文章中,作者提供了另外一种方法。我们将不再使用“工作量证明”,而使用“有用工作量证明”(PoUW)。

在PoUW系统中,CPU在承担原来的工作之外,还可以同时承担区块链的工作。

在PoUW方案下工作的CPU开销是原来运行开销的5-15%左右。

REM(Resource-Efficient Mining,节约型挖掘)的核心依赖于英特尔的SGX(Software Guard Extensions,软件防护扩展指令)技术,但正如我们将看到的,需要多个组件协作工作才能使整体方案发挥作用。下面我们先看一下基本的执行模型,然后深入了解安全模型。

有用工作量证明(PoUW)

这里有一张大图:

1.jpeg

图中有区块链代理(Agent)、REM*矿工(Miner),以及一个或多个有用的工作客户端(Useful Work client)*。代理用于收集事务并生成区块模板,该模板是在缺少PoUW的情况下的候选区块。矿工以PoUW任务的形式获取区块模板,并从一个有用的工作客户端中获取有用的工作负载。

PoUW任务基于PoUW SGX enclave(译者注:Intel利用SGX技术在处理器中搭建了一个安全的围圈以保护重要数据,该围圈中间的区域就是SGX enclave,即内存中受保护的执行区域)及其输入。对于任何一个兼容SGX的程序来说(类似于SCONE这样的可以在SGX中运行容器的程序),通过运行REM工具链可以很容易地将其变成PoUW保护区域中的程序。该程序为单线程运行(安全需要),并添加了一些代码来检测是否产生了有效的区块。为了实现这一点,工具链还会对程序进行设置,以便能够准确地跟踪已执行指令的数量。

2.jpeg

当PoUW任务完成的时候,SGX保护区域必须判断该任务是否产生了有效的区块。

PoUW保护区域会把每一条指令看成是伯努利试验来随机检测作业是否产生了一个区块。因此,采矿次数的分布与PoW大致相同。例如,对于比特币来说,需要度量已执行的散列,而对于REM来说,则是已执行的有用工作指令的数量。

要确定指令是否为“赢家”,PoUW保护区域使用SGX随机数生成器(SRNG)生成一个随机数,并寻找一个小于当前难度等级约定的值。在每个指令之后执行这一过程所付出的代价会比较大,因此,所有的指令会被分成多个批次,形成一些子任务,然后运行一次随机数生成器,寻找小于按照计数指令数加权的目标批次。使用指令计数,是因为它们在保护区域之外不容易受控制。

指令计数的安全性依赖于一个假设,即一旦被检测到,代码就不能改变它的行为。为了在SGX实现这一假设,需要两个“不变”。首先,代码页必须是不可写的;第二,有用的工作程序必须是单线程的。

REM检查保护区域代码(usefulwork.so)中的代码页是否有W\oplus X权限 - 这可以直接在ELF程序的头部进行验证。确保单线程访问是为了防止多个线程通过共享状态保存区域(SSA)篡改指令计数寄存器的值。为了实现这一目的,在保护区域的接入点上使用了一个只允许第一个线程通过的自旋锁。 REM还需要软件故障隔离(SFI)的一个子集:间接控制传输对齐。这可以防止跳转到指令中间来伪造指令计数。

我们的实现不包括SFI,因为诸如Google的Native Client之类的现成的解决方案可以与PoUW工具链和运行时进行集成。

如果保护区域确定了区块已被成功开采,那么它会根据SGX生成的证明产生一个PoUW:一个用于确认保护区域符合REM,另一个则用于确认被开采的区块的难度参数

区块链代理将PoUW与区块模板关联起来,并将其发布到网络上。下一节将描述其他代理验证区块的过程。

安全模式

认证模型已被集成在英特尔认证服务(IAS)中:签名密钥只能分配给有效的CPU,而有效节点在查询IAS时不应将其认证视为无效。

REM使用认证作为新区块的证明,所以矿工需要访问IAS来认证区块。IAS目前的工作方式使得矿工在每次验证时都要访问IAS,这样,在区块验证时间中增加了与英特尔服务器之间的往返时间。这种开销并不是固有的,只是由英特尔的特定设计所决定的。

有一个简单的修改方法,将正在验证的请求作为在响应中生成报告的一部分纳入到IAS请求中(目前不存在)。这样,每个新的区块只需访问IAS一次即可,并且其他验证器可以很容易地检查生成的签名报告。

对于验证器来说,如何知道在保护区域中运行的程序是否被正确检测仍然是一个问题。将程序放在区块中会导致高昂的开销。而如果让某个权威机构来验证程序的合法性,则由于权力过于集中也是不可接受的。

为了解决这个难题,我们使用了所谓的双层认证机制。我们将单个程序的指纹硬编码到区块链中,这是一个称为合法检查器的静态分析工具。合法检查器在受信任的环境中运行,并将用户提供的程序作为输入…… 它计算程序的指纹并输出包括该指纹的认证信息。

PoUW包括两个部分:挖掘成功时候的有用工作程序认证,以及合法检查员的认证。

3.jpeg

这两者都必须由同一个CPU进行签名,否则攻击者可能会为无效的任务创建虚假的认证。

受损的SGX节点

…… 即使我们认为SGX芯片是以安全的方式制造出来的,但个别实例还是有可能会被敌手所破坏。单个受损节点可能对基于SGX的加密数字货币来说是灾难性的,这使得敌手可以随意创建区块并对区块链进行攻击。

嗯,我们不希望发生这样的事情!

为了防止芯片受损,REM中包含了区块接纳策略p-stat.png,它是针对指令计数增加的额外测试。p-stat.png是基于统计测试。根据对最快诚实矿工的速度估计,可以找出有效的PoUW,p-stat.png对区块进行统计上的测试,以确定矿工是否采得太快并可能受到了损害。当然,对于知道p-stat.png的敌手来说,他们可以以最快的速度发布区块,并使之被接受。

4.jpeg

\alpha= 0.4时,浪费级别则为0.6%,敌手优势的上限为100.6%。

将REM集成到比特币共识层中

有一点很重要,REM是一个共识框架,是生成区块的一种方法。 REM可以集成到一种加密数字货币中去,例如集成到比特币共识层中。

REM使用四种样本有用的工作负载进行评估:蛋白质折叠、SVM分类器、zlib压缩(迭代)和SHA3-256散列(迭代)。运行次数的比较如下所示(分别是本地代码执行、基于SGX的执行、基于SGX在PoUW enclave中的执行):

5.jpeg

结果显示,将有用的工作转换为REM PoUW enclave的开销约为5-15%。

  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息