1.一种基于国密算法的时间敏感网络安全通信方法,其特征在于:该方法包括以下步骤:S1:时间敏感网络初始化;
时间敏感网络部署一个由时间敏感网络流量发生器及多台TSN交换机通过有线连接组成的时间敏感有线网络;同时配置一个时间敏感网络CNC,CNC会加载设备状态控制单元所需参数;首先TSN交换机需要利用LLDP协议获取相邻设备的拓扑相关的信息,这些信息会以LLDP报文的形式保存在一个管理信息库MIB中,然后TSN CNC通过SNMP协议获取存储在MIB中的拓扑相关信息,包括各个TSN交换机的对象标识符OID信息,包括设备系统名和设备IP地址;将这些OID信息作为TSN交换机的身份标识IDi,1≤i≤n为接入网络的所有TSN交换机总和;
SNMPv3定义新的报文格式,报文格式包括IP首部、UDP首部、版本、报头数据、安全参数、Context Engine ID、Context name和SNMP PDU;
SNMP报文中的字段定义如下:
版本:表示SNMP的版本,SNMPv3报文则对应字段值为2;
报头数据:包含消息发送者所能支持的最大消息尺寸、消息采用的安全模式的描述内容;
安全参数:包含SNMP实体引擎的相关信息、用户名、认证参数和加密参数的安全信息;
Context EngineID:SNMP唯一标识符,和PDU类型一起决定应该发往哪个应用程序;
Context Name:用于确定Context EngineID对被管理设备的MIB视图;
SNMPv3 PDU:包含PDU类型、请求标识符和变量绑定列表;其中SNMPv3 PDU包括GetRequest PDU、GetNextRequest PDU、SetRequest PDU、Response PDU、Trap PDU、GetBulkRequest*PDU和InformRequest PDU;
标识不同PDU的命令名称、对应的编码及功能为:
GetRequest编码为0,功能为:管理站至代理,查询指定变量的值;
GetNextRequest编码为1,功能为:管理站至代理,查询下一变量的值;
Response编码为2,功能为:代理至管理站,回送执行结果;
SetRequest编码为3,功能为:管理站至代理,设置代理维护的某个变量的值;
GetBulkRequest编码为4,功能为:管理站至代理,传递批量信息;
InformRequest编码为5,功能为:管理站至管理站,传递参数处理请求;
Trap编码为6,功能为:代理至管理站的警告消息;
Report编码为7,功能为:Snmpv2未定义;snmpv3定义为在消息的PDU部分不能解密时,发起报告;
报头包括:
31
msgID:消息标识符,用来标识PDU;取值范围是0~2 ‑1;
31
msgMaxSize:表示消息发送器支持的最大消息尺寸,取值范围是484~2 ‑1;
msgFlags:包含若干标志的8位位组字符串,有3个特征位:reportableFlag、privFlag、authFlag;
msgSecurityModel:消息安全模型,用于标识发送方用于生成该消息的安全模型,发送方和接收方必须采用相同的安全模型;
msgSecurityParamters:安全参数,由发送方的安全子系统生成的安全参数,用户名、消息鉴别码MAC、加密参数,用于保护消息传输的安全,并由接收方安全子系统来对消息进行解密和鉴别等安全处理;
contextEngineID:唯一识别SNMP实体的标识符;对于流入消息,该字段用于确定将PDU递交给哪个应用进行处理;对于流出消息,该值由上层应用提供,并代表那个应用程序;
contextName:携带的管理对象所在的上下文的名称;
PDU:带有对象绑定列表的PDU;
其中最后三个字段contextEngineID、contextName和PDU合起来称为scoped PDU;
管理端与代理端进行数据交互时需要调用的函数名及其作用为:
函数名为snmp_pdu_create,用于创建SNMP报文;
函数名为snmp_add_var,用于填充SNMP报文;
函数名为snmp_send,用于发送SNMP报文;
函数名为snmp_synch_response,用于接收并读取SNMP报文;
函数名为snmp_close,用于关闭会话并释放PDU占用的空间;
S2:身份认证;
S21:TSN CNC向TSN交换机发送get‑request数据包获取MIB信息,解析MIB中的OID信息,利用SM2公钥算法生成公私钥对(KeyD,KeyB),并发送给TSN交换机;
S22:TSN交换机端调用snmp_pdu_create函数创建SNMP报文,通过随机数生成器生成随机数Ni,使用认证公钥KeyD通过SM2加密认证算法对身份标识IDi以及随机数Ni进行加密,生成身份认证信息Ci=SM2KeyD(IDi||Ni),调用snmp_add_var函数向PDU中填充加密后的身份认证信息;
S23:使用认证公钥KeyD通过SM3杂凑算法对身份标识IDi与随机数Ni进行处理,生成一个消息认证码TAG=SM3KeyD(IDi||Ni),调用snmp_add_var函数将生成的消息认证码插入到msgAuthenticationParameters字段,并将生成的身份认证信息Ci及消息认证码TAG构造成身份认证请求信息Requesti=Ci||TAG,调用snmp_send函数将SNMP报文发送给TSN CNC;
S24:TSN CNC侧通过snmp_synch_response接收并读取SNMP报文,使用认证私钥KeyB通过SM2算法对读取到的身份认证信息进行解密得到身份标识IDi'和随机数Ni',首先判断IDi'的合法性,使用认证公钥KeyD通过SM3杂凑算法对身份标识IDi'与随机数Ni'进行处理,得到消息认证码TAG'=SM3KeyD(IDi'||Ni'),如果TAG=TAG',则身份认证成功,否则,身份认证失败,调用snmp_colse函数关闭会话,无法进行后续的密钥协商流程;
TSN交换机完成身份认证过程,通过TSN CNC身份认证的TSN交换机,将与TSN CNC进行密钥协商。
2.根据权利要求1所述的一种基于国密算法的时间敏感网络安全通信方法,其特征在于:所述密钥协商具体为:S31:TSN CNC端调用snmp_pdu_create函数创建SNMP报文,为现场设备生成会话密钥Ks并存储,随机数发生器生成随机数Ri;
S32:TSN CNC对获取到的随机数Ni'、自身生成的随机数Ri以及生成的会话密钥Ks进行拼接,使用认证私钥KeyB通过SM2算法对拼接的数据(Ni'||Ri||Ks)进行加密,生成加密信息E=SM2KeyB(Ni'||Ri||Ks),使用认证公钥KeyD通过SM3杂凑算法对拼接的数据(Ni'||Ri)进行处理,生成消息认证码MAC=SM3KeyD(Ni'||Ri),调用snmp_add_var函数将加密信息E填充进PDU,并将生成的消息认证码MAC插入到调用snmp_send函数将PDU发送给TSN交换机;
S33:TSN交换机端通过snmp_synch_response接收并读取PDU,使用认证公钥KeyD通过SM3杂凑算法对读取到的消息认证码MAC'进行处理,得到(Ni'||Ri),验证Ni'=Ni是否成立,若成立,则存储随机数Ri',并使用认证公钥KeyD通过SM2算法对接收到的加密信息进行解密,得到会话密钥Ks,使用会话密钥Ks通过SM2算法对随机数Ri'进行加密,生成密钥协商确认信息 调用snmp_add_var函数将密钥协商确认信息填充进PDU,调用snmp_send函数将SNMP报文发送给TSN CNC,若不成立,则丢弃该报文;
S34:TSN CNC通过snmp_synch_response接收并读取SNMP报文,使用会话密钥Ks通过SM2算法对读取到的密钥协商确认信息进行解密,获取到随机数Ri',并验证Ri'=Ri是否成立,若成立,则密钥协商成功,否则,密钥协商失败;
时间敏感网络的TSN交换机与TSN CNC之间完成密钥协商过程,TSN交换机利用协商成功的会话密钥Ks进行后续的安全通信。
3.根据权利要求2所述的一种基于国密算法的时间敏感网络安全通信方法,其特征在于:所述安全通信具体为:S41:TSN交换机1解析TSN数据帧,获取数据载荷,使用会话密钥Ks通过SM4加密算法加密明文M,生成密文C;
S42:TSN交换机1使用会话密钥Ks通过SM3杂凑算法生成SM3消息认证码Tag,将安全控制字段、密文C以及消息认证码Tag作为安全通信报文E发送给TSN交换机2;
S43:TSN交换机2获取到报文之后,首先会解析安全控制字段,如果安全控制字段显示为01,表明此报文经过加密,否则,直接转发该报文;
S44:TSN交换机2使用会话密钥Ks通过SM3杂凑算法生成SM3消息认证码Tag’,验证Tag=Tag’是否成立,若成立,则执行解密程序,否则,丢弃该报文;
S45:通过消息认证码认证成功的报文,TSN交换机2使用会话密钥Ks通过SM4解密算法对密文C进行解密得到TSN明文;
时间敏感网络完成安全通信过程,经过TSN交换机1端口加密处理之后的报文,会在TSN交换机2的端口进行解密,以此来保障数据传输的机密性与完整性。