APP下载

基于区块链的外包服务公平支付方案①

2020-04-24陈嘉良林鸿瑞黄钿捷

计算机系统应用 2020年4期
关键词:哈希报酬合约

陈嘉良,林鸿瑞,黄钿捷

(福州大学 数学与计算机科学学院,福州 350108)

1 引言

由于灵活性和高可用性等好处,云计算可以提供包括存储和计算在内的服务.因此,许多个人和企业将他们的数据外包到云平台上以节省成本.但是与云的通信通常非常耗时,而作为云计算的扩展,雾计算使计算任务能够在网络边缘实现并提供低延迟的服务.在雾计算中,资源受限的用户(由O 表示的外包用户)可以将计算任务外包给雾计算节点来完成(由W 表示的工作节点)并支付报酬给他们.

本文考虑能将计算任务分配给雾节点运行的场景,每个雾计算节点完成相应的任务后将结果返回给用户.在指定时间内完成任务后,雾计算节点将从用户处获得报酬.然而,由于用户和雾计算节点之间的不信任,公平支付的问题应该被考虑.一方面,雾计算节点可能没有完成计算任务,也就是说,雾计算节点可能会发送一些错误的结果给用户.另一方面,雾计算节点诚实地完成了任务,但恶意用户却并不支付报酬.

目前已有一些解决问题的方案,一方面,用户在支付服务费用时需要验证计算结果.文献[1]提出了一种基于抽样的方案.文献[2]提出了一种审计机制,通过使用计算证明来检测计算节点的恶意行为.文献[3]提出了一种基于重复计算和ringer 的方案,以验证计算结果的正确性.文献[4-6]提出了概率验证方法检测作弊者.文献[7]提出了一种基于抽样的解决方案,该解决方案使用Merkle 树来防止计算节点作弊.另一方面,应考虑支付报酬的问题.文献 [8,9]基于分割选择方案和秘密共享方案来防止恶意计算节点并考虑支付了问题.

在上述方案中,要么不考虑支付的问题,要么采用传统的支付框架,例如银行.然而,传统的支付解决方案存在一些缺点,银行可能是支付系统的瓶颈.不同于传统的支付方式,区块链是一种分布式的系统,不受任何一方控制,可以直接转移报酬.而区块链技术已经被用在了很多外包服务中[10-12],文献[1]提出了一种基于抽样并结合比特币的方案.

为了解决公平支付的问题,本文提出了一个用于外包计算的基于以太坊区块链的公平支付方案.在我们提出的方案中,外包用户和工作节点可以互不信任.基于以太坊的智能合约,本文可以实现诚实的工作节点将会获得报酬,同时如果工作节点未完成计算任务,外包用户可以获得赔偿.本文引入可信第三方T 来解决外包用户和雾计算节点的冲突.

2 系统模型

系统模型如图1 所示,包含外包者O,工作节点W,第三方T 和一个区块链.

图1 系统模型

(1)外包用户O:作为外包计算的请求者,O 将一笔报酬存入智能合约中,并向工作节点W 请求外包计算服务.如果W 提供的结果正确,则将支付报酬给W.否则,O 可以从W 处获得赔偿.

(2)工作节点W:作为外包计算服务的提供者,W 收到计算服务请求后将一笔押金存入智能合约中.在完成计算任务后,W 将结果记录到区块链智能合约中,并将结果发送给O.在指定时间t 之前若O 未对结果提出异议则从区块链获得报酬.

(3)第三方T:作为第三方,T 接收来自O 的请求.一旦O 发现W 的计算结果错误,O 发送一个请求给T.T 验证该请求,若验证W 的计算结果错误,则执行智能合约惩罚W.

(4)区块链:我们使用一个已被广泛使用并支持智能合约的区块链,如以太坊区块链.智能合约是在区块链上自我执行的程序.

在我们的系统中,外包用户和工作节点可以互不信任,同时它们中的任一个都可能是恶意用户.具体来说,恶意外包用户的目的是在不支付报酬的情况下获得外包服务,而恶意工作节点则希望在不提供有效结果的情况下获得报酬.我们的设计目标主要包括正确性和公平性.

(1)正确性:如果外包用户O 和工作节点W 都是诚实的,那么外包用户O 可以获得所需的计算结果,而工作节点W 将获得报酬.

(2)公平性:对外包用户O 的公平性意味着恶意工作节点W 若未能提供正确的结果,则无法获得报酬.对工作节点W 的公平性意味着恶意外包用户O 在不支付服务费的情况下无法获得正确的结果.如果恶意工作节点W 未能提供正确的结果,则外包用户O 能够从工作节点处获得相应的赔偿.

3 系统设计

本文设计的方案包含4 个阶段:初始化阶段,计算阶段,支付阶段和索赔阶段.同时引入第三方来解决外包用户O 和工作节点W 间的冲突.区块链智能合约确保外包用户O 要么获得正确的结果,要么获得赔偿.此外,诚实的工作节点W 可以获得相应的报酬.

3.1 初始化阶段

选择一个哈希函数H 如SHA-256,并且每个参与者生成自己的ECDSA 公钥/密钥对,表示为( pk,sk),并公布自己的公钥pk 作为账户地址.外包用户O 的公私钥对表示为 ( pkO,skO),工作节点W 的公私钥对表示为(pkW,skW),第三方T 的公私钥对表示为( pkT,skT).假设所有参与者都安全地维护每个已发布的公钥,而密钥sk 安全的存储在本地,用于生成签名.

外包用户与工作节点先对计算任务F 达成协议,并在区块链上建立智能合约.其中计算任务表示为F=〈f,D,M〉,计算函数f 在数据D 上所有满足f(x)∈M的x,工作节点完成相应的计算任务后将包含所有满足要求的x 结果集S 返回给外包用户.智能合约记录外包用户和工作节点还有第三方的账户地址,并确定计算任务需要完成的时间和任务报酬.外包用户将任务报酬存入智能合约中,同时工作节点也将自己的押金存入智能合约.

3.2 计算阶段

在确认了外包用户将报酬存入智能合约后,工作节点执行计算任务F 后获得一个结果集S ={x1,···,xn},其包含了所有满足 f(x)∈M的x.工作节点将每个结果xi的哈希存在智能合约中,并根据结果集S 创建一棵Merkle 树 MTl,保存Merkle 树的根节点Iroot在智能合约中.其中l 表示Merkle 树的树高,而叶子节点的树高为0.在Merkle 树中,对于高度为i 的第j 个节点的值有Ii,j=H(Ii-1,j||Ii-1,j+2i-1),Ii-1,j和Ii-1,j+2i-1表示 Ii,j的两个孩子节点.当i =l 时,Il,j表示根节点.当i =0 时,I0,j表示叶子节点,即第j 个结果 xj.当结果集的Merkle 树根被保存在区块链后,工作节点之后将无法对结果集进行更改,外包用户可以确保工作节点发送给他的结果集出现错误后无法进行否认.如图2 是一棵高度为3 的Merkle 树.当结果存入区块链后,工作节点将结果集S 发送给外包用户,并执行一个具有t 时间锁的支付智能合约,即在t 时间后报酬将支付给工作节点.

图2 高度为3 的结果Merkle 树

3.3 支付阶段

外包用户将计算结果集S 的每个元素 xi的哈希与存在区块链上的哈希对比是否一致,若一致则验证结果是否满足外包任务的要求.当结果集S 正确,则工作节点将在时间t 后从合约中获得报酬.当结果集S 较大时,可以使用如下的抽样方案,并验证抽样的结果S',使用文献[7]中的方法进行生成m 个抽样:

其中,Iroot表示结果集Merkle 树的根节点,并且:

外包用户验证抽样的m 个结果,文献[7]中证明了只要m 足够,则能确保整个结果的正确性.在外包用户验证了结果正确后,工作节点将在时间t 后获得报酬.然而,如果外包用户发现存在不正确的结果,则外包用户将发送一个裁决请求给第三方.

3.4 索赔阶段

当第三方T 从外包用户处收到裁决请求时,则进入索赔阶段.第三方T 裁决这个请求的正确性,如果接受这个裁决请求,则第三方T 执行智能合约中止支付报酬.考虑以下两种情况.

(1)若工作节点发送给外包用户的结果集计算的Merkle 树根与存在区块链上的 Iroot不一致,则表明工作节点发送的结果不正确.外包用户发送一个裁决请求给第三方包含结果集与区块链上的 Iroot,第三方验证后要求工作节点返回正确的结果集S,并验证该结果集的Merkle 树根是否与 Iroot一致.若一致,则发送该结果集给外包用户O.若不一致,则调用合约judge 函数中止支付报酬.

(2)若结果集S 的元素 xi验 证结果为 f(xi)∉M,即结果集S 存在不正确的结果,表明工作节点W 并未完成计算任务.当外包用户O 发现工作节点返回的结果中存在错误结果 xi,则外包用户将外包任务F =〈f,D,M〉,错误的结果 xi与该元素哈希存在区块链上的位置包含在请求中发送给第三方T.第三方T 先将元素 xi与该元素在区块链上的哈希进行验证,若不相同,则拒绝该请求.当确定该元素为工作节点的计算结果后,第三方T 验证元素 xi在 外包任务F =〈f,D,M〉中结果是否正确,即将结果 xi代 入外包任务中计算验证 f(xi)是否满足M.若该结果不满足外包任务要求,则第三方T 调用合约中的judge 函数修改变量payService 为false 使得callback 函数中报酬支付中止.使用的部分伪代码如图3.

图3 智能合约部分伪代码

4 系统分析

4.1 安全分析

根据本系统的安全目标,给出了本文的安全分析.

(1)正确性:如果使用的哈希函数H 是抗碰撞的并且ECDSA 签名是不可伪造的,则我们的协议满足正确性.假设外包用户和工作节点都是诚实的,并且遵循方案的步骤.在计算阶段,工作节点将每个结果的哈希和结果集构成的Merkle 树根节点存在区块链上.在支付阶段,外包用户将验证结果集元素的哈希是否与区块链保存的一致,保证结果集S 是工作节点保存在区块链上的结果,之后验证所有或是抽样的结果是否满足外包计算任务的要求.只有在满足了结果是符合外包任务要求后,工作节点才能在时间t 后收到报酬.换句话说,如果使用的哈希函数H 是抗碰撞的并且ECDSA签名是不可伪造的,由于区块链的不可篡改,则外包用户收到的结果集S 一定是未被篡改的,且工作节点只有在提供的结果集S 满足外包任务的要求后才能获得相应的报酬.

(2)公平性:我们首先证明对诚实工作节点的公平性,然后证明在恶意工作节点下考虑对外包用户的公平性.

情况1:假设工作节点是诚实的,而外包用户是恶意的,即恶意的外包用户想要获得一个有效的结果而不支付报酬.这种情况下,在计算阶段,工作节点只有在确认了外包用户将报酬存入智能合约中才会执行计算任务.当完成计算任务后,只有在工作节点的结果出现问题时支付才会被第三方T 通过合约中止.由于智能合约的强制执行特性,所以只要工作节点提供的结果是符合外包计算任务要求的,则工作节点一定能够在时间t 后获得报酬.

情况2:假设外包用户是诚实的,而工作节点是恶意的,即恶意的工作节点想要在不提供正确结果的情况下获得报酬.首先,若工作节点未将结果的哈希或结果集的Merkle 树根保存在区块链上,则外包用户发送一个裁决请求给第三方,第三方要求工作节点将结果集哈希保存于区块链中.若工作节点未能将结果集哈希保存在区块链上,表示工作节点未完成外包计算任务.第三方T 调用如图3 的合约judge 中止报酬的支付,则外包用户可以获得赔偿并取回报酬.其次,若工作节点提供的结果不符合外包计算任务的要求,外包用户将错误的结果包含到裁决请求中发送给第三方.当第三方T 验证了该错误结果后,将中止报酬的支付,则外包用户可以获得赔偿并将报酬取回.

通过以上的分析,如果使用的哈希函数H 是抗碰撞的并且ECDSA 签名是不可伪造的,则本系统满足正确性和公平性.

4.2 消耗分析

本系统在以太坊官方测试网络上实现了一个智能合约来分析性能.本文使用的哈希函数是SHA-256.当我们进行实验时,gas 价格设置为2 Gwei,其中1 Gwei =109wei = 10-9ether,目前1 ether=168 USD.我们将它部署在以太坊官方测试网络Ropsten 上,使用的伪代码表示的算法如图3.表1 是智能合约消耗的实验结果,合同创建操作仅执行一次以完成初始化其消耗267 202 gas=0.0898 USD.外包用户的报酬存入和工作节点的押金存入分别消耗21 485 gas=0.0072 USD 和21 397 gas=0.0072 USD,而支付操作消耗41 533 gas=0.0140 USD.当出现恶意工作节点时,进入索赔阶段,第三方T 裁决操作judge 消耗22 086 gas=0.0074 USD.同时索赔操作消耗29 383 gas=0.0099 USD.而本实验当未出现错误结果智能合约共需消耗351 617 gas,约为0.1182 USD.当出现错误结果时,需执行裁决操作与索赔操作,智能合约共需消耗403 086 gas,约为0.1355 USD.第三方T 在智能合约上的消耗只有执行裁决操作judge的消耗,而对与链下的验证操作需根据具体的外包任务来确定.

表1 智能合约的消耗

5 结语

随着外包服务的快速发展,为了解决外包计算的支付问题,本文提出了基于区块链的外包服务公平支付方案.通过使用区块链将外包任务的结果进行保存,使其不能篡改.只有在结果正确时,外包用户才支付服务报酬给工作节点,若结果不正确,外包用户将可以获得赔偿.本协议的安全分析和消耗分析表明本协议是正确的且公平的,同时本协议的消耗是可接受的.

猜你喜欢

哈希报酬合约
哈希值处理 功能全面更易用
Windows哈希值处理不犯难
职场不公平,所有人都变懒
文件哈希值处理一条龙
医生的最佳报酬
巧用哈希数值传递文件
《使用文字作品支付报酬办法》发布
新闻浮世绘