计算机系统应用  2020, Vol. 29 Issue (4): 97-101   PDF    
基于区块链的外包服务公平支付方案
陈嘉良, 林鸿瑞, 黄钿捷     
福州大学 数学与计算机科学学院, 福州 350108
摘要:随着外包计算服务的快速发展, 云计算吸引了越来越多的个人和企业使用外包服务提供商的服务. 而雾计算进一步将云计算扩展到网络边缘, 在雾计算中, 用户由于受计算资源的约束, 所以将计算任务外包给雾节点. 然而, 用户和雾计算节点之间的相互不信任, 将会导致公平支付的问题. 现有的大多数解决方案采用的是传统的支付机制, 需要依赖银行来实现支付. 为了实现外包服务的公平支付问题, 本文提出了基于区块链的外包服务公平支付方案, 通过区块链智能合约支付报酬. 同时本文提出的方案可以确保如果雾计算节点完成了计算任务, 则用户必须支付报酬给雾计算节点. 而如果雾计算节点没有完成计算任务, 则用户可以获得赔偿. 系统分析表明本方案实现了外包服务的正确性和公平性, 并且其消耗在可接受范围内.
关键词: 外包计算    雾计算    区块链    公平支付    以太坊    
Outsourcing Services Fair Payment Scheme Based on Blockchain
CHEN Jia-Liang, LIN Hong-Rui, HUANG Dian-Jie     
College of Mathematics and Computer Science, Fuzhou University, Fuzhou 350108, China
Abstract: With the rapid development of outsourcing services, cloud computing has attracted an increasing number of individuals and enterprises to enjoy the services from outsourcing service providers. Moreover, fog computing further extends cloud computing to the edge of the network. In fog computing, because the end user is usually resource-constrained, the outsourcing computation tasks can be outsourced to the fog nodes. However, the mutual distrust between users and fog nodes may impede the fair payment of outsourcing services. Nevertheless, most existing solutions adopt the traditional payment mechanism, which needs a trusted authority such as a bank. In this study, in order to realize fair payment of outsourcing services, we introduce a new fair payment framework based on Blockchain in fog computing to directly transfer rewards by smart contract. Meanwhile, we present a construction to guarantee that if there is a malicious user, the honest one can get compensation. Finally, our security analysis indicates that the proposed protocol achieves correctness and fairness, and performance analysis shows that the experimental consumption is acceptable.
Key words: outsourcing computing     fog computing     Blockchain     fair payment     Ethereum    

1 引言

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

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

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

在上述方案中, 要么不考虑支付的问题, 要么采用传统的支付框架, 例如银行. 然而, 传统的支付解决方案存在一些缺点, 银行可能是支付系统的瓶颈. 不同于传统的支付方式, 区块链是一种分布式的系统, 不受任何一方控制, 可以直接转移报酬. 而区块链技术已经被用在了很多外包服务中[1012], 文献[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的公私钥对表示为 $({{p}}{{{k}}_O},{{s}}{{{k}}_O})$ , 工作节点W的公私钥对表示为 $({{p}}{{{k}}_W},{{s}}{{{k}}_W})$ , 第三方T的公私钥对表示为 $({{p}}{{{k}}_T},{{s}}{{{k}}_T})$ . 假设所有参与者都安全地维护每个已发布的公钥, 而密钥sk安全的存储在本地, 用于生成签名.

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

3.2 计算阶段

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

图 2 高度为3的结果Merkle树

3.3 支付阶段

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

${i_k} = ({H^k}({I_{\rm root}}) \;\; \mod \; n) + 1,\;{\rm {for}}\; k = 1, \cdots ,m$ (1)

其中, ${I_{\rm root}}$ 表示结果集Merkle树的根节点, 并且:

${H^k}({I_{\rm root}}) = \left\{ {\begin{array}{*{20}{l}} {H({I_{\rm root}}),\;\;\;\;{\rm {for}} \;\; k = 1} \\ {H({H^{k - 1}}({I_{\rm root}})),\;\;\;\;{\rm {for}} \;\; k = 2, \cdots ,m} \end{array}} \right.$ (2)

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

3.4 索赔阶段

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

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

(2) 若结果集S的元素 ${x_i}$ 验证结果为 $f({{{x}}_i}) \notin {{M}}$ , 即结果集S存在不正确的结果, 表明工作节点W并未完成计算任务. 当外包用户O发现工作节点返回的结果中存在错误结果 ${x_i}$ , 则外包用户将外包任务 $F = \left\langle {f,D,M} \right\rangle $ , 错误的结果 ${x_i}$ 与该元素哈希存在区块链上的位置包含在请求中发送给第三方T. 第三方T先将元素 ${x_i}$ 与该元素在区块链上的哈希进行验证, 若不相同, 则拒绝该请求. 当确定该元素为工作节点的计算结果后, 第三方T验证元素 ${x_i}$ 在外包任务 $F = \left\langle {f,D,M} \right\rangle $ 中结果是否正确, 即将结果 ${x_i}$ 代入外包任务中计算验证 $f({{{x}}_i})$ 是否满足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 = 109 wei = 10–9 ether, 目前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 结语

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

参考文献
[1]
Huang H, Chen XF, Wu QH, et al. Bitcoin-based fair payments for outsourcing computations of fog devices. Future Generation Computer Systems, 2018, 78: 850-858. DOI:10.1016/j.future.2016.12.016
[2]
Wei LF, Zhu HJ, Cao ZF, et al. Security and privacy for storage and computation in cloud computing. Information Sciences, 2014, 258: 371-386. DOI:10.1016/j.ins.2013.04.028
[3]
Golle P, Mironov I. Uncheatable distributed computations. Proceedings of the Cryptographers’ Track at the RSA Conference. San Francisco, CA, USA. 2001. 425–440.
[4]
Chen XF, Li J, Susilo W. Efficient fair conditional payments for outsourcing computations. IEEE Transactions on Information Forensics and Security, 2012, 7(6): 1687-1694. DOI:10.1109/TIFS.2012.2210880
[5]
Küpçü A. Incentivized outsourced computation resistant to malicious contractors. IEEE Transactions on Dependable and Secure Computing, 2017, 14(6): 633-649. DOI:10.1109/TDSC.2015.2499738
[6]
Ulusoy H, Kantarcioglu M, Pattuk E. TrustMR: Computation integrity assurance system for MapReduce. Proceedings of 2015 IEEE International Conference on Big Data. Santa Clara, CA, USA. 2015. 441–450.
[7]
Du W, Jia J, Mangal M, et al. Uncheatable grid computing. Proceedings of the 24th International Conference on Distributed Computing Systems. Tokyo, Japan. 2004. 4–11.
[8]
Carbunar B, Tripunitara M. Fair payments for outsourced computations. Proceedings of 2010 7th Annual IEEE Communications Society Conference on Sensor, Mesh and Ad Hoc Communications and Networks. Boston, MA, USA. 2010. 1–9.
[9]
Carbunar B, Tripunitara MV. Payments for outsourced computations. IEEE Transactions on Parallel and Distributed Systems, 2012, 23(2): 313-320. DOI:10.1109/TPDS.2011.163
[10]
Zhang YH, Deng RH, Shu JG, et al. TKSE: Trustworthy keyword search over encrypted data with two-side verifiability via blockchain. IEEE Access, 2018, 6: 31077-31087. DOI:10.1109/ACCESS.2018.2844400
[11]
Do HG, Ng WK. Blockchain-based system for secure data storage with private keyword search. Proceedings of 2017 IEEE World Congress on Services. Honolulu, HI, USA. 2017. 90–93.
[12]
Zhang YH, Deng R, Liu XM, et al. Outsourcing service fair payment based on blockchain and its applications in cloud computing. IEEE Transactions on Services Computing, 2018, 1. DOI:10.1109/TSC.2018.2864191