Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
瑞萨-RTT活动
瑞萨RA2L1 ANE加解密协处理系统
发布于 2023-03-15 15:06:51 浏览:317
订阅该版
[tocm] # 0、前言 数据安全在当今系统设计中变得越来越重要,当今数据的加密和验签基本分为了本机和协处理两个方式,本机是最常见也是最简单的加密模式,本机存储秘钥本机验证,协处理就是通过主控芯片+加解密专用芯片的模式,可以更好的增加安全性并且可以使用随机秘钥加强防破解能力。 # 1、简介 以下介绍的是采用瑞萨RA2L1作为专用加解密协处理器的方案,称它为`ANE`系统。 本系统的主要作用就是对主控发来的数据进行动态加解密,以实现鉴权和数据解析的效果。因为RA2L1内置了硬件的SEC外设,可以使用硬件计算AES,这大大提高了数据处理速度,更适合加解密环境的需求,并且因为RA2L1是M23内核,功耗相对较低,且为ARMv8系列内核,可以使用芯片自带的`trustzone`功能提高安全性。 # 2、过程 调试这套系统还是比较费时间的,所以此次公开项目只是作为一套方案验证,距离批量使用还需要进一步改进。 1. 首先在交互方面,采取了UART+IIC双模式可选,用户可根据主控剩余外设进行选择(公开部分只做了uart)。两种模式采取同样的`ATLV`格式进行交互,即 Address+TAG+LENSE+VALUE,这样做可以兼容带地址的总线协议,例如IIC。以下是当前规范的一些命令。 | 地址 | 寄存器 | 长度 | 数据 | 备注 | | ---- | ------ | ---- | -------------- | --------------- | | 40H | 01H | 16 | 素数P | DH交互的P参数 | | 40H | 02H | 16 | 素数G | DH交互的G参数 | | 40H | 03H | 16 | 公钥A | DH交互的GA | | 40H | 04H | 16 | 公钥B | DH交互的GB | | 40H | 11H | 16 | private id | 预制秘钥序号 | | 40H | 12H | 16 | private id ack | 预制秘钥序号ACK | | 40H | 13H | 16 | mode | AES模式选择 | | 40H | 20H | 16 | data | 待加解密数据 | | 40H | 21H | 16 | data | 结果数据 | | 40h | F1H | 16 | fflush | 清空缓冲区 | 2. 在软件调试过程中也是非常曲折的,因为第一次接触瑞萨的MCU,所以花了一段时间去适应图形化配置软件。这里简单说一下遇到的问题吧 - UART没有空闲中断,需要使用其他方法实现(比如定时器监控RXI配合ELC实现) - `rtt-studio`对`fsp`的适配度有限,比如新加库不会自动include - 因为串口打印效率太低,移植了`SEGGER-RTT`通过SWD打印LOG - 瑞萨的某些外设库是存在依赖的,比如SEC依赖了`r_sec_ra2`,使用的时候要多加注意 3. 现在就来说一下系统运行流程吧 ![rtt-ra2l1.drawio.png](https://oss-club.rt-thread.org/uploads/20230315/824ab8ed2fcf46031ca4d248d23ce7f9.png.webp) ![Snipaste_2023-03-15_14-48-00.png](https://oss-club.rt-thread.org/uploads/20230315/7dc644a469858ddcf79ed3b2b2b2e41b.png) 4. 用到的一些rtt特性 1. RingBuffer 串口接收部分采用了RTT自带的`ringbuffer`功能来实现数据的接收和保存,环形缓冲区在批量处理数据的时候非常好用,极大的降低了使用难度,以下是一些粗略的代码调用。 ```c static uint8_t uart_ringbuf[32] = {0}; static struct rt_ringbuffer uart_rb; rt_ringbuffer_init(&uart_rb, uart_ringbuf, 32); rt_ringbuffer_reset(&uart_rb); void user_uart0_callback (uart_callback_args_t * p_args) { switch (p_args->event) { case UART_EVENT_RX_CHAR: { rt_ringbuffer_putchar(&uart_rb, (const rt_uint8_t )(p_args->data)); break; } default: break; } } rt_size_t num = rt_ringbuffer_get(&uart_rb, buff, uart_rx_len); rt_kprintf("uart0 ringbuf get size:%d\n", num); ``` 2. MailBox 通过查看API文档发现邮箱是一个更轻量的通知功能实现方式,使用起来也非常简单,在此次项目中担当了串口接收完成通知的任务。以下还是一些粗略的代码。 ```c while (1) { if (rt_mb_recv(&uart_mb, &mb_flag, RT_WAITING_FOREVER) == RT_EOK) { rt_kprintf("uart0 mb recv %d len is %d\n", mb_flag, uart_rx_len); rt_size_t num = rt_ringbuffer_get(&uart_rb, buff, uart_rx_len); rt_kprintf("uart0 ringbuf get size:%d\n", num); } void user_uart0_callback (uart_callback_args_t * p_args) { switch (p_args->event) { case UART_EVENT_RX_CHAR: { rt_ringbuffer_putchar(&uart_rb, (const rt_uint8_t )(p_args->data)); uart_rx_len++; if (uart_rx_len == 19) { if (rt_mb_send(&uart_mb, 0x01) != RT_EOK) { rt_kprintf("uart0 mailbox send err\n"); } } break; } default: break; } } ``` # 3、总结 此次活动粗略的实现了一个简单的加解密协处理功能,可以初步的实现基本功能,但仍有以下问题尚未解决,这里列出来以供参考。 1. 内置秘钥没有混淆,明文存储是非常致命的问题,这里推荐使用`matrix`编码进行混淆存储。 2. 当前试验机并没有实现DH秘钥交互,使用DH秘钥交互可以为每次会话生成完全随机的秘钥,提高安全性可靠性,当然也可以使用ECDH交互(效率问题不用过于担心,因为秘钥交互只存在于初始化握手),DH推荐使用`mbedtls`自带库,ECDH推荐使用[tiny-ECDH-c](https://github.com/kokke/tiny-ECDH-c). 3. 没有完全实现串口空闲中断,后续需要调试GPT来实现 4. 代码体积还需要优化 最后,感谢RTT提供这次瑞萨MCU的活动,让我了解了瑞萨的相关开发流程和RTT的移植使用等相关知识点。 演示代码:https://gitee.com/dreamcmi/ane-ra2-l1
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
dreamcmi
这家伙很懒,什么也没写!
文章
3
回答
0
被采纳
0
关注TA
发私信
相关文章
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部