STM32F103驱动RJMU401实现SM2加解密签名与验签
Posted Endless_Z
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32F103驱动RJMU401实现SM2加解密签名与验签相关的知识,希望对你有一定的参考价值。
前言
项目需要加密并且需要采用硬件加密,加密方式为非对称–SM2,之前只接触过RES没有接触过SM2,加密也都是采用软件的方式,硬件的话还真是没有用到过,感觉挺有意思,故记录一下。
一、什么是加密、硬件加密以及加密芯片品牌?
以下关于硬件加密定义、分类,来自百度百科,我觉得吧,想看可以读一读,着急可以直接忽略,硬件加密简单点就是利用加密芯片进行加解密
- 硬件加密定义
使用待加密的电子产品之外的硬件电路与待加密的电子产品进行通讯,让产品内部程序通过通讯数据来判断自己是否应该继续执行程序。
硬件加密是通过专用加密芯片或独立的处理芯片等实现密码运算。将加密芯片、专有电子钥匙、硬盘一一对应到一起时,加密芯片将把加密芯片信息、专有钥匙信息、硬盘信息进行对应并做加密运算,同时写入硬盘的主分区表。这时加密芯片、专有电子钥匙、硬盘就绑定在一起,缺少任何一个都将无法使用。经过加密后硬盘如果脱离相应的加密芯片和电子钥匙,在计算机上就无法识别分区,更无法得到任何数据。
硬件加密可以采用标准的网络管理协议,比如SNMP、CMIP等来进行管理,也可以采用统一的网络管理协议进行管理。。 - 加密方式
硬加密——数据加密
与软加密不同,此种方式将密钥放入1个芯片(几百字节)中,设备端发送数据给芯片,芯片用密钥生成密文返回到设备端,设备端判定密文合法性,决定是否继续运行程序。
优点:加密过程不易遭受外界攻击。 缺点:容量有限,加密防护手段不多,硬件剖片容易获得密钥;如果设备端程序泄露,会造成芯片失效。
硬加密——数据&程序加密
芯片容量提升,为用户开放几十K至上百K字节容量的程序和数据空间,用户可在芯片内部自定义实现程序功能,也可存储相关参数信息。
优点:芯片中数据加密和程序运行外界难以跟踪;数据和程序混杂,硬件破解分析困难。 缺点:与逻辑芯片比,成本略高。
加密芯片品牌
-
型号: RJMU401
公司:武汉瑞纳捷电子技术有限公司(本博客介绍的就是这款),
公司注册资金:1850万,
其他:公司提供测试demo板(50元/块),技术人员沟通相当快捷顺利,点个赞(亲身感受,非广告)。 -
型号:LKT4305-GM
公司:凌科芯安科技(北京)有限公司
公司注册资金:2000万
其他:公司提供测试demo板(1200元/块,当时听到这个数都蒙了,不懂到底是想干嘛),沟通过但是因为开发板太贵,没有完成测试。 -
型号:ICP209
公司:深圳市一卓科技有限公司
公司注册资金:200万
其他:公司不提供测试demo板,需要自己画板子在进行测试,这样就太不方便了,还有注册资金有点低(说实话确实有点以资看企),就放弃了。 -
型号:HSC32I1
公司:北京宏思电子技术有限责任公司
公司注册资金:1452万
其他:我记录里只有上面两个信息,忘记了是没找到还是咋的啦,有需要的小伙伴,可以再搜一下。
前三个我有销售的电话以及样片单价就不在这里贴出来了,有需要可以给我私信
二、开发记录
1.开发环境
我开发习惯是先找到对应产品的demo板进行测试,利用STM32最小系统板+厂家提供的demo板组合测试,完成需求功能的测试,在进行PCB绘制。
- 硬件展示
加密芯片demo板
正面:
反面:
STM32F103最小系统板
串口模块
软件开发用的是KEIL
烧录用的是Jlink
上述模块来自淘宝以及厂家Demo板,由于不涉及推销,所以不提供购买链接,有一个能用的就可以了
参照如下对应关系,连接完成
提供一个STM32F103驱动RJMU401的测试程序,链接为:https://download.csdn.net/download/zsj2016o/21494585
测试前要求:
1、各部分连接完成;
2、STM32F103最小系统程序烧录完成;
3、串口模块连接电脑,并成功打开串口助手(串口模块测试小方法:模块TX与RX短接,发送数据看是否有数据接收)。
完成上述三个步骤,串口助手显示如下:
2.开发流程
- 手册
硬件开发最不可缺少的就是手册,我在此列出自己用到的手册:
RJMU401_datasheet__v2.21,链接为https://download.csdn.net/download/zsj2016o/21494503
RJMU401_ESD-HBM测试报告,链接为https://download.csdn.net/download/zsj2016o/21494512
RJMU401_user’s manual_V1.0,链接为https://download.csdn.net/download/zsj2016o/21494520
RJMU401安全芯片编程手册VersionA_v3.5.0,链接为https://download.csdn.net/download/zsj2016o/21494527
RJMU401产品简介,链接为https://download.csdn.net/download/zsj2016o/21494535
RJMU401国密型号证书2020,链接为https://download.csdn.net/download/zsj2016o/21494546
RJMU401芯片基于Linux的SPI驱动代码_使用说明20200902,链接为https://download.csdn.net/download/zsj2016o/21494556
安全芯片RJMU401 在国六T-BOX 上的应用,链接为https://download.csdn.net/download/zsj2016o/21494565
-
PCB
工程链接:https://download.csdn.net/download/zsj2016o/21494611,
RJMU401评估板原理图,链接为https://download.csdn.net/download/zsj2016o/21494548 -
测试文档
链接为:https://download.csdn.net/download/zsj2016o/21495296(测试说明以及常用指令)
我采用的SM2加密方式,所以我将对SM2加密进行说明。
测试流程说明
1)加密以及解密情况下,加密使用公钥,解密使用私钥
方法是利用模块生成一组密钥对,同时模块利用AAC500A20040 指令 加载该公钥
同时利用模块外部公钥进行加密,指令为AAC500A100
生成待解密数据,再利用内部私钥进行解密,指令为AAC501A300,测试完成。
2)签名以及验签情况下,签名使用私钥,验签使用公钥
方法是利用模块生成一组密钥对,同时模块利用AAC500A20040 指令 加载该公钥
同时利用模块内部私钥进行签名,指令为AAC503A300
生成待验签数据,再利用外部公钥进行验签,指令为AAC504A100,测试完成。
(结合具体的指令结果,相信你有一个好的测试效果)
测试文档是结合厂家给的文档以及手册《RJMU401安全芯片编程手册VersionA_v3.5.0》自己写的总结,只针对SM2,如果有别的需求,可以咨询厂家,厂家很尽职尽责,沟通很愉快。
3.常见问题汇总
-
关于电源
RJMU401demo板,在SPI线连接完成通电后,demo板上的电源就会亮起,但是不要忽略demo板电源的供应,否则测试时,返回的值可能为0x00,0x00或者0xFF,0xFF,不能正常完成整个测试。 -
利用串口助手发送指令
1),保证是16进制发送,并且不勾选发送新行;
2),发送指令,会有反馈,反馈有不同数值,对应不同情况,具体如下:
指令不正确(主要是不合规范的指令以及数据长度不正确),返回上个图中3的情况——数据长度或格式错误 ;
3),指令正常,会有四种返回数据及状态格式,参考如下:
图1.发送指令不带数据,无返回数据格式
图2.发送指令不带数据,有返回数据格式
图3.发送指令带数据,无返回数据格式
图4.发送指令带数据,有返回数据格式
- 加解密与签字验签
1)加密以及解密情况下,加密使用公钥,解密使用私钥;
加解密时,需要主要待加解密数据的长度,长度错误会造成加解密失败。
2)签名以及验签情况下,签名使用私钥,验签使用公钥。
验签的时候需要额外注意,验签与解密是有区别的,解密只需要将待解密数据输入即可,待验签数据需要做额外处理,待验签数据的长度(待验签数据 = 签名数据是0x40 + 指定长度的明文数据)是一个叠加数据,这就说明验签的时候需要知道加密的原始数据。
总结
以上就是我对RJMU401加密芯片的全部介绍,总体来说,厂家还是很不错的,无论样品申请、技术沟通,还是反馈速度都无可挑剔,希望越做越好,可能我讲的还有不明白的地方,希望大家留言支持,共同进步!
以上是关于STM32F103驱动RJMU401实现SM2加解密签名与验签的主要内容,如果未能解决你的问题,请参考以下文章
三实战小例程 基于STM32F103C8T6最小系统板和STM32CubeMX驱动WS2812B光立方
三实战小例程 基于STM32F103C8T6最小系统板和STM32CubeMX驱动WS2812B光立方
基于STM32F103C8T6最小系统板HAL库CubeMX驱动HC-SR501红外人体传感模块
基于STM32F103C8T6最小系统板HAL库CubeMX驱动HC-SR501红外人体传感模块