本发明涉及电力设备技术领域,尤其涉及一种应用tls协议的电能表证书初始化方法。
背景技术:
随着智能电网的日益发展,世界各国对于智能化用户终端的需求日益增大,据统计,在未来5年,随着智能电网在世界各国的建设,智能电表在全球安装的数量将高达2亿余只。同样,随着我国智能电网建设的进展,作为用户端的智能电表的需求也会大幅增长,保守预计市场将会有1.7亿只左右的需求。然而,智能电表会不经意地泄露用户使用电量的详细信息给电力公司。例如,智能电表会记录用户在任意时刻的电量使用情况。而由智能电表收集到得大量信息可能会给消费者带来严重的后果。因此,用户对智能电表的中隐私问题越来越关心。所以,在智能电网中,研发具有隐私保护的智能电表是非常重要的。
作为当前最好的网络传输加密协议,ssl/tls协议应用于智能电表上,能够大幅度提高电能表远程通信中的数据安全问题,但现有技术中还没有应用tls协议的电能表的证书初始化方法。
技术实现要素:
本发明的目的是提供一种应用tls协议的电能表证书初始化方法,使移植到智能电表上的ssl/tls协议能够遵循智能电表通信规则,进行客户端和服务端双向认证。
本发明的技术方案是:
一种应用tls协议的电能表证书初始化方法,其特征在于包括以下步骤:
步骤一:抄表客户端和电能表设立共同的主密钥;
步骤二:电能表上电后,hdlc协议层建立协议类型为sym的连接;
步骤三:电能表与抄表客户端进行加密的数据帧信息交互,预存双方的证书。
上述的步骤一具体为:
步骤101:在厂内设置抄表客户端和电能表的主密钥mk为初始秘钥initialmk;
步骤102:在厂外更新主密钥mk,将初始秘钥initialmk更改为厂外主秘钥currentmk即mk’,计算公式为:
mk’=mac(mk,z1)
其中,mk为主密钥,z1为用户自定义的参数;
步骤103:清空电能表内的数据帧信息。
上述的步骤三中数据帧信息包括帧序号,帧长度,帧计数值,加密信息和mac值;其中,所述的mac值通过aes_cmac算法由帧序号,帧长度,帧计数值和加密信息算出,所述的加密信息包括安全套件清单、证书和最大帧长。
上述步骤三包括以下步骤:
步骤301:抄表客户端向电能表请求帧计数值,电能表回复存储在表端的帧计数值;
步骤302:抄表客户端向电能表请求表端支持的安全套件,电能表回复表端支持的安全套件清单;
步骤303:抄表客户端向电能表发送证书和私钥,电能表验证证书的有效性和证书内公钥和私钥的配对性,然后存储证书和私钥;
步骤304:抄表客户端向电能表发送抄表客户端的证书,电能表验证证书有效性并存储;
步骤305:抄表客户端向电能表请求表端支持的最大帧长,电能表回复电能表端支持的最大帧长。
上述加密通信过程中加密和解密具体包括以下步骤:
步骤3001:初始化加密秘钥k_enc、加密mac秘钥k_mac、解密秘钥l_enc和解密mac秘钥l_mac
步骤3002:数据解密;电能表端判断加密后的数据帧信息中帧计数值是否大于电能表端的帧计数值,若大于,通过aes_cmac算法根据加密后的数据帧信息计算mac’值,计算公式为;
mac’=mac(l_mac,message);
其中,message为不包括mac值的数据帧信息;
验证mac’值和mac值是否相等,若相等,根据解密秘钥l_enc对抄表客户端发送的数据帧信息中的加密信息进行解密,计算公式为:
plaintext=mac(l_enc,encodedmessage);
其中,encodedmessage为加密信息,plaintext为加密信息解密后的明文信息;
步骤3003:数据处理与准备,电能表根据相应的帧序号准备和处理对应的数据;
步骤3004:数据加密;电能表将帧计数值fc加1得到回复的帧计数值fc’,然后根据加密秘钥k_enc加密数据帧信息,计算公式为:
encodedmessage=mac(k_enc,plaintext);
然后根据加密mac秘钥计算电能表需向抄表客户端发送的mac值,附于数据帧信息尾,计算公式为:
mac=mac(k_mac,message)。
上述步骤3001中加密秘钥k_enc、加密mac秘钥k_mac、解密秘钥l_enc和解密mac秘钥l_mac通过aes_cmac_128由主密钥mk’计算得到,计算公式为:
l_mac=mac(mk’,0x11||fc||meter_id);
l_enc=mac(mk’,0x10||fc||meter_id);
k_enc=mac(mk’,0x00||fc||meter_id);
k_mac=mac(mk’,0x01||fc||meter_id)。
上述证书初始化过程中,若mac值验证失败即mac’值和mac值不相等,或解密后证书验证及证书中公私钥对验证失败,则证书初始化失败,断开当前hdlc协议连接。
本发明的有益效果:
本发明自定义的证书初始化流程,保证了证书传递过程中的安全性及有效性,为tls协议在电能表中的实施提供坚实的安全保障。
附图说明
图1是本发明的证书初始化流程图。
图2是本发明的整体处理流程图。
图3是本发明的解密流程图。
图4是本发明的加密流程图。
具体实施方式
下面将参照附图更详细地描述本发明的优选实施方式。虽然附图中显示了本发明的优选实施方式,然而应该理解,可以以各种形式实现本发明而不应被这里阐述的实施方式所限制。
作为移植到智能电表上ssl/tls协议,需要遵循智能电表通信规则,通信连接的建立基于双方的身份认证,因此,tls握手流程需要进行客户端和服务端双向认证,这就需要在tls握手前在表内预先存储双方的证书,即进行证书初始化。
该操作由由自定义的sym协议实现,主要分五步进行:
(1)sym1:gw向表请求表帧计数值;
(2)sym2:gw向表请求所支持的安全套件(listoftheciphersuites);
(3)sym3:gw向表发送表端证书和私钥,表端存储证书和私钥;
(4)sym4:gw向表发送gw证书,表端存储gw证书;
(5)sym5:gw向表请求支持的最大数据长度;
数据帧信息采用加密加认证的加密方式,数据帧格式为:
帧序号帧长度帧计数值加密信息(或空)mac值
采用aes_cbc_128算法进行数据加密,aes_cmac算法计算mac值。各秘钥通过aes_cmac_128算法由主密钥mk扩展而来:
k_enc=mac(mk,0x00|(|fc|)|meter_id)
k_mac=mac(mk,0x01|(|fc|)|meter_id)
l_enc=mac(mk,0x10|(|fc’|)|meter_id)
l_mac=mac(mk,0x11|(|fc’|)|meter_id)
其中,k_enc,k_mac,l_enc,l_mac分别为加密秘钥,加密mac秘钥,解密秘钥,解密mac秘钥。c表示当前帧计数值,meter_id标识所述电能表的id,mk为主密钥,初始mk在厂内设置为initialmk,mk通过mk’=mac(mk,z1)计算新的主秘钥currentmk,其中mk’为新的主密钥,mk为当前使用的主密钥,z1通过厂外命令下发,当获得新的主密钥时,清零帧计数值fc。
电能表通信中,若hdlc建立了协议类型为sym的连接时,开始进行sym通信。当收到sym数据帧时,电能表中解密与加密处理方法(附图3)如下,其中,出厂前,表内主密钥mk初始值已设置:
(1)数据解密。表端先判断当前的fc是否大于电能表端的帧计数值,如果fc判断无误,根据接收到帧信息中fc值与表中存储的mk,meter_id计算解密用的秘钥。
l_enc=mac(mk,0x10|(|fc|)|meter_id)
l_mac=mac(mk,0x11|(|fc|)|meter_id)
根据解密mac秘钥lmac计算mac值,验证接收帧数据中mac值是否正确,在mac正确的基础上,如果有加密数据,则采用l_enc解密。(2)数据处理与准备。根据相应的数据帧作相应的数据处理与回复。
(3)数据加密。将fc加1得fc’,作为回复的帧计数值,采用fc’与mk,meter_id计算加密用的秘钥。
k_enc=mac(mk,0x00|(|fc’|)|meter_id)
k_mac=mac(mk,0x01|(|fc’|)|meter_id)
若有回复的数据内容,则加密该数据,并计算所有帧数据的mac,附于帧尾。
若证书初始化过程中,mac验证失败或者证书验证无效,则证书初始化失败,断开当前hdlc连接。证书初始化完成后,存储当前帧计数值。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。