介绍采用瑞萨RA2L1作为专用加解密协处理器的方案

0、前言
数据安全在当今系统设计中变得越来越重要,当今数据的加密和验签基本分为了本机和协处理两个方式,本机是最常见也是最简单的加密模式,本机存储秘钥本机验证,协处理就是通过主控芯片+加解密专用芯片的模式,可以更好的增加安全性并且可以使用随机秘钥加强防破解能力。
1、简介
以下介绍的是采用瑞萨ra2l1作为专用加解密协处理器的方案,称它为ane系统。
本系统的主要作用就是对主控发来的数据进行动态加解密,以实现鉴权和数据解析的效果。因为ra2l1内置了硬件的sec外设,可以使用硬件计算aes,这大大提高了数据处理速度,更适合加解密环境的需求,并且因为ra2l1是m23内核,功耗相对较低,且为armv8系列内核,可以使用芯片自带的trustzone功能提高安全性。
2、过程
调试这套系统还是比较费时间的,所以此次公开项目只是作为一套方案验证,距离批量使用还需要进一步改进。
首先在交互方面,采取了uart+iic双模式可选,用户可根据主控剩余外设进行选择(公开部分只做了uart)。两种模式采取同样的atlv格式进行交互,即 address+tag+lense+value,这样做可以兼容带地址的总线协议,例如iic。以下是当前规范的一些命令。
在软件调试过程中也是非常曲折的,因为第一次接触瑞萨的mcu,所以花了一段时间去适应图形化配置软件。这里简单说一下遇到的问题吧
uart没有空闲中断,需要使用其他方法实现(比如定时器监控rxi配合elc实现)
rtt-studio对fsp的适配度有限,比如新加库不会自动include
因为串口打印效率太低,移植了segger-rtt通过swd打印log
瑞萨的某些外设库是存在依赖的,比如sec依赖了r_sec_ra2,使用的时候要多加注意
现在就来说一下系统运行流程吧
用到的一些rtt特性
ringbuffer
串口接收部分采用了rtt自带的ringbuffer功能来实现数据的接收和保存,环形缓冲区在批量处理数据的时候非常好用,极大的降低了使用难度,以下是一些粗略的代码调用。
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:%dn, num);
mailbox
通过查看api文档发现邮箱是一个更轻量的通知功能实现方式,使用起来也非常简单,在此次项目中担当了串口接收完成通知的任务。以下还是一些粗略的代码。
while (1)
{
if (rt_mb_recv(&uart_mb, &mb_flag, rt_waiting_forever) == rt_eok) {
rt_kprintf(uart0 mb recv %d len is %dn, mb_flag, uart_rx_len);
rt_size_t num = rt_ringbuffer_get(&uart_rb, buff, uart_rx_len);
rt_kprintf(uart0 ringbuf get size:%dn, 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 errn);
}
}
break;
}
default:
break;
}
}
3、总结
此次活动粗略的实现了一个简单的加解密协处理功能,可以初步的实现基本功能,但仍有以下问题尚未解决,这里列出来以供参考。
内置秘钥没有混淆,明文存储是非常致命的问题,这里推荐使用matrix编码进行混淆存储。
当前试验机并没有实现dh秘钥交互,使用dh秘钥交互可以为每次会话生成完全随机的秘钥,提高安全性可靠性,当然也可以使用ecdh交互(效率问题不用过于担心,因为秘钥交互只存在于初始化握手),dh推荐使用mbedtls自带库,ecdh推荐使用tiny-ecdh-c.
没有完全实现串口空闲中断,后续需要调试gpt来实现
代码体积还需要优化.

引起锂电池自放电原因以及其控制方法解析
绝不止买买买!福特进入自动驾驶头部军团
N卡如猛虎!Steam排名让A卡泪流成河
罗德与施瓦茨携精彩测试解决方案亮相2023慕尼黑上海电子展
二十六位嘉宾的精彩分享 首届G60科创走廊集成电路科技创“芯”大会圆满闭幕
介绍采用瑞萨RA2L1作为专用加解密协处理器的方案
Enclustra FPGA SoM为工业X射线源技术赋能,推动性能提升
中国电信多方布局推进F5G全面到来
荣耀10青春版采用2400万像素AI高清自拍镜头拥有幻彩渐变的效果
LED导热工程塑料如何提升高散热的效果呢?
如何给锂离子电池“热失控”装上刹车
荣耀V9其实很良心,安卓市场的最强旗舰并不是虚名
用于生物传感的更高效的NIR-II纳米管探针的研究
基于ADSP-TS201处理器的归一化互相关快速算法实现
国内LED车灯企业该如何发力?
川土微电子CA-IS398X在PLC领域中的应用
shell脚本本身自带的命令详解
有了这块Moye板 马桶盖都能变成无线充电板
怎样用Arduino从LDR读取模拟值
新型高效抗反射金属材料实现激光解吸附离子化质谱分析