国密算法(SM1/2/4)芯片用户手册(UART接口)注意:用户在实际使用时只需通过UART口控制国密算法芯片即可,控制协议及使用参考示例见下面QQ:1900109344(算法芯片交流)目录1.概述 (3)2.基本特征 (3)3.通信协议 (3)3.1.物理层 (3)3.2.链路层 (4)3.2.1.通讯数据包定义 (4)3.2.2.协议描述 (4)3.3.数据单元格式 (5)3.3.1.命令单元格式 (5)3.3.2.应答单元格式 (5)3.4.SM1算法操作指令 (6)3.4.1.SM1 加密/解密 (6)3.4.2.SM1算法密钥导入指令 (6)3.5.SM2算法操作指令 (7)3.5.1.SM2_Sign SM2签名 (7)3.5.2.SM2_V erify SM2验证 (7)3.5.3.SM2_Enc SM2加密 (8)3.5.4.SM2_Dec SM2解密 (9)3.5.5.SM2_GetPairKey 产生SM2密钥对 (9)3.5.6.SM2算法公钥导入 (10)3.6.SM4算法操作指令 (10)3.6.1.SM4加密/解密 (10)3.6.2.SM4算法密钥导入指令 (11)3.7.校验/修改Pin指令 (11)3.8.国密算法使用示例(Uart口命令流) (12)3.8.1.SM1算法操作示例 (12)3.8.2.SM2算法操作示例 (13)3.8.3.SM4算法操作示例 (14)3.9.参考数据 (15)3.9.1.SM1参考数据 (15)3.9.2.SM2参考数据 (15)3.9.3.SM4参考数据 (17)1.概述本文档适用于使用国密算法芯片进行终端产品开发的用户。
终端开发者通过Uart口发命令的方式操作国密算法芯片进行数据交换,产品应用开发。
通过阅读本文档,终端开发者可以在无需考虑算法实现细节情况下,迅速完成产品开发。
2.基本特征芯片的基本特征见下表:3.通信协议3.1.物理层国密算法芯片采用系统供电方式,电压5V或者3.3V。
国密芯片串口与系统MCU串口相连,异步全双工通讯,波特率默认为115200bps。
数据格式为1位起始位、8位数据位和1位停止位,无校验位。
系统MCU向国密算法芯片发送命令时,在同一个命令内,相连两个发送字符之间的间隔不应大于10个字符时间,否则芯片可能会认为命令超时导致无任何响应。
3.2.链路层3.2.1.通讯数据包定义通信数据包如下图所示:通讯数据包项目、长度、含义说明对应见下表:通讯数据包项目含义一览表3.2.2.协议描述系统MCU首先发送一个命令数据包,发送完成后等待来自国密芯片的应答数据包。
国密芯片正确收到命令数据包后,便执行命令,然后回应应答数据包。
3.3.数据单元格式3.3.1.命令单元格式MCU向国密芯片发送的数据包称为命令数据包,命令数据包的格式如下图所示:命令单元格式见下表:命令单元格式一览表3.3.2.应答单元格式国密芯片向系统MCU应答数据包,如下图所示:应答单元格式见下表:应答单元格式一览表3.4.SM1算法操作指令3.4.1.SM1 加密/解密命令数据单元:命令数据单元含义一览表应答数据单元:应答数据单元含义一览表3.4.2.SM1算法密钥导入指令命令数据单元:命令数据单元含义一览表应答数据单元:应答数据单元含义一览表3.5.SM2算法操作指令3.5.1.SM2_Sign SM2签名命令数据单元:命令数据单元含义一览表应答数据单元:应答数据单元含义一览表3.5.2.SM2_Verify SM2验证命令数据单元:命令数据单元含义一览表应答数据单元:应答数据单元含义一览表3.5.3.SM2_Enc SM2加密命令数据单元:命令数据单元含义一览表应答数据单元:应答数据单元含义一览表3.5.4.SM2_Dec SM2解密命令数据单元:命令数据单元含义一览表应答数据单元:应答数据单元含义一览表3.5.5.SM2_GetPairKey 产生SM2密钥对命令数据单元:命令数据单元含义一览表应答数据单元:应答数据单元含义一览表3.5.6.SM2算法公钥导入命令数据单元:命令数据单元含义一览表应答数据单元:应答数据单元含义一览表3.6.SM4算法操作指令3.6.1.SM4加密/解密命令数据单元:命令数据单元含义一览表应答数据单元:应答数据单元含义一览表3.6.2.SM4算法密钥导入指令命令数据单元:命令数据单元含义一览表应答数据单元:应答数据单元含义一览表3.7.校验/修改Pin指令命令数据单元:命令数据单元含义一览表应答数据单元:应答数据单元含义一览表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 30 8F 03返回:02 00 02 00 00 00 03//命令执行正确成功导入密钥后,以后可以直接发送加解密指令即可,除非需要更改新的密钥SM1加密向国密芯片发送:颜色部分为16字节明文02 00 12 70 00 C8 F9 D7 00 F8 00 B6 AA 1A 3F 02 6E 2C 68 6B 4C58 03国密芯片返回:颜色部分为加密后的密文02 00 12 00 00 C5 41 C3 47 BF 63 62 8D 26 62 05 E5 A8 C8 B8 98 D7 03SM1解密向国密芯片发送:颜色部分为16字节密文02 00 12 70 01 C5 41 C3 47 BF 63 62 8D 26 62 05 E5 A8 C8 B8 98 A6 03国密芯片返回:颜色部分为解密后的明文02 00 12 00 00 C8 F9 D7 00 F8 00 B6 AA 1A 3F 02 6E 2C 68 6B 4C 28 033.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 7B F6 EE BD 72 6E CD 08 3C 78 2E C1 ED 39 00 37 14 4F CB E6 2C 6A FD 09 0C D8 2E 94 83 34 5E B9 D5 0E EC DF A9 7C 91 29 34 A8 80 14 82 2A 03 5E F4 E6 23 7E 3D 5E 29 60 A2 5E 1C BC FE C9 82 A9 C6 84 0B EC 7F 20 07 B5 97 20 FF D2 E0 6C 03 07 00 25 0E C1 E4 86 C0 A4 28 9A 5D 03SM2算法公钥导入:向国密芯片发送:颜色部分为64字节公钥02004480ce45 AC 4F 39 52 89 F9 CC FB D1 22 35 87 0E FF 20 FA 5F 57 B9 65 CE 89 95 E9 41 44 D2 7A C7 1B FA 6A 1B D9 EC 31 0E 73 42 BF 38 5B 91 78 B3 8F FE 13 69 42 33 42 20 07 60 97 5D 6E E6 E8 EC C3 BC4003国密芯片返回:02 00 02 00 00 00 03//执行正确成功生成密钥对或导入公钥后,以后可以直接发送加解密签名验签指令即可,除非需要更改新的密钥SM2加密向国密芯片发送:颜色部分为3字节明文02000580ca1122334a03国密芯片返回:颜色部分为加密后的密文02 00 66 00 00 04 EB E7 18 18 61 FA CE 1E 29 EC 10 3E 8F 40 7A A9 62 B2 2B 9F E3 7D 21 02 2B 57 64 3D 58 2A 3C 62 7C C4 4D BC 0C 38 AC BA 32 C3 C1 AC D6 AF 3B 78 37 B9 09 E7 01 00 32 CD AD 04 26 8C 79 93 B0 A9 49 1D 86 6F 26 78 D0 FC E4 32 5F 02 88 59 AA 32 11 B0 A5 FB 0E 6B 9C A7 16 18 AA F9 87 44 D5 E2 B6 45 85 B4 03SM2解密向国密芯片发送:颜色部分密文02006680cb04 EB E7 18 18 61 FA CE 1E 29 EC 10 3E 8F 40 7A A9 62 B2 2B 9F E3 7D 21 02 2B 57 64 3D 58 2A 3C 62 7C C4 4D BC 0C 38 AC BA 32 C3 C1 AC D6 AF 3B 78 37 B9 09 E7 01 00 32 CD AD 04 26 8C 79 93 B0 A9 49 1D 86 6F 26 78 D0 FC E4 32 5F 02 88 59 AA 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 03SM2签名向国密芯片发送:颜色部分为2字节待签消息02000480c622335703国密芯片返回:颜色部分为64字节签名值02 00 42 00 00 F9 98 C7 43 82 90 94 BB CA CB FF C9 A3 70 5D A7 37 D3 CE B9 56 AF 51 D0 66 58 BA B8 1F F1 A6 AA 68 B1 6C 65 D9 99 5D A6 75 0C 63 F1 C3 58 62 21 41 F5 70 8A DB 96 8A A3 FD 68 04 7D 9C E8 FB E5 07 03SM2验签向国密芯片发送:绿色部分为消息+蓝灰色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 66 58 BA B8 1F F1 A6 AA 68 B1 6C 65 D9 99 5D A6 75 0C 63 F1 C3 58 62 21 41 F5 70 8A 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 97 82 03返回:02 00 02 00 00 00 03//命令执行正确成功导入密钥后,以后可以直接发送加解密指令即可,除非需要更改新的密钥SM4加密向国密芯片发送:颜色部分为16字节明文02 00 12 90 00 EE 71 C4 14 53 16 11 10 33 89 CE F1 2F 8C 51 88 64 03国密芯片返回:颜色部分为加密后的密文02 00 12 00 00 01 08 CA 30 FE C6 AB 70 EA ED 36 BD AF CA 9F A1 C7 03SM4解密向国密芯片发送:颜色部分为16字节密文02 00 12 90 01 01 08 CA 30 FE C6 AB 70 EA ED 36 BD AF CA 9F A1 56 03国密芯片返回:颜色部分为解密后的明文02 00 12 00 00 EE 71 C4 14 53 16 11 10 33 89 CE F1 2F 8C 51 88 F4 033.9.参考数据3.9.1.SM1参考数据第一组密钥:DF E6 AC 30 A5 EE 6A E3 A8 7E 25 97 C7 08 C3 ED明文:D3 32 DB 31 FF B0 E6 B4 DF 82 05 56 F2 24 71 1A密文:0AB725C647C7AA1FD81FC653934E5AE2第二组密钥:AA E0 CD 75 F2 14 22 CF 27 A5 0F 7A 9E CE 28 0E明文:A5 90 CA 38 9D A3 B0 FC 7D 82 4D 9C 37 02 1A C6密文:DC15E6752A3EFF748B74666842D6D3AD3.9.2.SM2参考数据SM2密钥对第一组公钥:BBA50EF54EB46FDE074913478AC1F5D2629A721E5E38019C17B2C0FBA1B2AB1C50FB3 C1597EBD8A1675D53CB20E4C1582EEC78E5054626EDD0D13E8984152928私钥:7B81B501DDD51E98D4EC6EBE5D221D796BB499BCEDF51533627FED6FE4FDD523第二组公钥:FB40AB9CB07715323F1AB77775BBDD7BF03CF987E62B6A7725EA3CF1D80DB3E53B7C1 E5B917889BED48D3A61FB8902FE754F6F57FD9CA087C0C163C94FCDFC56私钥:19D8059426C224DFAC2D608DD84027DD5069DB74E92B687DCE67F6D024428E2D签名第一组公钥:BBA50EF54EB46FDE074913478AC1F5D2629A721E5E38019C17B2C0FBA1B2AB1C50FB3 C1597EBD8A1675D53CB20E4C1582EEC78E5054626EDD0D13E8984152928私钥:7B81B501DDD51E98D4EC6EBE5D221D796BB499BCEDF51533627FED6FE4FDD523消息:112233445566778899AA用户ID:31323334353637383132333435363738签名结果:14E2E6A688905D42AB2F35D1505808A30E01719D0CBCA83B4116923DC12BFC8E33AC854 2172A213B0C9647C50FA95B6D020********E754B410E6906167BE813第二组公钥:FB40AB9CB07715323F1AB77775BBDD7BF03CF987E62B6A7725EA3CF1D80DB3E53B7C1 E5B917889BED48D3A61FB8902FE754F6F57FD9CA087C0C163C94FCDFC56私钥:19D8059426C224DFAC2D608DD84027DD5069DB74E92B687DCE67F6D024428E2D消息:112233445566778899AA用户ID:31323334353637383132333435363738签名结果:AA7101EBB09B21771B11E3358B96C769184679748AB73A6BCD375F902FB21134434C3D09 BB09A51BD368E6851D54FC1084E02C35EAF2A957DE005039CE396211加密解密第一组公钥:BBA50EF54EB46FDE074913478AC1F5D2629A721E5E38019C17B2C0FBA1B2AB1C50FB3 C1597EBD8A1675D53CB20E4C1582EEC78E5054626EDD0D13E8984152928私钥:7B81B501DDD51E98D4EC6EBE5D221D796BB499BCEDF51533627FED6FE4FDD523明文:112233445566778899AA密文:046F971130C5E137132E515554D104DA1803A7D71CDDD79EF0BDFB91EEB476691A23E4 A3DA0C376C28A7E5C5204A2B7329680AE6D0E435889DD9E92528DD6DFF9171D38144D6 4F75DB01F9D29A885B7200D17FCC06928499D738F4F0DAEC3DC32D9FAC80551D3537FD 8E7F第二组公钥:FB40AB9CB07715323F1AB77775BBDD7BF03CF987E62B6A7725EA3CF1D80DB3E53B7C1 E5B917889BED48D3A61FB8902FE754F6F57FD9CA087C0C163C94FCDFC56私钥:19D8059426C224DFAC2D608DD84027DD5069DB74E92B687DCE67F6D024428E2D明文:112233445566778899AA密文:04D919663173F71B050ED2F3C68736DC5A244284A40AC399D024C8D875010825E4E40AD D1299BE28873E65CE58BC4C1315FEFE2988488B3FAB506B8E911EDDE7624BD092656943 2E74B9349FD8818D56EB22C78240207116697C3D82CE422D847C555898F2CA0711AD51C73.9.3.SM4参考数据第一组密钥:F0 A0 FF 9B A8 07 D8 92 F1 EB A7 01 4D DF BF 3D明文:BA 39 63 33 10 96 67 75 66 09 99 59 22 18 0B B4密文:FA1020ED5360CAC33ADA8A2F8EEB51FA第二组密钥:97 12 BD 56 32 FF 85 6D 39 5E 45 02 05 A9 EC 77明文:99 20 A2 5C B4 AE 3B 5F B1 3E 30 3D C9 AF 46 25密文:E010455748AE03D08EBA1D0AA01B1300。