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

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

評論