王繼業 高靈超 董愛強 郭少勇 陳 暉 魏 欣
1(國家電網公司 北京 100031)
2(北京中電普華信息技術有限公司 北京 100192)
3 (網絡與交換技術國家重點實驗室 (北京郵電大學) 北京 100876)
(syguo@bupt.edu.cn)
“能源互聯網”是以電力系統為核心,以互聯網及其他前沿信息技術為基礎,以分布式可再生能源為主要一次能源,與天然氣網絡、交通網絡等其他系統深入結合而形成的新的能源利用體系.能源互聯網應提供一種在供需雙方之間建立快速、可信、自動的能源交易模式,幫助供需雙方高效建立和完成交易[1-2].但現有能源互聯網解決方案中,大多利用中心化的管理控制機構完成.但能源互聯網體系龐大,中心化管理機構任務繁重,某些情況下去中心化具有更高的效率,如家庭光伏電站的剩余電量提供給某鄰居家電器使用,在雙方可信的基礎上可以直接完成交易,從而具有更高的效率.需要為構建一種可信的對等數據共享平臺,支撐能源互聯網的高效快速交易[2-3].

Fig. 1 Block chain based data security sharing network architecture圖1 基于區塊鏈的數據安全共享網絡體系
而區塊鏈作為一種構建去中心化的分布式存儲的對等可信數據網絡的技術,是以比特幣為代表的數字加密貨幣體系的核心支撐技術,為構建可信、點對點數據安全共享提供技術基礎.區塊鏈技術具有高度透明、去中心化、去信任、集體維護(不可更改)、匿名等性質,能夠通過運用數據加密、時間戳、分布式共識和經濟激勵等手段,在節點無需互相信任的分布式系統中實現基于去中心化信用的點對點數據共享、協調與協作,為解決中心化機構普遍存在的高成本、低效率和數據存儲不安全等問題提供了解決途徑[3].區塊鏈僅提供了一種安全可信的共識交易的基礎平臺,仍缺乏適應于能源互聯網中多業務形態的數據共享的技術[4-6].在能源互聯網中,如何融合區塊鏈與物聯網、信息系統、業務形態,解決網絡、系統與業務間的去中心化的數據安全共享的問題,滿足能源互聯網的需求,成為了當前急需解決的問題[7-9].
因此,本文結合區塊鏈的特征,構建一種基于區塊鏈的數據安全共享網絡體系,主要包括去集中化數據統一命名技術、授權數據分布式存儲與高效分發協議等內容,以實現去中心化域名解析.本文提出開放式命名索引技術,并將其應用于區塊鏈中,解決數據作為資產的安全統一標識的問題,并在此基礎上構建了基于區塊鏈的去中心化的DNS域名服務解析機制,解決了集中式的DNS受控可信的問題.
本節構建了一種基于區塊鏈的數據安全共享網絡體系,如圖1所示.該體系依托于現有的互聯網架構,承載聯盟鏈或私有鏈,將數據作為資產進行統一標識,利用區塊鏈將數據進行分布式存儲,通過設計高效分發協議,實現數據在提供者與消費者間自主對等的信息中心網絡(peer to peer information centric network, P2P ICN).具體內容如下:
1) 去集中化數據統一命名技術及服務
結合企業數據的規范和統一資源標識符(URI)規范,基于共享信息模型(shared information datamodel, SID)建模,提出開放式數據索引命名技術(open data index naming, ODIN),為網絡環境下自主命名標識和交換數據內容索引提供一種開放性系統,為自主開放、安全可信的數據內容管理和知識產權管理提供了一個可擴展的數據統一命名標識體系,為數據提供者與消費者間共享奠定基礎[10].
2) 授權數據分布式高效存儲
以區塊鏈為數據承載基礎,當數據接入時,將其作為一種資產,并對其進行授權加密實現控制訪問權限的約束.同時,結合業務特征與需求,在去中心化的網絡邊緣進行分布式存儲,數據緩存管理和緩存策略的問題也成為基于區塊鏈的數據間安全共享的一個難題.
3) 支持自主對等的數據高效分發協議
基于區塊鏈的數據共享本質上就是為了實現一種P2P的數據對等共享網絡,即P2P ICN.其中,數據安全傳輸過程包括基于開放式數據索引命名的底層標識符解析過程、基于名字尋址過程與數據傳輸過程,典型的例子如:構建去中心化的DNS域名解析服務,以實現數據的對等可信傳輸.
本節設計了一種開放式數據索引命名機制ODIN,該機制是一種層次化的命名規則[11],類似于SID.為了融合已有單獨的鏈及新增鏈的擴展,本文將ODIN命名方式分為一級基礎ODIN和多級擴展ODIN兩種,如圖2所示.一級基礎ODIN解決主鏈之間的數據命名標識的問題;多級擴展ODIN是解決私有鏈或擴展鏈內部數據命名標識的問題,以便實現數據的分布式緩存且提高賬本的同步效率.接下來將分別介紹二者的命名規則.

Fig. 2 ODIN naming structure圖2 ODIN命名結構圖
2.1.1 一級基礎ODIN
一級ODIN的標準結構式為
ppk:[BTC_BLOCK_SN].[BTC_TRANS_INDEX][DSS]
后綴的標準結構式可擴展為2種:
RESOURCE_ID#[DATA_BLOCK_SN.CHUNK_INDEX] 或#[DATA_CHUNK_INDEX].
2種命名方式的區別在于前者引入了資源標識(RESOURCE_ID)并通過數據所在區塊編號(DATA_BLOCK_SN)和子數據塊在區塊內的索引(CHUNK_INDEX)這樣一個二級的標識對每一個數據塊進行標識;而后者則是通過將所有區塊的子數據塊進行統一編號后,對數據所在的子數據塊[DATA_CHUNK_INDEX]進行標識.這里需要注意的是,后綴為命名中可以省略的部分,結構式中‘#’字符及其后續部分也可省略,缺省情況下默認為區塊內的第1個子數據塊.
此外,一級基礎ODIN可以采用短編碼的方式表示,標準結構式為
ppk:[REG_ORDER_INDEX][DSS].
與前一種命名的唯一區別在于將前者前綴中的登記記錄的二級索引替換為該記錄在全部ODIN注冊記錄中以注冊時間早晚排序的數字索引值(REG_ORDER_INDEX).
下面列舉出一些合法的一級ODIN命名:
2.1.2 多級擴展ODIN
以一級ODIN為基礎,注冊者可以利用自有的區塊鏈來擴展自定義二級ODIN,并將二級ODIN注冊記錄批量打包后形成的新區塊的HASH關鍵字寫入上一級骨干區塊鏈獲得合法驗證并確保唯一性.以此類推,可以形成更多級的ODIN標識.
多級ODIN的標準結構式為
ppk:[PARENT_ODIN_PREFIX][SUB_BLOCK_SN].[SUB_TRANS_INDEX][DSS]
其中,[PARENT_ODIN_PREFIX]為對應上級ODIN的前綴.[SUB_BLOCK_SN]和[SUB_TRANS_INDEX]為對應子級ODIN在上級自定義區塊鏈上的登記記錄所在區塊和區塊內記錄位置的阿拉伯數字編號.后綴[DSS] (data suffix string)由上級ODIN注冊者可選并自行給出的具體數據內容定位標識,需要自主確保具有唯一性,命名方案同上.
此外,多級ODIN自定義結構式為
ppk:[PARENT_ODIN_PREFIX][SUB_TRANS_ID][DSS]
[SUB_TRANS_ID]為該ODIN記錄在子級區塊鏈上的唯一標識,由所屬上級ODIN標識注冊者來定義,可以是流水編號,也可以是唯一取值的字符串,需自行保證能與標準結構式區分開且不能包含“”和“#”這2個字符.
下面列舉出一些合法的多級ODIN命名:
ODIN技術對數據統一命名,并通過ODIN數據庫接口提供相關服務,每個ODIN操作都將按照特定的協議規范被編碼后廣播到公有鏈平臺,得到共識后加入區塊,存入公有鏈.
ODIN技術是在網絡環境下標識和交換數據內容索引的一種開放性系統,它遵從URI規范與SID建模思想,為基于數字加密貨幣區塊鏈的自主開放、安全可信的數據內容管理和知識產權管理提供了一個可擴展的框架.主要特點包括自主性、安全性、唯一性和永久性,具體體現為:
1) 自主性.ODIN 標識符是基于去中心化的區塊鏈技術,并由申請者自主生成并管理的一種命名標識技術,其生成和管理規則是完全開放的,沒有中心化的控制機構.除了擁有管理密鑰的申請者之外,其他組織和個人都無權控制和篡改.
2) 安全性.每一個ODIN 標識符的擁有者都對應擁有一對非對稱加密技術的公私鑰,可以通過私鑰對自主發布的數據內容進行簽名,接受數據內容的個體可以通過公鑰進行驗證,以確保收到的數據是來源可信和不被篡改的.
3) 唯一性.結合公有區塊鏈,ODIN 標識符能對任何數據內容對象(如文本、圖片、聲音、數據、影像、軟件等)的開放訪問索引進行唯一標識,使數據內容對象能被人們準確地識別和提取.
4) 永久性.ODIN 標識符一旦生成就將永久不變,不隨其所標識的數據內容對象的持有者或存儲地址等屬性的變更而改變.
ODIN技術的運行機制如圖3所示.
開放數據索引命名服務運行機制主要包括2步;
1) 每個有意開放數據的個體(data owner)可以通過開源的ODIN注冊客戶端來自主注冊獲得一個ODIN號(成為ODIN注冊者,即ODIN Register),以此為前綴可以為其開放的每一份數據資源編制一個包含本身ODIN 前綴的且增加了后綴的ODIN 標識串,并將該ODIN標識串索引到數據資源的元數據和URL 上,這樣ODIN 就成為數據資源的一部分,始終與該數字資源共存;
2) 已被開放的這些數據資源的ODIN 記錄、元數據及其URL 信息可以JSON編碼的形式保存在該ODIN注冊者的數據庫內,這些被集中存貯起來的資源就形成一個ODIN資源標識庫.
當用戶根據ODIN標識串尋找一個數據資源或有關這一資源的相關信息時,查詢請求就會通過開源的ODIN解析庫在區塊鏈上進行定位,然后被傳送到該ODIN 注冊者所登記的訪問點(access point, AP)上進行解析并得到該數據資源的元數據描述和實際數據URL鏈接.ODIN注冊者可以完全開放數據資源訪問權,也可以通過適當的自定義機制讓用戶獲取數據資源訪問權,如通過訂購、資源傳遞、按瀏覽付費或者預印本付費等方式獲得,為日后的授權數據認證奠定基礎.

Fig. 3 ODIN operation mechanism圖3 ODIN運行機制示意圖

Fig. 4 ODIN based decentralized DNS domain name resolution process圖4基于ODIN的去中心化DNS域名解析流程
ODIN標識運行機制,為數據資產提供了統一命名的技術手段.每個數據便可以當做一個數據提供服務來進行請求,而ODIN便是類似于域名解析的地址.為此,通過ODIN標識訪問數據塊的過程,便形成了一種基于ODIN的去中心化的DNS域名解析過程[6],如圖4所示,具體的解析流程如下:
步驟1. 數據請求者向ODIN客戶端發出以ODIN為標識的DNS請求.
步驟2. 客戶端收到后首先就本塊中的數據庫檢索此域名,若檢索不到即向最近的存有完整區塊的節點請求檢索,仍檢索不到則說明該域名不合法.若檢索到域名,則向其指向的數據源所在ODIN客戶端檢索下一級域名,直到不能檢索為止.
步驟3,將最終得到的索引數據返回給數據請求者,請求者對其解析,得到元數據及URL,再利用P2P的對等傳輸協議訪問數據.
本節基于工作組先前的工作基礎[10],利用5臺服務器搭建擴展鏈, 并與公有鏈相鏈接構成實驗環境,將一級ODIN標識注冊在公有鏈上,多級擴展ODIN存儲在擴展鏈上進行原型系統驗證,并針對域名解析效率進行了統計分析.
如圖5所示,ODIN既支持開放式的命名方式,也對命名提出了部分約束條約,以實現ODIN域名的注冊與管理,如圖5中步驟1與步驟2,以支持本地化的ODIN注冊、管理與共享.其他人可以根據查詢已有的ODIN命名標識,該標識便可以當做域名,供人查詢與解析,以實現去中心化的可信的DNS域名解析能力.
如圖6所示,呈現基于ODIN的去中心化DNS域名解析成功訪問內容的視圖,其他數據便可以依托于此標識進行安全驗證,確保本標識下的數據來源可信.

Fig. 5 ODIN registration process based on block chain圖5 基于區塊鏈的ODIN注冊過程

Fig. 6 ODIN based decentralized DNS domain name resolution圖6 基于ODIN的去中心化DNS域名解析
同時,本文也根據用戶量與DNS解析的訪問效率進行了時間驗證,當用戶逐步增大,以ODIN為基礎的DNS域名增長時,隨著用戶的增長,訪問時間也越來越大,但是可以發現用戶量與DNS域名之間是有平衡點的,即當一定用戶量緩存域名時,域名在一定量內訪問效率較高,一旦超過這個平衡,效率呈現下降趨勢.如圖7所示,區塊數對解析速度的影響,一開始隨著用戶增加,查詢速度增長較快,之后增長放緩,有一定波動;解析用時始終在200 ms以內.

Fig. 7 The influence between users block and parsing speed圖7 DNS域名與用戶塊間解析速度
本文結合區塊鏈的去中心化、自主對等難以更改的技術特征,1)提出基于區塊鏈的數據安全共享網絡體系,主要包括去集中化數據統一命名技術及服務、授權數據分布式高效存儲和支持自主對等的數據高效分發協議;2)設計了開放式數據索引命名結構,含一級基礎ODIN和多級擴展ODIN,且闡述了開放數據索引命名運行機制;3)基于ODIN技術,設計了基于ODIN的去中心化DNS的域名協議模塊;4)針對部分功能進行驗證并進行性能的分析.下一步工作中,將針對數據分布式存儲及域名解析效率進行優化.