MCU协同签名
为了满足安全的需求,很多最新的数据采集终端(包括电表,摄像头,温湿度传感器,土壤检测设备等)需要集成专用的硬件安全芯片,在数据上报和控制下发的传输过程中,对数据进行加密处理;但是针对存量设备,也要实现安全的改造,才能满足安全的需求和密评的标准。
我们针对存量的数据采集终端,设计出协同签名和协同加密(以下简称协同签名)的方案,在数据采集的硬件不改动的情况下,仅仅需要软件升级,就能满足符合要求的安全功能。
在服务端,添加协同服务器(或者协同服务软件),负责设备密钥的管理,与设备一起实现数据签名和数据解密。
在客户端,添加协同客户端库,负责与协同服务端进行交互,完成设备认证,密钥生成,数据签名和数据解密的基本安全功能,为具体的业务数据提供安全保障。
协同签名客户端和协同服务器的交互流程如下:
整个协同签名的算法基于国密的SM2算法和门限签名算法,符合国家密码管理局相关规范,达到二级模块的要求。
下面在开发环境显示我们的客户端一些基础功能。
我们的测试程序使用雅特力的AT-SURF-F437开发板,将显示屏和串口作为输出,将按键和操纵杆作为输入。测试程序运行截图如下:
我们利用开发板上的按键和操作杆作为输入,如下:
分别实现了7项测试内容:
Key1按下:算法测试。测试协同签名的核心算法功能。
Key2按下:封包测试。测试协同签名的客户端处理和服务端交互的数据包的功能。
JoyStick按下:HTTP客户端网络测试。测试HTTP客户端的功能。
JoyStick向左:测试客户端在认证服务器上的登录和退出。
JoyStick向右:测试客户端和协同服务器的密钥生成的功能。
JoyStick向上:测试客户端和协同服务器的私钥签名的功能。
JoyStick向下:测试客户端和协同服务器的私钥解密的功能。
RESET
按下最左侧的红色按键,设备重启,显示屏和串口输出如下:
板子启动后串口输出Power Up,显示屏输出网络信息和测试帮助信息。
Key1
按下黄色的Key1按键,进行算法测试,显示屏和串口输出如下:
显示屏最下面一行展示测试的内容,串口展示测试的详细输出。算法测试的内容包括:
Key2
按下白色的Key2按键,进行封包测试,显示屏和串口输出如下:
显示屏最下面一行展示测试的内容,串口展示测试的详细输出。封包测试的内容包括:
公钥的验签和加密是在本地完成,所以不需要封包。
JoyEnter
按下操作杆,进行HTTP客户端的网络测试,显示屏和串口输出如下:
显示屏最下面一行展示测试的内容,串口展示测试的详细输出。HTTP客户端测试向公司的版本服务器发起一个GET请求,并且展示输出。
JoyLeft
向左拨动操作杆,进行认证测试,显示屏和串口输出如下:
显示屏最下面一行展示测试的内容,串口展示测试的详细输出。认证测试过程中,客户端登录认证服务器,获取认证的令牌;然后退出认证服务器,释放认证令牌。
JoyRight
向右拨动操作杆,进行密钥生成测试,显示屏和串口输出如下:
显示屏最下面一行展示测试的内容,串口展示测试的详细输出。密钥生成测试过程中,客户端依次进行如下的操作:
1. 登录认证服务器,获取认证的令牌;
2. 使用认证令牌向认证服务器获取服务令牌;
3. 使用服务令牌,与协同服务交互,双方分别生成私钥的各自部分,同时协同服务为这对密钥分配一个ID,客户端和服务端分别将自己一端的部分私钥和密钥ID持久化保存;
4. 退出认证服务器,释放认证令牌。
JoyUp
向上拨动操作杆,进行签名验签测试,显示屏和串口输出如下:
显示屏最下面一行展示测试的内容,串口展示测试的详细输出。签名测试过程中,客户端依次进行如下的操作:
1. 登录认证服务器,获取认证的令牌;
2. 使用认证令牌向认证服务器获取服务令牌;
3. 客户端使用本地的部分私钥,携带服务令牌和密钥ID与协同服务交互,实现数据签名操作;
4. 客户端本地对签名进行验证;
5. 退出认证服务器,释放认证令牌。
JoyDown
向下拨动操作杆,进行加密解密测试,显示屏和串口输出如下:
显示屏最下面一行展示测试的内容,串口展示测试的详细输出。加密解密测试过程中,客户端依次进行如下的操作:
1. 登录认证服务器,获取认证的令牌;
2. 使用认证令牌向认证服务器获取服务令牌;
3. 客户端本地使用公钥对数据进行加密操作;
4. 客户端使用本地的部分私钥,携带服务令牌和密钥ID与协同服务交互,实现数据解密操作。
5. 客户端对比解密数据和本地明文数据的一致性;
6. 退出认证服务器,释放认证令牌。