衡星辰,董 灿,林克全,肖禹亭
(1.中国南方电网有限责任公司,广州 510000; 2.云南电网有限责任公司,昆明 650000;3.广州供电局有限公司,广州 510000; 4.中国科学院信息工程研究所 信息安全国家重点实验室,北京 100093)
电力市场化改革现已成为我国电力行业发展的主要趋势。虽然目前我国已成功实现了“政企分开、厂网分开、主辅分开”,在发电侧构建了竞争态势,但对于售电侧的市场还未完全开放。因此,需要进一步深入对售电侧进行市场化改革。《关于进一步深化电力体制改革的若干意见》[1]中提到:“未来参与电力市场交易的发电企业上网电价由用户或售电主体与发电企业通过协商、市场竞价等方式自主确定”,然而在现有由电力交易中心集中管理电力交易的模式下,很难实现真正自由开放的电力市场交易。此外,随着电力交易市场开放程度的深入,将吸纳更多交易主体的加入,交易量会随之不断增长,交易类型也将不断丰富,这对现有交易系统的稳定性提出了更为严峻的挑战。
区块链[2]作为一种新型的分布式数据处理技术,现已被广泛应用于金融、医疗等领域,并在能源交易领域展现出巨大的应用潜力[3]。当前,已经有多个点对点(Peer-to-Peer,P2P)能源交易项目进入试点应用阶段,例如LO3 Energy公司在纽约布鲁克林建立的基于区块链技术的微电网试点项目和Ledger Assets公司Power Ledger项目构建的太阳能发电余电上网交易系统等。这些项目的成功说明基于区块链实现分布式电力交易具有较强的可行性。但是传统的区块链交易仅兼容P2P直接电力交易,无法支持复杂的电力交易形式(如竞价交易等),而基于智能合约虽然可以实现复杂的电力市场交易,但由于可能存在未知的漏洞或攻击,因此无法保证电力交易的安全性。
针对上述问题,本文结合区块链、有序聚合签名和保序加密技术,提出一种分布式电力竞价交易算法,用以嵌入主流的区块链系统中,实现可支持多种交易方式的电力交易系统。
区块链技术起源于比特币[4],可以在分布式场景中为彼此互不信任的参与实体之间建立信任,具有去中心化、公开透明、可追溯和不可伪造等特性。区块链系统由分布式节点共同维护,并通过这些节点根据共识算法[5]控制区块链的写入进程。
数字签名[6-7]是一种常用的密码原语,主要涉及签名者和验证者2个实体:签名者首先生成公私钥对,然后调用签名算法对消息生成签名,并将公钥、消息及签名发送给验证者;验证者则调用验签算法对签名进行验证。安全的数字签名算法可以保证签名消息的完整性,实现对签名者的身份认证并防止交易中抵赖的发生。区块链交易即基于数字签名实现的安全的货币交易。图1展示了A到B和B到C两笔区块链交易的过程(第i-1笔和第i笔交易)。
图1 基于数字签名的区块链交易过程
Fig.1 Blockchain transaction process based on digital signature
如图1所示,交易通过哈希值链接形成交易链。当前交易的发起者利用自己的私钥对前一笔交易的哈希值、交易接收者的公钥和交易金额生成签名,其中前一笔交易的交易接收者应为当前发起者。交易接收者及验证者只需利用前一笔交易中规定的交易接收者的公钥对该签名进行验证即可,如果验证通过且两笔交易的交易金额满足限制条件,则说明新交易有效。根据数字签名的不可伪造性,只有拥有相应私钥的实体才能生成合法的签名,由此可以确保该笔交易的真实性。因为所有的交易都被记录在区块链中,所以交易接收者及验证者均可以通过哈希值追溯到与当前交易相关的所有历史交易,进而结合合理的校验机制确保交易的合法性,避免伪造假币及双重支付等恶意行为的发生。
聚合签名[8]是一种特殊的数字签名,不同的签名者对不同消息生成的签名可以被聚合成一个整体签名,而验证者只需对聚合后的签名进行验证即可,如果验证通过,则可以确定该聚合签名是由这些签名者合法生成的。相较于传统的数字签名,聚合签名具有更少的通信开销且验证更为高效。有序聚合签名[9]是一类特殊的聚合签名,其不仅可以验证签名是由某些签名者合法生成的,而且还可以验证消息的签名顺序。
有序聚合签名是由不同的签名者依照顺序对不同的消息生成的,验证者只需对最后生成的聚合签名进行验证即可。有序聚合签名主要包含以下算法:
1)系统建立算法Setup(λ)。当输入一个安全参数λ时,此算法将输出一个公共参数串PP。
2)密钥生成算法KeyGen(PP)。当输入一个公共参数串PP时,此算法将输出一对公私钥(PK,SK)。
保序加密[10]是一种特殊的加密技术,指密文保留了明文原有的顺序,基于该技术可以实现在密文空间上高效地进行顺序查询操作。具有对称形式的保序加密主要包含以下3个算法:
1)密钥生成算法Gen(λ)。当输入一个安全参数λ时,此算法将输出一个私钥K。
2)加密算法Enc(K,M)。当输入私钥K及明文M时,此算法将输出一个密文C。
3)解密算法Dec(K,C)。当输入私钥K及一个密文C时,此算法将输出一个明文M。
在当前的电力市场中,电力用户可直接与发电企业交易,其形式主要包括双边交易、集中撮合式交易、集中竞价交易[11]。双边交易指电力用户与发电企业可直接沟通并确定交易意向,或公布本体交易意愿并从中选择确定交易对象,并由电力调度中心进行安全校核,只有满足电网安全约束条件的交易才可成功达成;集中撮合式交易指多个电力用户与发电企业各自申报购、售电意愿,由交易中心根据各方申报意愿,综合考虑各种因素并按一定机制匹配交易;集中竞价交易指在各方填报意愿之后采用统一边际出清电价机制[12]达成交易。在集中撮合式交易及竞价交易形式中,交易中心扮演了不容忽视的角色。然而,基于交易中心的集中式电力交易不仅效率低下,而且还无法满足用户公平、自由的电力交易需求,不利于真正实现电力交易的市场化。
区块链技术具有可剔除交易中心、实现分布式电力交易的优势。但当前的区块链交易形式仅适用于电力用户与发电企业之间通过协商定价进行P2P直接交易[12-14],无法实现复杂的市场竞价交易模式,而已有的可实现复杂电力市场交易的方案[15-17]大多都是基于智能合约的。虽然智能合约具有去中心化、可编程、不可篡改等诸多优势,但是当前智能合约技术自身的发展并不成熟,存在许多潜在的安全威胁[18-19]。因此,基于智能合约实现的电力市场交易,其安全性是无法保证的。本文基于区块链、有序聚合签名及保序加密技术,提出一个安全且高效的电力竞价交易算法,以支持更为复杂的电力交易方式。
电力竞价交易系统模型如图2所示。系统运行于由3个或3个以上的节点服务器搭建的区块链网络之上,这些节点服务器需要对所有的电力交易进行验证及记录。参与电力交易的角色包括发电企业及用电客户,其中发电企业为用户提供电力。
图2 电力竞价交易系统模型
因为电力具有难以存储的特性,所以本文主要考虑预售交易,即用电客户或发电企业事先发布用电需求信息或生产计划,然后由其他实体进行响应。这样的一次交易达成之后,实际上是对未来某段时间内的电力明确发电权及用电权的归属。采用与图1相同的方式可实现发电权或用电权的多次转让。
发电企业及用电客户均通过与区块链网络的交互发起一笔交易或者对一笔交易进行响应,由此建立交易双方的联系。
本文实现电力竞价交易的核心思想为:由交易发起者首先给出出价信息(如用电需求及期望价格等)并附上聚合签名,交易接收者如果接受出价,则可以通过在该聚合签名基础上生成新聚合签名的方式使交易达成。基于最终的聚合签名,可以对交易过程(顺序)和内容进行验证,从而保证任何敌手(甚至是交易参与方)均不能伪造合法的交易记录。针对同一个出价信息,系统内可能存在多个实体进行响应,系统应按价高/低者优先(甚至更为复杂)的规则进行记录。考虑到价格是竞价交易中的敏感元素,所以应对节点服务器保密。为了保护数据隐私并保证节点服务器仍然可以对价格进行比较,采取对价格进行保序加密的方式。本文方案依赖的底层密码算法包括保序加密算法(Gen,Enc,Dec)、有序聚合签名算法(Setup,KeyGen,AggSig,AggVrfy)及哈希算法(其作用是将任意长度的消息映射到签名算法的消息空间内)。为便于描述,定义如表1所示的算法参数。
表1 算法参数定义
2.2.1 系统建立
系统建立阶段包括以下步骤:
1)搭建运行环境。完成区块链参数设置,选取至少3个节点服务器,并在节点服务器之间运行区块链协议。
2)生成公共参数串。调用SAS.Setup(λ)算法生成公共参数串PP。
3)实体准入。对于任意希望加入系统的交易实体,首先调用SAS.KeyGen(PP)算法生成的签名公钥PK和私钥SK,然后向系统提供身份信息(例如标识企业的工商和营业账号、税号和对公银行账号等信息,或标识个人的身份证号、电话等信息)及签名公钥PK,在相关部门审核(可离线)通过后,为其颁发准入凭证。
2.2.2 交易建立
为实现发电企业与用电客户之间的电力竞价交易,首先介绍以下4个算法:
算法1出价交易生成算法
输入((PKI,SKI),MI,tI)
输出(tid,K,CI,σI)
1)生成新的唯一的交易标识符tid;
2)调用OPE.Gen(λ)生成新的私钥K;
3)调用OPE.Enc(K,tI)生成密文CI;
4)计算hI=Hash(tid||MI||CI||PKI);
5)调用SAS.AggSig(-,-,-,h,SKI,PP)算法生成签名σI。
算法2应价交易生成算法
输入(tid,PKI,(PKR,SKR),CI,MI,σI,K,MR,tR)
输出(CR,σR)
1)调用OPE.Enc(K,tR)算法生成密文CR;
2)计算hI=Hash(tid||MI||CI||PKI);
3)计算hR=Hash(hI||MR||CR);
4)调用SAS.AggSig(hI,σI,PKI,hI||hR,SKR,PP)算法生成新的签名σR。
算法3出价交易验证算法
输入(tid,PKI,CI,MI,σI)
输出SAS.AggVrfy(hI,σI,PKI,PP)运行结果
1)计算hI=Hash(tid||MI||CI||PKI);
2)调用SAS.AggVrfy(hI,σI,PKI,PP)。
算法4应价交易验证算法
输入Stid,(tid,PKI,PKR,CI,MI,CR,MR,σR)
输出Stid
1)计算hI=Hash(tid||MI||CI||PKI);
2)计算hR=Hash(hI||MR||CR);
3)调用SAS.AggVrfy(hI,σI,PKI,PP),当且仅当输出为1时将此交易记入集合Stid中。
一次完整的竞价交易包含出价及应价2个子交易,其中,出价者记为竞价交易发起者,应价者记为竞价交易响应者。允许存在多个响应者,节点服务器会以价格对比结果及是否满足电网安全阻塞条件作为判断依据,从中选出最优的应价交易记入区块链中。由此,出价交易及选中的应价交易共同构成了一笔成功的竞价交易。
基于以上4个算法设计的电力竞价交易算法流程如图3所示。
图3 电力竞价交易算法流程
算法的具体步骤如下:
1)竞价交易发起者(用电客户或发电公司)首先给出出价信息MI及出价tI,其中出价信息为用电需求信息(包含用电地址及时间段、应价截止时间等信息)或者生产计划信息(包括供电区域及时间段、应价截止时间等信息);然后输入自己的公私钥对(PKI,SKI),调用出价交易生成算法生成(tid,K,CI,σI);最后将(tid,PKI,CI,MI,σI)发送到区块链网络中并将K发送给其希望应价的所有实体。
2)节点服务器在收到发送到网络中的出价交易后,会调用出价交易验证算法。如果输出结果为1,则将交易记入区块链中,并允许其他实体(发电公司或用电客户)访问;否则,该交易无效。此外,对每一个有效的出价交易初始化一个空集合Stid,其中tid为该笔交易的唯一标识符。
3)在第1步中收到K的实体首先可以通过访问区块链的方式获取出价信息,给出相应的应价信息MR和应价tR;然后调用应价交易生成算法生成(CR,σR);最后将(tid,PKI,PKR,CI,MI,CR,MR,σR)发送到区块链网络中。
4)节点服务器在收到发送到区块链网络中的应价交易后,调用出价交易验证算法对交易进行验证并得到最终的交易集合。
5)在应价截止时间到达后,Stid中包含了与tid标识的交易相关的所有有效的应价交易;节点服务器对所有的密文CR与CI进行比较,得到所有比CI大(或小)的交易排序;寻找满足电网安全阻塞条件的最大(或最小)的交易,并在区块链中记录该笔交易,若不存在满足上述条件的交易则终止。
因为所有成交交易均被记录在区块链中,所以若存在某一方违约,则可以结合相应的信用管理机制对违约者进行降低信用评分的处理,一旦某个实体的信用评分过低,则可以限制其交易行为。
分别采用Neven04方案[20]、LXY+16方案[21]及SHA3算法对底层的有序聚合签名、保序加密及哈希算法进行实例化,并在Intel(R)Core(TM)i7-6700 CPU @ 3.40 GHz机器上对本文提出的4个核心算法进行实现。特别地,Neven04方案的实现基于Miracle库[22]y2=x3+ax+bmodp椭圆曲线,安全级别为80 bit。对4种算法测试5 000次得到的平均运行时间如表2所示。
表2 4种核心算法的平均运行时间
Table 2 Average running time of four core algorithmsμs
交易算法运行时间出价交易生成算法450.75应价交易生成算法460.78出价交易验证算法4.80应价交易验证算法5.00
在基于4种核心算法实现的电力竞价交易系统中,一笔交易的2个参与者实际只需要各调用1次出价及应价交易生成算法,而主力节点需要对系统内部的所有交易进行验证,其中出价交易验证算法的调用次数与当前时间段内同时发起的出价交易次数相关,应价交易验证算法的调用次数与当前时间段内的出价交易及应价交易次数的乘积相关。
假设在一个时间片段内(即交易发起与截至时间间隔内),针对一笔出价交易发起了x笔应价交易,则在仅有一个主力节点时,交易达成时间约为4.8+5.0x+tx,其中,tx为规模为x的排序时间,单位为μs。采取快速排序算法得到如图4所示的运行时间趋势。
图4 运行时间随交易数量的变化
从图4可以看出,节点运行时间与应价交易的数量线性相关。特别地,因为每笔应价交易的验证是彼此独立的,所以可以采取多节点分布式交易验证的方式提升系统运行速度:设置多个节点服务器及一个负载均衡服务器,当有交易提交到区块链网络中时,由负载均衡服务器向节点服务器分配交易验证任务,每个节点验证自己负责的所有应价交易,并将验证结果发送到其他节点处,最终由记账节点(即由共识算法决定的节点)对所有验证通过的交易进行排序对比,并记录最终达成的交易。在此过程中,所有提交的交易及最终达成的交易都被记录到区块链中,并在每个节点处存储一个备份。本文仅在普通的台式机上进行时间测试,若主力节点部署在高性能的服务器上,则运行时间将大幅减少。由此可以证明,本文算法能够被高效地嵌入主流的区块链系统中实现电力交易系统。
基于电力体制改革的大背景,区块链技术在构建P2P分布式电力交易系统上具有较大优势。然而电力交易市场下的交易形式是复杂多样的,仅支持P2P直接电力交易还无法满足市场需求。为进一步深化区块链技术在电力市场交易中的应用,本文结合有序聚合签名及保序加密技术设计分布式竞价交易算法,以剔除传统电力交易中心职能,在构建P2P直接电力交易的同时,使买卖双方可以自发地进行竞价交易。实验结果表明,该算法可有效提升交易的安全性、可靠性和效率。后续将把本文算法嵌入到比特币[3]和以太坊[23]等实际的区块链系统中,进一步提升系统的吞吐量及稳定性,同时实现交易过程中对用户的隐私保护。