具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,为本发明电表数据的安全处理装置结构框图,把包括:身份认证装置101、数据加密装置102、数据解密装置103及MAC检验装置104。通过本发明的电表数据的安全处理装置将电网系统中的8字节认证数据转换为符合SM1算法要求的16字节的输入数据,然后对该输入数据进行加密,生成加密结果,并根据认证数据的指令对生成的加密结果进行处理,生成数据处理结果,同时还用于将电网系统中传输的命令数据进行SM1算法的加密、解密。
如图2所示,身份认证装置101包括:离散因子转换单元1011,用于将从外部获取的8字节离散因子转换成16字节离散因子输入数据;
子密钥生成单元1012,用于根据预存的主密钥对16字节离散因子输入数据进行SM1算法加密,生成16字节子密钥;
认证因子转换单元1013,用于将从外部智能卡获取的8字节认证因子转换成16字节认证因子输入数据;
表端认证数据生成单元1014,用于使用子密钥对认证因子输入数据进行SM1算法加密,生成8字节表端认证数据;
加密指令发送单元1015,用于发送包含认证因子的加密指令给外部智能卡;
卡端认证数据接收单元1016,用于接收外部智能卡发来的根据认证因子和SM1算法加密生成的卡端认证数据;
认证结果生成单元1017,用于将表端认证数据和卡端认证数据进行一致性比较,生成认证结果;
如图3所示,数据加密装置102包括:
待加密数据生成单元1021,用于将表示命令数据域的明文数据长度的长度字节添加到明文数据前生成待加密数据;
待加密数据转换单元1022,用于将待加密数据按顺序划分为多个16字节子数据块D1、D2…Dn;
加密结果生成单元1023,用于根据预存的SM1密钥采用SM1算法分别对所述的16字节子数据块D1、D2…Dn进行加密,生成加密结果;
如图4所示,数据解密装置103包括:
数据转换单元1031,用于将接收到的加密的命令数据中的命令数据域数据转换为16字节数据块;
明文数据生成单元1032,用于根据预存的SM1密钥采用SM1算法将16字节数据块进行解密,生成明文数据;
如图5所示,MAC值计算装置104包括:
初始值生成单元1041,用于将获取的8字节随机数转换为16字节初始值,将8字节随机数加8字节随机数求反值作为初始变量;
数据块生成单元1042,用于将报文中的5字节命令头CLA、INS、P1、P2、LC和报文命令数据域的数据连接形成报文数据块,报文数据域的数据包括明文或密文;
报文数据块转换单元1043,用于将报文数据块转换为多个16字节报文子数据块B1,B2…Bn;
MAC值计算单元1044,用于根据预存的SM1密钥、初始值、16字节报文子数据块采用SM1算法进行计算,进而生成4字节MAC值。
智能表具的安全需求主要包括,数据可靠性、完整性校验,数据访问权控制等方面,在智能表具的安全管理中,涉及密钥分散、身份认证、权限认证、加密、解密及安全报文MAC计算,在本发明中均采用SM1算法保证数据安全。
如图6所示为密钥分散的具体步骤,步骤S201,接收8字节分散因子;步骤S202,对接收到的分散因子求反;步骤S203,将接收的分散因子加上分散因子求反值作为输入数据;步骤S204,用主密钥KEY对输入数据进行SM1算法加密生成子密钥,加密结果为16字节作为子密钥。
电网系统中,通过认证数据对卡进行内部验证或外部认证,认证数据通过认证因子产生。图7所示为认证数据的计算步骤。认证因子为8字节随机数。对于外部认证,认证因子由卡发送给接口设备;对于内部认证,认证因子由接口设备发送给卡。
步骤S301,对认证因子求反;步骤S302,将认证因子加上认证因子求反值作为输入数据;步骤S303,采用认证密钥对输入数据进行SM1算法加密生成加密结果,加密结果为16字节;步骤S304,将获得的加密结果左右8字节进行‘异或’获得8字节认证数据。
本发明的身份认证装置对接入电表设备进行身份认证时,根据密钥分散步骤生成子密钥,采用生成的子密钥对接入设备进行身份认证。如图8所示,为本发明实施例对插入智能电表的CPU卡进行身份认证的信令图。
安全报文传送的目的是保证数据的可靠性、完整性和对发送方的认证。数据完整性和对发送方的认证通过使用MAC来实现,MAC是命令数据域中最后一个数据元,长度规定为4个字节。数据的可靠性通过对数据域的加密来得到保证,数据域的数据是否加密,应被命令发送方和当前卡中被选择的应用所了解。
安全报文传送的命令格式符合ISO 7816-4的规定。当CLA字节的第二个半字节等于十六进制数字‘4’时,表明对发送方命令数据要采用安全报文传送。
情况一:这种情况时,没有数据送到卡中,也没有数据从卡中返回。没有安全报文传送要求的命令格式如下:
有安全报文传送要求的命令情况如下:
CLA的第二个半字节是’4’表明支持第二种格式的安全报文传送。Lc为MAC的长度。
情况二:这种情况时,命令中没有数据送到卡中,但有数据从卡中返回。没有安全报文传送要求的命令格式如下:
有安全报文传送要求的命令格式如下:
CLA的第二个半字节是“4”表明支持第二种格式的安全报文传送。Lc为MAC的长度。
情况三:这种情况时,命令中有数据传送到卡中,但没有数据从卡中返回。没有安全报文传送要求的命令格式如下:
有安全报文传送要求的命令格式如下:
CLA |
INS |
P1 |
P2 |
Lc |
命令数据 |
MAC |
CLA的第二个半字节是’4’表明支持第二种格式的安全报文传送。Lc为命令数据加上MAC的长度。
情况四:这种情况时,在命令中有数据送到卡中,也有数据从卡中返回。没有安全报文传送要求的命令格式如下:
有安全报文传送要求的命令格式如下:
CLA |
INS |
P1 |
P2 |
Lc |
命令数据 |
MAC |
Le |
CLA的第二个半字节是4表明支持第二种格式的安全报文传送。Lc为命令数据加上MAC的长度。
如图9所示,为本发明实施的数据加密装置对报文数据进行加密计算步骤如下所述:
步骤S401:在待加密的明文数据前加上表示明文数据长度的字节,生成新的数据块;本实施例中用长度为1字节的LD表示待加密的明文数据的长度;
步骤S402:将生成的数据块以16字节为单位按顺序分解成的子数据块。
步骤S403:判断最后的子数据块长度是否为16字节,最后的子数据块长度为16字节执行步骤S407,否则执行步骤S404;
步骤S404:右边添加16进制数字“80”;
步骤S405:判断添加16进制数字“80”后的子数据块是否为16字节,判断结果为是,执行步骤S407,否则执行步骤S406,直至该子数据块的长度为16字节为止,然后进行步骤S407;
步骤S406,在该子数据块右侧添加16进制数“00”;
步骤S407,采用SM1算法加密各子数据块;
步骤S408,将加密后的各子数据块按数据连接,即获得加密后的密文。
如图10所示,为采用SM1算法对各子数据块进行加密计算的示意图。
电表设备接收到命令之后,需要将包含在命令中的加密数据进行解密。数据解密计算如下所述:
第一步:将命令数据域中的数据块分解成16字节长的数据块,标号为O1,O2,O3,O4等等。
第二步:每个数据块使用如图11所描述的解密方式解密。
第三步:计算结束后,所有解密后的数据块D1,D2…链接在一起。数据块由LD、明文数据、填充字符(如果在数据加密过程中有增加的话)组成。LD表示明文数据的长度,根据LD表示的明文数据长度恢复明文数据。
本发明对于安全报文MAC的安全机制采用SM1算法保证数据安全,步骤如下:
步骤S501,取8个字节随机数加上8个字节随机数求反值作为初始变量。
步骤S502,将5字节命令头(CLA,INS,P1,P2,Lc)和命令数据域中的明文或密文数据连接在一起形成数据块。
步骤S503,将第二步中生成的数据块分解成以16字节为单位的子数据块,标号为D1,D2,D3,D4。
步骤S504,如果最后的数据块长度是16字节,则在其后加上16进制数字“80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00”,并转到第五步。如果最后的数据块长度不足16字节,则在其后加上16进制数字“80”,如果达到16字节长度,则转入步骤S505;否则在其后加入16进制数字“00”直到长度达到16字节。
步骤S505,本实施例中按照图12所示的方式进行计算生成MAC值。即将步骤S501中生成的初始变量与子数据块D1进行异或运算,然后对该运算结果做为输入数据进行SM1算法加密,然后将该加密结果与子数据块D2进行异或运算后再采用SM1算法进行加密,以此类推,依次将各子数据块进行加密,生成16字节运算结果,将最终生成的运算结果按4字节分块做异或运算,生成4字节MAC值。
采用国密算法SM1算法的ESAM芯片具有更高的安全特性,内嵌8位安全处理器,并能够进行国密、3DES加密运算,同时运算过程中有随机数参与。支持多级分散的密钥管理系统,且不同智能表具可使用统一标准的ESAM嵌入式安全芯片。可选的EEPROM容量,可选多种通信速率,数据保存时间大于10年,EEPROM擦写次数大于50万次。
在CPU卡表系统中使用的用户卡、ESAM交易过程中采用SM1算法进行身份认证、密钥下装、预付费充值、参数更新。下面以SM1算法在ESAM嵌入式安全芯片中的使用为例对本发明做进一步详细阐述。
IC卡电能表业务流程包括:卡表系统身份认证流程、明文+MAC读用户卡写ESAM流程、参数更新流程、预付费充值流程及密钥下装流程。具体流程操作如下:
卡表系统对CPU卡进行身份认证步骤如下:
A.从CPU卡取离散因子;
B.ESAM使用内部认证工作密钥对离散因子进行SM1算法密钥分散,即对获得的8字节的离散因子求反,将上述的离散因子和离散因子的求反值做为输入数据,采用ESAM内部的认证工作密钥对该输入数据进行SM1算法加密,生成过程密钥;
C.卡表系统向ESAM发送随机数和加密指令,将该随机数求反,ESAM将该随机数与随机数的求反值做为输入数据,ESAM采用步骤S502中生成的过程密钥对输入数据进行SM1算法认证数据计算,并且返回计算结果DES1;
D.向CPU卡发送随机数和加密指令,CPU卡对随机数进行SM1算法认证数据计算,并且送回计算结果DES2;
E.比较DES1和DES2,如果两者一致,卡表系统身份认证成功,此卡合法,否则身份认证失败,此卡不合法。
明文+MAC读用户卡写ESAM流程如下:
A.电能表从ESAM中取随机数发送给用户卡;
B.电能表向用户卡发送明文+MAC读数据指令、随机数和参数修改命令头,用户卡进行SM1算法进行MAC计算,取得数据明文+MAC DATA1;
C.电能表向ESAM发送参数修改命令和DATA1进行参数修改。
参数更新流程:
A.做身份认证,即上述的卡表系统身份认证流程;
B.电能表明文+MAC读用户卡对ESAM进行参数更新,即进行明文+MAC读用户卡写ESAM流程。
预付费充值流程如下:
A、第一次充值时,电能表从用户卡读出表号与电能表表号比较,相同则转入C,否则终止操作;
B、再次充值时,电能表从用户卡读出户号语电能表户号比较,如果相同则转入C。
C、作身份认证;
D、如果是第一次充值,则将户号写入ESAM,非第一次充值,转入F;
E、向电能表的ESAM模块发送明文+MAC充值指令,明文+MAC充值流程如下:
a.电能表从ESAM取随机数发送给用户卡;
b.电能表向用户卡发送明文+MAC读数据指令、随机数和充值命令头,用户卡进行SM1算法MAC计算,取得数据明文+MAC DATA1;
c.电能表向ESAM发送充值命令、DATA1进行钱包充值;
充值成功,转入G,否则终止;
F、明文+MAC读取用户卡其他参数,对ESAM进行参数更新,更新成功,转入G,否则终止;
G、电能表从明文+MAC读取ESAM对用户卡进行数据回抄,返写成功,流程完毕,否则报失败;
电能表进行密钥下装流程如下:
A、作身份认证;
B、电能表读取密钥下装卡中的密钥信息文件,取得密钥密文数据;
C、电能表逐段截取各条密钥(系统身份认证密钥、钱包线路保护密钥、文件传输线路保护写密钥、文件传输线路保护读密钥),向ESAM发送更新密钥指令和每条密文,ESAM对密钥密文进行SM1算法解密,更新ESAM密钥。
网络电能表业务流程包括:身份认证、预付费充值、参数更新及密钥下装,上述各流程具体步骤如下:
身份认证流程,具体步骤同图8所示:
A、后台计算机取随机数和分散因子发送给加密机
B、加密机进行SM1算法密钥分散计算,生产过程密钥;
C、加密机利用过程密钥对随机数进行SM1算法认证数据计算,并且将随机数、离散因子和计算结果DES1返回;
D、ESAM使用内部认证工作密钥对分散因子进行SM1算法密钥分散计算,生产过程密钥;
E、向ESAM发送随机数和加密指令,ESAM用过程密钥对随机数进行SM1算法认证数据计算,并且送回计算结果DES2;
F、比较DES1和DES2,如果两者一致,身份认证成功,此卡合法,否则身份认证失败,此卡不合法。
预付费充值流程:
A、第一次充值时,比较送入的表号是否正确,正确则转入C,否则终止操作;
B、再次充值时,比较送入户号是否正确,则转入C。
C、作身份认证;
D、如果是第一次充值,则将户号写入ESAM,非第一次充值,转入E;
E、向ESAM发送明文+MAC充值指令,对ESAM进行钱包充值;
其中,明文+MAC充值流程如下:
a、从取ESAM随机数;
b、将取得的随机数和分散因子发送给加密机;
c、加密机使用工作密钥对上述分散因子进行SM1算法密钥分散,生产过程密钥;
d、加密机用过程密钥利用随机数对充值命令头、充值金额和充值次数进行SM1算法MAC计算,并且送回MAC值;
e、向ESAM发送充值命令、充值金额、充值次数和MAC值对ESAM进行钱包充值。
参数更新流程:
A、作身份认证(见身份认证流程);
B、对ESAM进行明文+MAC参数更新;
其中,明文+MAC参数更新流程如下:
a、从ESAM随机数发送
b、将随机数和离散因子发送给加密机;
c、加密机使用工作密钥对离散因子进行SM1算法密钥分散,生产过程密钥;
d、加密机用过程密钥利用随机数对参数更新命令头、参数明文进行SM1算法MAC计算,并且送回MAC值;
e、向ESAM发送参数更新命令、参数明文和MAC值对ESAM进行参数更新。
密钥下装流程:
作身份认证;
对加密机发送密文导出密钥命令,分别导出密钥(系统身份认证密钥、控制文件线路保护密钥、参数修改线路保护密钥等)密文。
向ESAM发送更新密钥指令、ESAM对每条密钥的密文进行SM1算法解密逐条更新ESAM中的密钥。
本发明中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。