一种基于同态加密智能合约的电力数据安全共享方法及系统与流程

文档序号:31080379发布日期:2022-08-09 22:17阅读:131来源:国知局
1.本发明属于数据共享
技术领域
:,特别是涉及一种基于同态加密智能合约的电力数据安全共享方法及系统。
背景技术
::2.目前基于区块链技术的电力数据交易共享系统有多平等主体、去信任交易和记录留痕(可溯源)的优势,但依然存在原始数据转卖备份导致的泄露滥用风险以及数据处理服务不可信的缺陷。考虑数据需求方一般是需要数据分析的结果而并不直接使用原始数据,如果仅交易源数据的运算结果而不是源数据,就可以杜绝源数据泄露。为了解决计算环境信任问题,将数据的分析计算部分转移到区块链智能合约执行环境中,相当于在区块链系统上部署了“云计算”的功能服务。但“云计算”对于数据所有方是有数据泄露风险的。若数据是以明文形式提交在区块链系统中,则在通信或节点存储环节有数据泄露风险。3.为实现隐私安全的数据计算服务,目前有“智能合约+sgx技术”的软硬件结合技术方案。sgx技术是对intel架构的一个扩展,它能够在硬件级别保护程序的执行过程,即使主机拥有root权限或者虚拟机管理员权限也无法访问其中的代码和数据。sgx技术要求特殊的硬件设施,本质上是通过对区块链参与方增加硬件约束(需要支持tee的cpu),来换取性能和隐私保障,由此提高了硬件成本。本发明则提出一种“智能合约+同态加密算法”的纯软件解决方案,对个别字段的隐私数据进行同态加密,牺牲该字段一定程度的计算效率而换取隐私保障,免却了特殊硬件的购置和使用成本。技术实现要素:4.本发明为了解决现有技术中的问题,提出一种基于同态加密智能合约的电力数据安全共享方法及系统。5.本发明是通过以下技术方案实现的,本发明提出一种基于同态加密智能合约的电力数据安全共享方法,在fabric区块链网络中,数据提供方与数据需求方都是区块链同一通道的不同组织节点,节点间共同审议背书数据共享请求智能合约,于是供需双方通过所述智能合约进行数据共享请求处理,共享记录的每次生成都会产生区块,区块由区块链的节点共同保存,由共识算法确保一致性,因此共享记录不可篡改地保存在区块链账本中,电力数据保存在数据提供方的fabric私有数据或者链下自有数据库里,满足智能合约进行数据计算时的数据调用;数据提供方是私有数据的被授权节点,且布置含有同态加密算法的数据计算智能合约;此时数据需求方以client的身份向区块链系统发起数据请求,利用共享请求智能合约将数据共享请求写入区块链请求记录账本,数据提供方读取请求记录账本并通过共享请求后将调用数据计算智能合约,上传的电力数据在智能合约可信任的计算环境下完成数据处理分析,其中选定的隐私数据字段进行同态加密计算,生成计算报告并写入区块链,最后需求方client调阅计算报告,数据共享流程结束。6.本发明提出一种基于同态加密智能合约的电力数据安全共享系统,所述共享系统包括web端和fabric网络;web端是负责直接与用户交互展示的应用端,为用户提供系统核心功能的操作入口,web端使用fabric的应用程序sdk进行开发,连接区块链网络交互的服务接口,执行链码调用和数据访问;fabric网络中的链码实现数据共享的业务逻辑,定义了区块链中存储的数据结构,上传的电力数据集、共享请求记录和数据计算报告都会转化为键值对存储至fabric网络账本中,可回溯不可篡改,满足业务需求对数据的访问。7.进一步地,在共享系统中,数据提供方上传的电力数据是保存在区块链网络中节点的私有数据库或者链下自有电力数据库里,逻辑上是根据管理需求,以文档型数据库的管理模式分成独立的数据表单,即电力数据表,电力数据表是json格式,对应于链码开发中的table结构体。8.进一步地,在共享系统中,数据供需两方共用的数据请求记录表即共享请求表,对应于链码开发中的request结构体,由需求方生成并提交至区块链网络,逻辑上保存在公有的请求记录账本中。9.进一步地,在共享系统中,共享请求表中的请求经由提供方审批后,区块链网络会根据请求内容从私有数据库中提取对应的电力数据进行计算服务,生成的计算结果与请求内容相整合形成计算报告,保存在需求方私有的计算报告账本中,对应于链码开发中的response结构体。10.进一步地,所述智能合约具体由链码中的五个go代码文件进行实现;链码中包含encryption.go、request.go、privateorg1.go、privateorg2.go以及service.go五份文件。11.进一步地,service.go中定义了数据提供方为需求方设置的具体计算服务,所述计算服务包括getattributetotal()、getattributeave()和getpearson();在计算过程中,如果计算字段涉及加密字段,则会调用对应同态加密算法在密文的基础上进行计算,只需要对密文计算结果进行解密,并返回解密后的结果即可,保证数据的安全性,对每种计算服务开发特定优化的同态加密算法并部署在encryption.go中,encryption.go中定义了同态加密算法的密钥生成,加密、密文计算和解密方法,链码中可以直接导入对应的方法对插入的数据进行加密和解密,密文计算由service.go开发的计算服务决定,同态加密算法允许数据在加密的情况下进行计算,最后解密返回和明文计算相同的结果。12.进一步地,数据提供方的privateorg1.go定义了table结构体来存储电力数据,数据以表格的形式存在,实现了create和read基本方法;新增表格方法createmytable()是使用json.umarshal将电力数据表解析为一个table结构体,table结构体的tableflag字段是数据表的操作标识符,0表示新增,1表示删除;当某电力数据表被调用时,链码会先遍历该电力私有数据计算出一个最新的数据表再供service.go中的计算函数进行运算,从而实现对电力数据表的增删改查基本操作;createmytable()调用encryption.go中定义的encryption()来对选定隐私字段作同态加密处理,默认将所有计算服务函数所涉及的同态加密算法都各自加密一份密文以供给各种计算服务使用;之后调用fabric提供的api——stub.putprivatedata将表格数据插入到数据提供方的私有数据库中。13.进一步地,request.go定义了request和response结构体,分别用来存储数据需求方发送来的数据请求和数据共享计算结果;数据需求方使用请求发送方法sendrequest()发送一个数据计算请求插入到公有的请求数据库中,handlesingle和handleall分别是选定处理和批量处理请求的方法,可以通过反射机制调用计算服务函数;电力数据只储存在数据提供方的私有数据库中,因此只有数据提供方可以完成目标字段的计算,且生成数据共享计算结果response结构体,在修改请求字段的基础上添加计算结果,保存在需求方私有的计算报告账本中,数据需求方在privateorg2.go中调用readresponse方法查阅共享的结果——数据计算报告。14.进一步地,使用node.jssdk调用链码操作的基本流程具体为:15.步骤1、从钱包中获取身份信息;16.步骤2、连接到fabric通道网络;17.步骤3、连接到该通道中指定的链码;18.步骤4、构建请求;19.步骤5、提交请求,背书节点进行背书;20.步骤6、处理响应。21.本发明提出一种“智能合约+同态加密算法”的纯软件解决方案。同态加密是基于数学难题计算复杂性理论的密码学技术,特点是密文可以相互直接计算再解密,得到的结果与明文直接计算相同。将同态加密布置在去中心化的智能合约里,让智能合约完成数据分析计算的功能,直接返回报告。这样共享数据是基于数据所有方的数据运算出的报告而不是源数据,且共享全过程上链存证,从而保证供需双方的数据安全,防止数据泄露。附图说明22.图1是基于区块链技术的数据交易共享系统的不足及其解决思路示意图;23.图2是数据共享系统的系统流程图;24.图3是以双组织节点fabric区块链网络为例基于fabric实现的电力数据安全共享操作流程图;25.图4是共享系统的核心系统结构图;26.图5是fabric链码的业务逻辑示意图;27.图6是使用node.jssdk调用链码操作的基本流程图;28.图7是共享系统登录界面示意图;29.图8是数据新增界面示意图;30.图9是数据查询界面示意图;31.图10是数据查询结果示意图;32.图11是数据请求发送界面示意图;33.图12是数据请求处理界面示意图;34.图13是数据响应查询界面示意图。具体实施方式35.下面将结合本发明实施例中的附图对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。36.本发明基于hyperledgerfabric超级账本开源框架实现一种的新型电力数据安全共享方案,以智能合约的执行环境作为数据处理分析的可信任计算环境,以同态加密算法防止数据泄露,结合图1-图13,本发明提出一种基于同态加密智能合约的电力数据安全共享方法,在fabric区块链网络中,数据提供方与数据需求方都是区块链同一通道的不同组织节点,节点间共同审议背书数据共享请求智能合约,于是供需双方通过所述智能合约进行数据共享请求处理,共享记录的每次生成都会产生区块,区块由区块链的节点共同保存,由共识算法确保一致性,因此共享记录不可篡改地保存在区块链账本中,数据提供方使用fabric的私有数据方法上传并维护电力数据,私有数据保存在被授权的组织的节点上的私有数据库上,所述私有数据只可以被授权节点的链码访问,增强区块链网络里电力数据的安全性,并保证智能合约进行数据计算时的数据调用;实际场景可以额外开发满足这两项功能的电力数据库,优化数据存储性能,并将数据的加密步骤和计算结果解密步骤转移到链下,进一步提高智能合约计算效率和密钥的安全性。数据提供方是私有数据的被授权节点,且布置有包含同态加密算法的数据计算智能合约。37.以双组织节点fabric区块链网络为例,供需双方都是区块链同一通道的不同组织节点p1和p2,共同审议背书共享请求智能合约进行数据共享请求处理,共享请求记录不可篡改地保存在区块链账本中。数据提供方p1使用fabric的私有数据方法上传并维护电力数据,且布置有包含同态加密算法的数据计算智能合约。数据需求方p2通过c2客户端向区块链系统发起数据请求,利用共享请求智能合约将数据请求写入请求记录账本。数据提供方p1通过c1客户端读取请求记录账本,在批准通过数据请求后将调用数据计算智能合约让上传的电力数据在智能合约可信任的计算环境下完成数据处理分析,其中选定的隐私数据字段进行同态加密计算,生成计算报告并写入区块链。最后需求方p2通过c2客户端调阅计算报告,数据共享流程结束。38.表1和图2为数据共享系统设计具体的系统功能和系统流程图。用户在登陆后,系统会先判断登陆用户的身份。数据提供方可以向fabric区块链网络上传可共享的数据表,同时生成数据表样例供需求方查阅。数据提供方拥有数据表的增删改查能力,对于隐私级别高的字段数据则可进行同态加密后再保存在区块链网络中。数据需求方查阅数据样例后根据自己的需求选择数据字段和对应的计算服务以形成自定义数据请求,提交到区块链网络。数据提供方审阅数据需求方提交的数据共享请求,批准后区块链网络会运行请求所对应的数据计算并保存。同态加密过的数据会使用特殊的同态加密算法进行运算并解密。最后需求方从区块链网络查阅数据计算的结果。该系统可有效解决了共享数据计算结果的需求,保证了电力数据在共享流程中的隐私安全。39.表1数据共享系统的系统功能[0040][0041]目前在区块链数据共享系统实现隐私安全的数据计算服务是使用“智能合约+sgx技术”的软硬件结合技术方案,其关键特征是将计算部分被移动至链下,以实现隐私或节省计算资源的目的。sgx技术是对intel架构的一个扩展,它能够在硬件级别保护程序的执行过程,即使主机拥有root权限或者虚拟机管理员权限也无法访问其中的代码和数据。sgx技术要求特殊的硬件设施,本质上是通过对区块链参与方增加硬件约束(需要支持tee的cpu),来换取性能和隐私保障,由此提高了硬件成本。本发明则提出一种“智能合约+同态加密算法”的纯软件解决方案,对个别字段的隐私数据进行同态加密,牺牲该字段一定程度的计算效率而换取隐私保障,免却了特殊硬件的购置和使用成本。[0042]基于新型电力数据安全共享方案初步实现了电力数据安全共享系统,可有效解决了共享数据计算结果的需求,保证了电力数据在共享流程中的隐私安全。电力数据共享系统的核心系统结构如图4所示;本发明提出一种基于同态加密智能合约的电力数据安全共享系统,所述共享系统包括web端和fabric网络;web端是负责直接与用户交互展示的应用端,为用户提供系统核心功能的操作入口,web端使用fabric的应用程序sdk进行开发,连接区块链网络交互的服务接口,执行链码(hyperledgerfabric中的智能合约)调用和数据访问;fabric网络中的链码实现数据共享的业务逻辑,定义了区块链中存储的数据结构(即账本内容),上传的电力数据集、共享请求记录和数据计算报告都会转化为键值对存储至fabric网络账本中,可回溯不可篡改,满足业务需求对数据的访问。[0043]在共享系统中,数据提供方上传的电力数据是保存在区块链网络中节点的私有数据库里,逻辑上是根据管理需求,以mongodb数据库的管理模式分成独立的数据表单,即电力数据表,电力数据表是json格式,对应于链码开发中的table结构体。目前开发阶段是实现了以电力数据表为单位的数据计算服务。格式设计如下:[0044][0045]在共享系统中,数据供需两方共用的数据请求记录表即共享请求表,对应于链码开发中的request结构体,由需求方生成并提交至区块链网络,逻辑上保存在公有的请求记录账本中。格式设计如下:[0046][0047][0048]在共享系统中,共享请求表中的请求经由提供方审批后,区块链网络会根据请求内容从私有数据库中提取对应的电力数据进行计算服务,生成的计算结果与请求内容相整合形成计算报告,保存在需求方私有的计算报告账本中,对应于链码开发中的response结构体。格式设计如下:[0049]名称格式描述idint计算报告的索引标识tablenamestring数据表名称attributestring请求计算的字段servicestring需求的计算服务responsetimestring计算报告生成时间resultlist数据计算结果[0050]系统的业务模型需要在fabric链码里进行确立,是系统开发的核心。调用链码需要完成以下功能:[0051]1、对电力数据表的普通增删改查等基本操作;[0052]2、对数据个别字段的同态加密保存、计算功能;[0053]3、数据共享请求生成、处理操作;[0054]4、基于智能合约的数据计算服务。[0055]本系统的实际开发过程分为上层和底层两部分,底层开发包括业务逻辑层中链码的开发和相关的数据操作,上层的开发包括业务逻辑层中需使用node.js-sdk开发的部分功能和界面层的实现。[0056]系统系统的底层开发:[0057]1、fabric网络配置,搭建一个拥有2个组织(org)的模拟网络,2个组织分别代表数据提供方,数据需求方这两种不同类型的用户。在模拟fabric网络中,组织1代表数据的提供方,组织2代表数据的需求方。orderer节点可看作是fabric区块链网络的一个基础设施,为中立节点。[0058]名称hostname组织peer0peer0.org1.example.comorg1peer0peer0.org2.example.comorg2ordererorderer.example.comorderer[0059]在进行fabric网络的模块配置时,需要配置的文件包括configtx.yaml文件、docker-compose.yaml文件。电力数据共享系统功能模块的总体配置如下:[0060][0061][0062]2、业务链码开发:新型电力数据安全共享方案中的两份智能合约具体由链码中的五个go代码文件进行实现,图5展示本系统fabric链码的业务逻辑。[0063]链码中包含encryption.go、request.go、privateorg1.go、privateorg2.go以及service.go五份文件。[0064]service.go中定义了数据提供方为需求方设置的具体计算服务(函数),所述计算服务包括getattributetotal()、getattributeave()和getpearson();在计算过程中,如果计算字段涉及加密字段,则会调用对应同态加密算法在密文的基础上进行计算,只需要对密文计算结果进行解密,并返回解密后的结果即可,保证数据的安全性,为了提高计算效率,对每种计算服务开发特定优化的同态加密算法并部署在encryption.go中,在实际应用场景里需要根据需求开发出更丰富的计算函数:[0065]计算函数服务功能同态加密算法getattributetotal()计算特定字段的累加结果pailliergetattributeave()计算特定字段的平均值pailliergetpearson()计算两个字段的皮尔森相关系数整数向量同态加密[0066]encryption.go中定义了同态加密算法的密钥生成、加密、密文计算、解密方法。链码中可以直接导入对应的方法对插入的数据进行加密和解密。链码初始化时会生成随机初始密钥。密文计算由service.go开发的计算服务决定。同态加密算法允许数据在加密的情况下进行计算,最后解密返回和明文计算相同的结果。而根据同态加密算法的特性,密文运算过程一般与原数据的运算过程不一致。以paillier算法实现getattributetotal()函数(计算特定字段的累加结果)为例,原数据是加法运算,而密文的运算是乘法。原paillier算法仅适用于整数数据的同态加法运算,而电力数据包含浮点类型数据。为了满足浮点数的聚合加法计算,考虑保留千分位的计算精度,在同态加密处理时先将电力数据全部左移三位转化为整数,待计算结束解密后再右移三位获得真实值。在encryption.go中定义了paillier同态加密算法的密钥生成,加密,解密方法。[0067]数据提供方的privateorg1.go定义了table结构体来存储电力数据,数据以表格的形式存在,实现了create和read基本方法;新增表格方法createmytable()是使用json.umarshal将电力数据表解析为一个table结构体,table结构体的tableflag字段是数据表的操作标识符,0表示新增,1表示删除;当某电力数据表被调用时,链码会先遍历该电力私有数据(本质是数据上传日志,即账本)计算出一个最新的数据表再供service.go中的计算函数进行运算,从而实现对电力数据表的增删改查基本操作;可开发缓存数据库保存电力数据表的最新状态,使得程序可以直接访问,免去遍历账本来计算当前值。createmytable()调用encryption.go中定义的encryption()来对选定隐私字段作同态加密处理,默认将所有计算服务函数所涉及的同态加密算法都各自加密一份密文以供给各种计算服务使用;之后调用fabric提供的api——stub.putprivatedata将表格数据插入到数据提供方的私有数据库中。[0068]request.go定义了request和response结构体,分别用来存储数据需求方发送来的数据请求和数据共享计算结果;数据需求方使用请求发送方法sendrequest()发送一个数据计算请求插入到公有的请求数据库(区块链账本)中,handlesingle和handleall分别是选定处理和批量处理请求的方法,可以通过反射机制调用计算服务函数;电力数据只储存在数据提供方的私有数据库中,因此只有数据提供方可以完成目标字段的计算,且生成数据共享计算结果response结构体,在修改请求字段的基础上添加计算结果,保存在需求方私有的计算报告账本中,数据需求方在privateorg2.go中调用readresponse方法查阅共享的结果——数据计算报告。[0069]系统的上层开发:[0070]1、fabricnode.jssdk的使用:上层创建一个应用层为用户封装fabric底层调用链码的操作,开发使用到了fabric的node.jssdk编写nodejs文件来实现上层对链码的调用,使用html+css+js来完成web网页的设计开发。node.jssdk是fabric官方提供的四种语言版本的sdk之一,除了node.jssdk,fabric还提供了javasdk、gosdk和pythonsdk。若要使用node.jssdk,首先需要在js文件中引入第三方包,代码如下,fabric-network提供了fabric支持的gateway编程模型所需要的必要api接口,而fabric-ca-client提供了身份验证接口。[0071]const{wallets,gateway}=require('fabric-network');[0072]constfabriccaservices=require('fabric-ca-client');[0073]结合图6,使用node.jssdk调用链码操作的基本流程具体为:[0074]步骤1、从钱包中获取身份信息;[0075]步骤2、连接到fabric通道网络;[0076]步骤3、连接到该通道中指定的链码;[0077]步骤4、构建请求;[0078]步骤5、提交请求,背书节点进行背书;[0079]步骤6、处理响应。[0080]2、电力数据共享系统的上层开发:在编写好连接fabric网络javascripts文件后,将javascripts文件与web端界面的接口连接,本发明为电力数据共享系统设计的部分web端界面如图7-图13所示:[0081]图7是共享系统登录界面示意图;用户输入用户名以及密码进行登录,在此阶段会进行fabric的gateway的初始化,与fabric网络建立连接。图8是数据新增界面示意图;选择性地对待插入的数据进行字段的加密。图9是数据查询界面示意图;图10是数据查询结果示意图;输入表格编号,可以查询到fabric网络中上传的表格数据。图11是数据请求发送界面示意图;数据需求方提交具体的表格属性请求,聚合查询或者相关性查询。图12是数据请求处理界面示意图;数据拥有者可以查看所有的请求,并对请求进行一对一的处理。图13是数据响应查询界面示意图,数据需求方在数据拥有者处理完成请求之后可以查询到所有的请求结果。[0082]以上对本发明所提出的一种基于同态加密智能合约的电力数据安全共享方法及系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1