衡星辰,董 燦,林克全,肖禹亭
(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相同的方式可實現發電權或用電權的多次轉讓。
發電企業及用電客戶均通過與區塊鏈網絡的交互發起一筆交易或者對一筆交易進行響應,由此建立交易雙方的聯系。
本文實現電力競價交易的核心思想為:由交易發起者首先給出出價信息(如用電需求及期望價格等)并附上聚合簽名,交易接收者如果接受出價,則可以通過在該聚合簽名基礎上生成新聚合簽名的方式使交易達成?;谧罱K的聚合簽名,可以對交易過程(順序)和內容進行驗證,從而保證任何敵手(甚至是交易參與方)均不能偽造合法的交易記錄。針對同一個出價信息,系統內可能存在多個實體進行響應,系統應按價高/低者優先(甚至更為復雜)的規則進行記錄??紤]到價格是競價交易中的敏感元素,所以應對節點服務器保密。為了保護數據隱私并保證節點服務器仍然可以對價格進行比較,采取對價格進行保序加密的方式。本文方案依賴的底層密碼算法包括保序加密算法(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]等實際的區塊鏈系統中,進一步提升系統的吞吐量及穩定性,同時實現交易過程中對用戶的隱私保護。