大家思考一個問題,在汽車MCU運行時代碼通常都是直接在flash中運行,很少出現(xiàn)把一個功能棧拷貝到ram中運行,主要是MCU的SRAM通常十分珍貴,且比較小,雖然最近出來的片子S32G、TC3xx SRAM已經(jīng)來到MB級別,但是鑒于成本、和芯片廠通常會將PFlash和CPU直連以加快取指速度,一般都還是采用比較傳統(tǒng)的方式。
既然是直接取指,如果應用程序是加密存儲在flash中,即使安全啟動通過,應用程序解密完也沒有足夠的ram存放,所以一般來說,存放在flash中的代碼均是以明文+簽名or認證碼的方式進行處理。
因此,汽車網(wǎng)絡安全工程師最熟悉的AES128-CMAC來了。
02.AES-CMAC詳解
首先我們來回顧什么是AES(advanced encryption standard)加密算法。
AES屁股后面跟的工作模式通常是CBC\CFB這些,這個CMAC是個啥?
來看下全稱:Cipher-based Message Authentication Code。
我們知道MAC本身就是與密碼相關的Hash,它不僅提供了比crc這類算法更強的數(shù)據(jù)完整性保護,還防止了數(shù)據(jù)未經(jīng)允許的修改、破壞等(驗證數(shù)據(jù)來源)。為什么呢?因為MAC就是將密鑰和明文使用某種算法共同計算出一個值,只有知道密鑰的接收方才能計算出與之匹配的值;即使密鑰被攻擊者破解,由于MAC的hash屬性,攻擊者是無法反推出數(shù)據(jù)的。
所以我們在SecOC里面最常用的還是AES128-CMAC外加FvM防止重放攻擊。
本質(zhì)上,AES-CMAC和OMAC1(一種改進的CBC-MAC算法)相同,使用一個私密的密鑰、可變長度的消息數(shù)據(jù)(對齊該消息按照固定長度進行分塊計算),最終返回一個固定長度的值,這個值我們叫做MAC。
**2.1 子密鑰的生成 **
對于CMAC來說,存在數(shù)據(jù)長度不是128bit整數(shù)倍的情況,因此,這個算法流程有兩種,如下:
case a :消息數(shù)據(jù)是128bit的整數(shù)倍,使用私密密鑰k1生成MAC(T);
case b:消息數(shù)據(jù)不能整除,使用私密密鑰k2生成MAC(T);
而私密密鑰的生成又是按照如下方式生成:
初始向量IV(0) + 原始key,使用AES-128-CBC,生成一個中間輸出L;
判斷該L最高位是否等于0;如果等于0,k1 = L << 1;否則,k1 = (L << 1)XOR 0x87(Rb_const);
判斷k1的最高位是否等于0;如果等于0,k2 = k1 << 1;否則,k2 = (L << 1)XOR 0x87(Rb_const);
同時對于上述兩個case,使用k1或者k2生成消息數(shù)據(jù)最后一塊的數(shù)據(jù)。
需要注意的是,當處于case b時,M_last是需要進行填充的,填充方式參考04.數(shù)據(jù)填充
2.2 MAC生成算法
使用AES-CMAC進行計算,需要三個輸入:私密密鑰(k)、消息數(shù)據(jù)、消息數(shù)據(jù)長度;具體操作流程如下:
僅在最后一步使用的明文分組生成AES-CMAC。
可以選擇直接把明文組包+CMAC發(fā)給接收方,也可以用密文+CMAC。
03.HMAC詳解
HMAC(Hash-based Message Authentication Code):Hash函數(shù)是公開的,因此直接使用無密鑰的Hash對數(shù)據(jù)處理,只能保證數(shù)據(jù)的完整性。如果加上MAC值,那么就可以驗證數(shù)據(jù)的來源有效。
MD-5和SHA-1就是這種hash函數(shù)的示例。
04.數(shù)據(jù)填充
我們發(fā)現(xiàn),在使用上述算法進行計算時,AES都是以一個塊進行計算,如果此時要計算的數(shù)據(jù)分組后最后一塊不夠128bit,就要進行填充,常見填充方式(假設數(shù)據(jù)塊為8個byte)如下:
全0填充
填充結構:
Data:| 11 11 11 11 11 11 11 11 | 11 11 00 00 00 00 00 00 |
PKCS#7填充
每一個字節(jié)都表示填充的長度,如下:
| 11 11 11 11 11 11 11 11 | 11 11 06 06 06 06 06 06 |
ANSI X.923 填充
該方式用0進行填充,但用最后一個字節(jié)表示填充的長度,如下:
| AA AA AA AA AA AA AA AA | AA AA 00 00 00 00 00 06 |
審核編輯:劉清
-
mcu
+關注
關注
146文章
17859瀏覽量
360887 -
CMAC
+關注
關注
0文章
9瀏覽量
11188 -
sram
+關注
關注
6文章
783瀏覽量
115689 -
AES
+關注
關注
0文章
106瀏覽量
33479 -
加密算法
+關注
關注
0文章
217瀏覽量
25775
發(fā)布評論請先 登錄
RC4加密算法的FPGA設計與實現(xiàn)
汽車遙控加密算法
程序保護的話 是不是加密算法越復雜,安全性越好呢?
DES加密算法是什么
對稱加密算法是什么
軟件加密算法都有哪些,這些算法在哪些方面得到了應用
采用多種加密算法的文件加密方法

關于應用到游戲中的加密算法的用途及缺陷
基于AES加密算法的信息安全研究(AEC與ECC結合)

汽車信息安全已進入“刷漏洞”時代

大數(shù)據(jù)加密算法在數(shù)據(jù)安全中的應用綜述
常見加密算法分類

關于汽車信息安全,你想了解的知識點都在這里!

評論