基于电力采集系统的安全传输机制研究
扫描二维码
随时随地手机看文章
引言
随着我国电力行业的发展,用户用电信息通过电力采集系统(PoweracquiSitionSyStem)实现了用电监控、负荷管理、线损分析,达到了自动抄表、错峰用电、负荷预约和节约用电成本的目的。当前的电力采集系统主要分为:系统主站(SyStemmaSterStation)、传输信道(TranSmiSSionchannel)、采集终端(AcquiSitionterminal)和智能电能表(Smartmeter)。其中采集终端与主站进行通信时的传输信道通常称之为"上行通道",与智能电能表进行通信时的传输信道通常称之为"下行通道"。为了保证通信信道中的数据传输不被外界干扰,保证数据的安全可靠性,根据国网最新发布的《电能信息采集与管理系统第4-5部分:通信协议一面向对象的数据交换协议》(DL/T698.45一2017),在应用层建立应用连接。在建立应用连接时进行加密密钥协商,产生回话密钥,在进行安全传输时,用于计算数据验证码和链路用户数据的加密。
1安全传输的意义
在当前的电力采集系统中,数据传输大部分都依赖于公网或者专网,网络传输安全的重要性正伴随着全球信息化时代发展的加快而变得越来越重要。那么在电力采集系统中,保护电力采集终端信息安全也是至关重要的。
(1)保护终端信息在传输过程中不被非法挖掘。如果终端信息安全得不到保障,不法分子就可以通过数据挖掘获取有价值的数据,恶意篡改用户或者终端数据,造成严重影响。
(2)保护终端信息的安全和完整性。目前正处于大数据时代,每日由网络产生的数据量非常庞大,数据类型复杂繁多。网络数据包含着系统数据和用户数据,涉及用户用电情况等敏感信息,如果终端数据缺失或者不完整,就有可能造成主站系统误判,对电力用户造成不可避免的影响。
(3)保护运行系统安全。在电力采集终端系统中,存在着大量的系统数据和用户用电信息、用电量等数据,因此,需要高级别的安全防护,确保网络终端不被监控,否则,一旦系统崩溃也是很严重的问题。
因此,防止信息被破坏、泄露、篡改等恶性现象发生,对于保障个人信息安全或者商业信息安全有着重大意义。
2RSA加密技术和AES加密技术的特点
首先,RSA加密技术和AES加密技术的加密算法所适用的业务场景不同,两者没有可比性。
RSA是一种非对称加密算法(ASymmetricencryptionalgorithm),由于效率低下,存在大量的取模运算,加密速度慢,只能针对少量内容进行加密[3],例如利用RSA对动态随机对称密钥的私钥进行加密、HASH值摘要加密,所以绝大多数人将RSA技术运用于密钥交换、数字签名或者保护随机对称密钥等方面。非对称加密应用有支付宝、微信等支付做签名验证,苹果开发证书签名等。
AES是一种对称加密算法(Symmetricencryptionalgorithm),由于AES的加密效率高,可以对大量数据内容进行加密,因此AES主要应用的业务场景是对于传输内容进行加密。从算法实现角度来看,AES是十余种算法历时五年甄选之后的佼佼者,均衡了软件实现、硬件实现:从密码学角度来看,AES没有对未知数学问题的依赖,即为数学可证明的安全可靠:再从产品的角度上看,AES算法标准化之后,很多硬件芯片和软件工具都实现了对AES的支持,因此应用AES有助于减少工作量和失误:最后从最重要的安全层面分析,至今为止,AES-128还没有出现过被破解的先例。所以,基于密钥交互的应用连接,AES算法是"安全"的选择。
对于对称加密和非对称加密,对称加密算法产生密钥对是一样的,即使用相同的密钥加密和解密,因此对称加密所生成的密钥不能泄露:而非对称加密算法则相反,产生的密钥对不同,即分为公钥及私钥,使用公钥加密时选择私钥解密,使用私钥加密时选择公钥解密。因此,可以根据这一机制,利用好RSA和AES各自的特点,组合使用,能够有效保证数据在传输过程中的完整性和安全性。
3实现安全传输的几个关键技术
3.1AES、RSA加密技术
AES加密技术流程如图1所示。
明文P:没有经过加密的数据,若将此时的数据进行传输,可能造成数据被恶意篡改。
密钥K:用来加密明文的密码,也可以称之为加锁或者解锁的钥匙。在对称加密算法中,加密使用的密钥和解密使用的密钥是相同的。密钥是由接收方和发送方经过协商沟通后产生的,其不可以在网络上直接传输,因为一旦在传输过程中泄露,后果是很严重的。因此,密钥K应该经过非对称加密的方式加密过后再通过网络传输的方式发送给对方,也就是以下介绍的RSA非对称加密算法。
密文C:经过AES加密函数加密后的数据。AES加密函数,以C语言为例:
char*AESencode(char*K.char*P){//加密函数函数体)
该函数函数名为"AESencode",形参为密钥K和明文P,那么密文C=AESencode(K.P)。
AES解密函数,以C语言为例:
char*AESdecode(char*K.char*C){//加密函数函数体)
该函数函数名为"AESencode",形参为密钥K和密文C,那么明文P=AESencode(K.C)。
AES为分组密码,每一组密码的长度相等,每次加密时只针对一组数据进行加密。
AES标准规范如表1所示。
在AES标准规范中,以AES-128加密标准为例,也就是密钥的长度为128位。上面说到密文C=AESencode(K.P),在加密函数中会执行一个加密轮函数,并且执行10次这个轮函数,即一个明文分组会被加密10轮,AES的核心就是实现一轮中的所有操作。
RSA加密技术流程如图2所示。
客户机(电力采集系统中的主站)通过RSA加密技术算法生成公钥和私钥,通过网络对外发布公钥,服务器(电力采集系统中的电力采集终端)获取到公钥时,就可以使用公钥对相关信息进行加密,使用加密后的密文向主站发送信息,主站在接收到电力采集终端的信息时,使用私钥进行解密得到明文。
对AES加密技术和RSA加密技术的特点进行分析可知,RSA加密效率比较低,不适用于对大量数据进行加密,然而,电力采集终端设备生成的报文所占空间比较大,很显然只适合使用AES加密技术进行加密。因此,可以使用RSA和AES组合的方法对报文进行加密传输。使用AES对电力采集终端的报文进行加密得到AES密钥,由于AES密钥是对称的,所以为了防止密钥被窃取,使用RSA公钥对AES密钥进行加密,最后将加密后的报文和密钥通过通信信道发送给主站,主站首先需要使用RSA私钥对AES密钥进行解密,然后再用AES密钥对报文进行解密,对报文信息进行解读。
RSA公钥和私钥的生成由电力采集终端完成,使用Go语言实现,利用"crypto/rSa"和"crypto/rand"以及"crypto/x509"等官方库,生成密钥对(公钥和私钥)的时候使用rSa.GenerateKey方法,通过传入随机数生成密钥对。
AES加密和RSA加密结合使用流程图如图3所示。
3.2建立通信框架
(1)由于RSA密钥对是由电力采集终端所生成的,因此需要由客户机通过get读取服务获取电力采集终端中的RSA公钥信息。
(2)发起应用连接请求,在其中传输AES密钥,而AES密钥则通过获取到的RSA公钥进行加密。在RSA和AES组合应用实现之后,为了访问服务器的接口类对象,需要根据《电能信息采集与管理系统第4-5部分:通信协议面向对象的数据交换协议》(DL/T698.45一2017),在应用层建立应用连接,并且创建一个可以相互通信的语境,这个语境主要包含应用语境的信息、使用身份验证机制的信息以及其他所有需要的信息,这些信息包含在"应用连接"的接口类对象中。在建立应用连接之前,需要先建立预连接。预连接服务适用于交换网络传输信道、公网、专网等等,当其完成物理连接,建立起透明通道之后需要在此基础上建立预连接并进行管理。建立应用连接时,由客户机向服务器发起连接请求,用于确认客户机和服务器双方通信的应用语境,包含协议一致性、功能一致性以及安全认证等内容。而服务器可以同时支持若干个应用连接,并且互不干扰,但是对于同一个客户机,同时只能支持一个应用连接,当同一个客户机再次请求建立应用连接时,服务器如果接受了客户机的再次请求,则前一个应用连接自动失效。
建立应用连接时应用层的关键部分组件,借助于请求(.requeSt)、指示(.indication)、响应(.reSponSe)、确认(.confirm)等相关服务。客户机应用进程首先调用请求服务,基于预连接的底层连接,客户机应构造一个请求服务时所用的APDU,该APDU是发送给应用层的第一个报文。
(3)服务器收到建立应用连接的请求后,对AES密钥使用RSA的私钥进行解密,得到正确的AES密钥。服务器应用层从接收到的请求APDU中提取出来的适当参数调用指示服务程序,向服务器应用进程发出指示,服务器应用进程分析接收到的指示服务原语,表明接受或者不接受提出的连接请求。如果成功的话,服务器应构造相应的响应APDU,并且在目前建立预连接的基础之上发送给远程客户机应用层。
(4)在客户机收到服务器建立应用连接的响应后,服务器能够在该连接内接收数据通信服务的请求,至此,应用连接建立完毕,服务器进入数据通信阶段。后续客户机和服务器之间安全传输就基于解密后的AES密钥进行。
(5)服务器主动上报的处理。由于服务器在主动上报时可能未与客户机建立应用连接,无法通过AES密钥进行通信,因此为了保证安全传输的可靠性,只能选择放弃报文加密的效率,直接基于RSA密钥进行通信,服务器使用RSA私钥进行加密,客户机在收到服务器主动上报的密文之后,使用RSA公钥进行解密,得到正确的明文。
3.3传输报文的分帧处理
在电力采集系统中,为了避免主站和电力采集终端通信时,报文所占空间太大导致通信信道阻塞以及主站或电力采集终端报文处理不及时,同时也是为了避免完整的信息泄露,需要在建立应用连接时,规定单次发送报文的最大字节数。在请求服务中多重引用属性时,其服务参数编码形式的长度不能超过单次发送报文的最大字节数。
分帧传输分为链路层分帧和应用层分帧,其中应用层分帧仅支持针对请求服务的应答分帧,链路层分帧支持所有的应用层服务。应用层分帧的每一个片段,即每一帧,都可自解析得到报文信息内容,不需要在接收完所有的片段之后才能一次性解析,可以边接收边处理,每一帧都包含完整的对象属性。而链路层分帧的每一个片段不可自解析,需要接收到所有的片段之后组成完整的698报文才能解析处理。
4结语
目前,在电力采集系统中安全传输使用安全请求组包的形式,其中应用数据单元可以选择数据类型为字符串的明文应用数据单元或者密文应用数据单元,随后在APDU的末尾包含数据验证信息,数据验证信息可选择数据验证码、随机数、随机数+数据MAC校验或者安全标志。
本文讨论的RSA加密和AES加密组合这种加密技术,可以通过在数据验证信息中添加一个选项,作为第五个选项供客户机选择,结合AES对报文加密、RSA对AES密钥加密,能够有效保证数据安全高效地进行传输和验证。