谢裕清,王 渊,江 樱,杨 苗,王永利
1.国网浙江省电力有限公司 信息通信分公司,杭州310000
2.南瑞集团有限公司(国网电力科学研究院有限公司),南京211100
3.江苏瑞中数据股份有限公司,南京211100
4.南京理工大学 计算机科学与工程学院,南京210094
《国家电网公司“十三五”科技战略研究报告》中提出的利用大数据提升管理水平,实现规划科学、投资精准、管控高效要求,从面向全业务统一数据中心的知识图谱关键技术、应用和典型场景实践三个角度进行深入研究,通过在全业务统一数据中心的数据仓库与数据湖之间构建业务数据知识图谱,为全业务统一数据中心大数据建立起语义连接,从而实现语义级互操作的统一数据服务。
2010 年,Pentaho 公司的CTO Dixon 率先提出数据湖的概念,其定义为“未经处理和包装的原生状态水库,不同源头的水体源源不断地流入数据湖,为企业带来各种分析、探索的可能性”[1]。数据湖平台是一套混合架构,依托统一融合的数据平台,全流程打通企业产品的研发制造、供应储存、安装交付多环节数据,增强数据交互,使能数字孪生,自动化、智能化提升企业运作效率。
目前,数据湖是大数据应用最常用的数据共享方式,然而数据共享带来隐私回题仍然是数据湖设计中缺失的部分,特别是应用于电网企业的数据保密性的要求更高。现有的数据湖设计考虑了数据的特点,使数据共享平台更具可扩展性和弹性,但由于整个原始数据集是在不完全信任的对等节点之间换的,利用数据进行分析的用户可能会在未经数据提供者事先同意的情况下重新分发数据提供者共享的数据以获取利润;另一方面,数据提供者可能无法完全信任数据湖,数据湖可能在没有经过资料提供者同意的情况下将数据重新分发给用户。因此,如何安全高效地共享有价值的数据成为数据湖的设计重点。为了促进大数据应用中有价值数据的流通,必须完成现有数据湖缺失的数据隐私和系统稳健性,以便数据更为安全地在同企业部门间乃至同行业企业间实现共享。
近年来,一些研究团体和学者对数据隐私保护技术已开展了很多相关的研究工作,取得了一定的研究成果。2010 年,Ciriani 等提出将数据碎片与加密结合起来,利用碎片化作为打破属性之间敏感关联的方法,以增强数据收集的隐私性[2]。2015年,Zyskind等人建议使用区块链来分散数据存储[3],不过本文提供了一个完整的实现,利用智慧合约实现数据的访问控制,以打败恶意攻击者。2017 年,Dorri 等人建议使用区块链来管理物联网[4],通过提供轻量级区块链共识系统,具有低处理能力的设备可以独立运行区块链。2017年,Barhamgi等人提出构建一种隐私知识库[5],利用语义网的功能来确定数据消费者如何组合原始元数据来推断对隐私敏感的信息以及与推断信息的公开相关的隐私风险。2019年,黄穗等人提出一种基于CP-ABE 和区块链的数据安全共享方法,实现数据的细粒度共享[6]。
随着电网信息化持续建设与深化应用,各部门各项业务已与信息化初步融合,信息系统内业务数据的数量和种类逐步增多,数据共享需求迫切。目前,在我国电力行业同业中,鲜有将数据链、数据治理、数据服务形成落地平台并为企业提供服务的典型案例。电网开展信息化建设多年,但数据存储位置和量级情况不明确,结构化数据、非结构化数据、实时数据、流数据等多种数据未得到有效整合,各部门间独立应用较多,平台关联性不够,影响了数据共享及业务融合的开展。其次,当前数据传输协议不统一,如何对数据进行分库、分表存储,实现数据中心的融合与透明访问尚未实现。第三,对数据的存储价值、应用价值进行分析,从而建立数据质量的全过程考察机制需求迫切。数据湖的本质是一种数据管理的思路,利用低成本技术来捕捉、提炼和探索大规模、长期的原始数据存储的方法与技术。数据湖可存储任何种类的数据,高质量高效率地存储数据,更快速、更廉价地处理数据,数据库的数据共享机制如图1所示。
图1 数据湖数据共享机制
智能合约是在区块链内运行的自治应用程序。本文通过智能合约构建了一个数据湖访问管理模型,其中数据提供者与数据使用者之间的交互的规则在区块链网络中自主实施而没有集中信任[7]。通过智能合约,可以为用户提供控制数据访问和使用方式的能力,因为智能合约为他们提供了相同的数据管理权限。通过使用隔离的虚拟机来运行这些智能合约,用户无法修改应用程序结果。智能合约和区块链可以实现数据的访问控制,以跟踪相关方之间的数据使用情况,从而实现正确的数据访问责任。
对此,本文提出一种基于区块链的数据访问与控制模型并在此基础上对区块链中的智能合约模块进行了优化,即在区块链中存储数据的哈希值并使用可信执行环境将加密后的原始数据存储在数据湖中,不仅解决了企业内部访问权限难控制、企业之间数据难共享的问题,也确保了敏感数据的安全性和隐私性。
数据已成为企业的重要资产,如何在企业内部对数据的访问权限进行有效控制、在企业与用户之间安全共享数据一直是一个挑战。本文提出一种应用区块链的数据访问与共享模型,利用属性基加密对数据进行访问控制与共享,达到细粒度访问控制和安全共享的目的。该模型特点如下:
(1)利用区块链平台提供去中心化的数据访问管理。
(2)利用智能合约在用户和数据提供商之间提供相同的数据访问管理权限。
(3)使用Ethereum智能合约在真实的区块链平台上提供完整的系统实施。
本模型自下而上可分为存储层、区块链服务层、接口层、智能合约层、应用层等,其架构如图2所示。
(1)存储层:数据湖中搭建可信执行环境(Trusted Execution Environment,TEE)用来存储原始数据,同时使用Intel SGX 架构实现可信计算,原数据经过加密后存储在数据湖中,由企业维护。区块链中只存储散列处理后数据的Hash地址。
(2)区块链服务层:用来实现数据一致性服务和数据同步服务,记录企业与用户间的数据交互与共享。
图2 基于区块链的数据访问与共享模型架构
(3)接口层:主要包括数据接口与智能合约接口。
(4)智能合约层:提供智能合约服务。主要功能是提供数据的访问控制,即对请求数据的用户进行身份验证,确认其是否有权限进行访问。
(5)应用层:包括各种应用程序,如数据管理系统、数据采集系统等。
本模型主要分为企业内的数据共享和企业与用户间的数据交互两部分,是平行区块链结构。企业内的数据共享主要负责各部门数据的存储与保护,为了加强企业内数据的安全性及可靠性而将数据进行集中化管理,限定访问权限,将加密后的数据存储在安全存储区中,链上只存放数据进行散列处理后的地址。存储结构主要分为区块头和区块体,将数据的输入时间戳、区块长度及前一个区块的哈希值作为区块头,根据访问控制树将数据Hash 地址、访问控制策略和数据Merkle 根加密后打包成块,存储至区块体中,其后上传至区块链上。其数据存储结构如图3所示。
图3 区块体存储结构
企业与用户间的数据交互将采集到的用户数据进行集中处理方便共享,同时对企业数据使用情况进行监管。访问控制树一般采用属性基加密策略树,只有特定企业中的特定部门才能进行解密。数据请求者在提出数据请求时,需将所请求数据与含有自己属性的令牌一同发布至相应的区块链上。
在进行数据存储时,对于大量底层数据和基本的业务数据而言,若使用非对称加密会导致密钥管理混乱,故选用基于属性加密(ABE)对底层数据进行加密[8]。而对于敏感数据,由于区块链处理速度较慢,不适宜将所有数据直接存储在链上,因此使用脱链存储。通过建立分布式散列表,区块链存储数据的散列地址。数据在存储时进行加密,并通过智能合约进行数据访问控制。
表1 从数据安全和数据存储等方面将本模型与传统区块链进行对比分析。
以企业与用户间进行数据交互为例,由于数据采集设备生成的数据管理权限的集中化,部门数据在企业各部门间之间的共享方式缺乏透明度。区块链2.0的最大特性就是引入了智能合约,可以基于其架构开发各种用途的区块链应用。智能合约是一种计算机协议,能够以信息化方式传播、验证或执行合同,这些交易在没有可信第三方情况下执行、可追踪且不可逆转[9]。本文在区块链访问控制与共享模型的基础上提出了智能合约算法,通过该智能合约算法,多方可以指定规则来管理其交互,这些规则在区块链中独立实施,而无需集中式系统。
智能合约是在区块链内运行的自治应用程序,其中管理相关方之间的交互的规则在区块链网络中自主实施,而没有集中信任[10]。本文提出的方法首先存储区块链中生成的加密数据的哈希值,然后将数据本身存储在数据湖中,从而使区块链可通过智能合约控制数据访问。
系统主要功能是在数据提供者和用户之间建立信任。通过利用智能合约,本文提供了一个数据访问管理模型,用户在控制数据共享或使用方式方面享有同等的权限,从而可以指定由区块链网络上不受信任的第三方实体自主强制执行的数据访问规则[11]。此外,假设所有数据在传输之前都已加密,并且所有密钥交换都是使用非对称加密协议执行的。在本实验中,不考虑重放攻击和拒绝服务攻击。
表1 本模型与传统区块链对比分析
如图4所示,基于智能合约的数据湖访问管理主要由前端数据采集装置、区块链及数据湖三部分组成,其中企业内各部门先通过特定的设备或装置自动采集或手工录入数据,之后通过远程服务认证和区块链中的智能合约组件进行数据的访问控制,再通过传输网络入湖,入湖后的数据可通过加密或解密在信任模块与不信任模块之间转换[12]。
图4 基于智能合约的数据湖访问管理模型
智能合约以区块链中执行的以太坊智能合约的形式向用户数据提供去中心化的访问控制策略[13]。由于在智能合约中存储数据所需的有限数据存储和费用,智能合约仅将数据的Hash 值存储在区块链中,主数据被加密并存储在数据湖中。智能合约算法包括用户注册模块、设备注册模块、数据写入访问策略模块和设备数据读取访问策略模块。详细算法如下:
算法1 数据湖访问管理智能合约算法
Input:ownerAddress //数据提供者的唯一标识
UserAddress //用户的唯一标识
Output:Case one:hash(Data)//数据的哈希地址Case two:false //不具备访问权限
1.HashMap deviceRegistry(ownerAddress)
2.return List[DeviceIds];
3.HashMap deviceData(ownerAddress,deviceId)
4.return List[DataHash] //返回数据Hash地址
3.HashMap DataAccessRegistry(ownerAddresss,UserAddress,deviceId)
6.return bool isAllowed;//审核用户是否有权限访问
4.function REGISTERDEVICE(ownerAddress,deviceID)
5.InsertToHashMap(deviceRegistry)
6.end function
7.function WRITEDATA(ownerAddress,deviceID,Data)
8.if owner==ownerAddress
9.deviceData[owner,deviceID].List.InsertData(hash(Data))
10.end function
11.function READDATA(ownerAddress,UserAddress,deviceID)
12.if DataAccessRegistry(UserAddress)==true
13.return deviceData[hash(ownerAddress,deviceID])
14.end function
15.function GRANTACCESS(ownerAddress,UserAddress,deviceID)
16.if owner==ownerAddress
17.DataAccessRegistry[hash(ownerAddress,User-Address,deviceID)]=true
18.end function
19.function REVOKEACCESS(ownerAddress,UserAddress,deviceID)
20.if owner==ownerAddress
21.DataAccessRegistry[hash(ownerAddress,User-Address,deviceID)]=false
22.end function
(1)用户注册。该模块利用Ethereum network上的用户注册系统。每个用户通过生成唯一标识用户的公共私钥对来加入Ethereum network,之后可使用私钥与智能合约交互以执行诸如设备注册和数据访问的功能[14]。
(2)设备注册。每个经过身份验证的数据提供者都可以通过提供数据采集设备的标识符来进行注册。在智能合约中,本文提供一个Hash映射,将数据提供者拥有的设备映射到区块链上的所有者地址,如mapping(address=list of owners deviceids)。
(3)数据写入访问策略。对于将数据写入区块链的设备,设备将提供owner address 和设备ID 以及要写入的数据。通过使用所有者地址和设备ID 的组合作为Hash映射中的键,可以唯一地存储与所有设备相对应的所有数据,如((owner address,device id)=list of device data)。Hash 映射的值是由设备写入的数据的Hash 列表。在智能合约允许将数据写入合同之前,智能合约将检查owner address 是否与设备ID 相对应,以确保只有设备所有者才能执行写入操作。
(4)设备数据读取访问策略。在进行数据访问时,一个需要访问设备数据的用户需要向其发出一个读取数据的请求许可,请求用户将提供其设备所有者的地址和设备ID,包含设备所有者和地址以及设备ID的Hash映射作为用户的密钥,如((owneraddress,device id,user address)=bool access)。最后,在对数据授予访问权限之前,将检查此哈希映射以查看请求用户是否可以通过确保只有已注册的用户来访问数据。
在数据湖中搭建可信执行环境(TEE)用来存储原始数据,同时使用Intel SGX架构实现可信计算,英特尔SGX是新型英特尔Skylake处理器中引入的可信计算架构。通过提供扩展X86 和X86_64 体系结构的新指令集,用户级应用程序可以提供机密性和完整性,而无需底层操作系统的信任。同时,本次实验使用五台不同的智能传感设备采集数据模拟企业内数据采集装置进行区块链数据的写入操作来评估此算法。实验环境配置如表2。
表2 实验环境
图5 显示了该实验的详细数据流程图。对于要写入或读取数据的设备,首先,设备需使用区块链进行自身注册,同时执行远程认证服务使用户信任SGX 平台。在执行数据写入操作时,数据提供者首先应检索智能合约地址,然后加密并对数据进行Hash处理,散列后的加密数据通过智能合约中的WriteData()函数写入区块链并将原始加密数据写入数据湖中的SGX平台。之后,完整性检查模块计算数据的基于散列的消息认证代码(HMAC)并将HMAC与数据一起写入安全存储区。
图5 数据流程图
对于读取操作,用户必须使用AllowAccess()方法向智能合约注册;若要撤消访问权限,用户可以选择执行revokeAccess()函数。用户可提供其地址与智能合约通信,智能合约检查用户是否拥有访问数据的权限,如果授予权限,则返回数据的哈希值,并可用于从SGX存储平台访问数据。之后,SGX应用程序使用READDATA API重新检查智能合约,以确定用户是否可以访问数据哈希标识符。如果允许访问,则SGX 应用程序从安全存储中检索数据。需要注意的是区块链读取操作的开销是无关紧要的,之后将在表3的评估部分中显示。然后需解密数据并进行完整性检查确保数据的真实性和完整性,最后需重新计算数据的HMAC 并将其与存储的HMAC 进行比较。如果HMAC 未发生变化,则读取数据并将其返回给用户。
表3 数据集属性分类
此外,对本次实验中前端智能传感器所采集的数据集各属性,可大致进行如表3所示分类。
本实验使用Ethereum区块链实现该智能合约组件,主要包括可靠性编程语言。代码需在最大程度上简洁化以限制运行智能合约交易所需的Ethereum gas,gas即“燃气”,是以太坊网络世界的燃料[15],它决定了以太坊网络生态系统的正常运行,在链上每执行一个写入操作时,都需要支付一定的费用,用gas 为单位来计数,每个在链上可以执行的命令都设置了一个消耗的gas 值[16]。同时,为了限制存储数据所需的存储空间,在区块链中只存储数据的哈希值。实验在Rinkeby Ethereum 测试网络上运行智能合约进行评估。该实验实现了registerDevice、allowAccess、writeData、readData和revokeAccess 等接口使数据采集装置能够与智能合约进行交互。同时,本实验利用Gas的使用量和区块的吞吐量作为评估指标对是否使用Hash进行对比分析。
表4 显示了矿工完成每种智能合约操作的评估结果。设备1的数据有效载荷大小为27 B,设备2为47 B,设备3 为132 B,设备4 和5 分别为127 B 且散列长度是256 bit。如表4 所示,registerDevice 使用47 543 gas 完成其操作,allowAccess 需要29 517 gas,writeData 需要51 049 gas,revokeAccess 需要14 792 gas,readData 没有使用任何气体,因为智能合约的读取是在本地区块链上完成的,不需要任何挖掘。
表4 基于Gas用量的智能合约应用效率
在图6中,比较了矿工在区块链中完成写入操作所需的gas 使用量。分为两种情况,一种是向区块链中写入加密过全部数据,一种仅仅写入数据的Hash值。图6显示设备2写入散列后的数据使用59 846 gas和92 926 gas进行原始写入,减少了35%。设备3 写入散列后的数据使用53 454 gas,而原始数据写入所需的气体数为159 234 gas,减少了67%。设备4 和5 写入散列后的数据使用58 974 gas,而需要140 255 gas 气体来写入原始数据,减少了57%。
图6 智能合约写操作的gas使用量
图7 展示了增加写入工作负载对区块链的影响。通过将500个写入请求的写入工作量增加到2 000个写入请求,可以测量区块链上每秒的事务吞吐量。如果没有经过散列,对于500 写入工作负载,写入事务吞吐量为每秒10.56 次写入。对于1 500,它是9.26,对于2 000次写入,写吞吐量是每秒8.6 次写入。使用散列,对于500写入工作负载,写入事务吞吐量为每秒8.8次写入。对于1 500,它是7.9,对于2 000 次写入,写入吞吐量是每秒7.2次写入。写吞吐量随着写入工作量的增加而降低,也会随着使用散列而降低。从图6 中可以看出,使用Hash的gas使用量恒定的是因为散列函数会产生256位数据用于存储在区块链上;图7表明将数据写入区块链之前的散列处理可降低写入吞吐量。
图7 基于写入工作量增加的吞吐量
实验结果表明,在Ethereum测试网络上运行智能合约进行评估,并在链上只存储数据的哈希值,可以在实现访问控制的基础上降低写操作的gas的使用量和系统的吞吐量。
随着信息化建设程度不断迈进,完善的数据共享与访问控制机制、数据传输透明度和数据隐私越来越重要。本文利用区块链技术的最新进展,提出一种基于区块链的数据访问与控制模型并在此基础上对区块链中的智能合约模块进行了优化,通过利用区块链以去中心化的方式管理用户对数据访问,并确保所有数据处理和存储在安全区域内完成,将原始加密数据存储在数据湖中,提高了数据的安全性和完整性。本文提出的方法有助于实现企业数据的跨业务贯通,为电网全业务统一数据中心建设关切的重大技术难题提供了新的技术解决思路。