您的位置:首页 > 其它

分享简单易用的配网终端加密模块

2017-08-21 16:38 204 查看

[align=left]概述[/align]
目前现有的配网自动化试点(包括国网和南网)均未考虑二次安防,而在110KV以上的变电网里,二次安防是一个很重要的建设内容,主要原因在于以前配网自动化建设不规范,且技术条件不成熟。
二○一一年二月九日国家电网在调〔2011〕168号文件《关于加强配电网自动化系统安全防护工作的通知》明确提出了配网自动化系统位于生产控制1区,必须做好安全防护工作。
国家电网公司物资采购标准中专用技术规范中提出,配电终端应配备符合国调〔2011〕168号文件的技术功能要求的非对称密钥技术的单向认证模块。
目前公司的配网终端还不具有加密模块,为了使配网终端产品更具有市场竞争力,需要尽快加入加密模块以满足需求。
参考资料
国家电网公司物资采购标准(数据采集终端通用技术规范 2009年版)
国家电网公司物资采购标准(站所终端单元DTU专用技术规范 2010年版)
现分享一款简单易用的国密算法加密模块,用户只需通过Uart接口控制即可实现国密SM1\SM2\SM4算法,简单方便

只要你会Uart接口控制编程,就能轻松实现加密模块控制。QQ:1900109344

1.
概述

本文档适用于使用国密算法芯片进行终端产品开发的用户。终端开发者通过Uart口发命令的方式操作国密算法芯片进行数据交换,产品应用开发。通过阅读本文档,终端开发者可以在无需考虑算法实现细节情况下,迅速完成产品开发。

2.
基本特征

芯片的基本特征见下表:

串口波特率
115200 bps(默认)
供电电源
DC 3.3V,5V
通讯接口
UART

3.
通信协议

3.1.
物理层

国密算法芯片采用系统供电方式,电压5V或者3.3V。国密芯片串口与系统MCU串口相连,异步全双工通讯,波特率默认为115200bps。数据格式为1位起始位、8位数据位和1位停止位,无校验位。

系统MCU向国密算法芯片发送命令时,在同一个命令内,相连两个发送字符之间的间隔不应大于10个字符时间,否则芯片可能会认为命令超时导致无任何响应。

3.2.
链路层

3.2.1. 通讯数据包定义

通信数据包如下图所示:

STX(0x02)
Len_Hi
Len_Low
Data
LRC
ETX(0x03)
通讯数据包项目、长度、含义说明对应见下表:

通讯数据包项目含义一览表

序号
项 目
长度(字节)
说明
1
数据包头(STX)
1
常量:0x02
2
数据单元长度(Len)
2
需传输的数据单元Data部分的长度,高字节在前,低字节在后。

例如:0x0010表示Data部分有16个字节。
3
需传输的数据单元(Data)
不定
长度由Len指出,数据单元头两个字节是命令码(系统发送命令到芯片)或状态码(芯片返回数据给系统),后面是其它参数。
4
冗余检验值(LRC)
1
Data部分数据各字节异或值。
5
数据包尾(ETX)
1
常量:0x03

3.2.2. 协议描述

系统MCU首先发送一个命令数据包,发送完成后等待来自国密芯片的应答数据包。

国密芯片正确收到命令数据包后,便执行命令,然后回应应答数据包。

3.3.
数据单元格式

3.3.1. 命令单元格式

MCU向国密芯片发送的数据包称为命令数据包,命令数据包的格式如下图所示:

STX(0x02)
Len_Hi
Len_Low
CommandH
CommandL
Command Param
LRC
ETX(0x03)
命令单元格式见下表:

命令单元格式一览表

项目
长度
说明
CommandH
1字节
命令类别
CommandL
1字节
命令代码
【参数】
不定长
命令参数

3.3.2. 应答单元格式

国密芯片向系统MCU应答数据包,如下图所示:

STX(0x02)
Len_Hi
Len_Low
StatusH
StatusL
Status Data
LRC
ETX(0x03)
应答单元格式见下表:

应答单元格式一览表

项目
长度
说明
StatusH
1字节
状态码高字节
StatusL
1字节
状态码低字节
【数据】
不定长
应答数据

3.4.
SM1算法操作指令

3.4.1. SM1
加密/解密

命令数据单元:

命令数据单元含义一览表

标识
内容
说明
CommandH
70H
SM1算法指令
CommandL
00H/01H
00表示加密,01表示解密
明文/密文
10H
16字节明文/密文
应答数据单元:

应答数据单元含义一览表

标识
内容
说明
Status
00H,00H
加密/解密成功
Status
00H,01H
命令格式不对
Message
10H
16字节密文/
明文

3.4.2. SM1算法密钥导入指令

命令数据单元:

命令数据单元含义一览表

标识
内容
说明
CommandH
70H
SM1算法指令
CommandL
CCH
SM1算法密钥导入
密钥
10H
16字节密钥
应答数据单元:

应答数据单元含义一览表

标识
内容
说明
Status
00H,00H
导入成功
Status
00H,01H
导入失败

3.5.
SM2算法操作指令

3.5.1. SM2_Sign
SM2签名

命令数据单元:

命令数据单元含义一览表

标识
内容
说明
CommandH
80H
SM2算法指令
CommandL
C6H
SM2签名
data
Len
Len字节待签名消息(Len<1024)
应答数据单元:

应答数据单元含义一览表

标识
内容
说明
Status
00H,00H
签名成功
Status
00H,01H
命令格式不对
data
40H
64字节签名结果

3.5.2. SM2_Verify
SM2验证

命令数据单元:

命令数据单元含义一览表

标识
内容
说明
CommandH
80H
SM2算法指令
CommandL
C8H
SM2验证
data
Len
Len字节数据(已签名数据+64字节签名结果),Len<1024+64
应答数据单元:

应答数据单元含义一览表

标识
内容
说明
Status
00H,00H
验证成功
Status
00H,01H
命令格式不对
data


3.5.3. SM2_Enc
SM2加密

命令数据单元:

命令数据单元含义一览表

标识
内容
说明
CommandH
80H
SM2算法指令
CommandL
CAH
SM2加密
明文
P_Len
P_Len字节的明文(P_Len<1024)
应答数据单元:

应答数据单元含义一览表

标识
内容
说明
Status
00H,00H
加密成功
Status
00H,01H
命令格式不对
密文
E_Len
E_Len=P_Len+97字节的密文

3.5.4. SM2_Dec
SM2解密

命令数据单元:

命令数据单元含义一览表

标识
内容
说明
CommandH
80H
SM2算法指令
CommandL
CBH
SM2解密
密文
E_Len
E_Len字节的密文

(E_Len<1024+97)
应答数据单元:

应答数据单元含义一览表

标识
内容
说明
Status
00H,00H
验证成功
Status
00H,01H
命令格式不对
明文
P_Len
P_Len= E_Len - 97字节的明文

3.5.5. SM2_GetPairKey
产生SM2密钥对

命令数据单元:

命令数据单元含义一览表

标识
内容
说明
CommandH
80H
SM2算法指令
CommandL
CDH
SM2密钥对生成
应答数据单元:

应答数据单元含义一览表

标识
内容
说明
Status
00H,00H
密钥生成成功
Status
00H,01H
命令格式不对
data
60H
64字节公钥+32字节私钥

3.5.6. SM2算法公钥导入

命令数据单元:

命令数据单元含义一览表

标识
内容
说明
CommandH
80H
SM2算法指令,
CommandL
CEH
SM2公钥导入
公钥
40H
64字节公钥
应答数据单元:

应答数据单元含义一览表

标识
内容
说明
Status
00H,00H
导入成功
Status
00H,01H
导入失败

3.6.
SM4算法操作指令

3.6.1. SM4加密/解密

命令数据单元:

命令数据单元含义一览表

标识
内容
说明
CommandH
90H
SM4算法指令
CommandL
00H/01H
00表示加密,01表示解密
明文/密文
10H
16字节明文/密文
应答数据单元:

应答数据单元含义一览表

标识
内容
说明
Status
00H,00H
加密/解密成功
Status
00H,01H
命令格式不对
Message
10H
16字节密文/
明文

3.6.2. SM4算法密钥导入指令

命令数据单元:

命令数据单元含义一览表

标识
内容
说明
CommandH
90H
SM4算法指令
CommandL
CCH
SM4算法密钥导入
密钥
10H
16字节密钥
应答数据单元:

应答数据单元含义一览表

标识
内容
说明
Status
00H,00H
导入成功
Status
00H,01H
导入失败

3.7.
校验/修改Pin指令

命令数据单元:

命令数据单元含义一览表

标识
内容
说明
CommandH
08H
校验/修改Pin指令
CommandL
00/01H
00校验Pin,01为修改Pin
Pin
08H/10H
8字节的校验Pin,或者16字节的Pin(原来的8字节Pin+8字节替换的Pin)
应答数据单元:

应答数据单元含义一览表

标识
内容
说明
Status
00H,00H
命令成功
Status
00H,01H
命令失败

3.8.
国密算法使用示例(Uart口命令流)

说明:芯片出厂时的Pin是8字节:0x06
0x06 0x06 0x06 0x06 0x06 0x06 0x06

只有Pin验证通过了才能导入16字节的SM1密钥,否则命令会返回失败,以后SM1的加解密都以此密钥来计算。

只有Pin验证通过了才能生成SM2密钥对或导入64字节的SM2公钥,否则命令会返回失败,以后SM2的加解密都以此密钥来计算。

默认的ID为16字节:0x31,
0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x31, 0x32, 0x33,0x34, 0x35, 0x36, 0x37, 0x38

只有Pin验证通过了才能导入16字节的SM4密钥,否则命令会返回失败,以后SM4的加解密都以此密钥来计算。

下面是Uart口操作国密算法芯片的命令流

3.8.1. SM1算法操作示例

校验Pin的,Uart口命令流,红色部分为初始Pin

向国密芯片发送:

02 00 0a 08 00
06 06 06 06 06 06 06 06 08 03//校验Pin

国密芯片返回:

02 00 02 00 00 00 03//执行正确

SM1密钥导入

向国密芯片发送:颜色部分为16字节密钥

02 00 12 70 CC
A3 D1 9F 9E 2E EC 46 43 92 DA B4 7B 70 7D 3D 308F 03

返回:02 00 02 0000 00 03//命令执行正确

成功导入密钥后,以后可以直接发送加解密指令即可,除非需要更改新的密钥

SM1加密

向国密芯片发送:颜色部分为16字节明文

02 00 12 70 00
C8 F9 D7 00 F8 00 B6 AA 1A 3F 02 6E 2C 68 6B 4C5803

国密芯片返回:颜色部分为加密后的密文

02 00 12 00 00
C5 41 C3 47 BF 63 62 8D 26 62 05 E5 A8 C8 B898 D7 03

SM1解密

向国密芯片发送:颜色部分为16字节密文

02 00 12 70 01
C5 41 C3 47 BF 63 62 8D 26 62 05 E5 A8 C8 B898 A6 03

国密芯片返回:颜色部分为解密后的明文

02 00 12 00 00
C8 F9 D7 00 F8 00 B6 AA 1A 3F 02 6E 2C 68 6B 4C28 03

3.8.2. SM2算法操作示例

校验Pin的,Uart口命令流,红色部分为初始Pin

向国密芯片发送:

02 00 0a 08 00
06 06 06 06 06 06 06 06 08 03//校验Pin

国密芯片返回:

02 00 02 00 00 00 03//执行正确

SM2算法产生密钥对

向国密芯片发送:

02000280cd4d03

国密芯片返回:64字节公钥+32字节私钥,浅蓝色部分是公钥,橙色是私钥

02 00 62 00 00 73 98 34 31 BF E0 7BF6 EE BD 72 6E CD 08 3C 78 2E C1 ED 39 00 37 14 4F CB E6 2C 6A FD 09 0C D8
2E94 83 34 5E B9 D5 0E EC DF A9 7C 91 29 34 A8 80 14 82 2A 03 5E F4 E6 23 7E 3D5E 29 60 A2 5E
1C BC FE C9 82 A9 C6 84 0B EC 7F 20 07 B5 9720 FF D2 E0 6C 03 07 00 25 0E C1 E4 86 C0 A4 28 9A
5D 03

SM2算法公钥导入

向国密芯片发送:颜色部分为64字节公钥

02004480ce45 AC 4F 39 52 89 F9CC FB D1 22 35 87 0E FF 20 FA 5F 57 B9 65 CE 89 95 E9 41 44 D2 7A C7 1B FA 6A1B
D9 EC 31 0E 73 42 BF 38 5B 91 78 B3 8F FE 13 69 42 33 42 20 07 60 97 5D 6EE6 E8 EC C3 BC4003

国密芯片返回:02 0002 00 00 00 03//执行正确

成功生成密钥对或导入公钥后,以后可以直接发送加解密签名验签指令即可,除非需要更改新的密钥

SM2加密

向国密芯片发送:颜色部分为3字节明文

02000580ca1122334a03

国密芯片返回:颜色部分为加密后的密文

02 00 66 00 00
04 EB E7 1818 61 FA CE 1E 29 EC 10 3E 8F 40 7A A9 62 B2 2B 9F E3 7D 21 02 2B 57 64 3D 582A 3C 62 7C C4 4D BC 0C 38 AC BA 32 C3 C1 AC D6 AF 3B 78 37 B9 09 E7 01 00 32CD AD 04 26 8C 79 93 B0 A9 49 1D 86 6F 26 78 D0 FC
E4 32 5F 02 88 59 AA 32 11B0 A5 FB 0E 6B 9C A7 16 18 AA F9 87 44 D5 E2 B6 45 85 B4 03

SM2解密

向国密芯片发送:颜色部分密文

02006680cb04EB E7 18 18 61 FA CE 1E 29 EC 10 3E 8F 40 7A A9 62 B2 2B 9F E3 7D 21 02 2B 5764 3D 58 2A 3C 62 7C
C4 4D BC 0C 38 AC BA 32 C3 C1 AC D6 AF 3B 78 37 B9 09 E701 00 32 CD AD 04 26 8C 79 93 B0 A9 49 1D 86 6F 26 78 D0 FC E4 32 5F 02 88 59AA 32 11 B0 A5 FB 0E 6B 9C A7 16 18 AA F9 87 44 D5 E2 B6 45 85FF03

国密芯片返回:颜色部分为解密后的明文

02 00 05 00 00
11 22 33 00 03

SM2签名

向国密芯片发送:颜色部分为2字节待签消息

02000480c622335703

国密芯片返回:颜色部分为64字节签名值

02 00 42 00 00
F9 98 C7 4382 90 94 BB CA CB FF C9 A3 70 5D A7 37 D3 CE B9 56 AF 51 D0 66 58 BA B8 1F F1A6 AA 68 B1 6C 65 D9 99 5D A6 75 0C 63 F1 C3 58 62 21 41 F5 70 8A DB 96 8A A3FD 68 04 7D 9C E8 FB E5 07 03

SM2验签

向国密芯片发送:绿色部分为消息+蓝灰色64字节签名值

02004480c82233F9 98 C7 43 82 90 94 BB CA CB FF C9 A3 70 5D A7
37 D3 CE B9 56 AF 51 D0 6658 BA B8 1F F1 A6 AA 68 B1 6C 65 D9 99 5D A6 75 0C 63 F1 C3 58 62 21 41 F5 708A DB 96 8A A3 FD 68 04 7D 9C E8 FB E55E03

国密芯片返回

02 00 02 00 00 00 03//验证成功

3.8.3. SM4算法操作示例

校验Pin的,Uart口命令流,红色部分为初始Pin

向国密芯片发送:

02 00 0a 08 00
06 06 06 06 06 06 06 06 08 03//校验Pin

国密芯片返回:

02 00 02 00 00 00 03//执行正确

SM4密钥导入

向国密芯片发送:颜色部分为16字节密钥

02 00 12 90 CC
9A 0E BD 94 4C 11 C1 17 C2 84 A8 2A 89 FD CF 9782 03

返回:02 00 02 0000 00 03//命令执行正确

成功导入密钥后,以后可以直接发送加解密指令即可,除非需要更改新的密钥

SM4加密

向国密芯片发送:颜色部分为16字节明文

02 00 12 90 00
EE 71 C4 14 53 16 11 10 33 89 CE F1 2F 8C 51 8864 03

国密芯片返回:颜色部分为加密后的密文

02 00 12 00 00
01 08 CA 30 FE C6 AB 70 EA ED 36 BD AF CA 9FA1 C7 03

SM4解密

向国密芯片发送:颜色部分为16字节密文

02 00 12 90 01
01 08 CA 30 FE C6 AB 70 EA ED 36 BD AF CA 9FA1 56 03

国密芯片返回:颜色部分为解密后的明文

02 00 12 00 00
EE 71 C4 14 53 16 11 10 33 89 CE F1 2F 8C 51 88F4 03
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐