蔡玺,张文轩
(甘肃同兴智能科技发展有限责任公司,甘肃兰州 730000)
电力行业日志数据存储的主要结构特征是集中式部署和分布式应用,这一方式为核心网络带来了巨大的通信压力,造成了端到端的数据存储时间增长。随着智能电网、新型电力设备的不断更新以及电网信息化的不断发展,电力系统分布式计量已经成为电力系统的一种重要手段。为了安全、可靠、高效地存储和分享电力数据,相关的电网数据存储方法引起了学者的重视和研究。文献[1]提出了基于预分区策略的存储方法,该方法首先构建了电网数据存储模型,该模型在预分区机制下结合数据快速存储方法,将负载均衡存储到数据库中;文献[2]提出了基于K-距离拓扑的存储方法,该方法通过寻找K-距离拓扑子结构来实现数据的安全存储,优先选择距离最近的节点,结合K-距离计算实现总体存储性能的提升。上述两种方法使用过程中,存在数据存储过程容易被外界入侵的风险,因此,提出了电网区块链多层次日志数据分布式存储方法。
区块链技术是将一种数据区块按照时间顺序依次相连的结构,结合加密算法来保证数据分布式存储的安全。因此,在数据存储和点对点传送方面,通过共识机制使各个区块结构达到一致性[3-4]。基于该原理构建的分布式存储模型如图1 所示。
由图1 可知,该模型主要用于对存储的告警日志进行加密,并利用报警记录对存储的结果进行校验[5-6]。将本地告警日志转入到区块链上,将存储系统与区块链技术相结合,将报警记录存储在分布式数据库中,然后通过关键字进行查询,从而实现了对日志数据的安全存储。
以电网公司为核心的区块链结构模式,当电网节点加入区块链之后,它就会生成一种加密的密钥,并将其发送给电网公司用于储存。
将日志数据采集节点预先发送给采集基站,该基站的第i个数据采集节点Ki通过无线通信向多个基站传输数据,可表示为:
2.2.1 源地址对目的地址威胁程度分析
将多层次日志数据分布式写入到客户端,计算日志数据对目的主机造成的威胁程度的公式为:
公式(2)中,N表示第N次告警;ωi表示告警权重;ni表示告警出现的次数[12]。在相同的警报系统中,统计不同级别的报警次数,并将其转换成统一格式,从而得到相同警报系统中,源地址对目标的威胁程度[13]。
2.2.2 区块链密文索引结构构建
通过对报警数据的预处理,提取出具有重要意义的数据属性,组成告警向量,并通过日志索引构建一个文件,从而形成该文件的索引结构,如图2所示。
图2 密文索引结构
将日志元数据、日志索引结构、日志对称密钥和日志上传方的身份认证信息一起打包,并将打包数据传输至区块链节点。
2.2.3 数据加密处理
在区块链中,所有的有效操作都会被记录在一个以分享为载体的区块上。在该区块上使用隐私加密保护机制,利用共享技术实现了网络节点之间的数据交换[14]。在这种基础上,设计一种加密方法,即抽取数据中的密钥,并利用数据查询的私有密钥对其进行加密,从而生成一种密码:
公式(3)中,SCi表示区块链中每个节点都对应的私钥。将密文存储到数据库中,并使用哈希函数映射到关键字过滤器中,由此得到密文存储位置:
公式(4)中,Wi表示映射位置,H(·)表示映射函数。将密文存储位置传送到区块链中,方便数据安全存储。
2.2.4 基于PoW共识算法的数据安全存储
在收到密码验证信息后,将由区块链节点进行解密,获取身份信息[15]。在确认日志上的身份信息后,将记录元数据存储到区块中,由此构建的索引结构便于找到告警记录。同时将记录对称密钥存储在区块中,完成搜索后,将其提交给日志分析员,利用PoW 一致性算法竞争区块生成权限[16]。由于PoW 一致性算法总是选择最长的链路,所以攻击者要使用双重攻击,其伪造的区块链长度必须比真实区块更长。因为攻击者必须要在真实交易得到确认后,才能展开攻击,而交易确认通常需要若干个区块。所以假设攻击开始时,攻击区块落后真实区块h个,这种假设是合理的。那么有:
当攻击方的运算量不比受信任节点低时,攻击方就会获得成功;当攻击方的运算能力低于受信任节点时,攻击者的攻击成功率会以指数形式递减。在此过程中,获授权的节点会将新的区块与其所维护的区块链相关联,并对该区块的索引进行更新,以实现对该区块数据的分布式存储。
在特定容忍范围内,区块链具有一定不可篡改和不可复制性。为了确保数据的真实性、可靠性和完整性,采用了密码学算法。数据的发送端签署了一个散列值,并完成了数据区块共识。
假设数据区块共识过程中存在m个节点,则使用区块链技术提供的容错能力为:
公式(6)中,m表示恶意节点个数。在共识过程中失效节点不超过全部节点的。为了证明数据分布式存储的安全性,将全部节点分成三部分:
公式(7)中,a1、a2均表示可信节点集合;S表示恶意节点组成的集合。如果恶意节点要破坏一致进程,就必须尝试修改电网实际运行状态,即便是出现了“分叉”,也会伪造一个区块链。如果一个恶意节点希望“分叉”,则其会与受信任的节点达成一致,然后发布一个新的区块。在不通知被信任的节点前提下,与其进行二次协商,从而取消和信任节点之间的一致性。为了撤销与可信节点的共识,必须符合公式(8)的条件:
通过上述公式,使得电网区块链多层次日志数据在分布式存储过程中,恶意节点数量达到了最小值,因此该方法在共识过程中能够起到有效阻止恶意破坏的目的,避免数据库中出现虚假广播恶意数据。
为了验证基于区块链技术存储日志数据的合理性,部署了3 台装有官方客户端的服务器,并在该服务器上部署区块链节点。选择我国某地区电网有限责任公司的2019 年-2021 年码表记录作为实验数据,由此完成实验模拟系统的搭建。
客户机节点向IPFS 请求发送电力数据,IPFS 会将该数据散列值作为IPFS 的唯一标识,它的主要存取码和功能显示如下:
Func (Power grid) query(The client node issues a request for uploading electrical energy data to the whole block chain)peer.
{
fmt.Write formatted output“(/n”)
fmt.The federation chain node requests to invoke the keyword“(node name/n”)
fmt.The federation chain node requests to invoke the keyword“(Hash ID/n”)
Return shim.Success(nil)
}
客户端节点发送电力数据下载请求,由联盟节点请求调用密钥,以散列值和信息类型作为输入。在各个节点达成共识后,将智能合同的执行情况写入到一个区块链账簿中,并将其反馈到采集节点中,以存储客户的数据。
在00:00-24:00 访问过程中,每隔4 h 采集一次数据,得到如下三种日志数据:
种类1:在交流混合配电网中,交流电压在220 kV以上,直流电压在300 kV 以上,此时得到的功率数据为:70 kW、90 kW、110 kW、95 kW、75 kW、60 kW。
种类2:在交流混合配电网中,交流电压在110 kV以上,直流电压在200 kV 以上,此时得到的功率数据为:40 kW、60 kW、80 kW、65 kW、60 kW、35 kW。
种类3:在交流混合配电网中,交流电压在110 kV以上,直流电压在50 kV 以上,此时得到的功率数据为:20 kW、45 kW、70 kW、50 kW、40 kW、25 kW。
在数据采集过程中发现,电网产生数据的高峰期在每天08:00-12:00。
对于日志数据存储的完整性校验,设定了如下实验指标:
公式(9)中,α表示随机数;χ表示密钥参数;n表示需要待存储的分块参数;j表示表示参数分块数量。将该公式计算结果发送给实验模拟系统,当系统接收到应答信息后,将其与预先设定的阈值D′进行对比。如果D=D′,则说明数据存储完整,反之则不完整。
将基于预分区策略的存储方法、基于K-距离拓扑的存储方法作为所提方法的对照方法,分别利用三种方法存储上述三种日志数据,并验证对应方法的存储完整性,即存储的数据是否与实际数据一致,如图3 所示。
图3 三种方法存储数据对比分析
由图3 可知,对于种类1:使用基于预分区策略的存储方法、基于K-距离拓扑的存储方法在00:00-24:00 期间,与实际功率数据分别存在25~35 kW 的误差。所提方法在00:00-24:00 期间,与实际功率数据一致;对于种类2:使用基于预分区策略的存储方法、基于K-距离拓扑的存储方法在00:00-24:00 期间,与实际功率数据分别存在9~17 kW 的误差。所提方法在00:00-24:00 期间,与实际功率数据一致;对于种类3:使用基于预分区策略的存储方法、基于K-距离拓扑的存储方法在00:00-24:00 期间,与实际功率数据均存在25 kW 的误差。所提方法在00:00-24:00 期间,与实际功率数据存在最大为2 kW 的误差。综合数据结果可知,所提方法存储的数据与实际数据基本一致,说明使用该方法存储结果具有完整性。
针对电网日志数据存储结果不完整的问题,提出了电网区块链多层次日志数据分布式存储方法。实验结果表明,使用区块链技术分布式存储电网日志数据方法有效解决了存储不完整问题,并结合加密算法实现了日志数据加密存储。