0、前言
數(shù)據(jù)安全在當(dāng)今系統(tǒng)設(shè)計(jì)中變得越來越重要,當(dāng)今數(shù)據(jù)的加密和驗(yàn)簽基本分為了本機(jī)和協(xié)處理兩個方式,本機(jī)是最常見也是最簡單的加密模式,本機(jī)存儲秘鑰本機(jī)驗(yàn)證,協(xié)處理就是通過主控芯片+加解密專用芯片的模式,可以更好的增加安全性并且可以使用隨機(jī)秘鑰加強(qiáng)防破解能力。
1、簡介
以下介紹的是采用瑞薩RA2L1作為專用加解密協(xié)處理器的方案,稱它為ANE系統(tǒng)。
本系統(tǒng)的主要作用就是對主控發(fā)來的數(shù)據(jù)進(jìn)行動態(tài)加解密,以實(shí)現(xiàn)鑒權(quán)和數(shù)據(jù)解析的效果。因?yàn)镽A2L1內(nèi)置了硬件的SEC外設(shè),可以使用硬件計(jì)算AES,這大大提高了數(shù)據(jù)處理速度,更適合加解密環(huán)境的需求,并且因?yàn)镽A2L1是M23內(nèi)核,功耗相對較低,且為ARMv8系列內(nèi)核,可以使用芯片自帶的trustzone功能提高安全性。
2、過程
調(diào)試這套系統(tǒng)還是比較費(fèi)時間的,所以此次公開項(xiàng)目只是作為一套方案驗(yàn)證,距離批量使用還需要進(jìn)一步改進(jìn)。
首先在交互方面,采取了UART+IIC雙模式可選,用戶可根據(jù)主控剩余外設(shè)進(jìn)行選擇(公開部分只做了uart)。兩種模式采取同樣的ATLV格式進(jìn)行交互,即 Address+TAG+LENSE+VALUE,這樣做可以兼容帶地址的總線協(xié)議,例如IIC。以下是當(dāng)前規(guī)范的一些命令。
在軟件調(diào)試過程中也是非常曲折的,因?yàn)榈谝淮谓佑|瑞薩的MCU,所以花了一段時間去適應(yīng)圖形化配置軟件。這里簡單說一下遇到的問題吧
UART沒有空閑中斷,需要使用其他方法實(shí)現(xiàn)(比如定時器監(jiān)控RXI配合ELC實(shí)現(xiàn))
rtt-studio對fsp的適配度有限,比如新加庫不會自動include
因?yàn)榇诖蛴⌒侍停浦擦薙EGGER-RTT通過SWD打印LOG
瑞薩的某些外設(shè)庫是存在依賴的,比如SEC依賴了r_sec_ra2,使用的時候要多加注意
現(xiàn)在就來說一下系統(tǒng)運(yùn)行流程吧
用到的一些rtt特性
RingBuffer
串口接收部分采用了RTT自帶的ringbuffer功能來實(shí)現(xiàn)數(shù)據(jù)的接收和保存,環(huán)形緩沖區(qū)在批量處理數(shù)據(jù)的時候非常好用,極大的降低了使用難度,以下是一些粗略的代碼調(diào)用。
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文檔發(fā)現(xiàn)郵箱是一個更輕量的通知功能實(shí)現(xiàn)方式,使用起來也非常簡單,在此次項(xiàng)目中擔(dān)當(dāng)了串口接收完成通知的任務(wù)。以下還是一些粗略的代碼。
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、總結(jié)
此次活動粗略的實(shí)現(xiàn)了一個簡單的加解密協(xié)處理功能,可以初步的實(shí)現(xiàn)基本功能,但仍有以下問題尚未解決,這里列出來以供參考。
內(nèi)置秘鑰沒有混淆,明文存儲是非常致命的問題,這里推薦使用matrix編碼進(jìn)行混淆存儲。
當(dāng)前試驗(yàn)機(jī)并沒有實(shí)現(xiàn)DH秘鑰交互,使用DH秘鑰交互可以為每次會話生成完全隨機(jī)的秘鑰,提高安全性可靠性,當(dāng)然也可以使用ECDH交互(效率問題不用過于擔(dān)心,因?yàn)槊罔€交互只存在于初始化握手),DH推薦使用mbedtls自帶庫,ECDH推薦使用tiny-ECDH-c.
沒有完全實(shí)現(xiàn)串口空閑中斷,后續(xù)需要調(diào)試GPT來實(shí)現(xiàn)
代碼體積還需要優(yōu)化.
-
定時器
+關(guān)注
關(guān)注
23文章
3255瀏覽量
115373 -
協(xié)處理器
+關(guān)注
關(guān)注
0文章
75瀏覽量
18235 -
UART接口
+關(guān)注
關(guān)注
0文章
124瀏覽量
15363 -
ARMv8
+關(guān)注
關(guān)注
1文章
35瀏覽量
14195 -
RTThread
+關(guān)注
關(guān)注
8文章
132瀏覽量
41000
發(fā)布評論請先 登錄
相關(guān)推薦
瑞薩RA2L1系列MCU簡介和CAN通信應(yīng)用例程
【瑞薩RA2L1入門學(xué)習(xí)】開箱+Keil環(huán)境搭建+點(diǎn)燈+點(diǎn)亮OLED
【瑞薩RA2L1入門學(xué)習(xí)】1. 點(diǎn)亮LED
【瑞薩RA2L1入門學(xué)習(xí)】2. PWM呼吸燈
【瑞薩RA2系列開發(fā)板體驗(yàn)】瑞薩RA2L1試用筆記
基于RA2L1開發(fā)板的初識點(diǎn)燈
瑞薩RA2L1 ANE加解密協(xié)處理系統(tǒng)簡介
基于RA2L1的串口及J-Link的燒寫說明
產(chǎn)品 | 瑞薩超低功耗RA2L1 MCU產(chǎn)品群,具有高級電容式觸摸感應(yīng)功能,打造經(jīng)濟(jì)節(jié)能的IoT節(jié)點(diǎn)HMI應(yīng)用
![產(chǎn)品 | <b class='flag-5'>瑞</b><b class='flag-5'>薩</b>超低功耗<b class='flag-5'>RA2L1</b> MCU產(chǎn)品群,具有高級電容式觸摸感應(yīng)功能,打造經(jīng)濟(jì)節(jié)能的IoT節(jié)點(diǎn)HMI應(yīng)用](https://file.elecfans.com/web2/M00/1B/26/poYBAGGCV_mAYgZ7AABt5oL2_6E833.png)
評論