陈艺琳,罗娇燕,胡逸芳,易传佳,左黎明
(华东交通大学 理学院,江西 南昌 330013)
随着风能、太阳能、天然气等清洁能源开发技术的不断突破,分布式电源[1]逐渐得到发展。分布式电源可以较好地避免集中供电技术存在的环境破坏和资源浪费问题。随着分布式电源并入到配电网中,为了有效提高分布式电源的利用效率,微电网[2-5]的概念被提出。微电网系统可以促进可再生能源的开发与利用,为负荷提供稳定可靠的电能。在微电网技术快速发展的背景下,面向园区的微电网[6-8]建设也在快速发展。稳定可靠的电力供应是园区正常生产和运营的重要保障,园区微电网的安全控制是保障园区正常运转的关键。微电网的控制成为近年来的研究热点[9-12],文献[13]针对微电网控制器成本高、集成度低等问题提出一种基于嵌入式系统的园区微电网中央控制器,并验证了中央控制器的功能和能量管理策略具有较好的实用性。微电网的控制系统依赖于大量的数据采集与交互,在网络攻击层出不穷的互联网环境下,微电网的正常运营面临着网络攻击的威胁。2015年和2016年末乌克兰曾发生由黑客组织进攻导致的大面积停电事故,2019年3月委内瑞拉电网遭到网络攻击,导致全国18个州范围电力中断超过24小时。此类停电事故造成了巨大的经济损失,为避免此类事故的发生,相关网络安全研究者和电网机构开始对电网和微电网的安全性进行研究[14-16]。园区微电网的控制系统中,包含有园区大量电力设备的用电数据,攻击者一旦通过网络攻击手段窃取或篡改微电网数据,很可能使园区微电网以及其他生产设备发生故障,从而导致园区产生重大安全事故和经济损失。针对园区微电网控制系统中可能存在的信息安全问题,该文提出一种消息可恢复数字签名方案,并基于该方案设计一种适用于园区微电网的安全控制协议,在保证通信效率的前提下,有效保障微电网控制系统数据交互的安全性,保障园区微电网稳定运行。
园区微电网是一个可以实现自我控制、保护和管理的自治系统,主要为商业园区或工业园区提供电能服务。
如图1所示,园区微电网主要包括光伏电源、储能装置、电力负荷等设备。园区微电网通过公共连接点(point of common coupling,PCC)与配电网连接,PCC处的静态开关可以实现微电网在孤网和并网两种运行状态间的平滑切换。在该文所描述的园区微电网中,分布式能源为太阳能,光伏电源和储能装置负责对多个负荷端提供电能和电压支撑,这样可以有效节约从大电网购买电力而产生的经济成本,同时也有效降低了电力传输的负担。在大电网发生突发故障或电能质量不达标时,PCC处的静态开关断开与配电网的连接,园区微电网从并网模式平滑切换至孤网模式独立运行,这种方式有效降低了由于主网故障带来的影响,提高了园区供电的可靠性与安全性,园区的正常运营也得到有效保障。
园区微电网的控制系统是整个园区微电网系统的核心部分,是维持园区微电网安全、稳定、高效运行的重要组成部分。目前主流的微电网控制系统为三层控制结构,分别为配电网调度层、集中控制层、本地控制层。控制系统由各部分控制装置组成,可实现分布式电源控制、储能装置控制、孤网并网切换控制、微电网电能管理以及微电网实时监控等。
(1)配电网调度层。
配电网调度层是一个云服务端,可以实时采集各个控制装置的数据,并将数据进行计算和分析。实时数据和计算分析结果可以在云服务端以图表等形式实时显示。云服务端根据计算分析结果给各个控制装置下达控制指令,同时也能接受上级配电网的调节控制指令,从微电网安全、经济运行的角度协调和调度微电网。
(2)集中控制层。
集中控制层是微电网的控制中心,也是整个微电网控制系统的核心部分,主要控制装置为中央控制器。中央控制器对分布式电源、储能装置、各个负荷的运行数据进行实时采集,对它们的运行状态进行实时监控,并对采集的数据进行计算与分析,得出微电网的实时运行状态。中央控制器可以接受配电网调度层的控制指令给出相应的控制动作。中央控制器根据实时运行状态,实时优化控制策略,控制分布式电源、储能装置、负荷的启动和停止,实现微电网并网状态、孤网状态的平滑切换,保障微电网稳定运行。
(3)本地控制层。
本地控制层由分布式电源控制器、储能控制器、负荷控制器等控制设备组成,接受集中控制层的控制指令,同时通过分布式电源控制器调节分布式电源,通过储能控制器实现储能装置的充放电控制,通过负荷控制器实现对负荷的控制。
在园区微电网的运行过程中,配电网调度层、集中控制层和本地控制层自上而下通过通信向下发送控制指令。在这个过程中存在网络攻击威胁的根源主要在于数据来源缺乏安全认证,该文提出的适用于园区微电网的安全控制协议基于消息可恢复签名方案,可以通过数字签名对数据来源进行安全认证,保障数据传输的可靠性。
消息可恢复的签名方案由系统初始化、密钥生成、签名和验证签名四个算法组成,具体描述如下:
(1)系统初始化:给定安全参数,输出系统参数,公开系统参数。
(2)密钥生成:根据公开的系统参数,生成用户的私钥,并计算系统公钥。
(3)签名:输入系统参数和用户私钥,输出签名,并发给验证者。
(4)验证签名:输入系统参数、签名,输出验证结果,“TRUE”或者“FALSE”,输出恢复的完整消息。
在园区微电网控制系统中,云服务端为签名验证者,中央控制器可以生成私钥并定期更新私钥。中央控制器发送数据封包时,先对数据封包进行签名,然后发送给云服务端,当云服务端对签名信息进行验证,验证成功则输出恢复的完整消息,验证失败则发出警告信息。
基于椭圆曲线上离散对数问题的难解性,提出一种消息可恢复签名方案。为了方便方案描述,首先给出一些常用符号,符号对照如表1所示。
表1 符号说明
下面给出方案的详细描述,方案主要由四个算法构成,具体描述如下:
(1)系统初始化。
(2)密钥生成。
(3)签名。
K=x1y2
(1)
R=rP
(2)
h1=H(m)||H(H(m))⊕m
(3)
h2=H(K,R)
(4)
s=h1⊕h2
(5)
e=sx1+rmodq
(6)
则(e,s)为消息m的签名。
(4)签名验证。
对给定消息m的签名(e,s),验证签名的过程如下:
①依次计算:
R=eP-sy1
(7)
K=x2y1
(8)
(9)
整个签名验证和消息恢复过程正确性证明如下:
R=eP-sy1=sx1P+rP-sx1P=rP
(10)
K=x2y1=x2x1P=x1y2
(11)
(12)
(13)
(14)
(15)
H(H(m))⊕H(H(m))⊕m=m
(16)
在微电网系统中,中央控制器与云服务端的安全控制架构如图2所示。在中央控制器中集成了数据采集模块、数据处理模块和签名模块,云服务端由身份认证模块、信息处理模块组成。
在中央控制器中,数据采集模块负责微电网数据的采集,信息处理模块负责数据格式的处理,将数据处理为规范的消息封包,签名模块负责对消息封包进行签名。在云服务端,信息处理模块负责对接受到的消息封包进行解析,签名验证模块负责对中央控制器发送过来的签名进行验证及消息恢复。
安全协议的交互过程如图3所示。
步骤1:数据采集模块采集实时数据,得到数据系列data1,data2,data3等。
步骤2:数据采集模块将采集的数据系列data1,data2,data3发送到信息处理模块。
步骤3:信息处理模块接收到数据后,将数据处理成data1*data2*data3的封包格式,然后发送到签名模块。
步骤4:签名模块接收到消息封包后,调用签名算法得到签名Sig。
步骤5:签名模块将签名结果Sig发送到云服务端。
步骤6:云服务端接收到消息封包后,签名验证模块调用签名验证算法对消息封包进行签名验证,验证通过则恢复消息,并把消息发送到信息处理模块,验证不通过则发出警告信息。
步骤7:信息处理模块对消息封包进行解析,获得原始数据。
当控制器与云服务端进行通信时,攻击者可以对通信数据进行监听。当通信数据以明文数据传输时,攻击者可以窃取通信双方的通信具体内容。在安全控制协议中,控制器会先将通信数据进行签名处理再发送签名,云服务端对签名进行验证,然后通过签名进行消息恢复。通信的报文内容只含有签名数据,不包括原始消息,原始消息不会暴露在通信过程中,从而保证了数据的机密性。
信息的完整性是指在存储或传输信息的过程中,原始的信息不能允许被随意更改。篡改攻击是破坏数据完整性最常见的方法之一,篡改攻击是指攻击者对拦截到的报文进行篡改,将篡改后的报文进行发送达到攻击目的。在安全控制协议中,当攻击者对报文进行篡改并发送到服务端后,由于报文已经被篡改,服务端进行签名验证时会验证失败,无法对消息进行恢复。从而使得协议可以抵抗篡改攻击,确保数据的完整性。
在网络通信中,攻击者常常利用冒充、伪造等方法向接收方发送报文,在安全控制协议中,采用了消息可恢复式签名技术,服务端可以根据公开参数签名者公开的公钥对接收到的报文进行签名验证,可以有效地保障数据来源的可靠性。
在Windows7 64位操作系统Microsoft Visual Studio 2012微软平台下,采用C#轻量级密码术包(bouncy castle)实现了文中方案。实验结果显示该方案签名所消耗时间为0.010秒,验证所消耗时间为0.219秒。实现结果如图4所示。
在中央控制器中,首先对采集的数据进行封包处理,然后通过该签名方案对数据封包进行签名处理,核心代码如下:
ecc myecc=new ecc();
ECPoint y1=myecc.ecc_point_g.Multiply(x1);
ECPoint y2=myecc.ecc_point_g.Multiply(x2);
ECPoint K=y2.Multiply(x1);
ECPoint R=myecc.ecc_point_g.Multiply(r);
hash myhash=new hash();
byte[] hm=myhash.TanGetDigestByteArray(m);
//计算H(H(m))
byte[] hhm=myhash.TanGetDigestByteArray(hm);
//计算H(H(m))⊕m
byte[] hmxor=HexXorByte(hhm, m);
//计算h1
byte[] h1=new byte[64];
Array.Copy(hm, 0, h1, 0, 32);
Array.Copy(hmxor, 0, h1, 32, 32);
//计算h2
string KK=K.X.ToBigInteger().ToString() + K.Y.ToBigInteger().ToString();
string RR=R.X.ToBigInteger().ToString() + R.Y.ToBigInteger().ToString();
string KR=KK+RR;
byte[] h2=myhash.TanGetDigestByteArray512(KR);
//计算s=h1⊕h2
byte[] ss=HexXorByte(h1, h2);
//计算e
BigInteger s=new BigInteger(ss);
BigInteger sx1=s.Multiply(x1);
BigInteger e=sx1.Add(r.Mod(myecc.ecc_n));
在云服务端,接收到中央控制器发送过来的数据封包后,根据该签名方案的签名验证算法对签名进行验证,核心代码如下:
ECPoint ep=myecc.ecc_point_g.Multiply(e);
ECPoint sy1=y1.Multiply(s);
ECPoint R1=ep.Subtract(sy1);
ECPoint K1=y1.Multiply(x2);
string KK1=K1.X.ToBigInteger().ToString()+K1.Y.ToBigInteger().ToString();
string RR1=R1.X.ToBigInteger().ToString()+R1.Y.ToBigInteger().ToString();
string KR1=KK1 + RR1;
byte[] H2=myhash.TanGetDigestByteArray512(KR1);
byte[] H1=HexXorByte(H2, ss);
byte[] H1L=new byte[32];
byte[] H1R=new byte[32];
Array.Copy(H1, 0, H1L, 0, 32);
Array.Copy(H1, 32, H1R, 0, 32);
byte[] HL=myhash.TanGetDigestByteArray(H1L);
//恢复消息m
byte[] m1=HexXorByte(HL, H1R);
byte[] left=H1L;
byte[] right=myhash.TanGetDigestByteArray(m1);
if (ByteEquals(left,right))
{
Console.WriteLine("验证签名通过!");
Console.WriteLine("消息恢复成功!");
Console.WriteLine("恢复的消息:{0}", Encoding.UTF8.GetString(m1));
}
else
{
Console.WriteLine("验证签名失败!消息恢复失败!");
}
在Windows7 64位操作系统Microsoft Visual Studio 2012微软平台下,采用C#轻量级密码术包(bouncy castle)运行文献[16-20]中方案对应的协议,分别运行100次,计算签名过程与验证签名的平均耗时并进行比较,各协议签名过程与验证签名的平均耗时如图5所示。
在签名过程中,文献[16]对应协议的签名过程平均耗时0.022秒,文献[17]平均耗时0.114秒,文献[18]平均耗时0.038秒,文献[19]平均耗时0.044秒,文献[20]平均耗时0.032秒,文中方案签名过程平均耗时为0.013秒。相比其他协议,文中方案的安全控制协议在签名效率方面存在优势。
在验证签名过程中,文中方案的验证签名过程平均耗时为0.22秒,相比文献[16-20]的验证签名过程平均耗时都要高,这是由于验证签名的过程不仅需要签名的验证,而且需要消息的恢复,其计算复杂程度高于签名过程。
综合来看,文中方案协议的签名过程运行效率较高,适合在计算能力差的设备上运行,验证签名过程运行效率一般,需要在计算能力高的设备上运行。在安全控制协议中主要针对的是中央控制器的性能,在中央控制器上进行的为签名过程,验证签名在云服务端进行。在微电网控制系统的结构中,中央控制器受限于设备本身,在中央控制器运行的协议需要较高的运行效率,而云服务端采用的服务器集群,计算能力很高。因此,文中方案的签名过程运行在中央控制器,验证签名过程运行在云服务端,可以保障协议的安全高效运行。
针对当前园区微电网控制系统在数据交互过程中存在安全性认证和数据完整性保护问题,提出了一种消息可恢复的数字签名方案,并进一步设计了一种适用于园区微电网的安全控制协议。对安全控制协议进行了实验与仿真,结果表明该方案在控制器端的效率较高。该方案应用到园区微电网的控制系统中,可以提高系统的安全性,保障园区微电网的安全稳定运行。