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

本文档详细介绍了如何通过Uart接口控制使用国密算法的加密模块,包括SM1、SM2、SM4算法的操作指令,以及加密、解密、密钥导入等过程。适用于终端产品开发,帮助开发者无需深入算法细节即可快速实现产品开发。
部署运行你感兴趣的模型镜像

目前现有的配网自动化试点(包括国网和南网)均未考虑二次安防,而在110KV以上的变电网里,二次安防是一个很重要的建设内容,主要原因在于以前配网自动化建设不规范,且技术条件不成熟。
二○一一年二月九日国家电网在调〔2011〕168号文件《关于加强配电网自动化系统安全防护工作的通知》明确提出了配网自动化系统位于生产控制1区,必须做好安全防护工作。
国家电网公司物资采购标准中专用技术规范中提出,配电终端应配备符合国调〔2011〕168号文件的技术功能要求的非对称密钥技术的单向认证模块。
目前公司的配网终端还不具有加密模块,为了使配网终端产品更具有市场竞争力,需要尽快加入加密模块以满足需求。
参考资料
国家电网公司物资采购标准(站所终端单元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

00H00H

加密/解密成功

Status

00H01H

命令格式不对

Message

10H

16字节密文/ 明文

 

3.4.2.      SM1算法密钥导入指令

命令数据单元:

命令数据单元含义一览表

标识

内容

说明

CommandH

70H

SM1算法指令

CommandL

CCH

SM1算法密钥导入

密钥

10H

16字节密钥

应答数据单元:

应答数据单元含义一览表

标识

内容

说明

Status

00H00H

导入成功

Status

00H01H

导入失败

 

 

 

 

 

 

3.5.  SM2算法操作指令

3.5.1.      SM2_Sign   SM2签名

命令数据单元:

命令数据单元含义一览表

标识

内容

说明

CommandH

80H

SM2算法指令

CommandL

C6H

SM2签名

data

Len

Len字节待签名消息(Len<1024

应答数据单元:

应答数据单元含义一览表

标识

内容

说明

Status

00H00H

签名成功

Status

00H01H

命令格式不对

data

40H

64字节签名结果

3.5.2.      SM2_Verify  SM2验证

命令数据单元:

命令数据单元含义一览表

标识

内容

说明

CommandH

80H

SM2算法指令

CommandL

C8H

SM2验证

data

Len

Len字节数据(已签名数据+64字节签名结果),Len<1024+64

应答数据单元:

应答数据单元含义一览表

标识

内容

说明

Status

00H00H

验证成功

Status

00H01H

命令格式不对

data

 

3.5.3.      SM2_Enc  SM2加密

命令数据单元:

命令数据单元含义一览表

标识

内容

说明

CommandH

80H

SM2算法指令

CommandL

CAH

SM2加密

明文

P_Len

P_Len字节的明文(P_Len<1024

应答数据单元:

应答数据单元含义一览表

标识

内容

说明

Status

00H00H

加密成功

Status

00H01H

命令格式不对

密文

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

00H00H

验证成功

Status

00H01H

命令格式不对

明文

P_Len

P_Len= E_Len - 97字节的明文

 

3.5.5.      SM2_GetPairKey  产生SM2密钥对

命令数据单元:

命令数据单元含义一览表

标识

内容

说明

CommandH

80H

SM2算法指令

CommandL

CDH

SM2密钥对生成

应答数据单元:

应答数据单元含义一览表

标识

内容

说明

Status

00H00H

密钥生成成功

Status

00H01H

命令格式不对

data

60H

64字节公钥+32字节私钥

 

3.5.6.      SM2算法公钥导入

命令数据单元:

命令数据单元含义一览表

标识

内容

说明

CommandH

80H

SM2算法指令,

CommandL

CEH

SM2公钥导入

公钥

40H

64字节公钥

应答数据单元:

应答数据单元含义一览表

标识

内容

说明

Status

00H00H

导入成功

Status

00H01H

导入失败

 

3.6.  SM4算法操作指令

3.6.1.      SM4加密/解密

命令数据单元:

命令数据单元含义一览表

标识

内容

说明

CommandH

90H

SM4算法指令

CommandL

00H/01H

00表示加密,01表示解密

明文/密文

10H

16字节明文/密文

应答数据单元:

应答数据单元含义一览表

标识

内容

说明

Status

00H00H

加密/解密成功

Status

00H01H

命令格式不对

Message

10H

16字节密文/ 明文

 

3.6.2.      SM4算法密钥导入指令

命令数据单元:

命令数据单元含义一览表

标识

内容

说明

CommandH

90H

SM4算法指令

CommandL

CCH

SM4算法密钥导入

密钥

10H

16字节密钥

应答数据单元:

应答数据单元含义一览表

标识

内容

说明

Status

00H00H

导入成功

Status

00H01H

导入失败

 

 

3.7.  校验/修改Pin指令

命令数据单元:

命令数据单元含义一览表

标识

内容

说明

CommandH

08H

校验/修改Pin指令

CommandL

00/01H

00校验Pin01为修改Pin

Pin

08H/10H

8字节的校验Pin,或者16字节的Pin(原来的8字节Pin+8字节替换的Pin)

应答数据单元:

应答数据单元含义一览表

标识

内容

说明

Status

00H00H

命令成功

Status

00H01H

命令失败

 

 

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

说明:芯片出厂时的Pin8字节:0x06 0x06 0x06 0x06 0x06 0x06 0x06 0x06

 

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

 

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

默认的ID16字节: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

 

您可能感兴趣的与本文相关的镜像

Linly-Talker

Linly-Talker

AI应用

Linly-Talker是一款创新的数字人对话系统,它融合了最新的人工智能技术,包括大型语言模型(LLM)、自动语音识别(ASR)、文本到语音转换(TTS)和语音克隆技术

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值